From 36dd1cc20001c633474a87687bf8949f15233b1d Mon Sep 17 00:00:00 2001 From: stanavdb <142786862+stanavdb@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:36:41 +0200 Subject: [PATCH 01/18] fix(armor): fix issue causing always equipped armor to not count as equipped and implement natural deflect on actors (#109) --- src/lang/en.json | 10 ++ src/style/module.scss | 7 + src/style/sheets/actor/module.scss | 8 + src/style/sheets/item/module.scss | 5 - .../applications/actor/components/details.ts | 7 +- .../actor/dialogs/configure-deflect.ts | 143 ++++++++++++++++++ src/system/data/actor/common.ts | 46 ++++-- src/system/data/item/mixins/equippable.ts | 8 + src/templates/actors/components/details.hbs | 15 ++ .../actors/dialogs/configure-defense.hbs | 4 +- .../actors/dialogs/configure-deflect.hbs | 73 +++++++++ 11 files changed, 308 insertions(+), 18 deletions(-) create mode 100644 src/system/applications/actor/dialogs/configure-deflect.ts create mode 100644 src/templates/actors/dialogs/configure-deflect.hbs diff --git a/src/lang/en.json b/src/lang/en.json index 38633f8d..7c1855dc 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -127,6 +127,12 @@ "Deflect": "Deflect", "NoObscuredSense": "Unaffected by Obscured Senses." }, + "Deflect": { + "Natural": { + "Label": "Natural Deflect", + "Hint": "Natural deflect is used when no armor is worn, or when the natural deflect is higher than the worn armor." + } + }, "Size": { "Small": "Small", "Medium": "Medium", @@ -207,6 +213,7 @@ "ToggleShowSkills": "Show skills without ranks", "ToggleCollapseSkills": "Hide skills without ranks", "ConfigureDefense": "Configure Defense", + "ConfigureDeflect": "Configure Deflect", "ConfigureMovement": "Configure Movement Rate", "ConfigureSensesRange": "Configure Senses Range", "ConfigureRecovery": "Configure Recovery Die", @@ -808,6 +815,9 @@ "ConfigureRecoveryDie": { "Title": "Configure Recovery Die: {actor}" }, + "ConfigureDeflect": { + "Title": "Configure Deflect: {actor}" + }, "EditTalentPrerequisite": { "Title": "Edit Prerequisite" }, diff --git a/src/style/module.scss b/src/style/module.scss index 218f3120..c51e29ca 100644 --- a/src/style/module.scss +++ b/src/style/module.scss @@ -3,3 +3,10 @@ @import './style/sidebar/combat.scss'; @import './style/dialog.scss'; @import './style/components.scss'; + +.application { + p.notes, + p.hint { + color: #efe6d8bf; + } +} \ No newline at end of file diff --git a/src/style/sheets/actor/module.scss b/src/style/sheets/actor/module.scss index 45dd1dd0..93a07b87 100644 --- a/src/style/sheets/actor/module.scss +++ b/src/style/sheets/actor/module.scss @@ -269,6 +269,7 @@ } .deflect { + position: relative; background: rgb(11 10 19 / 100%); width: 2rem; display: flex; @@ -281,6 +282,13 @@ span { margin: -0.1rem 0 0.3rem 0 !important } + + a[data-action="configure-deflect"] { + position: absolute; + font-size: 6pt; + left: 1.2rem; + top: 0; + } } } diff --git a/src/style/sheets/item/module.scss b/src/style/sheets/item/module.scss index 18052765..93d06ca1 100644 --- a/src/style/sheets/item/module.scss +++ b/src/style/sheets/item/module.scss @@ -110,11 +110,6 @@ flex-direction: column; } - p.notes, - p.hint { - color: #efe6d8bf; - } - fieldset:not(:first-child) { margin-top: 0.5rem; } diff --git a/src/system/applications/actor/components/details.ts b/src/system/applications/actor/components/details.ts index 1f963c85..46575498 100644 --- a/src/system/applications/actor/components/details.ts +++ b/src/system/applications/actor/components/details.ts @@ -5,9 +5,9 @@ import { ConstructorOf } from '@system/types/utils'; import { ConfigureMovementRateDialog } from '@system/applications/actor/dialogs/configure-movement-rate'; import { ConfigureSensesRangeDialog } from '@system/applications/actor/dialogs/configure-senses-range'; import { ConfigureRecoveryDieDialog } from '@system/applications/actor/dialogs/configure-recovery-die'; +import { ConfigureDeflectDialog } from '@system/applications/actor/dialogs/configure-deflect'; // Component imports -// import { HandlebarsApplicationComponent } from '../../mixins/component-handlebars-application-mixin'; import { HandlebarsApplicationComponent } from '@system/applications/component-system'; import { BaseActorSheet, BaseActorSheetRenderContext } from '../base'; import { CosmereActor } from '@src/system/documents'; @@ -29,6 +29,7 @@ export class ActorDetailsComponent extends HandlebarsApplicationComponent< 'configure-movement-rate': this.onConfigureMovementRate, 'configure-senses-range': this.onConfigureSensesRange, 'configure-recovery': this.onConfigureRecovery, + 'configure-deflect': this.onConfigureDeflect, 'edit-img': this.onEditImg, }; /* eslint-enable @typescript-eslint/unbound-method */ @@ -51,6 +52,10 @@ export class ActorDetailsComponent extends HandlebarsApplicationComponent< void ConfigureSensesRangeDialog.show(this.application.actor); } + private static onConfigureDeflect(this: ActorDetailsComponent) { + void ConfigureDeflectDialog.show(this.application.actor); + } + private static onConfigureRecovery(this: ActorDetailsComponent) { if (this.application.actor.isCharacter()) void ConfigureRecoveryDieDialog.show(this.application.actor); diff --git a/src/system/applications/actor/dialogs/configure-deflect.ts b/src/system/applications/actor/dialogs/configure-deflect.ts new file mode 100644 index 00000000..9baf0dca --- /dev/null +++ b/src/system/applications/actor/dialogs/configure-deflect.ts @@ -0,0 +1,143 @@ +import { AttributeGroup } from '@system/types/cosmere'; +import { CosmereActor } from '@system/documents'; +import { AnyObject } from '@system/types/utils'; + +import { CommonActorData } from '@system/data/actor/common'; +import { Derived } from '@system/data/fields'; + +const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api; + +export class ConfigureDeflectDialog extends HandlebarsApplicationMixin( + ApplicationV2, +) { + /** + * NOTE: Unbound methods is the standard for defining actions and forms + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static DEFAULT_OPTIONS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.DEFAULT_OPTIONS), + { + window: { + minimizable: false, + positioned: true, + }, + classes: ['dialog', 'configure-deflect'], + tag: 'dialog', + position: { + width: 350, + }, + actions: { + 'update-deflect': this.onUpdateDeflect, + }, + }, + ); + + static PARTS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.PARTS), + { + form: { + template: + 'systems/cosmere-rpg/templates/actors/dialogs/configure-deflect.hbs', + forms: { + form: { + handler: this.onFormEvent, + submitOnChange: true, + }, + }, + }, + }, + ); + /* eslint-enable @typescript-eslint/unbound-method */ + + private data: CommonActorData['deflect']; + private mode: Derived.Mode; + + private constructor(private actor: CosmereActor) { + super({ + id: `${actor.uuid}.Deflect`, + window: { + title: game.i18n!.format('DIALOG.ConfigureDeflect.Title', { + actor: actor.name, + }), + }, + }); + + this.data = actor.system.deflect; + this.data.value ??= 0; + this.data.natural ??= 0; + this.data.override ??= this.data.value ?? 0; + this.data.bonus ??= 0; + this.mode = Derived.getMode(this.data); + } + + /* --- Statics --- */ + + public static show(actor: CosmereActor) { + void new ConfigureDeflectDialog(actor).render(true); + } + + /* --- Actions --- */ + + private static onUpdateDeflect(this: ConfigureDeflectDialog) { + void this.actor.update({ + 'system.deflect': this.data, + }); + void this.close(); + } + + /* --- Form --- */ + + private static onFormEvent( + this: ConfigureDeflectDialog, + event: Event, + form: HTMLFormElement, + formData: FormDataExtended, + ) { + if (event instanceof SubmitEvent) return; + + const target = event.target as HTMLInputElement; + + this.mode = formData.get('mode') as Derived.Mode; + + if (target.name !== 'mode') { + if (this.mode === Derived.Mode.Override) { + this.data.override = Number(formData.object.value ?? 0); + } else { + this.data.natural = Number(formData.object.natural ?? 0); + this.data.bonus = Number(formData.object.bonus ?? 0); + } + } + + if (isNaN(this.data.override!)) this.data.override = 0; + if (isNaN(this.data.natural!)) this.data.natural = 0; + if (isNaN(this.data.bonus!)) this.data.bonus = 0; + + // Assign mode + Derived.setMode(this.data, this.mode); + + // Render + void this.render(true); + } + + /* --- Lifecycle --- */ + + protected _onRender(context: AnyObject, options: AnyObject): void { + super._onRender(context, options); + + $(this.element).prop('open', true); + } + + /* --- Context --- */ + + protected _prepareContext() { + return Promise.resolve({ + ...this.data, + mode: this.mode, + modes: { + ...Derived.Modes, + [Derived.Mode.Derived]: 'TYPES.Item.armor', + }, + }); + } +} diff --git a/src/system/data/actor/common.ts b/src/system/data/actor/common.ts index 11ee2fe4..084e2a90 100644 --- a/src/system/data/actor/common.ts +++ b/src/system/data/actor/common.ts @@ -12,13 +12,22 @@ import { Condition, } from '@system/types/cosmere'; import { CosmereActor } from '@system/documents/actor'; -import { CosmereItem } from '@system/documents'; -import { ArmorItemDataModel } from '@system/data/item/armor'; +import { ArmorItem } from '@system/documents'; // Fields import { DerivedValueField, Derived } from '../fields/derived-value-field'; interface DeflectData extends Derived { + /** + * The natural deflect value for this actor. + * This value is used when deflect cannot be derived from its source, or + * when the natural value is higher than the derived value. + */ + natural?: number; + + /** + * The source of the deflect value + */ source?: DeflectSource; } @@ -175,6 +184,14 @@ export class CommonActorDataModel< }), { additionalFields: { + natural: new foundry.data.fields.NumberField({ + required: false, + nullable: true, + integer: true, + initial: 0, + label: 'COSMERE.Deflect.Natural.Label', + hint: 'COSMERE.Deflect.Natural.Hint', + }), source: new foundry.data.fields.StringField({ initial: DeflectSource.Armor, choices: Object.keys( @@ -544,17 +561,26 @@ export class CommonActorDataModel< // Derive deflect value if (source === DeflectSource.Armor) { - // Find equipped armor + // Get natural deflect value + const natural = this.deflect.natural ?? 0; + + // Find equipped armor with the highest deflect value const armor = this.parent.items - .filter((item) => item.type === ItemType.Armor) - .map( - (item) => - item as unknown as CosmereItem, - ) - .find((item) => item.system.equipped); + .filter((item) => item.isArmor()) + .filter((item) => item.system.equipped) + .reduce( + (highest, item) => + !highest || item.system.deflect > highest.system.deflect + ? item + : highest, + null as ArmorItem | null, + ); + + // Get armor deflect value + const armorDeflect = armor?.system.deflect ?? 0; // Derive deflect - this.deflect.value = armor?.system.deflect ?? 0; + this.deflect.value = Math.max(natural, armorDeflect); } // Movement diff --git a/src/system/data/item/mixins/equippable.ts b/src/system/data/item/mixins/equippable.ts index fb64b1ac..963f6757 100644 --- a/src/system/data/item/mixins/equippable.ts +++ b/src/system/data/item/mixins/equippable.ts @@ -72,6 +72,14 @@ export function EquippableItemMixin

( }), }); } + + public prepareDerivedData() { + super.prepareDerivedData(); + + if (this.alwaysEquipped) { + this.equipped = true; + } + } }; }; } diff --git a/src/templates/actors/components/details.hbs b/src/templates/actors/components/details.hbs index 3d39db02..14185017 100644 --- a/src/templates/actors/components/details.hbs +++ b/src/templates/actors/components/details.hbs @@ -28,6 +28,14 @@ {{derived deflect}} {{/with}} + + {{#if isEditMode}} + + + + {{/if}} {{/if}} @@ -76,6 +84,13 @@ {{#with actor.system.deflect as |deflect|}} {{derived deflect}} {{/with}} + {{#if isEditMode}} + + + + {{/if}} {{localize "COSMERE.Actor.Statistics.Deflect"}} diff --git a/src/templates/actors/dialogs/configure-defense.hbs b/src/templates/actors/dialogs/configure-defense.hbs index fe259091..84aaae50 100644 --- a/src/templates/actors/dialogs/configure-defense.hbs +++ b/src/templates/actors/dialogs/configure-defense.hbs @@ -22,12 +22,12 @@

- {{localize "GENERIC.Bonus"}} + + {{!-- Value --}} +
+ +
+ + {{!-- Mode --}} +
+ + +
+ + {{!-- Natural deflect --}} +
+ + +
+

+ {{localize "COSMERE.Actor.Deflect.Natural.Hint"}} +

+ + {{!-- Bonus --}} +
+ + +
+ + {{!-- Submit --}} +
+
+ +
+ \ No newline at end of file From d3a9f3cccd3a9726048a671afb41a5e4721397c0 Mon Sep 17 00:00:00 2001 From: stanavdb <142786862+stanavdb@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:43:44 +0200 Subject: [PATCH 02/18] fix(style): fix issue causing Penumbra font to not be loaded properly (#110) --- src/style.scss | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/style.scss b/src/style.scss index 99417c0a..7177a927 100644 --- a/src/style.scss +++ b/src/style.scss @@ -62,13 +62,7 @@ /* Fonts */ /* ----------------------------------------- */ @import url('https://fonts.googleapis.com/css2?family=Didact+Gothic&display=swap'); - -@font-face { - font-family: 'Penumbra Web Pro'; - font-style: normal; - font-weight: 400; - src: url('https://fonts.cdnfonts.com/css/penumbra-web-pro') -} +@import url('https://fonts.cdnfonts.com/css/penumbra-web-pro'); @font-face { font-family: 'cosmere-dingbats'; From fe8fcd19fbbf0c646d958422799eef9a3ee44daa Mon Sep 17 00:00:00 2001 From: stanavdb <142786862+stanavdb@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:50:54 +0200 Subject: [PATCH 03/18] fix(attack roll): fix issue causing damage rolls not to respect their skill/attribute config (#111) --- src/system/documents/item.ts | 60 ++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/src/system/documents/item.ts b/src/system/documents/item.ts index 5ea4b66f..b2d54040 100644 --- a/src/system/documents/item.ts +++ b/src/system/documents/item.ts @@ -425,29 +425,41 @@ export class CosmereItem< return null; } - // Get skill to use - const skillId = options.skill ?? this.system.activation.skill; - if (!skillId) return null; - const skill = actor.system.skills[skillId]; - - // Get the attribute - let attributeId = - options.attribute ?? + // Get the skill to use during the skill test + const skillTestSkillId = + options.skillTest?.skill ?? this.system.activation.skill; + if (!skillTestSkillId) return null; + + // Get the skill to use during the damage roll + const damageSkillId = + options.damage?.skill ?? + this.system.damage.skill ?? + skillTestSkillId; + + // Get the attribute to use during the skill test + let skillTestAttributeId = + options.skillTest?.attribute ?? this.system.activation.attribute ?? - skill.attribute; + actor.system.skills[skillTestSkillId].attribute; + + // Get the attribute to use during the damage roll + const damageAttributeId = + options.damage?.attribute ?? + this.system.damage.attribute ?? + actor.system.skills[damageSkillId].attribute; // Perform configuration if (options.configurable !== false) { const attackConfig = await AttackConfigurationDialog.show({ title: `${this.name} (${game.i18n!.localize( - CONFIG.COSMERE.skills[skillId].label, + CONFIG.COSMERE.skills[skillTestSkillId].label, )})`, skillTest: { ...options.skillTest, parts: ['@mod'].concat(options.skillTest?.parts ?? []), data: this.getSkillTestRollData( - skillId, - attributeId, + skillTestSkillId, + skillTestAttributeId, actor, ), plotDie: @@ -457,16 +469,20 @@ export class CosmereItem< damageRoll: { ...options.damage, parts: this.system.damage.formula.split(' + '), - data: this.getDamageRollData(skillId, attributeId, actor), + data: this.getDamageRollData( + skillTestSkillId, + skillTestAttributeId, + actor, + ), }, - defaultAttribute: attributeId, + defaultAttribute: skillTestAttributeId, defaultRollMode: options.rollMode, }); // If the dialog was closed, exit out of rolls if (!attackConfig) return null; - attributeId = attackConfig.attribute; + skillTestAttributeId = attackConfig.attribute; options.rollMode = attackConfig.rollMode; options.skillTest ??= {}; @@ -485,8 +501,8 @@ export class CosmereItem< const skillRoll = (await this.roll({ ...options.skillTest, actor, - skill: skillId, - attribute: attributeId, + skill: skillTestSkillId, + attribute: skillTestAttributeId, rollMode: options.rollMode, speaker: options.speaker, configurable: false, @@ -497,8 +513,8 @@ export class CosmereItem< const damageRoll = (await this.rollDamage({ ...options.damage, actor, - skill: skillId, - attribute: attributeId, + skill: damageSkillId, + attribute: damageAttributeId, rollMode: options.rollMode, speaker: options.speaker, chatMessage: false, @@ -1041,6 +1057,8 @@ export namespace CosmereItem { export interface RollAttackOptions extends Omit< RollOptions, + | 'skill' + | 'attribute' | 'parts' | 'opportunity' | 'complication' @@ -1050,6 +1068,8 @@ export namespace CosmereItem { > { skillTest?: Pick< RollOptions, + | 'skill' + | 'attribute' | 'parts' | 'opportunity' | 'complication' @@ -1057,7 +1077,7 @@ export namespace CosmereItem { | 'advantageMode' | 'advantageModePlot' >; - damage?: Pick; + damage?: Pick; } export interface UseOptions extends RollOptions { From fe302bdec529603955abd9471d23ab6ef91b3eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mang=C3=B3?= <110994627+MangoFVTT@users.noreply.github.com> Date: Sat, 26 Oct 2024 12:27:02 +0200 Subject: [PATCH 04/18] chore: refactor all hardcoded system tags to single constant reference (#116) * Switch all hardcoded system tags to single constant reference * Accidental commit of later PR --- src/index.ts | 6 +++--- src/system/applications/actor/adversary-sheet.ts | 9 ++++----- src/system/applications/actor/base.ts | 3 ++- src/system/applications/actor/character-sheet.ts | 3 ++- .../actor/components/character/goals-list.ts | 5 +++-- src/system/applications/combat/combat-tracker.ts | 12 +++++------- src/system/applications/item/action-sheet.ts | 3 ++- src/system/applications/item/ancestry-sheet.ts | 3 ++- src/system/applications/item/armor-sheet.ts | 3 ++- src/system/applications/item/base.ts | 3 ++- src/system/applications/item/connection-sheet.ts | 3 ++- src/system/applications/item/culture-sheet.ts | 3 ++- src/system/applications/item/equipment-sheet.ts | 3 ++- src/system/applications/item/injury-sheet.ts | 3 ++- src/system/applications/item/loot-sheet.ts | 3 ++- src/system/applications/item/path-sheet.ts | 3 ++- src/system/applications/item/specialty-sheet.ts | 3 ++- src/system/applications/item/talent-sheet.ts | 3 ++- src/system/applications/item/trait-sheet.ts | 3 ++- src/system/applications/item/weapon-sheet.ts | 3 ++- src/system/constants.ts | 10 ++++++++++ src/system/documents/actor.ts | 14 +++++++------- src/system/documents/combat.ts | 3 ++- src/system/documents/combatant.ts | 12 +++++------- src/system/documents/item.ts | 14 ++++++-------- src/system/hooks/modules/dice-so-nice.ts | 6 +++--- src/system/hooks/sheets.ts | 3 ++- src/system/hooks/welcome.ts | 13 +++++-------- 28 files changed, 87 insertions(+), 68 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8fec169b..ac4e0a66 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ import { ActorType, Condition, ItemType } from './system/types/cosmere'; - +import { SYSTEM_ID } from './system/constants'; import COSMERE from './system/config'; import './style.scss'; @@ -127,7 +127,7 @@ function registerActorSheet( type: ActorType, sheet: typeof foundry.applications.api.ApplicationV2, ) { - Actors.registerSheet('cosmere-rpg', sheet as any, { + Actors.registerSheet(SYSTEM_ID, sheet as any, { types: [type], makeDefault: true, label: `TYPES.Actor.${type}`, @@ -138,7 +138,7 @@ function registerItemSheet( type: ItemType, sheet: typeof foundry.applications.api.ApplicationV2, ) { - Items.registerSheet('cosmere-rpg', sheet as any, { + Items.registerSheet(SYSTEM_ID, sheet as any, { types: [type], makeDefault: true, label: `TYPES.Item.${type}`, diff --git a/src/system/applications/actor/adversary-sheet.ts b/src/system/applications/actor/adversary-sheet.ts index 3acde95a..05333573 100644 --- a/src/system/applications/actor/adversary-sheet.ts +++ b/src/system/applications/actor/adversary-sheet.ts @@ -1,4 +1,5 @@ import { AdversaryActor } from '@system/documents'; +import { SYSTEM_ID } from '@src/system/constants'; // Components import { SearchBarInputEvent } from './components'; @@ -26,7 +27,7 @@ export class AdversarySheet extends BaseActorSheet static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'actor', 'adversary'], + classes: [SYSTEM_ID, 'sheet', 'actor', 'adversary'], position: { width: 850, height: 850, @@ -60,9 +61,7 @@ export class AdversarySheet extends BaseActorSheet } get areSkillsCollapsed(): boolean { - return ( - this.actor.getFlag('cosmere-rpg', 'sheet.skillsCollapsed') ?? false - ); + return this.actor.getFlag(SYSTEM_ID, 'sheet.skillsCollapsed') ?? false; } /* --- Actions --- */ @@ -70,7 +69,7 @@ export class AdversarySheet extends BaseActorSheet private static onToggleSkillsCollapsed(this: AdversarySheet) { // Update the flag void this.actor.setFlag( - 'cosmere-rpg', + SYSTEM_ID, 'sheet.skillsCollapsed', !this.areSkillsCollapsed, ); diff --git a/src/system/applications/actor/base.ts b/src/system/applications/actor/base.ts index 430cad3b..0a0bedd6 100644 --- a/src/system/applications/actor/base.ts +++ b/src/system/applications/actor/base.ts @@ -1,6 +1,7 @@ import { Resource } from '@src/system/types/cosmere'; import { CosmereActor } from '@system/documents/actor'; import { DeepPartial, AnyObject } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Utils import AppUtils from '@system/applications/utils'; @@ -102,7 +103,7 @@ export class BaseActorSheet< /* --- Accessors --- */ public get mode(): ActorSheetMode { - return this.actor.getFlag('cosmere-rpg', 'sheet.mode') ?? 'edit'; + return this.actor.getFlag(SYSTEM_ID, 'sheet.mode') ?? 'edit'; } /* --- Drag drop --- */ diff --git a/src/system/applications/actor/character-sheet.ts b/src/system/applications/actor/character-sheet.ts index e957a0a0..ca0e58f5 100644 --- a/src/system/applications/actor/character-sheet.ts +++ b/src/system/applications/actor/character-sheet.ts @@ -2,6 +2,7 @@ import './components'; import { ItemType } from '@system/types/cosmere'; import { CharacterActor } from '@system/documents'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseActorSheet } from './base'; @@ -15,7 +16,7 @@ export class CharacterSheet extends BaseActorSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'actor', 'character'], + classes: [SYSTEM_ID, 'sheet', 'actor', 'character'], position: { width: 850, height: 1000, diff --git a/src/system/applications/actor/components/character/goals-list.ts b/src/system/applications/actor/components/character/goals-list.ts index cfc554dc..ba4bdab6 100644 --- a/src/system/applications/actor/components/character/goals-list.ts +++ b/src/system/applications/actor/components/character/goals-list.ts @@ -1,4 +1,5 @@ import { ConstructorOf, MouseButton } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; @@ -107,7 +108,7 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< // Get current state const hideCompletedGoals = this.application.actor.getFlag( - 'cosmere-rpg', + SYSTEM_ID, HIDE_COMPLETED_FLAG, ) ?? false; @@ -202,7 +203,7 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< ) { const hideCompletedGoals = this.application.actor.getFlag( - 'cosmere-rpg', + SYSTEM_ID, HIDE_COMPLETED_FLAG, ) ?? false; diff --git a/src/system/applications/combat/combat-tracker.ts b/src/system/applications/combat/combat-tracker.ts index f57074fc..276ff0f1 100644 --- a/src/system/applications/combat/combat-tracker.ts +++ b/src/system/applications/combat/combat-tracker.ts @@ -1,5 +1,6 @@ import { ActorType, TurnSpeed } from '@src/system/types/cosmere'; import { CosmereCombatant } from '@src/system/documents/combatant'; +import { SYSTEM_ID } from '@src/system/constants'; /** * Overrides default tracker template to implement slow/fast buckets and combatant activation button. @@ -35,14 +36,11 @@ export class CosmereCombatTracker extends CombatTracker { const newTurn: CosmereTurn = { ...turn, turnSpeed: combatant.getFlag( - 'cosmere-rpg', + SYSTEM_ID, 'turnSpeed', ) as TurnSpeed, type: combatant.actor.type, - activated: combatant.getFlag( - 'cosmere-rpg', - 'activated', - ) as boolean, + activated: combatant.getFlag(SYSTEM_ID, 'activated') as boolean, }; //strips active player formatting newTurn.css = ''; @@ -122,7 +120,7 @@ export class CosmereCombatTracker extends CombatTracker { li.dataset.combatantId!, {}, ) as CosmereCombatant; - void combatant.setFlag('cosmere-rpg', 'activated', true); + void combatant.setFlag(SYSTEM_ID, 'activated', true); } /** @@ -146,7 +144,7 @@ export class CosmereCombatTracker extends CombatTracker { li.data('combatant-id') as string, {}, ) as CosmereCombatant; - void combatant.setFlag('cosmere-rpg', 'activated', false); + void combatant.setFlag(SYSTEM_ID, 'activated', false); } /** diff --git a/src/system/applications/item/action-sheet.ts b/src/system/applications/item/action-sheet.ts index c2d86617..c3f845d8 100644 --- a/src/system/applications/item/action-sheet.ts +++ b/src/system/applications/item/action-sheet.ts @@ -1,5 +1,6 @@ import { ActionItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class ActionItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'action'], + classes: [SYSTEM_ID, 'sheet', 'item', 'action'], position: { width: 550, }, diff --git a/src/system/applications/item/ancestry-sheet.ts b/src/system/applications/item/ancestry-sheet.ts index ec356115..9ac92856 100644 --- a/src/system/applications/item/ancestry-sheet.ts +++ b/src/system/applications/item/ancestry-sheet.ts @@ -1,5 +1,6 @@ import { AncestryItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; import { BaseItemSheet } from './base'; @@ -7,7 +8,7 @@ export class AncestrySheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'ancestry'], + classes: [SYSTEM_ID, 'sheet', 'item', 'ancestry'], position: { width: 600, height: 550, diff --git a/src/system/applications/item/armor-sheet.ts b/src/system/applications/item/armor-sheet.ts index 7b56eb54..bc959f4b 100644 --- a/src/system/applications/item/armor-sheet.ts +++ b/src/system/applications/item/armor-sheet.ts @@ -1,5 +1,6 @@ import { ArmorItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -13,7 +14,7 @@ export class ArmorItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'armor'], + classes: [SYSTEM_ID, 'sheet', 'item', 'armor'], position: { width: 730, height: 500, diff --git a/src/system/applications/item/base.ts b/src/system/applications/item/base.ts index 26661178..2da7e7c0 100644 --- a/src/system/applications/item/base.ts +++ b/src/system/applications/item/base.ts @@ -1,6 +1,7 @@ import { ArmorTraitId, WeaponTraitId } from '@system/types/cosmere'; import { CosmereItem } from '@system/documents/item'; import { DeepPartial, AnyObject } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Mixins import { ComponentHandlebarsApplicationMixin } from '@system/applications/component-system'; @@ -286,7 +287,7 @@ export class BaseItemSheet extends TabsApplicationMixin( ).fields, editable: this.isEditable, descHtml: enrichedDescValue, - sideTabs: game.settings!.get('cosmere-rpg', 'itemSheetSideTabs'), + sideTabs: game.settings!.get(SYSTEM_ID, 'itemSheetSideTabs'), }; } } diff --git a/src/system/applications/item/connection-sheet.ts b/src/system/applications/item/connection-sheet.ts index 2ef57f44..8f8e51dd 100644 --- a/src/system/applications/item/connection-sheet.ts +++ b/src/system/applications/item/connection-sheet.ts @@ -1,5 +1,6 @@ import { ConnectionItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class ConnectionItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'connection'], + classes: [SYSTEM_ID, 'sheet', 'item', 'connection'], position: { width: 550, height: 500, diff --git a/src/system/applications/item/culture-sheet.ts b/src/system/applications/item/culture-sheet.ts index 93c03823..afbbd228 100644 --- a/src/system/applications/item/culture-sheet.ts +++ b/src/system/applications/item/culture-sheet.ts @@ -1,5 +1,6 @@ import { CultureItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class CultureItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'culture'], + classes: [SYSTEM_ID, 'sheet', 'item', 'culture'], position: { width: 550, height: 500, diff --git a/src/system/applications/item/equipment-sheet.ts b/src/system/applications/item/equipment-sheet.ts index 74e06188..d0b45822 100644 --- a/src/system/applications/item/equipment-sheet.ts +++ b/src/system/applications/item/equipment-sheet.ts @@ -1,5 +1,6 @@ import { EquipmentItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class EquipmentItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'equipment'], + classes: [SYSTEM_ID, 'sheet', 'item', 'equipment'], position: { width: 730, height: 500, diff --git a/src/system/applications/item/injury-sheet.ts b/src/system/applications/item/injury-sheet.ts index d910ae51..8497d34e 100644 --- a/src/system/applications/item/injury-sheet.ts +++ b/src/system/applications/item/injury-sheet.ts @@ -1,6 +1,7 @@ import { InjuryType } from '@system/types/cosmere'; import { InjuryItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -9,7 +10,7 @@ export class InjuryItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'injury'], + classes: [SYSTEM_ID, 'sheet', 'item', 'injury'], position: { width: 550, height: 500, diff --git a/src/system/applications/item/loot-sheet.ts b/src/system/applications/item/loot-sheet.ts index 10f83ee5..9b0b9209 100644 --- a/src/system/applications/item/loot-sheet.ts +++ b/src/system/applications/item/loot-sheet.ts @@ -1,5 +1,6 @@ import { LootItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class LootItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'loot'], + classes: [SYSTEM_ID, 'sheet', 'item', 'loot'], position: { width: 730, height: 500, diff --git a/src/system/applications/item/path-sheet.ts b/src/system/applications/item/path-sheet.ts index 0acfe66a..3365c558 100644 --- a/src/system/applications/item/path-sheet.ts +++ b/src/system/applications/item/path-sheet.ts @@ -1,5 +1,6 @@ import { PathItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class PathItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'path'], + classes: [SYSTEM_ID, 'sheet', 'item', 'path'], position: { width: 550, height: 500, diff --git a/src/system/applications/item/specialty-sheet.ts b/src/system/applications/item/specialty-sheet.ts index 9ee7ccdc..6064e13c 100644 --- a/src/system/applications/item/specialty-sheet.ts +++ b/src/system/applications/item/specialty-sheet.ts @@ -1,5 +1,6 @@ import { SpecialtyItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class SpecialtyItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'specialty'], + classes: [SYSTEM_ID, 'sheet', 'item', 'specialty'], position: { width: 550, height: 500, diff --git a/src/system/applications/item/talent-sheet.ts b/src/system/applications/item/talent-sheet.ts index 0b56d340..251dc2a8 100644 --- a/src/system/applications/item/talent-sheet.ts +++ b/src/system/applications/item/talent-sheet.ts @@ -1,6 +1,7 @@ import { Talent } from '@system/types/item'; import { TalentItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -14,7 +15,7 @@ export class TalentItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'talent'], + classes: [SYSTEM_ID, 'sheet', 'item', 'talent'], position: { width: 550, }, diff --git a/src/system/applications/item/trait-sheet.ts b/src/system/applications/item/trait-sheet.ts index d8ec1f75..ceadb2bb 100644 --- a/src/system/applications/item/trait-sheet.ts +++ b/src/system/applications/item/trait-sheet.ts @@ -1,5 +1,6 @@ import { TraitItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class TraitItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'trait'], + classes: [SYSTEM_ID, 'sheet', 'item', 'trait'], position: { width: 550, height: 500, diff --git a/src/system/applications/item/weapon-sheet.ts b/src/system/applications/item/weapon-sheet.ts index 32fd202e..4c26d707 100644 --- a/src/system/applications/item/weapon-sheet.ts +++ b/src/system/applications/item/weapon-sheet.ts @@ -1,5 +1,6 @@ import { WeaponItem } from '@system/documents/item'; import { DeepPartial } from '@system/types/utils'; +import { SYSTEM_ID } from '@src/system/constants'; // Base import { BaseItemSheet } from './base'; @@ -8,7 +9,7 @@ export class WeaponItemSheet extends BaseItemSheet { static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { - classes: ['cosmere-rpg', 'sheet', 'item', 'weapon'], + classes: [SYSTEM_ID, 'sheet', 'item', 'weapon'], position: { width: 730, }, diff --git a/src/system/constants.ts b/src/system/constants.ts index bc49f96f..5b48a011 100644 --- a/src/system/constants.ts +++ b/src/system/constants.ts @@ -24,3 +24,13 @@ export const IMPORTED_RESOURCES = { PLOT_DICE_OP: 'https://dl.dropboxusercontent.com/scl/fi/cdswnywdr57sp79l4f9zd/Op.png?rlkey=4v6pgtxcrmwuzgazjgcpbs4xq&st=qnzdxl58&raw=1&t=.png', }; + +/** + * String identifier for the module used throughout other scripts. + */ +export const SYSTEM_ID = 'cosmere-rpg'; + +/** + * Full title string of the module. + */ +export const SYSTEM_NAME = 'Cosmere Roleplaying Game'; diff --git a/src/system/documents/actor.ts b/src/system/documents/actor.ts index f57f0b57..66921937 100644 --- a/src/system/documents/actor.ts +++ b/src/system/documents/actor.ts @@ -24,7 +24,7 @@ import { import { CharacterActorDataModel } from '@system/data/actor/character'; import { AdversaryActorDataModel } from '@system/data/actor/adversary'; import { Derived } from '@system/data/fields'; - +import { SYSTEM_ID } from '../constants'; import { d20Roll, D20Roll, D20RollData, DamageRoll } from '@system/dice'; // Dialogs @@ -119,11 +119,11 @@ export class CosmereActor< public get favorites(): CosmereItem[] { return this.items - .filter((i) => i.getFlag('cosmere-rpg', 'favorites.isFavorite')) + .filter((i) => i.getFlag(SYSTEM_ID, 'favorites.isFavorite')) .sort( (a, b) => - a.getFlag('cosmere-rpg', 'favorites.sort') - - b.getFlag('cosmere-rpg', 'favorites.sort'), + a.getFlag(SYSTEM_ID, 'favorites.sort') - + b.getFlag(SYSTEM_ID, 'favorites.sort'), ); } @@ -276,7 +276,7 @@ export class CosmereActor< /* --- Functions --- */ public async setMode(modality: string, mode: string) { - await this.setFlag('cosmere-rpg', `mode.${modality}`, mode); + await this.setFlag(SYSTEM_ID, `mode.${modality}`, mode); // Get all effects for this modality const effects = this.applicableEffects.filter( @@ -305,7 +305,7 @@ export class CosmereActor< } public async clearMode(modality: string) { - await this.unsetFlag('cosmere-rpg', `mode.${modality}`); + await this.unsetFlag(SYSTEM_ID, `mode.${modality}`); // Get all effects for this modality const effects = this.effects.filter( @@ -356,7 +356,7 @@ export class CosmereActor< // Get injury data const data: { type: InjuryType; durationFormula: string } = - result.getFlag('cosmere-rpg', 'injury-data'); + result.getFlag(SYSTEM_ID, 'injury-data'); if ( data.type !== InjuryType.Death && diff --git a/src/system/documents/combat.ts b/src/system/documents/combat.ts index 23521801..7aef571f 100644 --- a/src/system/documents/combat.ts +++ b/src/system/documents/combat.ts @@ -1,3 +1,4 @@ +import { SYSTEM_ID } from '../constants'; import { CosmereCombatant } from './combatant'; export class CosmereCombat extends Combat { @@ -10,7 +11,7 @@ export class CosmereCombat extends Combat { resetActivations() { for (const combatant of this.turns) { void combatant.setFlag( - 'cosmere-rpg', + SYSTEM_ID, 'activated', combatant.isDefeated ? true : false, ); diff --git a/src/system/documents/combatant.ts b/src/system/documents/combatant.ts index 2ad66b09..f20abcae 100644 --- a/src/system/documents/combatant.ts +++ b/src/system/documents/combatant.ts @@ -2,6 +2,7 @@ import { DocumentModificationOptions } from '@league-of-foundry-developers/found import { SchemaField } from '@league-of-foundry-developers/foundry-vtt-types/src/foundry/common/data/fields.mjs'; import { CosmereActor } from './actor'; import { ActorType, TurnSpeed } from '@src/system/types/cosmere'; +import { SYSTEM_ID } from '../constants'; export class CosmereCombatant extends Combatant { override get actor(): CosmereActor { @@ -17,8 +18,8 @@ export class CosmereCombatant extends Combatant { userID: string, ) { super._onCreate(data, options, userID); - void this.setFlag('cosmere-rpg', 'turnSpeed', TurnSpeed.Slow); - void this.setFlag('cosmere-rpg', 'activated', false); + void this.setFlag(SYSTEM_ID, 'turnSpeed', TurnSpeed.Slow); + void this.setFlag(SYSTEM_ID, 'activated', false); void this.combat?.setInitiative( this.id!, this.generateInitiative(this.actor.type, TurnSpeed.Slow), @@ -41,13 +42,10 @@ export class CosmereCombatant extends Combatant { * Utility function to flip the combatants current turn speed between slow and fast. It then updates initiative to force an update of the combat-tracker ui */ toggleTurnSpeed() { - const currentSpeed = this.getFlag( - 'cosmere-rpg', - 'turnSpeed', - ) as TurnSpeed; + const currentSpeed = this.getFlag(SYSTEM_ID, 'turnSpeed') as TurnSpeed; const newSpeed = currentSpeed === TurnSpeed.Slow ? TurnSpeed.Fast : TurnSpeed.Slow; - void this.setFlag('cosmere-rpg', 'turnSpeed', newSpeed); + void this.setFlag(SYSTEM_ID, 'turnSpeed', newSpeed); void this.combat?.setInitiative( this.id!, this.generateInitiative(this.actor.type, newSpeed), diff --git a/src/system/documents/item.ts b/src/system/documents/item.ts index b2d54040..8f694666 100644 --- a/src/system/documents/item.ts +++ b/src/system/documents/item.ts @@ -6,6 +6,7 @@ import { ActivationType, } from '@system/types/cosmere'; import { CosmereActor } from './actor'; +import { SYSTEM_ID } from '../constants'; import { Derived } from '@system/data/fields'; @@ -216,7 +217,7 @@ export class CosmereItem< /* --- Accessors --- */ public get isFavorite(): boolean { - return this.getFlag('cosmere-rpg', 'favorites.isFavorite'); + return this.getFlag(SYSTEM_ID, 'favorites.isFavorite'); } /** @@ -237,10 +238,7 @@ export class CosmereItem< const modalityId = this.system.modality; // Check actor modality flag - const activeMode = this.actor.getFlag( - 'cosmere-rpg', - `mode.${modalityId}`, - ); + const activeMode = this.actor.getFlag(SYSTEM_ID, `mode.${modalityId}`); // Check if the actor has the mode active return activeMode === this.system.id; @@ -876,7 +874,7 @@ export class CosmereItem< await this.update( { flags: { - 'cosmere-rpg': { + SYSTEM_ID: { favorites: { isFavorite: true, sort: index, @@ -890,8 +888,8 @@ export class CosmereItem< public async clearFavorite() { await Promise.all([ - this.unsetFlag('cosmere-rpg', 'favorites.isFavorite'), - this.unsetFlag('cosmere-rpg', 'favorites.sort'), + this.unsetFlag(SYSTEM_ID, 'favorites.isFavorite'), + this.unsetFlag(SYSTEM_ID, 'favorites.sort'), ]); } diff --git a/src/system/hooks/modules/dice-so-nice.ts b/src/system/hooks/modules/dice-so-nice.ts index 7ccfd1fd..0f28fdb7 100644 --- a/src/system/hooks/modules/dice-so-nice.ts +++ b/src/system/hooks/modules/dice-so-nice.ts @@ -1,7 +1,7 @@ -import { IMPORTED_RESOURCES } from '@system/constants'; +import { IMPORTED_RESOURCES, SYSTEM_ID } from '@system/constants'; Hooks.once('diceSoNiceReady', (dice3d: Dice3D) => { - dice3d.addSystem({ id: 'cosmere-rpg', name: 'Cosmere RPG' }, true); + dice3d.addSystem({ id: SYSTEM_ID, name: 'Cosmere RPG' }, true); dice3d.addDicePreset({ type: 'dp', labels: [ @@ -20,6 +20,6 @@ Hooks.once('diceSoNiceReady', (dice3d: Dice3D) => { IMPORTED_RESOURCES.PLOT_DICE_OP_BUMP, IMPORTED_RESOURCES.PLOT_DICE_OP_BUMP, ], - system: 'cosmere-rpg', + system: SYSTEM_ID, }); }); diff --git a/src/system/hooks/sheets.ts b/src/system/hooks/sheets.ts index cec5f551..b4668515 100644 --- a/src/system/hooks/sheets.ts +++ b/src/system/hooks/sheets.ts @@ -1,9 +1,10 @@ import { BaseItemSheet } from '../applications/item/base'; +import { SYSTEM_ID } from '../constants'; Hooks.on( 'renderItemSheetV2', (itemSheet: BaseItemSheet, node: HTMLFormElement) => { - if (game.settings!.get('cosmere-rpg', 'itemSheetSideTabs')) { + if (game.settings!.get(SYSTEM_ID, 'itemSheetSideTabs')) { node.classList.add('side-tabs'); } }, diff --git a/src/system/hooks/welcome.ts b/src/system/hooks/welcome.ts index ab0935bf..4727c39e 100644 --- a/src/system/hooks/welcome.ts +++ b/src/system/hooks/welcome.ts @@ -1,11 +1,12 @@ // Dialogs import { ReleaseNotesDialog } from '@system/applications/dialogs/release-notes'; +import { SYSTEM_ID } from '../constants'; Hooks.on('ready', async () => { // Ensure this message is only displayed when creating a new world if ( !game.user!.isGM || - !game.settings!.get('cosmere-rpg', 'firstTimeWorldCreation') + !game.settings!.get(SYSTEM_ID, 'firstTimeWorldCreation') ) return; @@ -20,7 +21,7 @@ Hooks.on('ready', async () => { }); // Mark the setting so the message doesn't appear again - await game.settings!.set('cosmere-rpg', 'firstTimeWorldCreation', false); + await game.settings!.set(SYSTEM_ID, 'firstTimeWorldCreation', false); }); Hooks.on('ready', async () => { @@ -29,17 +30,13 @@ Hooks.on('ready', async () => { const currentVersion = game.system!.version; const latestVersion = game.settings!.get( - 'cosmere-rpg', + SYSTEM_ID, 'latestVersion', ) as string; if (currentVersion > latestVersion) { // Record the latest version of the system - await game.settings!.set( - 'cosmere-rpg', - 'latestVersion', - currentVersion, - ); + await game.settings!.set(SYSTEM_ID, 'latestVersion', currentVersion); // Show the release notes void ReleaseNotesDialog.show(); From 475001216889b3f8a8772ac2c34fd5e7caa904cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mang=C3=B3?= <110994627+MangoFVTT@users.noreply.github.com> Date: Tue, 29 Oct 2024 17:40:31 +0100 Subject: [PATCH 05/18] chore(settings): centralise and localise settings (#117) * Centralise settings retrieval and setup * Localise settings * Remove redundant imports * Fix documentation * Swap to export functions to match rest of code * Rename function for clarity * General cleanup of export names * Minor documentation change * Review suggestions --- src/index.ts | 4 +- src/lang/en.json | 10 +++++ src/system/applications/item/base.ts | 4 +- src/system/hooks/sheets.ts | 4 +- src/system/hooks/welcome.ts | 11 ++--- src/system/settings.ts | 67 +++++++++++++++++++++++----- 6 files changed, 77 insertions(+), 23 deletions(-) diff --git a/src/index.ts b/src/index.ts index ac4e0a66..2058a801 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,7 +6,7 @@ import './style.scss'; import './system/hooks'; import { preloadHandlebarsTemplates } from './system/util/handlebars'; -import { registerSettings } from './system/settings'; +import { registerSystemSettings } from './system/settings'; import * as applications from './system/applications'; import * as dataModels from './system/data'; @@ -94,7 +94,7 @@ Hooks.once('init', async () => { registerStatusEffects(); // Register settings - registerSettings(); + registerSystemSettings(); }); /** diff --git a/src/lang/en.json b/src/lang/en.json index 7c1855dc..3b0ce656 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -933,5 +933,15 @@ "Distance": { "Feet": "Feet" } + }, + "SETTINGS": { + "itemSheetSideTabs": { + "name": "Vertical Side Tabs for Item Sheets", + "hint": "If enabled, item sheets use vertical tabs down the right-hand side, similar to the character sheet, instead of the default in-line horizontal ones." + }, + "skipRollDialogByDefault": { + "name": "Skip Roll Dialog by Default", + "hint": "If enabled, rolls will skip the roll configuration dialog when clicked, using the default roll configuration. The dialog can still be accessed by holding the 'Skip/Show Dialog' key modifier from the system controls." + } } } diff --git a/src/system/applications/item/base.ts b/src/system/applications/item/base.ts index 2da7e7c0..28015de1 100644 --- a/src/system/applications/item/base.ts +++ b/src/system/applications/item/base.ts @@ -1,11 +1,11 @@ import { ArmorTraitId, WeaponTraitId } from '@system/types/cosmere'; import { CosmereItem } from '@system/documents/item'; import { DeepPartial, AnyObject } from '@system/types/utils'; -import { SYSTEM_ID } from '@src/system/constants'; // Mixins import { ComponentHandlebarsApplicationMixin } from '@system/applications/component-system'; import { TabsApplicationMixin } from '@system/applications/mixins'; +import { getSystemSetting, SETTINGS } from '@src/system/settings'; const { ItemSheetV2 } = foundry.applications.sheets; @@ -287,7 +287,7 @@ export class BaseItemSheet extends TabsApplicationMixin( ).fields, editable: this.isEditable, descHtml: enrichedDescValue, - sideTabs: game.settings!.get(SYSTEM_ID, 'itemSheetSideTabs'), + sideTabs: getSystemSetting(SETTINGS.ITEM_SHEET_SIDE_TABS), }; } } diff --git a/src/system/hooks/sheets.ts b/src/system/hooks/sheets.ts index b4668515..f8059c11 100644 --- a/src/system/hooks/sheets.ts +++ b/src/system/hooks/sheets.ts @@ -1,10 +1,10 @@ import { BaseItemSheet } from '../applications/item/base'; -import { SYSTEM_ID } from '../constants'; +import { getSystemSetting, SETTINGS } from '../settings'; Hooks.on( 'renderItemSheetV2', (itemSheet: BaseItemSheet, node: HTMLFormElement) => { - if (game.settings!.get(SYSTEM_ID, 'itemSheetSideTabs')) { + if (getSystemSetting(SETTINGS.ITEM_SHEET_SIDE_TABS)) { node.classList.add('side-tabs'); } }, diff --git a/src/system/hooks/welcome.ts b/src/system/hooks/welcome.ts index 4727c39e..e1a9ea99 100644 --- a/src/system/hooks/welcome.ts +++ b/src/system/hooks/welcome.ts @@ -1,13 +1,11 @@ // Dialogs import { ReleaseNotesDialog } from '@system/applications/dialogs/release-notes'; import { SYSTEM_ID } from '../constants'; +import { getSystemSetting, SETTINGS } from '../settings'; Hooks.on('ready', async () => { // Ensure this message is only displayed when creating a new world - if ( - !game.user!.isGM || - !game.settings!.get(SYSTEM_ID, 'firstTimeWorldCreation') - ) + if (!game.user!.isGM || !getSystemSetting(SETTINGS.INTERNAL_FIRST_CREATION)) return; // Get system version @@ -29,9 +27,8 @@ Hooks.on('ready', async () => { if (!game.user!.isGM) return; const currentVersion = game.system!.version; - const latestVersion = game.settings!.get( - SYSTEM_ID, - 'latestVersion', + const latestVersion = getSystemSetting( + SETTINGS.INTERNAL_LATEST_VERSION, ) as string; if (currentVersion > latestVersion) { diff --git a/src/system/settings.ts b/src/system/settings.ts index 756a6d5c..ad6084dd 100644 --- a/src/system/settings.ts +++ b/src/system/settings.ts @@ -1,5 +1,20 @@ -export function registerSettings() { - game.settings!.register('cosmere-rpg', 'firstTimeWorldCreation', { +import { SYSTEM_ID } from './constants'; + +/** + * Index of identifiers for system settings. + */ +export const SETTINGS = { + INTERNAL_FIRST_CREATION: 'firstTimeWorldCreation', + INTERNAL_LATEST_VERSION: 'latestVersion', + ITEM_SHEET_SIDE_TABS: 'itemSheetSideTabs', + ROLL_SKIP_DIALOG_DEFAULT: 'skipRollDialogByDefault', +} as const; + +/** + * Register all of the system's settings. + */ +export function registerSystemSettings() { + game.settings!.register(SYSTEM_ID, SETTINGS.INTERNAL_FIRST_CREATION, { name: 'First Time World Creation', scope: 'world', config: false, @@ -7,7 +22,7 @@ export function registerSettings() { type: Boolean, }); - game.settings!.register('cosmere-rpg', 'latestVersion', { + game.settings!.register(SYSTEM_ID, SETTINGS.INTERNAL_LATEST_VERSION, { name: 'Latest Version', scope: 'world', config: false, @@ -15,12 +30,44 @@ export function registerSettings() { type: String, }); - game.settings!.register('cosmere-rpg', 'itemSheetSideTabs', { - name: 'Vertical Side Tabs for Item Sheets', - hint: 'Toggle whether Item sheets should use vertical tabs down the right-hand side, similar to the character sheet, or leave the in-line horizontal ones (default).', - scope: 'world', - config: true, - type: Boolean, - default: false, + // SHEET SETTINGS + const sheetOptions = [ + { name: SETTINGS.ITEM_SHEET_SIDE_TABS, default: false }, + ]; + + sheetOptions.forEach((option) => { + game.settings!.register(SYSTEM_ID, option.name, { + name: game.i18n!.localize(`SETTINGS.${option.name}.name`), + hint: game.i18n!.localize(`SETTINGS.${option.name}.hint`), + scope: 'world', + config: true, + type: Boolean, + default: option.default, + }); }); + + // ROLL SETTINGS + const rollOptions = [ + { name: SETTINGS.ROLL_SKIP_DIALOG_DEFAULT, default: false }, + ]; + + rollOptions.forEach((option) => { + game.settings!.register(SYSTEM_ID, option.name, { + name: game.i18n!.localize(`SETTINGS.${option.name}.name`), + hint: game.i18n!.localize(`SETTINGS.${option.name}.hint`), + scope: 'client', + config: true, + type: Boolean, + default: option.default, + }); + }); +} + +/** + * Retrieve a specific setting value for the provided key. + * @param {string} settingKey The identifier of the setting to retrieve. + * @returns {string|boolean} The value of the setting as set for the world/client. + */ +export function getSystemSetting(settingKey: string) { + return game.settings!.get(SYSTEM_ID, settingKey); } From c12f689e807d0ba7d14d17063ed64d29014667f4 Mon Sep 17 00:00:00 2001 From: Rost <43580593+RostCS@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:09:58 -0500 Subject: [PATCH 06/18] chore(character sheet): update textareas font (#129) - Textarea not configured to inherit font-family by default --- src/style/sheets/actor/character.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/style/sheets/actor/character.scss b/src/style/sheets/actor/character.scss index 4fae5c3d..af2eb9f4 100644 --- a/src/style/sheets/actor/character.scss +++ b/src/style/sheets/actor/character.scss @@ -47,6 +47,7 @@ background: #302831; padding: 0.3rem 0.5rem; min-height: 5rem; + font-family: inherit; &:read-only { background: #0b0a13; From 9a36dc425785e470df38c01e677085c6ea373e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mang=C3=B3?= <110994627+MangoFVTT@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:12:32 +0100 Subject: [PATCH 07/18] chore(assets): move sheet svgs into assets folder (#139) - Move sheet svgs into assets folder so they are included in build --- .../svg => assets/icons/svg/sheet}/border_attribute_left.svg | 0 .../svg => assets/icons/svg/sheet}/border_attribute_right.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_bar.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_corner.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_defense.svg | 0 .../svg => assets/icons/svg/sheet}/border_defense_double.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_deflect.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_full_100x100.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_level.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_sheet_corner.svg | 0 .../svg => assets/icons/svg/sheet}/border_sheet_full_150x150.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_stat.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_tab_closed.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_tab_open.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/border_tier.svg | 0 src/{icons/svg => assets/icons/svg/sheet}/star_cosmere.svg | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename src/{icons/svg => assets/icons/svg/sheet}/border_attribute_left.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_attribute_right.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_bar.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_corner.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_defense.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_defense_double.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_deflect.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_full_100x100.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_level.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_sheet_corner.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_sheet_full_150x150.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_stat.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_tab_closed.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_tab_open.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/border_tier.svg (100%) rename src/{icons/svg => assets/icons/svg/sheet}/star_cosmere.svg (100%) diff --git a/src/icons/svg/border_attribute_left.svg b/src/assets/icons/svg/sheet/border_attribute_left.svg similarity index 100% rename from src/icons/svg/border_attribute_left.svg rename to src/assets/icons/svg/sheet/border_attribute_left.svg diff --git a/src/icons/svg/border_attribute_right.svg b/src/assets/icons/svg/sheet/border_attribute_right.svg similarity index 100% rename from src/icons/svg/border_attribute_right.svg rename to src/assets/icons/svg/sheet/border_attribute_right.svg diff --git a/src/icons/svg/border_bar.svg b/src/assets/icons/svg/sheet/border_bar.svg similarity index 100% rename from src/icons/svg/border_bar.svg rename to src/assets/icons/svg/sheet/border_bar.svg diff --git a/src/icons/svg/border_corner.svg b/src/assets/icons/svg/sheet/border_corner.svg similarity index 100% rename from src/icons/svg/border_corner.svg rename to src/assets/icons/svg/sheet/border_corner.svg diff --git a/src/icons/svg/border_defense.svg b/src/assets/icons/svg/sheet/border_defense.svg similarity index 100% rename from src/icons/svg/border_defense.svg rename to src/assets/icons/svg/sheet/border_defense.svg diff --git a/src/icons/svg/border_defense_double.svg b/src/assets/icons/svg/sheet/border_defense_double.svg similarity index 100% rename from src/icons/svg/border_defense_double.svg rename to src/assets/icons/svg/sheet/border_defense_double.svg diff --git a/src/icons/svg/border_deflect.svg b/src/assets/icons/svg/sheet/border_deflect.svg similarity index 100% rename from src/icons/svg/border_deflect.svg rename to src/assets/icons/svg/sheet/border_deflect.svg diff --git a/src/icons/svg/border_full_100x100.svg b/src/assets/icons/svg/sheet/border_full_100x100.svg similarity index 100% rename from src/icons/svg/border_full_100x100.svg rename to src/assets/icons/svg/sheet/border_full_100x100.svg diff --git a/src/icons/svg/border_level.svg b/src/assets/icons/svg/sheet/border_level.svg similarity index 100% rename from src/icons/svg/border_level.svg rename to src/assets/icons/svg/sheet/border_level.svg diff --git a/src/icons/svg/border_sheet_corner.svg b/src/assets/icons/svg/sheet/border_sheet_corner.svg similarity index 100% rename from src/icons/svg/border_sheet_corner.svg rename to src/assets/icons/svg/sheet/border_sheet_corner.svg diff --git a/src/icons/svg/border_sheet_full_150x150.svg b/src/assets/icons/svg/sheet/border_sheet_full_150x150.svg similarity index 100% rename from src/icons/svg/border_sheet_full_150x150.svg rename to src/assets/icons/svg/sheet/border_sheet_full_150x150.svg diff --git a/src/icons/svg/border_stat.svg b/src/assets/icons/svg/sheet/border_stat.svg similarity index 100% rename from src/icons/svg/border_stat.svg rename to src/assets/icons/svg/sheet/border_stat.svg diff --git a/src/icons/svg/border_tab_closed.svg b/src/assets/icons/svg/sheet/border_tab_closed.svg similarity index 100% rename from src/icons/svg/border_tab_closed.svg rename to src/assets/icons/svg/sheet/border_tab_closed.svg diff --git a/src/icons/svg/border_tab_open.svg b/src/assets/icons/svg/sheet/border_tab_open.svg similarity index 100% rename from src/icons/svg/border_tab_open.svg rename to src/assets/icons/svg/sheet/border_tab_open.svg diff --git a/src/icons/svg/border_tier.svg b/src/assets/icons/svg/sheet/border_tier.svg similarity index 100% rename from src/icons/svg/border_tier.svg rename to src/assets/icons/svg/sheet/border_tier.svg diff --git a/src/icons/svg/star_cosmere.svg b/src/assets/icons/svg/sheet/star_cosmere.svg similarity index 100% rename from src/icons/svg/star_cosmere.svg rename to src/assets/icons/svg/sheet/star_cosmere.svg From 84a7c16ded64294892ca69905774375d0ccef012 Mon Sep 17 00:00:00 2001 From: Rost <43580593+RostCS@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:35:13 -0500 Subject: [PATCH 08/18] fix(character sheet): make goals & connections list items adept to text size (#140) * Modify goals-list and connections-list to automatically adapt to text size * Fixing description scaling from fixed to auto --- src/style/sheets/actor/character.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/style/sheets/actor/character.scss b/src/style/sheets/actor/character.scss index af2eb9f4..377b027f 100644 --- a/src/style/sheets/actor/character.scss +++ b/src/style/sheets/actor/character.scss @@ -259,6 +259,10 @@ &:not(.collapsed):not(:first-child):not(:last-child) { border-bottom: 1px solid #302831; + height:auto; + min-height: 1.5rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; } &:not(.details) { @@ -368,6 +372,10 @@ .goal { &:not(:first-child):not(:last-child) { border-bottom: 1px solid #463a47 !important; + height: auto; + min-height: 1.5rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; } } } @@ -376,6 +384,10 @@ .connection { &:nth-child(even):not(:last-child) { border-bottom: 1px solid #463a47 !important; + height: auto; + min-height: 1.5rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; } } } From 58993b8a01f13bc8137fef7bfedeb275ba654745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mang=C3=B3?= <110994627+MangoFVTT@users.noreply.github.com> Date: Sat, 2 Nov 2024 10:14:49 +0100 Subject: [PATCH 09/18] feat(rolls): add modifier keys and fastforwarding (#121) * Centralise settings retrieval and setup * Localise settings * Remove redundant imports * Fix documentation * Swap to export functions to match rest of code * Rename function for clarity * General cleanup of export names * Minor documentation change * Add keybindings setup * Setup utils folder * Fix minor errors * Add key modifier processing and skip behaviour for all d20 rolls * Clean up * Add key modifiers to item rolls * Fix incorrect default parameter * Make config values override any modifier * Review suggestions * Add as const to keybindings constant * Fix double dialog * Separate utils --- src/index.ts | 8 +- src/lang/en.json | 6 + .../actor/components/adversary/header.ts | 4 +- .../actor/dialogs/edit-creature-type.ts | 4 +- src/system/dice/index.ts | 54 ++++++--- src/system/documents/item.ts | 27 ++++- src/system/settings.ts | 55 +++++++++ src/system/{util => utils}/actor.ts | 6 - src/system/utils/generic.ts | 110 ++++++++++++++++++ .../{util => utils}/handlebars/application.ts | 0 .../{util => utils}/handlebars/index.ts | 0 .../{util => utils}/handlebars/types.ts | 0 12 files changed, 241 insertions(+), 33 deletions(-) rename src/system/{util => utils}/actor.ts (90%) create mode 100644 src/system/utils/generic.ts rename src/system/{util => utils}/handlebars/application.ts (100%) rename src/system/{util => utils}/handlebars/index.ts (100%) rename src/system/{util => utils}/handlebars/types.ts (100%) diff --git a/src/index.ts b/src/index.ts index 2058a801..d0e25954 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,8 +5,11 @@ import COSMERE from './system/config'; import './style.scss'; import './system/hooks'; -import { preloadHandlebarsTemplates } from './system/util/handlebars'; -import { registerSystemSettings } from './system/settings'; +import { preloadHandlebarsTemplates } from './system/utils/handlebars'; +import { + registerSystemKeybindings, + registerSystemSettings, +} from './system/settings'; import * as applications from './system/applications'; import * as dataModels from './system/data'; @@ -95,6 +98,7 @@ Hooks.once('init', async () => { // Register settings registerSystemSettings(); + registerSystemKeybindings(); }); /** diff --git a/src/lang/en.json b/src/lang/en.json index 3b0ce656..6a425868 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -943,5 +943,11 @@ "name": "Skip Roll Dialog by Default", "hint": "If enabled, rolls will skip the roll configuration dialog when clicked, using the default roll configuration. The dialog can still be accessed by holding the 'Skip/Show Dialog' key modifier from the system controls." } + }, + "KEYBINDINGS": { + "skipDialogDefault": "Skip/Show Dialog", + "skipDialogAdvantage": "Skip Dialog with Advantage", + "skipDialogDisadvantage": "Skip Dialog with Disadvantage", + "skipDialogRaiseStakes": "Skip Dialog with Raise Stakes" } } diff --git a/src/system/applications/actor/components/adversary/header.ts b/src/system/applications/actor/components/adversary/header.ts index 2e28619b..bb7589d2 100644 --- a/src/system/applications/actor/components/adversary/header.ts +++ b/src/system/applications/actor/components/adversary/header.ts @@ -4,7 +4,7 @@ import { ConstructorOf } from '@system/types/utils'; import { EditCreatureTypeDialog } from '@system/applications/actor/dialogs/edit-creature-type'; // Utils -import ActorUtils from '@system/util/actor'; +import { getTypeLabel } from '@src/system/utils/actor'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; @@ -65,7 +65,7 @@ export class AdversaryHeaderComponent extends HandlebarsApplicationComponent< roleLabel: CONFIG.COSMERE.adversary.roles[context.actor.system.role].label, sizeLabel: CONFIG.COSMERE.sizes[context.actor.system.size].label, - typeLabel: ActorUtils.getTypeLabel(context.actor.system.type), + typeLabel: getTypeLabel(context.actor.system.type), }); } } diff --git a/src/system/applications/actor/dialogs/edit-creature-type.ts b/src/system/applications/actor/dialogs/edit-creature-type.ts index b74bf5c8..ff71c87f 100644 --- a/src/system/applications/actor/dialogs/edit-creature-type.ts +++ b/src/system/applications/actor/dialogs/edit-creature-type.ts @@ -5,7 +5,7 @@ import { AnyObject } from '@system/types/utils'; import { CommonActorData } from '@system/data/actor/common'; // Utils -import ActorUtils from '@system/util/actor'; +import { getTypeLabel } from '@src/system/utils/actor'; const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api; @@ -128,7 +128,7 @@ export class EditCreatureTypeDialog extends HandlebarsApplicationMixin( actor: this.actor, type: this.type, - typeLabel: ActorUtils.getTypeLabel(this.type), + typeLabel: getTypeLabel(this.type), configuredTypes, }); } diff --git a/src/system/dice/index.ts b/src/system/dice/index.ts index 08868eed..f7f8b47e 100644 --- a/src/system/dice/index.ts +++ b/src/system/dice/index.ts @@ -2,7 +2,8 @@ import { Attribute } from '@system/types/cosmere'; import { D20Roll, D20RollOptions, D20RollData } from './d20-roll'; import { DamageRoll, DamageRollOptions, DamageRollData } from './damage-roll'; -import { RollMode } from './types'; +import { AdvantageMode } from '../types/roll'; +import { determineConfigurationMode } from '../utils/generic'; export * from './d20-roll'; export * from './damage-roll'; @@ -73,28 +74,45 @@ export interface DamageRollConfiguration extends DamageRollOptions { export async function d20Roll( config: D20RollConfigration, ): Promise { + // Handle key modifiers + const { fastForward, advantageMode, plotDie } = determineConfigurationMode( + config.configurable, + config.advantageMode + ? config.advantageMode === AdvantageMode.Advantage + : undefined, + config.advantageMode + ? config.advantageMode === AdvantageMode.Disadvantage + : undefined, + config.plotDie, + ); + + // Replace config values with key modified values + config.advantageMode = advantageMode; + config.plotDie = plotDie; + // Roll parameters const defaultRollMode = config.rollMode ?? game.settings!.get('core', 'rollMode'); // Construct the roll - const roll = new D20Roll(config.parts ?? [], config.data, { - ...config, - }); - - // Prompt dialog to configure the d20 roll - const configured = - config.configurable !== false - ? await roll.configureDialog({ - title: config.title, - plotDie: config.plotDie, - defaultRollMode, - defaultAttribute: - config.defaultAttribute ?? config.data.skill.attribute, - data: config.data, - }) - : roll; - if (configured === null) return null; + const roll = new D20Roll(config.parts ?? [], config.data, { ...config }); + + if (!fastForward) { + // Prompt dialog to configure the d20 roll + const configured = + config.configurable !== false + ? await roll.configureDialog({ + title: config.title, + plotDie: config.plotDie, + defaultRollMode, + defaultAttribute: + config.defaultAttribute ?? + config.data.skill.attribute, + data: config.data, + }) + : roll; + if (configured === null) return null; + } // Evaluate the configure roll await roll.evaluate(); diff --git a/src/system/documents/item.ts b/src/system/documents/item.ts index 8f694666..12afe104 100644 --- a/src/system/documents/item.ts +++ b/src/system/documents/item.ts @@ -52,6 +52,7 @@ import { } from '@system/dice'; import { AdvantageMode } from '@system/types/roll'; import { RollMode } from '@system/dice/types'; +import { determineConfigurationMode } from '../utils/generic'; // Constants const CONSUME_CONFIGURATION_DIALOG_TEMPLATE = @@ -446,8 +447,30 @@ export class CosmereItem< this.system.damage.attribute ?? actor.system.skills[damageSkillId].attribute; + options.skillTest ??= {}; + options.damage ??= {}; + + // Handle key modifiers + const { fastForward, advantageMode, plotDie } = + determineConfigurationMode( + options.configurable, + options.skillTest.advantageMode + ? options.skillTest.advantageMode === + AdvantageMode.Advantage + : undefined, + options.skillTest.advantageMode + ? options.skillTest.advantageMode === + AdvantageMode.Disadvantage + : undefined, + options.skillTest.plotDie, + ); + + // Replace config values with key modified values + options.skillTest.advantageMode = advantageMode; + options.skillTest.plotDie = plotDie; + // Perform configuration - if (options.configurable !== false) { + if (!fastForward && options.configurable !== false) { const attackConfig = await AttackConfigurationDialog.show({ title: `${this.name} (${game.i18n!.localize( CONFIG.COSMERE.skills[skillTestSkillId].label, @@ -483,14 +506,12 @@ export class CosmereItem< skillTestAttributeId = attackConfig.attribute; options.rollMode = attackConfig.rollMode; - options.skillTest ??= {}; options.skillTest.plotDie = attackConfig.skillTest.plotDie; options.skillTest.advantageMode = attackConfig.skillTest.advantageMode; options.skillTest.advantageModePlot = attackConfig.skillTest.advantageModePlot; - options.damage ??= {}; options.damage.advantageMode = attackConfig.damageRoll.advantageMode; } diff --git a/src/system/settings.ts b/src/system/settings.ts index ad6084dd..989e5bfb 100644 --- a/src/system/settings.ts +++ b/src/system/settings.ts @@ -63,6 +63,52 @@ export function registerSystemSettings() { }); } +/** + * Index of identifiers for system keybindings. + */ +export const KEYBINDINGS = { + SKIP_DIALOG_DEFAULT: 'skipDialogDefault', + SKIP_DIALOG_ADVANTAGE: 'skipDialogAdvantage', + SKIP_DIALOG_DISADVANTAGE: 'skipDialogDisadvantage', + SKIP_DIALOG_RAISE_STAKES: 'skipDialogRaiseStakes', +} as const; + +/** + * Register all of the system's keybindings. + */ +export function registerSystemKeybindings() { + const keybindings = [ + { + name: KEYBINDINGS.SKIP_DIALOG_DEFAULT, + editable: [{ key: 'AltLeft' }, { key: 'AltRight' }], + }, + { + name: KEYBINDINGS.SKIP_DIALOG_ADVANTAGE, + editable: [{ key: 'ShiftLeft' }, { key: 'ShiftRight' }], + }, + { + name: KEYBINDINGS.SKIP_DIALOG_DISADVANTAGE, + editable: [ + { key: 'ControlLeft' }, + { key: 'ControlRight' }, + { key: 'OsLeft' }, + { key: 'OsRight' }, + ], + }, + { + name: KEYBINDINGS.SKIP_DIALOG_RAISE_STAKES, + editable: [{ key: 'KeyQ' }], + }, + ]; + + keybindings.forEach((keybind) => { + game.keybindings!.register(SYSTEM_ID, keybind.name, { + name: `KEYBINDINGS.${keybind.name}`, + editable: keybind.editable, + }); + }); +} + /** * Retrieve a specific setting value for the provided key. * @param {string} settingKey The identifier of the setting to retrieve. @@ -71,3 +117,12 @@ export function registerSystemSettings() { export function getSystemSetting(settingKey: string) { return game.settings!.get(SYSTEM_ID, settingKey); } + +/** + * Retrieves an array of keybinding values for the provided key. + * @param {string} keybindingKey The identifier of the keybinding to retrieve. + * @returns {Array} The value of the keybindings associated with the given key. + */ +export function getSystemKeybinding(keybindingKey: string) { + return game.keybindings!.get(SYSTEM_ID, keybindingKey); +} diff --git a/src/system/util/actor.ts b/src/system/utils/actor.ts similarity index 90% rename from src/system/util/actor.ts rename to src/system/utils/actor.ts index 155133bf..7b476797 100644 --- a/src/system/util/actor.ts +++ b/src/system/utils/actor.ts @@ -20,9 +20,3 @@ export function getTypeLabel(type: CommonActorData['type']): string { // Construct type label return `${primaryLabel} ${subtype ? `(${subtype})` : ''}`.trim(); } - -/* --- Default export --- */ - -export default { - getTypeLabel, -}; diff --git a/src/system/utils/generic.ts b/src/system/utils/generic.ts new file mode 100644 index 00000000..638f1548 --- /dev/null +++ b/src/system/utils/generic.ts @@ -0,0 +1,110 @@ +import { + getSystemKeybinding, + getSystemSetting, + KEYBINDINGS, + SETTINGS, +} from '../settings'; +import { AdvantageMode } from '../types/roll'; + +/** + * Determine if the keys of a requested keybinding are pressed. + * @param {string} action Keybinding action within the system namespace. Can have multiple keybindings associated. + * @returns {boolean} True if one of the keybindings for the requested action are triggered, false otherwise. + */ +export function areKeysPressed(action: string): boolean { + const keybinds = getSystemKeybinding(action); + + if (!keybinds || keybinds.length === 0) { + return false; + } + + const activeModifiers = {} as Record; + + const addModifiers = (key: string) => { + if (hasKey(KeyboardManager.MODIFIER_CODES, key)) { + KeyboardManager.MODIFIER_CODES[key].forEach( + (n: string) => + (activeModifiers[n] = game.keyboard!.downKeys.has(n)), + ); + } + }; + addModifiers(KeyboardManager.MODIFIER_KEYS.CONTROL); + addModifiers(KeyboardManager.MODIFIER_KEYS.SHIFT); + addModifiers(KeyboardManager.MODIFIER_KEYS.ALT); + + return getSystemKeybinding(action).some((b) => { + if ( + game.keyboard!.downKeys.has(b.key) && + b.modifiers?.every((m) => activeModifiers[m]) + ) + return true; + if (b.modifiers?.length) return false; + return activeModifiers[b.key]; + }); +} + +/** + * Checks if a given object has the given property key as a key for indexing. + * Adding this check beforehand allows an object to be indexed by that key directly without typescript errors. + * @param {T} obj The object to check for indexing. + * @param {PropertyKey} key The key to check within the object. + * @returns {boolean} True if the given object has requested property key, false otherwise. + */ +export function hasKey( + obj: T, + key: PropertyKey, +): key is keyof T { + return key in obj; +} + +/** + * Processes pressed keys and provided config values to determine final values for a roll, specifically: + * if it should skip the configuration dialog, what advantage mode it is using, and if it has raised stakes. + * @param {boolean} [configure] Should the roll dialog be skipped? + * @param {boolean} [advantage] Is something granting this roll advantage? + * @param {boolean} [disadvantage] Is something granting this roll disadvantage? + * @param {boolean} [raiseStakes] Is something granting this roll raised stakes? + * @returns {{fastForward: boolean, advantageMode: AdvantageMode, plotDie: boolean}} Whether a roll should fast forward, have a plot die, and its advantage mode. + */ +export function determineConfigurationMode( + configure?: boolean, + advantage?: boolean, + disadvantage?: boolean, + raiseStakes?: boolean, +) { + const modifiers = { + advantage: areKeysPressed(KEYBINDINGS.SKIP_DIALOG_ADVANTAGE), + disadvantage: areKeysPressed(KEYBINDINGS.SKIP_DIALOG_DISADVANTAGE), + raiseStakes: areKeysPressed(KEYBINDINGS.SKIP_DIALOG_RAISE_STAKES), + }; + + const fastForward = + configure !== undefined + ? !configure + : isFastForward() || Object.values(modifiers).some((k) => k); + + const hasAdvantage = advantage ?? modifiers.advantage; + const hasDisadvantage = disadvantage ?? modifiers.disadvantage; + const advantageMode = hasAdvantage + ? AdvantageMode.Advantage + : hasDisadvantage + ? AdvantageMode.Disadvantage + : AdvantageMode.None; + const plotDie = raiseStakes ?? modifiers.raiseStakes; + + return { fastForward, advantageMode, plotDie }; +} + +/** + * Processes pressed keys and selected system settings to determine if a roll should fast forward. + * This function allows the swappable behaviour of the Skip/Show Dialog modifier key, making it behave correctly depending on the system setting selected by the user. + * @returns {boolean} Whether a roll should fast forward or not. + */ +export function isFastForward() { + const skipKeyPressed = areKeysPressed(KEYBINDINGS.SKIP_DIALOG_DEFAULT); + const skipByDefault = getSystemSetting(SETTINGS.ROLL_SKIP_DIALOG_DEFAULT); + + return ( + (skipByDefault && !skipKeyPressed) || (!skipByDefault && skipKeyPressed) + ); +} diff --git a/src/system/util/handlebars/application.ts b/src/system/utils/handlebars/application.ts similarity index 100% rename from src/system/util/handlebars/application.ts rename to src/system/utils/handlebars/application.ts diff --git a/src/system/util/handlebars/index.ts b/src/system/utils/handlebars/index.ts similarity index 100% rename from src/system/util/handlebars/index.ts rename to src/system/utils/handlebars/index.ts diff --git a/src/system/util/handlebars/types.ts b/src/system/utils/handlebars/types.ts similarity index 100% rename from src/system/util/handlebars/types.ts rename to src/system/utils/handlebars/types.ts From 41fec09dc0cc28b47e621c71917c42b5c2881f72 Mon Sep 17 00:00:00 2001 From: stanavdb <142786862+stanavdb@users.noreply.github.com> Date: Mon, 4 Nov 2024 10:39:03 +0100 Subject: [PATCH 10/18] feat: add support for powers (e.g. surges) and path skills (#124) * feat: add Goal & Power item documents and add support for linked skills to paths * feat(talents): add grant rules to be executed upon obtaining the talent * chore: make grant rules deletable * feat(talents): add functionality to execute grant rules for talents * chore(goal): refactor goal onCompletion.grants to rewards * feat(goals): implement automatic reward granting upon goal completion * feat(actor): add unlocked field to non-core skills * feat(character sheet): Show path linked skills beside the path * feat(character sheet): add power type sections to actions list * fix(multi value select component): fix issue causing selected values to lose labels * fix(item rewards): fix issue causing item goal rewards to grant id-ed items the actor already possesses * fix(talents & goals): fix issue causing a duplicate goal to be added when the granting talent is removed and re-added * feat(powers): make it so by default powers use the skill matching their id * feat(actor): add check to block adding a power whose id matches a power already present on the actor * feat(powers): change none power type label and make untyped powers show up in actions list under "powers" --- eslint.config.mjs | 1 + .../client/data/abstract/client-document.d.ts | 2 + .../foundry/client/data/documents/actor.d.ts | 18 +- .../foundry/common/abstract/data.d.ts | 33 +- .../foundry/common/abstract/fields.d.ts | 14 + .../foundry/common/abstract/validation.d.ts | 85 +++++ src/index.ts | 2 + src/lang/en.json | 158 +++++++-- src/style/components.scss | 64 ++++ src/style/sheets/actor/character.scss | 77 +++-- src/style/sheets/actor/module.scss | 114 ++++--- src/style/sheets/item/module.scss | 20 ++ src/style/sheets/sheet.scss | 7 - src/system.json | 5 +- src/system/api.ts | 70 +++- .../actor/components/actions-list.ts | 54 +++ .../actor/components/character/goals-list.ts | 162 +++------ .../actor/components/character/paths.ts | 18 + .../applications/actor/components/index.ts | 1 + .../applications/actor/components/skill.ts | 123 +++++++ .../actor/components/skills-group.ts | 81 ++--- .../components/document-drop-list.ts | 268 +++++++++++++++ .../components/document-reference-input.ts | 2 +- src/system/applications/components/index.ts | 2 + .../components/multi-value-select.ts | 195 +++++++++++ src/system/applications/item/armor-sheet.ts | 5 - .../{ => ancestry}/advancement-talent-list.ts | 2 +- .../{ => ancestry}/ancestry-bonus-talents.ts | 4 +- .../item/components/ancestry/index.ts | 2 + .../item/components/details-id.ts | 13 +- .../item/components/goal/index.ts | 1 + .../item/components/goal/rewards-list.ts | 142 ++++++++ .../applications/item/components/index.ts | 8 +- .../components/talent/grant-rules-list.ts | 134 ++++++++ .../item/components/talent/index.ts | 3 + .../talent-prerequisite-talent-list.ts | 2 +- .../{ => talent}/talent-prerequisites.ts | 6 +- .../item/dialogs/goal/edit-reward.ts | 173 ++++++++++ .../{ => talent}/edit-bonus-talents-rule.ts | 0 .../item/dialogs/talent/edit-grant-rule.ts | 130 ++++++++ .../{ => talent}/edit-talent-prerequisite.ts | 13 +- src/system/applications/item/goal-sheet.ts | 59 ++++ src/system/applications/item/index.ts | 2 + src/system/applications/item/path-sheet.ts | 15 +- src/system/applications/item/power-sheet.ts | 59 ++++ src/system/applications/item/talent-sheet.ts | 1 + src/system/config.ts | 95 ++++-- src/system/data/actor/character.ts | 6 +- src/system/data/actor/common.ts | 38 ++- src/system/data/fields/collection.ts | 312 ++++++++++++++++++ src/system/data/fields/index.ts | 1 + src/system/data/fields/mapping-field.ts | 20 +- src/system/data/item/goal.ts | 135 ++++++++ src/system/data/item/index.ts | 8 + src/system/data/item/mixins/id.ts | 8 + src/system/data/item/path.ts | 35 +- src/system/data/item/power.ts | 97 ++++++ src/system/data/item/talent.ts | 99 +++++- src/system/documents/actor.ts | 259 ++++++++++++--- src/system/documents/item.ts | 100 ++++++ src/system/types/config.ts | 30 +- src/system/types/cosmere.ts | 7 + src/system/types/item.ts | 71 ---- src/system/types/item/goal.ts | 33 ++ src/system/types/item/index.ts | 2 + src/system/types/item/talent.ts | 96 ++++++ src/system/utils/handlebars/index.ts | 3 + .../adversary/components/skills-group.hbs | 14 +- .../adversary/dialogs/configure-skills.hbs | 2 +- .../character/components/goals-list.hbs | 7 +- .../actors/character/components/paths.hbs | 61 ++-- src/templates/actors/components/skill.hbs | 41 +++ .../actors/components/skills-group.hbs | 39 +-- .../general/components/document-drop-list.hbs | 31 ++ .../general/components/multi-value-select.hbs | 28 ++ src/templates/item/components/details-id.hbs | 4 +- .../item/goal/components/rewards-list.hbs | 60 ++++ .../item/goal/dialogs/edit-reward.hbs | 24 ++ .../item/goal/partials/goal-details-tab.hbs | 16 + .../item/goal/parts/sheet-content.hbs | 9 + .../item/path/partials/path-details-tab.hbs | 22 ++ .../item/path/parts/sheet-content.hbs | 9 + .../item/power/partials/power-details-tab.hbs | 23 ++ .../item/power/parts/sheet-content.hbs | 9 + .../talent/components/grant-rules-list.hbs | 52 +++ .../item/talent/components/prerequisites.hbs | 2 + .../item/talent/dialogs/edit-grant-rule.hbs | 27 ++ .../item/talent/dialogs/edit-prerequisite.hbs | 107 +++--- .../talent/partials/talent-details-tab.hbs | 17 + 89 files changed, 3842 insertions(+), 567 deletions(-) create mode 100644 src/system/applications/actor/components/skill.ts create mode 100644 src/system/applications/components/document-drop-list.ts create mode 100644 src/system/applications/components/multi-value-select.ts rename src/system/applications/item/components/{ => ancestry}/advancement-talent-list.ts (99%) rename src/system/applications/item/components/{ => ancestry}/ancestry-bonus-talents.ts (96%) create mode 100644 src/system/applications/item/components/ancestry/index.ts create mode 100644 src/system/applications/item/components/goal/index.ts create mode 100644 src/system/applications/item/components/goal/rewards-list.ts create mode 100644 src/system/applications/item/components/talent/grant-rules-list.ts create mode 100644 src/system/applications/item/components/talent/index.ts rename src/system/applications/item/components/{ => talent}/talent-prerequisite-talent-list.ts (97%) rename src/system/applications/item/components/{ => talent}/talent-prerequisites.ts (95%) create mode 100644 src/system/applications/item/dialogs/goal/edit-reward.ts rename src/system/applications/item/dialogs/{ => talent}/edit-bonus-talents-rule.ts (100%) create mode 100644 src/system/applications/item/dialogs/talent/edit-grant-rule.ts rename src/system/applications/item/dialogs/{ => talent}/edit-talent-prerequisite.ts (92%) create mode 100644 src/system/applications/item/goal-sheet.ts create mode 100644 src/system/applications/item/power-sheet.ts create mode 100644 src/system/data/fields/collection.ts create mode 100644 src/system/data/item/goal.ts create mode 100644 src/system/data/item/power.ts delete mode 100644 src/system/types/item.ts create mode 100644 src/system/types/item/goal.ts create mode 100644 src/system/types/item/index.ts create mode 100644 src/system/types/item/talent.ts create mode 100644 src/templates/actors/components/skill.hbs create mode 100644 src/templates/general/components/document-drop-list.hbs create mode 100644 src/templates/general/components/multi-value-select.hbs create mode 100644 src/templates/item/goal/components/rewards-list.hbs create mode 100644 src/templates/item/goal/dialogs/edit-reward.hbs create mode 100644 src/templates/item/goal/partials/goal-details-tab.hbs create mode 100644 src/templates/item/goal/parts/sheet-content.hbs create mode 100644 src/templates/item/path/partials/path-details-tab.hbs create mode 100644 src/templates/item/path/parts/sheet-content.hbs create mode 100644 src/templates/item/power/partials/power-details-tab.hbs create mode 100644 src/templates/item/power/parts/sheet-content.hbs create mode 100644 src/templates/item/talent/components/grant-rules-list.hbs create mode 100644 src/templates/item/talent/dialogs/edit-grant-rule.hbs diff --git a/eslint.config.mjs b/eslint.config.mjs index 39c16b80..19514672 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -28,6 +28,7 @@ export default tseslint.config( '@typescript-eslint/no-unsafe-return': 'off', '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/no-unused-vars': 'off', + 'no-unexpected-multiline': 'off', }, languageOptions: { parserOptions: { diff --git a/src/declarations/foundry/client/data/abstract/client-document.d.ts b/src/declarations/foundry/client/data/abstract/client-document.d.ts index 581ac116..fe72030b 100644 --- a/src/declarations/foundry/client/data/abstract/client-document.d.ts +++ b/src/declarations/foundry/client/data/abstract/client-document.d.ts @@ -10,6 +10,8 @@ declare function _ClientDocumentMixin< >(base: BaseClass): Mixin; declare class ClientDocument { + readonly uuid: string; + /** * A collection of Application instances which should be re-rendered whenever this document is updated. * The keys of this object are the application ids and the values are Application instances. Each diff --git a/src/declarations/foundry/client/data/documents/actor.d.ts b/src/declarations/foundry/client/data/documents/actor.d.ts index 52e15986..119c9bb3 100644 --- a/src/declarations/foundry/client/data/documents/actor.d.ts +++ b/src/declarations/foundry/client/data/documents/actor.d.ts @@ -77,16 +77,16 @@ declare class Actor< /** * Handle how changes to a Token attribute bar are applied to the Actor. * This allows for game systems to override this behavior and deploy special logic. - * @param {string} attribute The attribute path - * @param {number} value The target attribute value - * @param {boolean} isDelta Whether the number represents a relative change (true) or an absolute change (false) - * @param {boolean} isBar Whether the new value is part of an attribute bar, or just a direct value - * @returns {Promise} The updated Actor document + * @param attribute The attribute path + * @param value The target attribute value + * @param isDelta Whether the number represents a relative change (true) or an absolute change (false) + * @param isBar Whether the new value is part of an attribute bar, or just a direct value + * @returns The updated Actor document */ public async modifyTokenAttribute( - attribute, - value, - isDelta, - isBar, + attribute: string, + value: number, + isDelta: boolean, + isBar: boolean, ): Promise; } diff --git a/src/declarations/foundry/common/abstract/data.d.ts b/src/declarations/foundry/common/abstract/data.d.ts index 89cb82fb..8b5bc03a 100644 --- a/src/declarations/foundry/common/abstract/data.d.ts +++ b/src/declarations/foundry/common/abstract/data.d.ts @@ -600,6 +600,35 @@ namespace foundry { operation: DatabaseCreateOperation, user: documents.BaseUser, ): Promise; + + /* --- Database Update Operations --- */ + + /** + * Pre-process an update operation for a single Document instance. Pre-operation events only occur for the client + * which requested the operation. + * + * @param changes The candidate changes to the Document + * @param options Additional options which modify the update request + * @param user The User requesting the document update + * @returns A return value of false indicates the update operation should be cancelled. + * @internal + */ + async _preUpdate( + changes: object, + options: object, + user: documents.BaseUser, + ): Promise; + + /** + * Post-process an update operation for a single Document instance. Post-operation events occur for all connected + * clients. + * + * @param changed The differential data that was changed relative to the documents prior values + * @param options Additional options which modify the update request + * @param userId The id of the User requesting the document update + * @internal + */ + _onUpdate(changed: object, options: object, userId: string); } interface DataValidationOptions { @@ -755,7 +784,7 @@ namespace foundry { * @param options Options provided to the model constructor * @returns Migrated and cleaned source data which will be stored to the model instance */ - _initializeSource( + protected _initializeSource( data: object | DataModel, options?: object, ): object; @@ -773,7 +802,7 @@ namespace foundry { * This mirrors the workflow of SchemaField#initialize but with some added functionality. * @param options Options provided to the model constructor */ - _initialize(options?: object); + protected _initialize(options?: object); /** * Reset the state of this data instance back to mirror the contained source data, erasing any changes. diff --git a/src/declarations/foundry/common/abstract/fields.d.ts b/src/declarations/foundry/common/abstract/fields.d.ts index 6d5aca2d..de731549 100644 --- a/src/declarations/foundry/common/abstract/fields.d.ts +++ b/src/declarations/foundry/common/abstract/fields.d.ts @@ -202,12 +202,26 @@ declare namespace foundry { */ initialize(value: any, model: object, options?: object): any; + /** + * Export the current value of the field into a serializable object. + * @param value The initialized value of the field + * @returns An exported representation of the field + */ + toObject(value: any): any; + /** * Recursively traverse a schema and retrieve a field specification by a given path * @param path The field path as an array of strings * @internal */ _getField(path: string[]): DataField; + + /** + * Cast a non-default value to ensure it is the correct type for the field + * @param value The provided non-default value + * @returns The standardized value + */ + protected _cast(value: any): any; } class SchemaField extends DataField { diff --git a/src/declarations/foundry/common/abstract/validation.d.ts b/src/declarations/foundry/common/abstract/validation.d.ts index e52355c4..b9af6e77 100644 --- a/src/declarations/foundry/common/abstract/validation.d.ts +++ b/src/declarations/foundry/common/abstract/validation.d.ts @@ -1,6 +1,91 @@ declare namespace foundry { namespace data { namespace validation { + namespace DataModelValidationFailure { + interface Config { + /** + * The value that failed validation for this field. + */ + invalidValue?: any; + + /** + * The value it was replaced by, if any. + */ + fallback?: any; + + /** + * Whether the value was dropped from some parent collection. + * @default true + */ + dropped?: boolean; + + /** + * The validation error message. + */ + message?: string; + + /** + * Whether this failure was unresolved + * @default false + */ + unresolved?: boolean; + } + + interface ElementValidationFailure { + /** + * Either the element's index or some other identifier for it. + */ + id: string | number; + + /** + * Optionally a user-friendly name for the element. + */ + name?: string; + + /** + * The element's validation failure. + */ + failure: DataModelValidationFailure; + } + } + + class DataModelValidationFailure { + /** + * The value that failed validation for this field. + */ + public invalidValue?: any; + + /** + * The value it was replaced by, if any. + */ + public fallback?: any; + + /** + * Whether the value was dropped from some parent collection. + * @defaultValue true + */ + public dropped?: boolean; + + /** + * The validation error message. + */ + public message?: string; + + /** + * If this field contains other fields that are validated + * as part of its validation, their results are recorded here. + */ + public fields: Record; + + /** + * If this field contains a list of elements that are validated + * as part of its validation, their results are recorded here. + */ + public elements: ElementValidationFailure[]; + + constructor(config?: DataModelValidationFailure.Config); + } + class DataModelValidationError extends Error { constructor(errors: Record); } diff --git a/src/index.ts b/src/index.ts index d0e25954..77a069a3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -76,6 +76,8 @@ Hooks.once('init', async () => { registerItemSheet(ItemType.Talent, applications.item.TalentItemSheet); registerItemSheet(ItemType.Equipment, applications.item.EquipmentItemSheet); registerItemSheet(ItemType.Weapon, applications.item.WeaponItemSheet); + registerItemSheet(ItemType.Goal, applications.item.GoalItemSheet); + registerItemSheet(ItemType.Power, applications.item.PowerItemSheet); CONFIG.Dice.types.push(dice.PlotDie); CONFIG.Dice.terms.p = dice.PlotDie; diff --git a/src/lang/en.json b/src/lang/en.json index 6a425868..099ae792 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -256,7 +256,7 @@ } }, "Skills": { - "AdjustTooltip": "Left Click to increase [skill]'s Rank.
Right Click to decrease [skill]'s Rank." + "AdjustTooltip": "Left Click to increase {skill}'s Rank.
Right Click to decrease {skill}'s Rank." } } }, @@ -347,6 +347,17 @@ "label": "Connection", "label_plural": "Connections", "desc_placeholder": "Edit this to create a description of the NPC and how they are connected to the character." + }, + "Goal": { + "label": "Goal", + "label_plural": "Goals", + "desc_placeholder": "Edit this to describe the goal." + }, + "Power": { + "label": "Power", + "label_plural": "Powers", + "desc_placeholder": "Edit this to describe the power.", + "New": "New {type}" } }, "Weapon": { @@ -412,6 +423,91 @@ "Hint": "Identifier of the Ancenstry this action belongs to. (e.g. \"human\")" } }, + "Goal": { + "Level": { + "Label": "Progress" + }, + "Reward": { + "Type": { + "Items": "Items", + "SkillRanks": "Skill Ranks", + "Label": "Type" + }, + "Skill": { + "Label": "Skill" + }, + "Ranks": { + "Label": "Ranks" + }, + "Items": { + "Label": "Items" + }, + "Validation": { + "MissingSkillOrRanks": "Must set a Skill and Ranks", + "MissingItems": "Must set Items" + } + } + }, + "Power": { + "Identifier": { + "Hint": "Used to uniquely identify this power. Should be the same as the identifier of the associated skill, unless a custom skill is used." + }, + "CustomSkill": { + "Label": "Use custom skill?", + "Hint": "If checked, configure a custom skill instead of the skill matching this power's identifier." + }, + "Skill": { + "Label": "Skill", + "Hint": "The skill associated with this power. Gaining this power grants the character access to this skill." + }, + "Notification": { + "PowerExists": "A power with identifier \"{identifier}\" already exists on {actor}." + } + }, + "Path": { + "LinkedSkills": { + "Label": "Linked Skills", + "Hint": "These skills are displayed alongside the path in the character sheet." + } + }, + "Talent": { + "Type": { + "Ancestry": "Ancestry", + "Path": "Path", + "Power": "Power" + }, + "Prerequisite": { + "Type": { + "Talent": "Talent", + "Attribute": "Attribute", + "Skill": "Skill", + "Connection": "Connection", + "Level": "Level" + }, + "Mode": { + "AnyOf": "Any of", + "AllOf": "All of" + }, + "Level": { + "Label": "Level" + } + }, + "GrantRule": { + "Label": "On Obtain", + "Hint": "These rules are applied when the talent is obtained.", + "Type": { + "Items": "Grant Items", + "Label": "Type" + }, + "Items": { + "Label": "Items" + } + }, + "Power": { + "Label": "Power Identifier", + "Hint": "Identifier of the power this talent belongs to." + } + }, "Activation": { "Type": { "Action": "Action", @@ -507,7 +603,7 @@ }, "Identifier": { "Label": "Identifier", - "Description": "Used to uniquely identify this [type]. Identifier can only contain letters (a-z), numbers (0-9), dashes (-), and underscores (_)." + "Hint": "Used to uniquely identify this {type}. Identifier can only contain letters (a-z), numbers (0-9), dashes (-), and underscores (_)." }, "Type": "Type", "Injury": { @@ -614,6 +710,19 @@ "ConnectionDescription": "Description", "ConnectionDescriptionPlaceholder": "Connection Description", "DropTalents": "Drop Talents here to add them to the list." + }, + "GrantRules": { + "Description": "Description", + "Create": "New rule", + "Edit": "Edit rule", + "Delete": "Remove rule" + } + }, + "Goal": { + "Reward": { + "Title": "Rewards", + "Create": "New Reward", + "SkillRanksDescriptionValue": "{ranks} ranks in {skill}" } } } @@ -639,24 +748,6 @@ } } }, - "Talent": { - "Type": { - "Ancestry": "Ancestry", - "Path": "Path" - }, - "Prerequisite": { - "Type": { - "Talent": "Talent", - "Attribute": "Attribute", - "Skill": "Skill", - "Connection": "Connection" - }, - "Mode": { - "AnyOf": "Any of", - "AllOf": "All of" - } - } - }, "Currencies": {}, "Combat": { "FastPlayers": "Fast Characters", @@ -837,6 +928,12 @@ "DuplicateLevel": "A rule for level {level} already exists" } }, + "EditGrantRule": { + "Title": "Edit Rule" + }, + "EditGoalReward": { + "Title": "Edit Reward" + }, "ReleaseNotes": { "Title": "Cosmere Roleplaying Game - Release Notes {version}" } @@ -848,6 +945,17 @@ "WrongType": "The dropped Document must be of type {type}", "WrongSubtype": "The dropped {type} must be of type {subtype}" } + }, + "DocumentDropListComponent": { + "Placeholder": "Drop a {type} here to add it to the list", + "Warning": { + "DocumentAlreadyInList": "The dropped {type} is already in the list", + "WrongType": "The dropped Document must be of type {type}", + "WrongSubtype": "The dropped {type} must be of type {subtype}" + } + }, + "MultiValueSelect": { + "DefaultPlaceholder": "Select an option" } }, "GENERIC": { @@ -875,6 +983,8 @@ "Name": "Name", "Level": "Level", "Add": "Add", + "Type": "Type", + "Description": "Description", "Button": { "Roll": "Roll", "Continue": "Continue", @@ -885,7 +995,9 @@ "Update": "Update" }, "Notification": { - "GrazeFocusSpent": "Reduced focus by 1" + "GrazeFocusSpent": "Reduced focus by 1", + "AddedItem": "Added {type} \"{item}\" to {actor}", + "IncreasedSkillRank": "Increased {actor}'s {skill} rank by {amount}" }, "Warning": { "NotImplemented": "Sorry! [action] is not implemented yet", @@ -918,6 +1030,7 @@ "ancestry": "Ancestry", "path": "Path", "connection": "Connection", + "goal": "Goal", "injury": "Injury", "specialty": "Specialty", "loot": "Loot", @@ -926,7 +1039,8 @@ "action": "Action", "talent": "Talent", "equipment": "Equipment", - "weapon": "Weapon" + "weapon": "Weapon", + "power": "Power" } }, "UNITS": { diff --git a/src/style/components.scss b/src/style/components.scss index 416ce0ed..2a766b51 100644 --- a/src/style/components.scss +++ b/src/style/components.scss @@ -78,3 +78,67 @@ app-document-reference-input { font-style: italic; } } + +app-multi-value-select { + display: flex; + + .values { + flex: 1; + display: flex; + flex-wrap: wrap; + + .value { + --background: rgba(0, 0, 0, 0.1); + + display: flex; + align-items: center; + background: var(--background); + padding: 1px 4px; + border: 1px solid var(--color-border-dark-tertiary); + border-radius: 2px; + white-space: nowrap; + margin: 0.12rem; + + .controls { + margin-left: 0.25rem; + } + } + } +} + +app-document-drop-list { + --input-focus-outline-color: var(--color-cool-3); + + display: block; + border: 1px dashed var(--color-dark-4); + padding: 0 0.5rem; + border-radius: 0.3rem; + outline: 1px solid transparent; + transition: outline-color 0.5s; + + ul { + .document { + display: flex; + align-items: center; + + .link { + flex: 1; + display: flex; + justify-content: center; + } + } + } + + p { + text-align: center; + font-size: 10pt; + font-style: italic; + color: var(--color-dark-4); + text-shadow: 0 0 0.2rem black; + } + + &.dragover { + outline: 2px solid var(--input-focus-outline-color); + box-shadow: 0 0 5px var(--color-shadow-primary); + } +} \ No newline at end of file diff --git a/src/style/sheets/actor/character.scss b/src/style/sheets/actor/character.scss index 377b027f..2582aba7 100644 --- a/src/style/sheets/actor/character.scss +++ b/src/style/sheets/actor/character.scss @@ -166,10 +166,9 @@ position: relative; border-radius: 0.3rem; margin-bottom: 1rem; + display: flex; - flex-direction: row; - align-items: center; - padding: 0.2rem 1rem; + flex-direction: column; border: 1px solid #463a47; overflow: hidden; @@ -177,40 +176,61 @@ text-shadow: 0 0 0.5rem black; box-shadow: 0 0 0.5rem black; - cursor: pointer; - - .name { + .details { display: flex; - flex-direction: column; - flex: 1; + flex-direction: row; + align-items: center; + padding: 0.2rem 1rem 0 1rem; z-index: 1; + cursor: pointer; - .label { - font-size: 13pt; + .name { + display: flex; + flex-direction: column; + flex: 1; + z-index: 1; + + .label { + font-size: 13pt; + font-weight: bold; + } + + .item-type { + font-size: 9pt; + opacity: 0.75; + } + } + + .level { + font-size: 14pt; font-weight: bold; + z-index: 1; } - - .item-type { - font-size: 9pt; - opacity: 0.75; + + .name, + .level { + &:hover { + text-shadow: 0 0 8px var(--color-shadow-primary); + } + } + + .controls { + margin-left: 1rem; + z-index: 1; } - } - - .level { - font-size: 14pt; - font-weight: bold; - z-index: 1; - } - .name, - .level { - &:hover { - text-shadow: 0 0 8px var(--color-shadow-primary); + &:not(:has(+ .skill-list)) { + padding-bottom: 0.2rem; } } - .controls { - margin-left: 1rem; + .skill-list { + list-style: none; + margin: 0; + padding: 0; + padding-top: 0.8rem; + padding-bottom: 0.3rem; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, .4) 40%); z-index: 1; } @@ -218,8 +238,9 @@ position: absolute; left: 0; right: 0; - opacity: 0.25; + opacity: 0.2; top: -6rem; + z-index: 0; } &.placeholder { diff --git a/src/style/sheets/actor/module.scss b/src/style/sheets/actor/module.scss index 93a07b87..3d1444db 100644 --- a/src/style/sheets/actor/module.scss +++ b/src/style/sheets/actor/module.scss @@ -164,6 +164,13 @@ } } + .value { + text-align: center; + font-size: 18pt; + font-weight: bold; + margin: 0.25ch; + } + /* --- Tabs --- */ .tab[data-tab] { @@ -933,64 +940,77 @@ flex-direction: column; margin: 0; padding: 0; + } + } - .skill { - display: flex; - flex-direction: row; - align-items: center; + app-adversary-skills-group { + font-size: 9.6pt; + } - &:hover { - background-color: rgba(0, 0, 0, 0.25); - } + app-actor-skill { + display: flex; + flex-direction: row; + align-items: center; + text-shadow: 0 0 0.2rem black; - [data-action] { - cursor: pointer; - } + &:hover { + text-shadow: 0 0 8px var(--color-shadow-primary); + } - .mod { - width: 2rem; - text-align: center; - margin: 0 0.3rem; - } + [data-action] { + cursor: pointer; + } - .name { - flex: 1; - } + .mod { + width: 2rem; + text-align: center; + margin: 0 0.3rem; - .attribute { - width: 3rem; - text-align: center; - margin: 0 0.3rem; - } + .operator { + opacity: .5; + } - .pip-list { - display: flex; - flex-direction: row; - list-style-type: none; - padding: 0; - margin: 0 0.3rem 0 0; - - .pip { - > div { - width: 0.65rem; - height: 0.65rem; - border: 1px solid; - border-radius: 50%; - margin: 0.1rem; - } + .val { + font-weight: bold; + } + } - &.active { - > div { - background-color: white; - } - } + .name { + flex: 1; + } + + .attribute { + width: 3rem; + text-align: center; + margin: 0 0.3rem; + } + + .pip-list { + display: flex; + flex-direction: row; + list-style-type: none; + padding: 0; + margin: 0 0.3rem 0 0; + + .pip { + > div { + width: 0.65rem; + height: 0.65rem; + border: 1px solid var(--color-dark-6); + border-radius: 50%; + margin: 0.1rem; + } + + &.active { + > div { + background-color: white; } } + + &:not(.active) > div { + opacity: .5; + } } } } - - app-adversary-skills-group { - font-size: 9.6pt; - } } diff --git a/src/style/sheets/item/module.scss b/src/style/sheets/item/module.scss index 93d06ca1..4512fdd9 100644 --- a/src/style/sheets/item/module.scss +++ b/src/style/sheets/item/module.scss @@ -485,3 +485,23 @@ app-talent-prerequisite-talent-list { text-shadow: 0 0 0.2rem black; } } + +app-goal-rewards-list { + .col.type { + width: 5rem; + } + + .col.description { + flex: 1; + } +} + +app-talent-grant-rules-list { + .col.type { + width: 5rem; + } + + .col.description { + flex: 1; + } +} \ No newline at end of file diff --git a/src/style/sheets/sheet.scss b/src/style/sheets/sheet.scss index 1569af80..fab5a930 100644 --- a/src/style/sheets/sheet.scss +++ b/src/style/sheets/sheet.scss @@ -28,13 +28,6 @@ } .application.sheet { - .value { - text-align: center; - font-size: 18pt; - font-weight: bold; - margin: 0.25ch; - } - .form-group input::placeholder { opacity: 0.5 !important; } diff --git a/src/system.json b/src/system.json index 36ffc67e..0d3e739b 100644 --- a/src/system.json +++ b/src/system.json @@ -36,7 +36,10 @@ "action": {}, "injury": {}, - "connection": {} + "connection": {}, + "goal": {}, + + "power": {} } }, "packs": [ diff --git a/src/system/api.ts b/src/system/api.ts index af804212..a59bf2a8 100644 --- a/src/system/api.ts +++ b/src/system/api.ts @@ -1,11 +1,77 @@ import { + Skill, EquipmentType, WeaponId, ArmorId, PathType, + PowerType, } from '@system/types/cosmere'; -import { CurrencyConfig } from '@system/types/config'; +import { + CurrencyConfig, + SkillConfig, + PowerTypeConfig, +} from '@system/types/config'; + +interface SkillConfigData extends Omit { + /** + * Unique id for the skill. + */ + id: string; +} + +export function registerSkill(data: SkillConfigData, force = false) { + if (!CONFIG.COSMERE) + throw new Error('Cannot access api until after system is initialized.'); + + if (data.id in CONFIG.COSMERE.skills && !force) + throw new Error('Cannot override existing skill config.'); + + if (force) { + console.warn('Registering skill with force=true.'); + } + + // Add to skills config + CONFIG.COSMERE.skills[data.id as Skill] = { + key: data.id, + label: data.label, + attribute: data.attribute, + core: data.core, + hiddenUntilAcquired: data.hiddenUntilAcquired, + }; + + // Add to attribute's skills list + CONFIG.COSMERE.attributes[data.attribute].skills.push(data.id as Skill); +} + +interface PowerTypeConfigData extends PowerTypeConfig { + /** + * Unique id for the power type. + */ + id: string; +} + +export function registerPowerType(data: PowerTypeConfigData, force = false) { + if (!CONFIG.COSMERE) + throw new Error('Cannot access api until after system is initialized.'); + + if (data.id in CONFIG.COSMERE.power.types && !force) + throw new Error('Cannot override existing power type config.'); + + if (force) { + console.warn('Registering power type with force=true.'); + } + + if (data.id === 'none') { + throw new Error('Cannot register power type with id "none".'); + } + + // Add to power types + CONFIG.COSMERE.power.types[data.id as PowerType] = { + label: data.label, + plural: data.plural, + }; +} interface EquipmentTypeConfigData { id: string; @@ -197,6 +263,8 @@ export function registerCurrency(data: CurrencyConfigData, force = false) { /* --- Default Export --- */ export default { + registerSkill, + registerPowerType, registerEquipmentType, registerWeapon, registerArmor, diff --git a/src/system/applications/actor/components/actions-list.ts b/src/system/applications/actor/components/actions-list.ts index fd6bdd95..01e0630e 100644 --- a/src/system/applications/actor/components/actions-list.ts +++ b/src/system/applications/actor/components/actions-list.ts @@ -3,6 +3,9 @@ import { ItemType, ActivationType, ActionCostType, + ItemConsumeType, + Resource, + PowerType, } from '@system/types/cosmere'; import { CosmereItem } from '@system/documents/item'; import { CosmereActor } from '@system/documents'; @@ -292,6 +295,8 @@ export class ActorActionsListComponent extends HandlebarsApplicationComponent< return [ STATIC_SECTIONS.Weapons, + ...this.preparePowersSections(), + ...paths.map((path) => ({ id: path.system.id, label: game.i18n!.format( @@ -369,6 +374,55 @@ export class ActorActionsListComponent extends HandlebarsApplicationComponent< ]; } + protected preparePowersSections() { + // Get powers + const powers = this.application.actor.powers; + + // Get list of unique power types + const powerTypes = [...new Set(powers.map((p) => p.system.type))]; + + return powerTypes.map((type) => { + // Get config + const config = CONFIG.COSMERE.power.types[type]; + + return { + id: type, + label: game.i18n!.localize(config.plural), + default: false, + filter: (item: CosmereItem) => + item.isPower() && item.system.type === type, + new: (parent: CosmereActor) => + CosmereItem.create( + { + type: ItemType.Power, + name: game.i18n!.format( + 'COSMERE.Item.Type.Power.New', + { + type: game.i18n!.localize(config.label), + }, + ), + system: { + type, + activation: { + type: ActivationType.Utility, + cost: { + type: ActionCostType.Action, + value: 1, + }, + consume: { + type: ItemConsumeType.Resource, + resource: Resource.Investiture, + value: 1, + }, + }, + }, + }, + { parent }, + ) as Promise, + }; + }); + } + protected async prepareSectionsData( sections: ListSection[], items: CosmereItem[], diff --git a/src/system/applications/actor/components/character/goals-list.ts b/src/system/applications/actor/components/character/goals-list.ts index ba4bdab6..cfa3691f 100644 --- a/src/system/applications/actor/components/character/goals-list.ts +++ b/src/system/applications/actor/components/character/goals-list.ts @@ -1,3 +1,5 @@ +import { ItemType } from '@system/types/cosmere'; +import { GoalItem } from '@system/documents/item'; import { ConstructorOf, MouseButton } from '@system/types/utils'; import { SYSTEM_ID } from '@src/system/constants'; @@ -33,7 +35,7 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< }; /* eslint-enable @typescript-eslint/unbound-method */ - private contextGoalId: number | null = null; + private contextGoalId: string | null = null; private controlsDropdownExpanded = false; private controlsDropdownPosition?: { top: number; right: number }; @@ -49,7 +51,7 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< // Get goal id const goalId = $(event.currentTarget!) .closest('[data-id]') - .data('id') as number; + .data('id') as string; this.contextGoalId = goalId; @@ -81,22 +83,25 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< // Get goal id const goalId = $(event.currentTarget!) .closest('[data-id]') - .data('id') as number; + .data('id') as string | undefined; + if (!goalId) return; - // Get the goals - const goals = this.application.actor.system.goals; + // Get the goal + const goalItem = this.application.actor.items.get(goalId); + if (!goalItem?.isGoal()) return; - // Modify the goal - goals[goalId].level += incrementBool ? 1 : -1; - goals[goalId].level = Math.max(0, Math.min(3, goals[goalId].level)); + // Get the goal's current level + const currentLevel = goalItem.system.level; - // Adjust the rank - await this.application.actor.update( - { - 'system.goals': goals, - }, - { render: false }, - ); + // Calculate the new level + const newLevel = incrementBool + ? Math.min(currentLevel + 1, 3) + : Math.max(currentLevel - 1, 0); + + // Update the goal + await goalItem.update({ + 'system.level': newLevel, + }); // Render await this.render(); @@ -136,8 +141,14 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< // Ensure context goal id is set if (this.contextGoalId !== null) { - // Edit the goal - this.editGoal(this.contextGoalId); + // Get the goal + const goalItem = this.application.actor.items.get( + this.contextGoalId, + ); + if (!goalItem?.isGoal()) return; + + // Show item sheet + void goalItem.sheet?.render(true); } } @@ -146,23 +157,15 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< // Ensure context goal id is set if (this.contextGoalId !== null) { - // Get goals - const goals = this.application.actor.system.goals; - - // Update the goals - goals.splice(this.contextGoalId, 1); - - // Update actor - await this.application.actor.update( - { - 'system.goals': goals, - }, - { render: false }, + // Get the goal + const goalItem = this.application.actor.items.get( + this.contextGoalId, ); - } + if (!goalItem?.isGoal()) return; - // Render - await this.render(); + // Delete the goal + await goalItem.delete(); + } } public static async onAddGoal(this: CharacterGoalsListComponent) { @@ -171,33 +174,29 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< // Get the goals const goals = this.application.actor.system.goals; + if (!goals) return; - // Add new goal - goals.push({ - text: game.i18n!.localize( - 'COSMERE.Actor.Sheet.Details.Goals.NewText', - ), - level: 0, - }); - - // Update the actor - await this.application.actor.update( + // Create goal + const goal = (await Item.create( { - 'system.goals': goals, + type: ItemType.Goal, + name: game.i18n!.localize( + 'COSMERE.Actor.Sheet.Details.Goals.NewText', + ), + system: { + level: 0, + }, }, - { render: false }, - ); - - // Render - await this.render(); + { parent: this.application.actor }, + )) as GoalItem; - // Edit goal - this.editGoal(goals.length - 1); + // Show item sheet + void goal.sheet?.render(true); } /* --- Context --- */ - public _prepareContext( + public async _prepareContext( params: never, context: BaseActorSheetRenderContext, ) { @@ -210,10 +209,12 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< return Promise.resolve({ ...context, - goals: this.application.actor.system.goals + goals: this.application.actor.goals .map((goal) => ({ - ...goal, - achieved: goal.level === 3, + id: goal.id, + name: goal.name, + level: goal.system.level, + achieved: goal.system.level === 3, })) .filter((goal) => !hideCompletedGoals || !goal.achieved), @@ -225,59 +226,6 @@ export class CharacterGoalsListComponent extends HandlebarsApplicationComponent< }, }); } - - /* --- Helpers --- */ - - private editGoal(index: number) { - // Get goal element - const element = $(this.element!).find(`.goal[data-id="${index}"]`); - - // Get span element - const span = element.find('span.title'); - - // Hide span title - span.addClass('inactive'); - - // Get input element - const input = element.find('input.title'); - - // Show - input.removeClass('inactive'); - - setTimeout(() => { - // Focus input - input.trigger('select'); - - // Add event handler - input.on('focusout', async () => { - // Remove handler - input.off('focusout'); - - // Get the goals - const goals = this.application.actor.system.goals; - - // Modify the goal - goals[index].text = input.val() as string; - - // Update value - await this.application.actor.update({ - 'system.goals': goals, - }); - - // Render - void this.render(); - }); - - input.on('keypress', (event) => { - if (event.which !== 13) return; // Enter key - - event.preventDefault(); - event.stopPropagation(); - - input.trigger('focusout'); - }); - }); - } } // Register diff --git a/src/system/applications/actor/components/character/paths.ts b/src/system/applications/actor/components/character/paths.ts index 85d8b81d..67f92d68 100644 --- a/src/system/applications/actor/components/character/paths.ts +++ b/src/system/applications/actor/components/character/paths.ts @@ -67,6 +67,24 @@ export class CharacterPathsComponent extends HandlebarsApplicationComponent< id: path.id, img: path.img, typeLabel: CONFIG.COSMERE.paths.types[path.system.type].label, + skills: path.system.linkedSkills + .filter( + (skillId) => + this.application.actor.system.skills[skillId] + .unlocked === true, + ) + .map((skillId) => ({ + id: skillId, + label: CONFIG.COSMERE.skills[skillId].label, + attribute: CONFIG.COSMERE.skills[skillId].attribute, + attributeLabel: + CONFIG.COSMERE.attributes[ + CONFIG.COSMERE.skills[skillId].attribute + ].label, + rank: this.application.actor.system.skills[skillId] + .rank, + mod: this.application.actor.system.skills[skillId].mod, + })), level: this.application.actor.system.level.paths[ path.system.id ], diff --git a/src/system/applications/actor/components/index.ts b/src/system/applications/actor/components/index.ts index 0e1e66aa..b5b9a2ba 100644 --- a/src/system/applications/actor/components/index.ts +++ b/src/system/applications/actor/components/index.ts @@ -8,6 +8,7 @@ import './injuries-list'; import './resource'; import './search-bar'; import './skills-group'; +import './skill'; import './character'; import './adversary'; diff --git a/src/system/applications/actor/components/skill.ts b/src/system/applications/actor/components/skill.ts new file mode 100644 index 00000000..3747c42d --- /dev/null +++ b/src/system/applications/actor/components/skill.ts @@ -0,0 +1,123 @@ +import { Skill } from '@system/types/cosmere'; +import { ConstructorOf, MouseButton } from '@system/types/utils'; + +// Component imports +import { HandlebarsApplicationComponent } from '@system/applications/component-system'; +import { BaseActorSheet, BaseActorSheetRenderContext } from '../base'; + +// NOTE: Must use a type instead of an interface to match `AnyObject` type +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +type Params = { + /** + * The skill to display + */ + skill: Skill; + + /** + * Whether to display the rank pips + * + * @default true + */ + pips?: boolean; + + /** + * Whether the skill is read-only + * + * @default false + */ + readonly?: boolean; +}; + +export class ActorSkillComponent extends HandlebarsApplicationComponent< + ConstructorOf, + Params +> { + static readonly TEMPLATE = + 'systems/cosmere-rpg/templates/actors/components/skill.hbs'; + + /** + * NOTE: Unbound methods is the standard for defining actions + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static readonly ACTIONS = { + 'roll-skill': this.onRollSkill, + 'adjust-skill-rank': { + handler: this.onAdjustSkillRank, + buttons: [MouseButton.Primary, MouseButton.Secondary], + }, + }; + /* eslint-enable @typescript-eslint/unbound-method */ + + /* --- Actions --- */ + + public static onRollSkill(this: ActorSkillComponent, event: Event) { + event.preventDefault(); + + const skillId = $(event.currentTarget!) + .closest('[data-id]') + .data('id') as Skill; + void this.application.actor.rollSkill(skillId); + } + + public static async onAdjustSkillRank( + this: ActorSkillComponent, + event: Event, + ) { + event.preventDefault(); + + const incrementBool: boolean = event.type === 'click' ? true : false; + + // Get skill id + const skillId = $(event.currentTarget!) + .closest('[data-id]') + .data('id') as Skill; + + // Modify skill rank + await this.application.actor.modifySkillRank(skillId, incrementBool); + } + + /* --- Accessors --- */ + + public get readonly() { + return this.params?.readonly === true; + } + + public get pips() { + return this.params?.pips !== false; + } + + /* --- Context --- */ + + public _prepareContext( + params: Params, + context: BaseActorSheetRenderContext, + ) { + // Get skill + const skill = this.application.actor.system.skills[params.skill]; + + // Get skill config + const config = CONFIG.COSMERE.skills[params.skill]; + + // Get attribute config + const attributeConfig = CONFIG.COSMERE.attributes[config.attribute]; + + return Promise.resolve({ + ...context, + + skill: { + ...skill, + id: params.skill, + label: config.label, + attribute: config.attribute, + attributeLabel: attributeConfig.labelShort, + }, + + editable: !this.readonly, + pips: this.pips, + }); + } +} + +// Register the component +ActorSkillComponent.register('app-actor-skill'); diff --git a/src/system/applications/actor/components/skills-group.ts b/src/system/applications/actor/components/skills-group.ts index e4ee409c..b6cf7591 100644 --- a/src/system/applications/actor/components/skills-group.ts +++ b/src/system/applications/actor/components/skills-group.ts @@ -1,5 +1,5 @@ import { AttributeGroup, Skill } from '@system/types/cosmere'; -import { ConstructorOf, MouseButton } from '@system/types/utils'; +import { ConstructorOf } from '@system/types/utils'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; @@ -9,6 +9,13 @@ import { BaseActorSheet, BaseActorSheetRenderContext } from '../base'; // eslint-disable-next-line @typescript-eslint/consistent-type-definitions type Params = { 'group-id': AttributeGroup; + + /** + * Whether or not to display only core skills. + * + * @default true + */ + core?: boolean; }; export class ActorSkillsGroupComponent extends HandlebarsApplicationComponent< @@ -18,48 +25,6 @@ export class ActorSkillsGroupComponent extends HandlebarsApplicationComponent< static TEMPLATE = 'systems/cosmere-rpg/templates/actors/components/skills-group.hbs'; - /** - * NOTE: Unbound methods is the standard for defining actions - * within ApplicationV2 - */ - /* eslint-disable @typescript-eslint/unbound-method */ - static readonly ACTIONS = { - 'roll-skill': this.onRollSkill, - 'adjust-skill-rank': { - handler: this.onAdjustSkillRank, - buttons: [MouseButton.Primary, MouseButton.Secondary], - }, - }; - /* eslint-enable @typescript-eslint/unbound-method */ - - /* --- Actions --- */ - - public static onRollSkill(this: ActorSkillsGroupComponent, event: Event) { - event.preventDefault(); - - const skillId = $(event.currentTarget!) - .closest('[data-id]') - .data('id') as Skill; - void this.application.actor.rollSkill(skillId); - } - - public static async onAdjustSkillRank( - this: ActorSkillsGroupComponent, - event: Event, - ) { - event.preventDefault(); - - const incrementBool: boolean = event.type === 'click' ? true : false; - - // Get skill id - const skillId = $(event.currentTarget!) - .closest('[data-id]') - .data('id') as Skill; - - // Modify skill rank - await this.application.actor.modifySkillRank(skillId, incrementBool); - } - /* --- Context --- */ public _prepareContext( @@ -82,14 +47,28 @@ export class ActorSkillsGroupComponent extends HandlebarsApplicationComponent< id: params['group-id'], skills: skillIds - .map((skillId) => ({ - id: skillId, - config: CONFIG.COSMERE.skills[skillId], - ...this.application.actor.system.skills[skillId], - active: - !CONFIG.COSMERE.skills[skillId].hiddenUntilAcquired || - this.application.actor.system.skills[skillId].rank >= 1, - })) + .map((skillId) => { + // Get skill + const skill = this.application.actor.system.skills[skillId]; + + // Get config + const config = CONFIG.COSMERE.skills[skillId]; + + // Get attribute config + const attrConfig = + CONFIG.COSMERE.attributes[config.attribute]; + + return { + id: skillId, + config: { + ...config, + attrLabel: attrConfig.labelShort, + }, + ...skill, + active: !config.hiddenUntilAcquired || skill.rank >= 1, + }; + }) + .filter((skill) => params.core === false || skill.config.core) // Filter out non-core skills .sort((a, b) => { const _a = a.config.hiddenUntilAcquired ? 1 : 0; const _b = b.config.hiddenUntilAcquired ? 1 : 0; diff --git a/src/system/applications/components/document-drop-list.ts b/src/system/applications/components/document-drop-list.ts new file mode 100644 index 00000000..0c9027ca --- /dev/null +++ b/src/system/applications/components/document-drop-list.ts @@ -0,0 +1,268 @@ +import { ConstructorOf } from '@system/types/utils'; + +// Component imports +import { HandlebarsApplicationComponent } from '@system/applications/component-system'; + +// Mixins +import { DragDropComponentMixin } from '@system/applications/mixins/drag-drop'; + +type DocumentType = (typeof CONST.ALL_DOCUMENT_TYPES)[number]; + +// NOTE: Must use type here instead of interface as an interface doesn't match AnyObject type +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +type Params = { + name?: string; + + /** + * An array of document UUID values + */ + value?: string[]; + + /** + * The specific type of document that this component should accept (i.e. 'Item') + */ + type?: DocumentType; + + /** + * The specific subtype of document that this component should accept (i.e. 'Weapon') + */ + subtype?: string; + + /** + * Whether the field is read-only + */ + readonly?: boolean; + + /** + * Placeholder text for the input + */ + placeholder?: string; +}; + +export class DocumentDropListComponent extends DragDropComponentMixin( + HandlebarsApplicationComponent< + ConstructorOf, + Params + >, +) { + static FORM_ASSOCIATED = true; + + static readonly TEMPLATE = + 'systems/cosmere-rpg/templates/general/components/document-drop-list.hbs'; + + /** + * NOTE: Unbound methods is the standard for defining actions + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static ACTIONS = { + 'remove-document': this.onRemoveDocument, + }; + /* eslint-enable @typescript-eslint/unbound-method */ + + static DRAG_DROP = [ + { + dropSelector: '*', + }, + ]; + + private _value: string[] = []; + private _name?: string; + + /* --- Accessors --- */ + + public get element(): + | (HTMLElement & { name?: string; value: string[] }) + | undefined { + return super.element as unknown as + | (HTMLElement & { name?: string; value: string[] }) + | undefined; + } + + public get readonly() { + return this.params?.readonly === true; + } + + public get value() { + return this._value; + } + + public set value(value: string[]) { + this._value = value; + + // Set value + this.element!.value = value; + + // Dispatch change event + this.element!.dispatchEvent(new Event('change', { bubbles: true })); + } + + public get name() { + return this._name; + } + + public set name(value: string | undefined) { + this._name = value; + + // Set name + this.element!.name = value; + $(this.element!).attr('name', value ?? ''); + } + + public get placeholder(): string | undefined { + return this.params?.placeholder; + } + + /* --- Actions --- */ + + public static onRemoveDocument( + this: DocumentDropListComponent, + event: Event, + ) { + // Get key + const key = $(event.target!).closest('[data-id]').data('id') as string; + + // Remove document + this.value = this.value.filter((v) => v !== key); + + // Rerender + void this.render(); + } + + /* --- Drag drop --- */ + + protected override _canDragDrop() { + return !this.readonly; + } + + protected override _onDragOver(event: DragEvent) { + if (this.readonly) return; + + $(this.element!).addClass('dragover'); + } + + protected override async _onDrop(event: DragEvent) { + if (this.readonly) return; + + // Remove dragover class + $(this.element!).removeClass('dragover'); + + // Get data + const data = TextEditor.getDragEventData(event) as unknown as { + type: string; + uuid: string; + }; + + // Ensure the document is not already in the list + if (this.value.includes(data.uuid)) { + return ui.notifications.warn( + game.i18n!.format( + 'COMPONENT.DocumentDropListComponent.Warning.DocumentAlreadyInList', + { + type: + this.params!.type ?? + game.i18n!.localize('GENERIC.Document'), + }, + ), + ); + } + + // Validate type + if (this.params!.type && data.type !== this.params!.type) { + return ui.notifications.warn( + game.i18n!.format( + 'COMPONENT.DocumentDropListComponent.Warning.WrongType', + { + type: this.params!.type, + }, + ), + ); + } + + // Validate subtype + if (this.params!.subtype) { + // Get document + const doc = (await fromUuid(data.uuid)) as unknown as { + type: string; + data: { type: string }; + }; + + if (doc.data.type !== this.params!.subtype) { + return ui.notifications.warn( + game.i18n!.format( + 'COMPONENT.DocumentDropListComponent.Warning.WrongSubtype', + { + subtype: this.params!.subtype, + }, + ), + ); + } + } + + // Add document to the list + this.value = [...this.value, data.uuid]; + + // Render + void this.render(); + } + + /* --- Lifecycle --- */ + + protected override _onInitialize(params: Params) { + super._onInitialize(params); + + if (this.params!.value) { + this._value = this.params!.value; + } + } + + public override _onAttachListeners(params: Params) { + super._onAttachListeners(params); + + $(this.element!).on('dragleave', () => { + $(this.element!).removeClass('dragover'); + }); + } + + protected override _onRender(params: Params) { + super._onRender(params); + + // Set name + if (this.params!.name) { + this.name = this.params!.name; + } + + // Set readonly + if (this.params!.readonly) { + $(this.element!).attr('readonly', 'readonly'); + } + } + + /* --- Context --- */ + + public async _prepareContext(params: Params) { + // Look up the documents + const docs = ( + await Promise.all( + this.value.map( + async (uuid) => + (await fromUuid( + uuid, + )) as unknown as ClientDocument | null, + ), + ) + ).filter((v) => !!v); + + return { + ...params, + value: this.value, + documents: docs.map((doc) => ({ + uuid: doc.uuid, + link: doc.toAnchor().outerHTML, + })), + }; + } +} + +// Register the component +DocumentDropListComponent.register('app-document-drop-list'); diff --git a/src/system/applications/components/document-reference-input.ts b/src/system/applications/components/document-reference-input.ts index f2a04a16..628c0b47 100644 --- a/src/system/applications/components/document-reference-input.ts +++ b/src/system/applications/components/document-reference-input.ts @@ -80,7 +80,7 @@ export class DocumentReferenceInputComponent extends DragDropComponentMixin( } public get readonly() { - return this.params?.readonly !== false; + return this.params?.readonly === true; } public get value() { diff --git a/src/system/applications/components/index.ts b/src/system/applications/components/index.ts index 5f47b4cd..d35b85c7 100644 --- a/src/system/applications/components/index.ts +++ b/src/system/applications/components/index.ts @@ -1,3 +1,5 @@ import './id-input'; import './multi-state-toggle'; import './document-reference-input'; +import './multi-value-select'; +import './document-drop-list'; diff --git a/src/system/applications/components/multi-value-select.ts b/src/system/applications/components/multi-value-select.ts new file mode 100644 index 00000000..299d9168 --- /dev/null +++ b/src/system/applications/components/multi-value-select.ts @@ -0,0 +1,195 @@ +import { + ConstructorOf, + AnyObject, + DeepPartial, + EmptyObject, +} from '@system/types/utils'; + +// Component imports +import { + ComponentHandlebarsRenderOptions, + HandlebarsApplicationComponent, +} from '@system/applications/component-system'; + +// NOTE: Must use type here instead of interface as an interface doesn't match AnyObject type +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +type Params = { + name?: string; + + /** + * The selected values + */ + value?: string[]; + + /** + * The available options + */ + options?: string[] | Record; + + /** + * Placeholder text for the input + */ + placeholder?: string; + + /** + * Whether the field is read-only + */ + readonly?: boolean; +}; + +export class MultiValueSelectComponent extends HandlebarsApplicationComponent< + ConstructorOf, + Params +> { + static FORM_ASSOCIATED = true; + + static readonly TEMPLATE = + 'systems/cosmere-rpg/templates/general/components/multi-value-select.hbs'; + + /** + * NOTE: Unbound methods is the standard for defining actions + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static readonly ACTIONS = { + remove: this.onRemove, + }; + /* eslint-enable @typescript-eslint/unbound-method */ + + private _value: string[] = []; + private _name?: string; + + /* --- Accessors --- */ + + public get element(): + | (HTMLElement & { name?: string; value: string[] }) + | undefined { + return super.element as unknown as + | (HTMLElement & { name?: string; value: string[] }) + | undefined; + } + + public get readonly() { + return this.params?.readonly === true; + } + + public get value() { + return this._value; + } + + public set value(value: string[]) { + this._value = value; + + // Set value + this.element!.value = value; + + // Dispatch change event + this.element!.dispatchEvent(new Event('change', { bubbles: true })); + } + + public get name() { + return this._name; + } + + public set name(value: string | undefined) { + this._name = value; + + // Set name + this.element!.name = value; + $(this.element!).attr('name', value ?? ''); + } + + public get placeholder(): string | undefined { + return this.params?.placeholder; + } + + /* --- Actions --- */ + + public static onRemove(this: MultiValueSelectComponent, event: Event) { + // Get key + const key = $(event.target!).closest('[data-id]').data('id') as string; + + // Remove value + this.value = this.value.filter((value) => value !== key); + + // Rerender + void this.render(); + } + + /* --- Lifecycle --- */ + + protected override _onInitialize() { + if (this.params!.value) { + this._value = this.params!.value ?? []; + } + } + + protected override _onAttachListeners(params: Params) { + super._onAttachListeners(params); + + // Handle select change + $(this.element!) + .find('select') + .on('change', (event) => { + const value = $(event.currentTarget).val() as string; + + // Add value + this.value = [...this.value, value]; + + // Rerender + void this.render(); + }); + } + + protected override _onRender(params: Params) { + super._onRender(params); + + // Set name + if (this.params!.name) { + this.name = this.params!.name; + } + + // Set readonly + if (this.params!.readonly) { + $(this.element!).attr('readonly', 'readonly'); + } + } + + /* --- Context --- */ + + public _prepareContext(params: Params) { + // Default options + params.options ??= []; + + // Prepare options + const options = + foundry.utils.getType(params.options) === 'Object' + ? (foundry.utils.deepClone(params.options) as Record< + string, + string + >) + : (params.options as string[]).reduce( + (acc, key) => ({ ...acc, [key]: key }), + {} as Record, + ); + + // Prepare selected + const selected = this._value.map((key) => ({ + key, + label: options[key], + })); + + // Remove selected from options + this._value.forEach((key) => delete options[key]); + + return Promise.resolve({ + selected, + options, + readonly: this.readonly, + placeholder: this.placeholder, + }); + } +} + +// Register the component +MultiValueSelectComponent.register('app-multi-value-select'); diff --git a/src/system/applications/item/armor-sheet.ts b/src/system/applications/item/armor-sheet.ts index bc959f4b..4965db98 100644 --- a/src/system/applications/item/armor-sheet.ts +++ b/src/system/applications/item/armor-sheet.ts @@ -6,11 +6,6 @@ import { SYSTEM_ID } from '@src/system/constants'; import { BaseItemSheet } from './base'; export class ArmorItemSheet extends BaseItemSheet { - /** - * NOTE: Unbound methods is the standard for defining actions and forms - * within ApplicationV2 - */ - static DEFAULT_OPTIONS = foundry.utils.mergeObject( foundry.utils.deepClone(super.DEFAULT_OPTIONS), { diff --git a/src/system/applications/item/components/advancement-talent-list.ts b/src/system/applications/item/components/ancestry/advancement-talent-list.ts similarity index 99% rename from src/system/applications/item/components/advancement-talent-list.ts rename to src/system/applications/item/components/ancestry/advancement-talent-list.ts index c128096f..ed27a0a9 100644 --- a/src/system/applications/item/components/advancement-talent-list.ts +++ b/src/system/applications/item/components/ancestry/advancement-talent-list.ts @@ -2,7 +2,7 @@ import { AnyObject, ConstructorOf } from '@system/types/utils'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; -import { AncestrySheet } from '../ancestry-sheet'; +import { AncestrySheet } from '../../ancestry-sheet'; // Mixins import { DragDropComponentMixin } from '@system/applications/mixins/drag-drop'; diff --git a/src/system/applications/item/components/ancestry-bonus-talents.ts b/src/system/applications/item/components/ancestry/ancestry-bonus-talents.ts similarity index 96% rename from src/system/applications/item/components/ancestry-bonus-talents.ts rename to src/system/applications/item/components/ancestry/ancestry-bonus-talents.ts index 479070c4..2bd3fcab 100644 --- a/src/system/applications/item/components/ancestry-bonus-talents.ts +++ b/src/system/applications/item/components/ancestry/ancestry-bonus-talents.ts @@ -2,11 +2,11 @@ import { BonusTalentsRule } from '@system/data/item/ancestry'; import { AnyObject, ConstructorOf } from '@system/types/utils'; // Dialogs -import { EditBonusTalentsRuleDialog } from '../dialogs/edit-bonus-talents-rule'; +import { EditBonusTalentsRuleDialog } from '../../dialogs/talent/edit-bonus-talents-rule'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; -import { AncestrySheet } from '../ancestry-sheet'; +import { AncestrySheet } from '../../ancestry-sheet'; export class AncestryBonusTalentsComponent extends HandlebarsApplicationComponent< ConstructorOf diff --git a/src/system/applications/item/components/ancestry/index.ts b/src/system/applications/item/components/ancestry/index.ts new file mode 100644 index 00000000..1e5e8ec0 --- /dev/null +++ b/src/system/applications/item/components/ancestry/index.ts @@ -0,0 +1,2 @@ +import './advancement-talent-list'; +import './ancestry-bonus-talents'; diff --git a/src/system/applications/item/components/details-id.ts b/src/system/applications/item/components/details-id.ts index f2b02164..d60e2263 100644 --- a/src/system/applications/item/components/details-id.ts +++ b/src/system/applications/item/components/details-id.ts @@ -16,16 +16,9 @@ export class DetailsIdComponent extends HandlebarsApplicationComponent< return Promise.resolve({ ...context, hasId: this.application.item.hasId(), - note: game - .i18n!.localize('COSMERE.Item.Sheet.Identifier.Description') - .replace( - '[type]', - game - .i18n!.localize( - `TYPES.Item.${this.application.item.type}`, - ) - .toLowerCase(), - ), + type: game + .i18n!.localize(`TYPES.Item.${this.application.item.type}`) + .toLowerCase(), }); } } diff --git a/src/system/applications/item/components/goal/index.ts b/src/system/applications/item/components/goal/index.ts new file mode 100644 index 00000000..b19625c1 --- /dev/null +++ b/src/system/applications/item/components/goal/index.ts @@ -0,0 +1 @@ +import './rewards-list'; diff --git a/src/system/applications/item/components/goal/rewards-list.ts b/src/system/applications/item/components/goal/rewards-list.ts new file mode 100644 index 00000000..32980b45 --- /dev/null +++ b/src/system/applications/item/components/goal/rewards-list.ts @@ -0,0 +1,142 @@ +import { Skill } from '@system/types/cosmere'; +import { Goal } from '@system/types/item'; +import { CosmereItem, GoalItem, PowerItem } from '@system/documents/item'; +import { ConstructorOf } from '@system/types/utils'; + +// Dialogs +import { EditGoalRewardDialog } from '@system/applications/item/dialogs/goal/edit-reward'; + +// Component imports +import { HandlebarsApplicationComponent } from '@system/applications/component-system'; +import { GoalItemSheet } from '@system/applications/item'; + +// NOTE: Must use a type instead of an interface to match `AnyObject` type +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +type Params = { + rewards: Collection; + editable?: boolean; +}; + +export class RewardsListComponent extends HandlebarsApplicationComponent< + ConstructorOf, + Params +> { + static readonly TEMPLATE = + 'systems/cosmere-rpg/templates/item/goal/components/rewards-list.hbs'; + + /** + * NOTE: Unbound methods is the standard for defining actions + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static readonly ACTIONS = { + 'create-reward': this.onCreateReward, + 'edit-reward': this.onEditReward, + 'remove-reward': this.onRemoveReward, + }; + /* eslint-enable @typescript-eslint/unbound-method */ + + /* --- Actions --- */ + + private static async onCreateReward( + this: RewardsListComponent, + event: Event, + ) { + // Create a new reward + const newReward: Goal.Reward = { + type: Goal.Reward.Type.Items, + items: [], + }; + + // Generate a unique ID + const id = foundry.utils.randomID(); + + // Add the new rule to the item + await this.application.item.update({ + [`system.rewards.${id}`]: newReward, + }); + + // Show the edit dialog + await EditGoalRewardDialog.show(this.application.item, { + _id: id, + ...newReward, + }); + } + + private static async onEditReward( + this: RewardsListComponent, + event: Event, + ) { + // Get id + const id = $(event.target!).closest('[data-id]').data('id') as + | string + | undefined; + if (!id) return; + + // Get reward + const reward = this.application.item.system.rewards.get(id); + if (!reward) return; + + // Show the edit dialog + await EditGoalRewardDialog.show(this.application.item, { + _id: id, + ...reward, + }); + } + + private static async onRemoveReward( + this: RewardsListComponent, + event: Event, + ) { + // Get id + const id = $(event.target!).closest('[data-id]').data('id') as + | string + | undefined; + if (!id) return; + + // Remove the reward + await this.application.item.update({ + [`system.rewards.-=${id}`]: null, + }); + } + + /* --- Context --- */ + + public async _prepareContext(params: Params) { + const rewards = await Promise.all( + params.rewards.map(async (reward) => { + if (reward.type !== Goal.Reward.Type.Items) return reward; + + // Look up docs + const docs = await Promise.all( + reward.items.map(async (itemUUID) => { + const doc = (await fromUuid( + itemUUID, + )) as unknown as CosmereItem; + return { + uuid: doc.uuid, + link: doc.toAnchor().outerHTML, + }; + }), + ); + + return { + ...reward, + items: docs, + }; + }), + ); + + return Promise.resolve({ + ...params, + rewards: rewards.map((reward) => ({ + ...reward, + typeLabel: CONFIG.COSMERE.items.goal.rewards.types[reward.type], + })), + editable: params.editable !== false, + }); + } +} + +// Register the component +RewardsListComponent.register('app-goal-rewards-list'); diff --git a/src/system/applications/item/components/index.ts b/src/system/applications/item/components/index.ts index af51bac1..4260c1d2 100644 --- a/src/system/applications/item/components/index.ts +++ b/src/system/applications/item/components/index.ts @@ -8,7 +8,7 @@ import './details-attack'; import './details-damage'; import './details-modality'; import './properties'; -import './talent-prerequisites'; -import './advancement-talent-list'; -import './ancestry-bonus-talents'; -import './talent-prerequisite-talent-list'; + +import './talent'; +import './ancestry'; +import './goal'; diff --git a/src/system/applications/item/components/talent/grant-rules-list.ts b/src/system/applications/item/components/talent/grant-rules-list.ts new file mode 100644 index 00000000..63a4d9b1 --- /dev/null +++ b/src/system/applications/item/components/talent/grant-rules-list.ts @@ -0,0 +1,134 @@ +import { Talent } from '@system/types/item'; +import { CosmereItem } from '@system/documents/item'; +import { ConstructorOf } from '@system/types/utils'; + +// Dialogs +import { EditTalentGrantRuleDialog } from '../../dialogs/talent/edit-grant-rule'; + +// Component imports +import { HandlebarsApplicationComponent } from '@system/applications/component-system'; +import { TalentItemSheet } from '../../talent-sheet'; +import { BaseItemSheetRenderContext } from '../../base'; + +export class TalentGrantRulesList extends HandlebarsApplicationComponent< + ConstructorOf +> { + static readonly TEMPLATE = + 'systems/cosmere-rpg/templates/item/talent/components/grant-rules-list.hbs'; + + /** + * NOTE: Unbound methods is the standard for defining actions and forms + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static readonly ACTIONS = { + 'create-rule': this.onCreateGrantRule, + 'edit-rule': this.onEditGrantRule, + 'delete-rule': this.onDeleteGrantRule, + }; + /* eslint-enable @typescript-eslint/unbound-method */ + + /* --- Actions --- */ + + private static async onCreateGrantRule(this: TalentGrantRulesList) { + // Create a new rule + const newRule: Talent.GrantRule = { + type: Talent.GrantRule.Type.Items, + items: [], + }; + + // Generate a unique ID + const id = foundry.utils.randomID(); + + // Add the new rule to the item + await this.application.item.update({ + [`system.grantRules.${id}`]: newRule, + }); + + // Show the edit dialog + void EditTalentGrantRuleDialog.show(this.application.item, { + _id: id, + ...newRule, + }); + } + + private static onEditGrantRule(this: TalentGrantRulesList, event: Event) { + // Get id + const id = $(event.target!).closest('[data-id]').data('id') as + | string + | undefined; + if (!id) return; + + // Get rule + const rule = this.application.item.system.grantRules.get(id); + if (!rule) return; + + // Show the edit dialog + void EditTalentGrantRuleDialog.show(this.application.item, { + _id: id, + ...rule, + }); + } + + private static async onDeleteGrantRule( + this: TalentGrantRulesList, + event: Event, + ) { + // Get id + const id = $(event.target!).closest('[data-id]').data('id') as + | string + | undefined; + if (!id) return; + + // Remove the rule + await this.application.item.update({ + [`system.grantRules.-=${id}`]: null, + }); + } + + /* --- Context --- */ + + public async _prepareContext( + params: never, + context: BaseItemSheetRenderContext, + ) { + // Get rules + const rules = this.application.item.system.grantRules; + + return { + ...context, + rules: await Promise.all( + rules.map(this.prepareGrantRuleContext.bind(this)), + ), + }; + } + + private async prepareGrantRuleContext(rule: Talent.GrantRule) { + return { + ...rule, + typeLabel: CONFIG.COSMERE.items.talent.grantRules.types[rule.type], + + ...(rule.type === Talent.GrantRule.Type.Items + ? { + items: await Promise.all( + rule.items.map(async (itemUUID) => { + // Look up the doc + const item = (await fromUuid( + itemUUID, + )) as unknown as CosmereItem; + + return { + name: item.name, + uuid: item.uuid, + link: item.toAnchor().outerHTML, + }; + }), + ), + } + : {}), + }; + } +} + +// Register the component +TalentGrantRulesList.register('app-talent-grant-rules-list'); diff --git a/src/system/applications/item/components/talent/index.ts b/src/system/applications/item/components/talent/index.ts new file mode 100644 index 00000000..25762add --- /dev/null +++ b/src/system/applications/item/components/talent/index.ts @@ -0,0 +1,3 @@ +import './talent-prerequisite-talent-list'; +import './talent-prerequisites'; +import './grant-rules-list'; diff --git a/src/system/applications/item/components/talent-prerequisite-talent-list.ts b/src/system/applications/item/components/talent/talent-prerequisite-talent-list.ts similarity index 97% rename from src/system/applications/item/components/talent-prerequisite-talent-list.ts rename to src/system/applications/item/components/talent/talent-prerequisite-talent-list.ts index 1a17f6cb..70858846 100644 --- a/src/system/applications/item/components/talent-prerequisite-talent-list.ts +++ b/src/system/applications/item/components/talent/talent-prerequisite-talent-list.ts @@ -4,7 +4,7 @@ import { ConstructorOf } from '@system/types/utils'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; -import { EditTalentPrerequisiteDialog } from '../dialogs/edit-talent-prerequisite'; +import { EditTalentPrerequisiteDialog } from '../../dialogs/talent/edit-talent-prerequisite'; // Mixins import { DragDropComponentMixin } from '@system/applications/mixins/drag-drop'; diff --git a/src/system/applications/item/components/talent-prerequisites.ts b/src/system/applications/item/components/talent/talent-prerequisites.ts similarity index 95% rename from src/system/applications/item/components/talent-prerequisites.ts rename to src/system/applications/item/components/talent/talent-prerequisites.ts index ccb7f090..27575eb8 100644 --- a/src/system/applications/item/components/talent-prerequisites.ts +++ b/src/system/applications/item/components/talent/talent-prerequisites.ts @@ -5,12 +5,12 @@ import { ConstructorOf } from '@system/types/utils'; import { Talent } from '@system/types/item'; // Dialogs -import { EditTalentPrerequisiteDialog } from '../dialogs/edit-talent-prerequisite'; +import { EditTalentPrerequisiteDialog } from '../../dialogs/talent/edit-talent-prerequisite'; // Component imports import { HandlebarsApplicationComponent } from '@system/applications/component-system'; -import { TalentItemSheet } from '../talent-sheet'; -import { BaseItemSheetRenderContext } from '../base'; +import { TalentItemSheet } from '../../talent-sheet'; +import { BaseItemSheetRenderContext } from '../../base'; export class TalentPrerequisitesComponent extends HandlebarsApplicationComponent< ConstructorOf diff --git a/src/system/applications/item/dialogs/goal/edit-reward.ts b/src/system/applications/item/dialogs/goal/edit-reward.ts new file mode 100644 index 00000000..f7dead43 --- /dev/null +++ b/src/system/applications/item/dialogs/goal/edit-reward.ts @@ -0,0 +1,173 @@ +import { Skill } from '@system/types/cosmere'; +import { GoalItem } from '@system/documents/item'; +import { Goal } from '@system/types/item'; +import { AnyObject } from '@system/types/utils'; + +import { CollectionField } from '@system/data/fields'; + +const { ApplicationV2 } = foundry.applications.api; + +import { ComponentHandlebarsApplicationMixin } from '@system/applications/component-system'; + +type RewardData = { + _id: string; +} & Goal.Reward; + +export class EditGoalRewardDialog extends ComponentHandlebarsApplicationMixin( + ApplicationV2, +) { + /** + * NOTE: Unbound methods is the standard for defining actions and forms + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static DEFAULT_OPTIONS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.DEFAULT_OPTIONS), + { + window: { + title: 'DIALOG.EditGrantRule.Title', + minimizable: false, + resizable: true, + positioned: true, + }, + classes: ['dialog', 'edit-reward'], + tag: 'dialog', + position: { + width: 425, + }, + actions: { + update: this.onUpdateReward, + }, + }, + ); + + static PARTS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.PARTS), + { + form: { + template: + 'systems/cosmere-rpg/templates/item/goal/dialogs/edit-reward.hbs', + forms: { + form: { + handler: this.onFormEvent, + submitOnChange: true, + }, + }, + }, + }, + ); + /* eslint-enable @typescript-eslint/unbound-method */ + + private constructor( + private goal: GoalItem, + private reward: RewardData, + ) { + super({ + id: `${goal.uuid}.Rewards.${reward._id}`, + window: { + title: 'DIALOG.EditGoalReward.Title', + }, + }); + } + + /* --- Statics --- */ + + public static async show(goal: GoalItem, reward: RewardData) { + const dialog = new this(goal, foundry.utils.deepClone(reward)); + await dialog.render(true); + } + + /* --- Actions --- */ + + private static async onUpdateReward(this: EditGoalRewardDialog) { + // Validate + if ( + this.reward.type === Goal.Reward.Type.SkillRanks && + (this.reward.skill === null || this.reward.ranks === null) + ) { + ui.notifications.error( + 'COSMERE.Item.Goal.Reward.Validation.MissingSkillOrRanks', + ); + return; + } else if ( + this.reward.type === Goal.Reward.Type.Items && + this.reward.items === null + ) { + ui.notifications.error( + 'COSMERE.Item.Goal.Reward.Validation.MissingItems', + ); + return; + } + + // Prepare updates + const updates = + this.reward.type === Goal.Reward.Type.SkillRanks + ? { + type: this.reward.type, + skill: this.reward.skill, + ranks: this.reward.ranks, + } + : { + type: this.reward.type, + items: this.reward.items, + }; + + // Perform updates + await this.goal.update({ + [`system.rewards.${this.reward._id}`]: updates, + }); + + // Close + void this.close(); + } + + /* --- Form --- */ + + protected static onFormEvent( + this: EditGoalRewardDialog, + event: Event, + form: HTMLFormElement, + formData: FormDataExtended, + ) { + if (event instanceof SubmitEvent) return; + + // Get type + this.reward.type = formData.get('type') as Goal.Reward.Type; + + if ( + this.reward.type === Goal.Reward.Type.SkillRanks && + formData.has('skill') + ) { + this.reward.skill = formData.get('skill') as Skill; + this.reward.ranks = parseInt(formData.get('ranks') as string, 10); + } else if ( + this.reward.type === Goal.Reward.Type.Items && + formData.has('items') + ) { + this.reward.items = formData.object.items as unknown as string[]; + } + + // Render + void this.render(true); + } + + /* --- Lifecycle --- */ + + protected _onRender(context: AnyObject, options: AnyObject): void { + super._onRender(context, options); + + $(this.element).prop('open', true); + } + + /* --- Context --- */ + + public _prepareContext() { + return Promise.resolve({ + goal: this.goal, + ...this.reward, + + schema: (this.goal.system.schema.fields.rewards as CollectionField) + .model, + }); + } +} diff --git a/src/system/applications/item/dialogs/edit-bonus-talents-rule.ts b/src/system/applications/item/dialogs/talent/edit-bonus-talents-rule.ts similarity index 100% rename from src/system/applications/item/dialogs/edit-bonus-talents-rule.ts rename to src/system/applications/item/dialogs/talent/edit-bonus-talents-rule.ts diff --git a/src/system/applications/item/dialogs/talent/edit-grant-rule.ts b/src/system/applications/item/dialogs/talent/edit-grant-rule.ts new file mode 100644 index 00000000..f87a2fa8 --- /dev/null +++ b/src/system/applications/item/dialogs/talent/edit-grant-rule.ts @@ -0,0 +1,130 @@ +import { TalentItem } from '@system/documents/item'; +import { Talent } from '@system/types/item'; +import { AnyObject } from '@system/types/utils'; + +import { CollectionField } from '@system/data/fields'; + +const { ApplicationV2 } = foundry.applications.api; + +import { ComponentHandlebarsApplicationMixin } from '@system/applications/component-system'; + +type GrantRuleData = { _id: string } & Talent.GrantRule; + +export class EditTalentGrantRuleDialog extends ComponentHandlebarsApplicationMixin( + ApplicationV2, +) { + /** + * NOTE: Unbound methods is the standard for defining actions and forms + * within ApplicationV2 + */ + /* eslint-disable @typescript-eslint/unbound-method */ + static DEFAULT_OPTIONS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.DEFAULT_OPTIONS), + { + window: { + title: 'DIALOG.EditGrantRule.Title', + minimizable: false, + resizable: true, + positioned: true, + }, + classes: ['dialog', 'edit-grant-rule'], + tag: 'dialog', + position: { + width: 350, + }, + actions: { + update: this.onUpdateGrantRule, + }, + }, + ); + + static PARTS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.PARTS), + { + form: { + template: + 'systems/cosmere-rpg/templates/item/talent/dialogs/edit-grant-rule.hbs', + forms: { + form: { + handler: this.onFormEvent, + submitOnChange: true, + }, + }, + }, + }, + ); + /* eslint-enable @typescript-eslint/unbound-method */ + + private constructor( + private talent: TalentItem, + private rule: GrantRuleData, + ) { + super({ + id: `${talent.uuid}.GrantRule.${rule._id}`, + }); + } + + /* --- Statics --- */ + + public static async show(talent: TalentItem, rule: GrantRuleData) { + const dialog = new this(talent, rule); + await dialog.render(true); + } + + /* --- Actions --- */ + + private static onUpdateGrantRule(this: EditTalentGrantRuleDialog) { + void this.talent.update({ + [`system.grantRules.${this.rule._id}`]: this.rule, + }); + void this.close(); + } + + /* --- Form --- */ + + protected static onFormEvent( + this: EditTalentGrantRuleDialog, + event: Event, + form: HTMLFormElement, + formData: FormDataExtended, + ) { + event.preventDefault(); + + if (event instanceof SubmitEvent) return; + + // Get type + this.rule.type = formData.get('type') as Talent.GrantRule.Type; + + if ( + this.rule.type === Talent.GrantRule.Type.Items && + formData.has('items') + ) { + this.rule.items = formData.object.items as unknown as string[]; + } + + // Render + void this.render(true); + } + + /* --- Lifecycle --- */ + + protected _onRender(context: AnyObject, options: AnyObject): void { + super._onRender(context, options); + + $(this.element).prop('open', true); + } + + /* --- Context --- */ + + public _prepareContext() { + return Promise.resolve({ + editable: true, + talent: this.talent, + schema: ( + this.talent.system.schema.fields + .grantRules as CollectionField + ).model, + ...this.rule, + }); + } +} diff --git a/src/system/applications/item/dialogs/edit-talent-prerequisite.ts b/src/system/applications/item/dialogs/talent/edit-talent-prerequisite.ts similarity index 92% rename from src/system/applications/item/dialogs/edit-talent-prerequisite.ts rename to src/system/applications/item/dialogs/talent/edit-talent-prerequisite.ts index c5ad5a05..ac88701f 100644 --- a/src/system/applications/item/dialogs/edit-talent-prerequisite.ts +++ b/src/system/applications/item/dialogs/talent/edit-talent-prerequisite.ts @@ -124,6 +124,11 @@ export class EditTalentPrerequisiteDialog extends ComponentHandlebarsApplication this.data.talents ??= []; } else if (this.data.type === Talent.Prerequisite.Type.Connection) { this.data.description = formData.get('description') as string; + } else if ( + this.data.type === Talent.Prerequisite.Type.Level && + formData.has('level') + ) { + this.data.level = parseInt(formData.get('level') as string); } // Render @@ -132,7 +137,9 @@ export class EditTalentPrerequisiteDialog extends ComponentHandlebarsApplication /* --- Lifecycle --- */ - protected _onRender(): void { + protected _onRender(context: AnyObject, options: AnyObject): void { + super._onRender(context, options); + $(this.element).prop('open', true); $(this.element) @@ -146,6 +153,10 @@ export class EditTalentPrerequisiteDialog extends ComponentHandlebarsApplication return Promise.resolve({ editable: true, rootTalent: this.talent, + schema: this.talent.system.schema._getField([ + 'prerequisites', + 'model', + ]), ...this.data, typeSelectOptions: this.talent.system.prerequisiteTypeSelectOptions, diff --git a/src/system/applications/item/goal-sheet.ts b/src/system/applications/item/goal-sheet.ts new file mode 100644 index 00000000..86975238 --- /dev/null +++ b/src/system/applications/item/goal-sheet.ts @@ -0,0 +1,59 @@ +import { GoalItem } from '@system/documents/item'; +import { DeepPartial } from '@system/types/utils'; + +import { SYSTEM_ID } from '@src/system/constants'; + +// Base +import { BaseItemSheet } from './base'; + +export class GoalItemSheet extends BaseItemSheet { + static DEFAULT_OPTIONS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.DEFAULT_OPTIONS), + { + classes: [SYSTEM_ID, 'sheet', 'item', 'armor'], + position: { + width: 550, + height: 500, + }, + window: { + resizable: true, + positioned: true, + }, + }, + ); + + static TABS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.TABS), + { + details: { + label: 'COSMERE.Item.Sheet.Tabs.Details', + icon: '', + sortIndex: 15, + }, + }, + ); + + static PARTS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.PARTS), + { + 'sheet-content': { + template: + 'systems/cosmere-rpg/templates/item/goal/parts/sheet-content.hbs', + }, + }, + ); + + get item(): GoalItem { + return super.document; + } + + /* --- Context --- */ + + public async _prepareContext( + options: DeepPartial, + ) { + return { + ...(await super._prepareContext(options)), + }; + } +} diff --git a/src/system/applications/item/index.ts b/src/system/applications/item/index.ts index b810de7c..7563aa79 100644 --- a/src/system/applications/item/index.ts +++ b/src/system/applications/item/index.ts @@ -13,3 +13,5 @@ export * from './action-sheet'; export * from './talent-sheet'; export * from './equipment-sheet'; export * from './weapon-sheet'; +export * from './goal-sheet'; +export * from './power-sheet'; diff --git a/src/system/applications/item/path-sheet.ts b/src/system/applications/item/path-sheet.ts index 3365c558..b3597473 100644 --- a/src/system/applications/item/path-sheet.ts +++ b/src/system/applications/item/path-sheet.ts @@ -37,7 +37,7 @@ export class PathItemSheet extends BaseItemSheet { { 'sheet-content': { template: - 'systems/cosmere-rpg/templates/item/parts/sheet-content.hbs', + 'systems/cosmere-rpg/templates/item/path/parts/sheet-content.hbs', }, }, ); @@ -51,8 +51,21 @@ export class PathItemSheet extends BaseItemSheet { public async _prepareContext( options: DeepPartial, ) { + // Get non-core (locked) skills + const linkedSkillsOptions = Object.entries(CONFIG.COSMERE.skills) + .filter(([key, config]) => !config.core) + .reduce( + (acc, [key, config]) => ({ + ...acc, + [key]: config.label, + }), + {}, + ); + return { ...(await super._prepareContext(options)), + + linkedSkillsOptions, }; } } diff --git a/src/system/applications/item/power-sheet.ts b/src/system/applications/item/power-sheet.ts new file mode 100644 index 00000000..4ea6f1d1 --- /dev/null +++ b/src/system/applications/item/power-sheet.ts @@ -0,0 +1,59 @@ +import { PowerItem } from '@system/documents/item'; +import { DeepPartial } from '@system/types/utils'; + +import { SYSTEM_ID } from '@src/system/constants'; + +// Base +import { BaseItemSheet } from './base'; + +export class PowerItemSheet extends BaseItemSheet { + static DEFAULT_OPTIONS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.DEFAULT_OPTIONS), + { + classes: [SYSTEM_ID, 'sheet', 'item', 'armor'], + position: { + width: 550, + height: 500, + }, + window: { + resizable: true, + positioned: true, + }, + }, + ); + + static TABS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.TABS), + { + details: { + label: 'COSMERE.Item.Sheet.Tabs.Details', + icon: '', + sortIndex: 15, + }, + }, + ); + + static PARTS = foundry.utils.mergeObject( + foundry.utils.deepClone(super.PARTS), + { + 'sheet-content': { + template: + 'systems/cosmere-rpg/templates/item/power/parts/sheet-content.hbs', + }, + }, + ); + + get item(): PowerItem { + return super.document; + } + + /* --- Context --- */ + + public async _prepareContext( + options: DeepPartial, + ) { + return { + ...(await super._prepareContext(options)), + }; + } +} diff --git a/src/system/applications/item/talent-sheet.ts b/src/system/applications/item/talent-sheet.ts index 251dc2a8..484b2ea1 100644 --- a/src/system/applications/item/talent-sheet.ts +++ b/src/system/applications/item/talent-sheet.ts @@ -83,6 +83,7 @@ export class TalentItemSheet extends BaseItemSheet { ...(await super._prepareContext(options)), isPathTalent: this.item.system.type === Talent.Type.Path, isAncestryTalent: this.item.system.type === Talent.Type.Ancestry, + isPowerTalent: this.item.system.type === Talent.Type.Power, hasModality: this.item.system.modality !== null, }; } diff --git a/src/system/config.ts b/src/system/config.ts index 3bdc3ce5..151c0b2c 100644 --- a/src/system/config.ts +++ b/src/system/config.ts @@ -30,10 +30,11 @@ import { PathType, EquipHand, EquipmentType, + PowerType, } from './types/cosmere'; import { AdvantageMode } from './types/roll'; -import { Talent } from './types/item'; +import { Talent, Goal } from './types/item'; const COSMERE: CosmereRPGConfig = { sizes: { @@ -256,111 +257,111 @@ const COSMERE: CosmereRPGConfig = { key: Skill.Agility, label: 'COSMERE.Actor.Skill.Agility', attribute: Attribute.Speed, - attrLabel: 'COSMERE.Actor.Attribute.Speed.short', + core: true, }, [Skill.Athletics]: { key: Skill.Athletics, label: 'COSMERE.Actor.Skill.Athletics', attribute: Attribute.Strength, - attrLabel: 'COSMERE.Actor.Attribute.Strength.short', + core: true, }, [Skill.HeavyWeapons]: { key: Skill.HeavyWeapons, label: 'COSMERE.Actor.Skill.HeavyWeapons', attribute: Attribute.Strength, - attrLabel: 'COSMERE.Actor.Attribute.Strength.short', + core: true, }, [Skill.LightWeapons]: { key: Skill.LightWeapons, label: 'COSMERE.Actor.Skill.LightWeapons', attribute: Attribute.Speed, - attrLabel: 'COSMERE.Actor.Attribute.Speed.short', + core: true, }, [Skill.Stealth]: { key: Skill.Stealth, label: 'COSMERE.Actor.Skill.Stealth', attribute: Attribute.Speed, - attrLabel: 'COSMERE.Actor.Attribute.Speed.short', + core: true, }, [Skill.Thievery]: { key: Skill.Thievery, label: 'COSMERE.Actor.Skill.Thievery', attribute: Attribute.Speed, - attrLabel: 'COSMERE.Actor.Attribute.Speed.short', + core: true, }, [Skill.Crafting]: { key: Skill.Crafting, label: 'COSMERE.Actor.Skill.Crafting', attribute: Attribute.Intellect, - attrLabel: 'COSMERE.Actor.Attribute.Intellect.short', + core: true, }, [Skill.Deduction]: { key: Skill.Deduction, label: 'COSMERE.Actor.Skill.Deduction', attribute: Attribute.Intellect, - attrLabel: 'COSMERE.Actor.Attribute.Intellect.short', + core: true, }, [Skill.Discipline]: { key: Skill.Discipline, label: 'COSMERE.Actor.Skill.Discipline', attribute: Attribute.Willpower, - attrLabel: 'COSMERE.Actor.Attribute.Willpower.short', + core: true, }, [Skill.Intimidation]: { key: Skill.Intimidation, label: 'COSMERE.Actor.Skill.Intimidation', attribute: Attribute.Willpower, - attrLabel: 'COSMERE.Actor.Attribute.Willpower.short', + core: true, }, [Skill.Lore]: { key: Skill.Lore, label: 'COSMERE.Actor.Skill.Lore', attribute: Attribute.Intellect, - attrLabel: 'COSMERE.Actor.Attribute.Intellect.short', + core: true, }, [Skill.Medicine]: { key: Skill.Medicine, label: 'COSMERE.Actor.Skill.Medicine', attribute: Attribute.Intellect, - attrLabel: 'COSMERE.Actor.Attribute.Intellect.short', + core: true, }, [Skill.Deception]: { key: Skill.Deception, label: 'COSMERE.Actor.Skill.Deception', attribute: Attribute.Presence, - attrLabel: 'COSMERE.Actor.Attribute.Presence.short', + core: true, }, [Skill.Insight]: { key: Skill.Insight, label: 'COSMERE.Actor.Skill.Insight', attribute: Attribute.Awareness, - attrLabel: 'COSMERE.Actor.Attribute.Awareness.short', + core: true, }, [Skill.Leadership]: { key: Skill.Leadership, label: 'COSMERE.Actor.Skill.Leadership', attribute: Attribute.Presence, - attrLabel: 'COSMERE.Actor.Attribute.Presence.short', + core: true, }, [Skill.Perception]: { key: Skill.Perception, label: 'COSMERE.Actor.Skill.Perception', attribute: Attribute.Awareness, - attrLabel: 'COSMERE.Actor.Attribute.Awareness.short', + core: true, }, [Skill.Persuasion]: { key: Skill.Persuasion, label: 'COSMERE.Actor.Skill.Persuasion', attribute: Attribute.Presence, - attrLabel: 'COSMERE.Actor.Attribute.Presence.short', + core: true, }, [Skill.Survival]: { key: Skill.Survival, label: 'COSMERE.Actor.Skill.Survival', attribute: Attribute.Awareness, - attrLabel: 'COSMERE.Actor.Attribute.Awareness.short', + core: true, }, }, @@ -442,6 +443,16 @@ const COSMERE: CosmereRPGConfig = { desc_placeholder: 'COSMERE.Item.Type.Connection.desc_placeholder', }, + [ItemType.Goal]: { + label: 'COSMERE.Item.Type.Goal.label', + labelPlural: 'COSMERE.Item.Type.Goal.label_plural', + desc_placeholder: 'COSMERE.Item.Type.Goal.desc_placeholder', + }, + [ItemType.Power]: { + label: 'COSMERE.Item.Type.Power.label', + labelPlural: 'COSMERE.Item.Type.Power.label_plural', + desc_placeholder: 'COSMERE.Item.Type.Power.desc_placeholder', + }, }, activation: { types: { @@ -516,31 +527,52 @@ const COSMERE: CosmereRPGConfig = { }, }, }, + goal: { + rewards: { + types: { + [Goal.Reward.Type.Items]: + 'COSMERE.Item.Goal.Reward.Type.Items', + [Goal.Reward.Type.SkillRanks]: + 'COSMERE.Item.Goal.Reward.Type.SkillRanks', + }, + }, + }, talent: { types: { [Talent.Type.Ancestry]: { - label: 'COSMERE.Talent.Type.Ancestry', + label: 'COSMERE.Item.Talent.Type.Ancestry', }, [Talent.Type.Path]: { - label: 'COSMERE.Talent.Type.Path', + label: 'COSMERE.Item.Talent.Type.Path', + }, + [Talent.Type.Power]: { + label: 'COSMERE.Item.Talent.Type.Power', }, }, prerequisite: { types: { [Talent.Prerequisite.Type.Talent]: - 'COSMERE.Talent.Prerequisite.Type.Talent', + 'COSMERE.Item.Talent.Prerequisite.Type.Talent', [Talent.Prerequisite.Type.Attribute]: - 'COSMERE.Talent.Prerequisite.Type.Attribute', + 'COSMERE.Item.Talent.Prerequisite.Type.Attribute', [Talent.Prerequisite.Type.Skill]: - 'COSMERE.Talent.Prerequisite.Type.Skill', + 'COSMERE.Item.Talent.Prerequisite.Type.Skill', [Talent.Prerequisite.Type.Connection]: - 'COSMERE.Talent.Prerequisite.Type.Connection', + 'COSMERE.Item.Talent.Prerequisite.Type.Connection', + [Talent.Prerequisite.Type.Level]: + 'COSMERE.Item.Talent.Prerequisite.Type.Level', }, modes: { [Talent.Prerequisite.Mode.AnyOf]: - 'COSMERE.Talent.Prerequisite.Mode.AnyOf', + 'COSMERE.Item.Talent.Prerequisite.Mode.AnyOf', [Talent.Prerequisite.Mode.AllOf]: - 'COSMERE.Talent.Prerequisite.Mode.AllOf', + 'COSMERE.Item.Talent.Prerequisite.Mode.AllOf', + }, + }, + grantRules: { + types: { + [Talent.GrantRule.Type.Items]: + 'COSMERE.Item.Talent.GrantRule.Type.Items', }, }, }, @@ -723,6 +755,15 @@ const COSMERE: CosmereRPGConfig = { }, }, + power: { + types: { + [PowerType.None]: { + label: 'COSMERE.Item.Type.Power.label', + plural: 'COSMERE.Item.Type.Power.label_plural', + }, + }, + }, + damageTypes: { [DamageType.Energy]: { label: 'COSMERE.DamageTypes.Energy', diff --git a/src/system/data/actor/character.ts b/src/system/data/actor/character.ts index 199cc44c..c01b20a1 100644 --- a/src/system/data/actor/character.ts +++ b/src/system/data/actor/character.ts @@ -23,7 +23,7 @@ export interface CharacterActorData extends CommonActorData { /* --- Goals, Connections, Purpose, and Obstacle --- */ purpose: string; obstacle: string; - goals: GoalData[]; + goals?: GoalData[]; connections: ConnectionData[]; } @@ -76,8 +76,8 @@ export class CharacterActorDataModel extends CommonActorDataModel; skills: Record< Skill, - { attribute: Attribute; rank: number; mod: Derived } + { + attribute: Attribute; + rank: number; + mod: Derived; + + /** + * Derived field describing whether this skill is unlocked or not. + * This field is only present for non-core skills. + * Core skills are always unlocked. + */ + unlocked?: boolean; + } >; injuries: Derived; injuryRollBonus: number; @@ -405,6 +416,18 @@ export class CommonActorDataModel< initial: 0, }), ), + + // Only present for non-core skills + ...(!skills[key].core + ? { + unlocked: + new foundry.data.fields.BooleanField({ + required: true, + nullable: false, + initial: false, + }), + } + : {}), }); return schemas; @@ -556,6 +579,19 @@ export class CommonActorDataModel< this.skills[skill].mod.value = attrValue + rank; }); + // Derive non-core skill unlocks + (Object.keys(this.skills) as Skill[]).forEach((skill) => { + if (CONFIG.COSMERE.skills[skill].core) return; + + // Check if the actor has a power that unlocks this skill + const unlocked = this.parent.powers.some( + (power) => power.system.skill === skill, + ); + + // Set unlocked status + this.skills[skill].unlocked = unlocked; + }); + // Get deflect source, defaulting to armor const source = this.deflect.source ?? DeflectSource.Armor; diff --git a/src/system/data/fields/collection.ts b/src/system/data/fields/collection.ts new file mode 100644 index 00000000..7924c733 --- /dev/null +++ b/src/system/data/fields/collection.ts @@ -0,0 +1,312 @@ +export type CollectionFieldOptions = foundry.data.fields.DataFieldOptions; + +/** + * A collection that is backed by a record object instead of a Map. + * This allows us to persit it properly and update items easily, + * while still having the convenience of a collection. + */ +export class RecordCollection implements Collection { + /** + * NOTE: Must use `any` here as we need the RecordCollection + * to be backing record object itself. This ensures its stored + * properly. + */ + /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment */ + constructor(entries?: [string, T][]) { + if (entries) { + entries.forEach(([key, value]) => { + (this as any)[key] = value; + }); + } + } + + get contents(): T[] { + return Object.entries(this).map(([key, value]) => ({ + ...value, + _id: key, + })); + } + + public find( + condition: (e: T, index: number, collection: Collection) => e is S, + ): S | undefined; + public find( + condition: (e: T, index: number, collection: Collection) => boolean, + ): T | undefined; + public find( + condition: (e: T, index: number, collection: Collection) => boolean, + ): T | undefined { + return Object.entries(this).find(([key, value], index) => + condition({ ...value, _id: key }, index, this), + )?.[1]; + } + + public filter( + condition: (e: T, index: number, collection: Collection) => e is S, + ): S[]; + public filter( + condition: (e: T, index: number, collection: Collection) => boolean, + ): T[]; + public filter( + condition: (e: T, index: number, collection: Collection) => boolean, + ): T[] { + return Object.entries(this) + .filter(([key, value], index) => + condition({ ...value, _id: key }, index, this), + ) + .map(([key, value]) => value); + } + + public has(key: string): boolean { + return key in this; + } + + public get(key: string, options: { strict: true }): T; + public get(key: string, options?: { strict: false }): T | undefined; + public get( + key: string, + options: { strict: boolean } = { strict: false }, + ): T | undefined { + if (!this.has(key)) { + if (options.strict) throw new Error(`key ${key} not found`); + return undefined; + } + return (this as any)[key]; + } + + public getName(name: string, options: { strict: true }): T; + public getName(name: string, options?: { strict: false }): T | undefined; + public getName( + name: string, + options: { strict: boolean } = { strict: false }, + ): T | undefined { + const record = this.contents.find( + (value) => + value && + typeof value === 'object' && + 'name' in value && + value.name === name, + ); + if (!record) { + if (options.strict) throw new Error(`name ${name} not found`); + return undefined; + } + return record; + } + + public map( + transformer: (entity: T, index: number, collection: Collection) => M, + ): M[] { + return Object.entries(this).map(([key, value], index) => + transformer({ ...value, _id: key }, index, this), + ); + } + + public reduce( + evaluator: ( + accumulator: A, + value: T, + index: number, + collection: Collection, + ) => A, + initialValue: A, + ): A { + return Object.entries(this).reduce( + (accumulator, [key, value], index) => + evaluator(accumulator, { ...value, _id: key }, index, this), + initialValue, + ); + } + + public some( + condition: ( + value: T, + index: number, + collection: Collection, + ) => boolean, + ): boolean { + return Object.entries(this).some(([key, value], index) => + condition({ ...value, _id: key }, index, this), + ); + } + + public set(key: string, value: T): this { + (this as any)[key] = value; + return this; + } + + public delete(key: string): boolean { + if (!this.has(key)) return false; + delete (this as any)[key]; + return true; + } + + public clear(): void { + Object.keys(this).forEach((key) => delete (this as any)[key]); + } + + public get size(): number { + return Object.keys(this).length; + } + + public entries(): IterableIterator<[string, T]> { + return Object.entries(this) as unknown as IterableIterator<[string, T]>; + } + + public keys(): IterableIterator { + return Object.keys(this)[Symbol.iterator](); + } + + public values(): IterableIterator { + return Object.keys(this) + .map((key) => ({ + ...this.get(key)!, + _id: key, + })) + [Symbol.iterator](); + } + + public forEach( + callbackfn: (value: T, key: string, map: this) => void, + thisArg?: any, + ): void { + Object.entries(this).forEach(([key, value]) => + callbackfn.call(thisArg, value, key, this), + ); + } + + [Symbol.iterator](): IterableIterator { + return this.values(); + } + + // NOTE: This is implicitly readonly as we don't have a way to set it. + // eslint-disable-next-line @typescript-eslint/class-literal-property-style + get [Symbol.toStringTag]() { + return 'RecordCollection'; + } + + public toJSON(): (T extends { toJSON: (...args: any[]) => infer U } + ? U + : T)[] { + return this.contents.map((value) => { + if (value && typeof value === 'object' && 'toJSON' in value) { + return { ...(value as any).toJSON(), _id: (value as any)._id }; + } + return value; + }); + } + /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment */ +} + +export class CollectionField< + ElementField extends + foundry.data.fields.DataField = foundry.data.fields.DataField, +> extends foundry.data.fields.ObjectField { + constructor( + public readonly model: ElementField, + options: CollectionFieldOptions = {}, + ) { + super(options); + } + + protected override _cleanType( + value: RecordCollection, + options?: object, + ) { + Array.from(value.entries()).forEach(([id, v]) => { + value.set(id, this.model.clean(v, options)); + }); + + return value; + } + + protected override _validateType( + value: unknown, + options?: foundry.data.fields.DataFieldValidationOptions, + ): boolean | foundry.data.fields.DataModelValidationFailure | void { + if (!(value instanceof RecordCollection)) + throw new Error('must be a RecordCollection'); + const errors = this._validateValues(value, options); + if (!foundry.utils.isEmpty(errors)) { + // Create validatior failure + const failure = + new foundry.data.validation.DataModelValidationFailure(); + + // Set fields + failure.fields = errors; + + // Throw error + throw new foundry.data.validation.DataModelValidationError(failure); + } + } + + protected _validateValues( + value: RecordCollection, + options?: foundry.data.fields.DataFieldValidationOptions, + ) { + const errors: Record< + string, + foundry.data.validation.DataModelValidationFailure + > = {}; + Array.from(value.entries()).forEach(([id, v]) => { + const error = this.model.validate( + v, + options, + ) as foundry.data.validation.DataModelValidationFailure | null; + if (error) { + errors[id] = error; + } + }); + + return errors; + } + + protected override _cast(value: object) { + const result = + value instanceof RecordCollection + ? value + : foundry.utils.getType(value) === 'Map' + ? new RecordCollection( + Array.from((value as Map).entries()), + ) + : foundry.utils.getType(value) === 'Object' + ? new RecordCollection(Object.entries(value)) + : foundry.utils.getType(value) === 'Array' + ? new RecordCollection( + (value as { _id?: string; id?: string }[]).map( + (v, i) => [v._id ?? v.id ?? i.toString(), v], + ), + ) + : new RecordCollection(); + + return result; + } + + public override getInitialValue() { + return new RecordCollection(); + } + + public override initialize(value: RecordCollection) { + if (!value) return new RecordCollection(); + return foundry.utils.deepClone(value); + } + + public override toObject(value: RecordCollection) { + const result = Array.from(value.entries()).reduce( + (acc, [id, v]) => ({ + ...acc, + [id]: this.model.toObject(v) as unknown, + }), + {}, + ); + return result; + } + + public override _getField(path: string[]): foundry.data.fields.DataField { + if (path.length === 0) return this; + else if (path.length === 1) return this.model; + + path.shift(); + return this.model._getField(path); + } +} diff --git a/src/system/data/fields/index.ts b/src/system/data/fields/index.ts index 8abd3b2e..d8e16209 100644 --- a/src/system/data/fields/index.ts +++ b/src/system/data/fields/index.ts @@ -1,2 +1,3 @@ export * from './derived-value-field'; export * from './mapping-field'; +export * from './collection'; diff --git a/src/system/data/fields/mapping-field.ts b/src/system/data/fields/mapping-field.ts index 21819a76..3065eca6 100644 --- a/src/system/data/fields/mapping-field.ts +++ b/src/system/data/fields/mapping-field.ts @@ -25,8 +25,17 @@ export class MappingField< if (foundry.utils.getType(value) !== 'Object') throw new Error('must be an Object'); const errors = this._validateValues(value, options); - if (!foundry.utils.isEmpty(errors)) - throw new foundry.data.validation.DataModelValidationError(errors); + if (!foundry.utils.isEmpty(errors)) { + // Create validatior failure + const failure = + new foundry.data.validation.DataModelValidationFailure(); + + // Set fields + failure.fields = errors; + + // Throw error + throw new foundry.data.validation.DataModelValidationError(failure); + } } protected _validateValues( @@ -35,10 +44,13 @@ export class MappingField< ) { const errors: Record< string, - foundry.data.fields.DataModelValidationFailure + foundry.data.validation.DataModelValidationFailure > = {}; Object.entries(value).forEach(([key, v]) => { - const error = this.model.validate(v, options); + const error = this.model.validate( + v, + options, + ) as foundry.data.validation.DataModelValidationFailure | null; if (error) errors[key] = error; }); return errors; diff --git a/src/system/data/item/goal.ts b/src/system/data/item/goal.ts new file mode 100644 index 00000000..a7e933fa --- /dev/null +++ b/src/system/data/item/goal.ts @@ -0,0 +1,135 @@ +import { Goal } from '@system/types/item'; +import { CosmereItem } from '@system/documents'; + +import { CollectionField } from '@system/data/fields'; + +// Mixins +import { DataModelMixin } from '../mixins'; +import { IdItemMixin, IdItemData } from './mixins/id'; +import { + DescriptionItemMixin, + DescriptionItemData, +} from './mixins/description'; + +export interface GoalItemData extends IdItemData, DescriptionItemData { + /** + * The progress level of the goal + */ + level: number; + + /** + * The rewards for completing the goal + */ + rewards: Collection; +} + +export class GoalItemDataModel extends DataModelMixin< + GoalItemData, + CosmereItem +>( + IdItemMixin({ + initialFromName: true, + }), + DescriptionItemMixin({ + value: 'COSMERE.Item.Type.Goal.desc_placeholder', + }), +) { + static defineSchema() { + return foundry.utils.mergeObject(super.defineSchema(), { + level: new foundry.data.fields.NumberField({ + required: true, + nullable: false, + integer: true, + min: 0, + max: 3, + initial: 0, + label: 'COSMERE.Item.Goal.Level.Label', + }), + + rewards: new CollectionField( + new foundry.data.fields.SchemaField( + { + type: new foundry.data.fields.StringField({ + required: true, + nullable: false, + initial: Goal.Reward.Type.Items, + label: 'COSMERE.Item.Goal.Reward.Type.Label', + choices: CONFIG.COSMERE.items.goal.rewards.types, + }), + + // Skill ranks reward + skill: new foundry.data.fields.StringField({ + required: false, + nullable: true, + blank: false, + initial: null, + label: 'COSMERE.Item.Goal.Reward.Skill.Label', + choices: Object.entries( + CONFIG.COSMERE.skills, + ).reduce( + (acc, [key, config]) => ({ + ...acc, + [key]: config.label, + }), + {}, + ), + }), + ranks: new foundry.data.fields.NumberField({ + required: false, + nullable: true, + initial: 0, + integer: true, + min: 0, + label: 'COSMERE.Item.Goal.Reward.Ranks.Label', + }), + + // Items reward + items: new foundry.data.fields.ArrayField( + new foundry.data.fields.DocumentUUIDField({ + blank: false, + }), + { + required: false, + nullable: true, + initial: [], + label: 'COSMERE.Item.Goal.Reward.Items.Label', + }, + ), + }, + { + nullable: true, + validate: (value: Goal.Reward) => { + if (value.type === Goal.Reward.Type.SkillRanks) { + if (!('skill' in value)) + throw new Error( + `Field "skill" is required for reward type "${Goal.Reward.Type.SkillRanks}"`, + ); + if (!('ranks' in value)) + throw new Error( + `Field "ranks" is required for reward type "${Goal.Reward.Type.SkillRanks}"`, + ); + } else if (value.type === Goal.Reward.Type.Items) { + if (!('items' in value)) + throw new Error( + `Field "items" is required for reward type "${Goal.Reward.Type.Items}"`, + ); + if (!Array.isArray(value.items)) + throw new Error( + `Field "items" must be an array for reward type "${Goal.Reward.Type.Items}"`, + ); + if ( + value.items.some( + (i) => typeof i !== 'string', + ) + ) + throw new Error( + `Field "items" must be an array of strings for reward type "${Goal.Reward.Type.Items}"`, + ); + } + }, + }, + ), + ), + }); + } +} diff --git a/src/system/data/item/index.ts b/src/system/data/item/index.ts index 6345b7b4..84886377 100644 --- a/src/system/data/item/index.ts +++ b/src/system/data/item/index.ts @@ -17,6 +17,9 @@ import { ActionItemDataModel } from './action'; import { InjuryItemDataModel } from './injury'; import { ConnectionItemDataModel } from './connection'; +import { GoalItemDataModel } from './goal'; + +import { PowerItemDataModel } from './power'; export const config: Record< ItemType, @@ -41,6 +44,9 @@ export const config: Record< [ItemType.Injury]: InjuryItemDataModel, [ItemType.Connection]: ConnectionItemDataModel, + [ItemType.Goal]: GoalItemDataModel, + + [ItemType.Power]: PowerItemDataModel, }; export * from './weapon'; @@ -56,3 +62,5 @@ export * from './action'; export * from './injury'; export * from './connection'; export * from './trait'; +export * from './goal'; +export * from './power'; diff --git a/src/system/data/item/mixins/id.ts b/src/system/data/item/mixins/id.ts index 5221651f..df1ececd 100644 --- a/src/system/data/item/mixins/id.ts +++ b/src/system/data/item/mixins/id.ts @@ -7,6 +7,8 @@ interface IdItemMixinOptions { | Type[] | Record | (() => Type[] | Record); + label?: string; + hint?: string; } export interface IdItemData { @@ -50,6 +52,12 @@ export function IdItemMixin< initial ?? (options.initialFromName ? '' : undefined), choices, + label: + options.label ?? + 'COSMERE.Item.Sheet.Identifier.Label', + hint: + options.hint ?? + 'COSMERE.Item.Sheet.Identifier.Hint', }), }); } diff --git a/src/system/data/item/path.ts b/src/system/data/item/path.ts index ffbfe4c3..ce5333a0 100644 --- a/src/system/data/item/path.ts +++ b/src/system/data/item/path.ts @@ -1,4 +1,4 @@ -import { PathType } from '@system/types/cosmere'; +import { PathType, Skill } from '@system/types/cosmere'; import { CosmereItem } from '@system/documents/item'; // Mixins @@ -13,7 +13,13 @@ import { export interface PathItemData extends IdItemData, TypedItemData, - DescriptionItemData {} + DescriptionItemData { + /** + * The non-core skills linked to this path. + * These skills are displayed with the path in the sheet. + */ + linkedSkills: Skill[]; +} export class PathItemDataModel extends DataModelMixin< PathItemData, @@ -38,6 +44,31 @@ export class PathItemDataModel extends DataModelMixin< ) { static defineSchema() { return foundry.utils.mergeObject(super.defineSchema(), { + linkedSkills: new foundry.data.fields.ArrayField( + new foundry.data.fields.StringField({ + required: true, + nullable: false, + blank: false, + choices: () => + Object.entries(CONFIG.COSMERE.skills) + .filter(([key, skill]) => !skill.core) + .reduce( + (acc, [key, skill]) => ({ + ...acc, + [key]: skill.label, + }), + {}, + ), + }), + { + required: true, + nullable: false, + initial: [], + label: 'COSMERE.Item.Path.LinkedSkills.Label', + hint: 'COSMERE.Item.Path.LinkedSkills.Hint', + }, + ), + // TODO: Advancements }); } diff --git a/src/system/data/item/power.ts b/src/system/data/item/power.ts new file mode 100644 index 00000000..0dfe6b61 --- /dev/null +++ b/src/system/data/item/power.ts @@ -0,0 +1,97 @@ +import { Skill, PowerType } from '@system/types/cosmere'; +import { CosmereItem } from '@system/documents'; + +// Mixins +import { DataModelMixin } from '../mixins'; +import { IdItemMixin, IdItemData } from './mixins/id'; +import { TypedItemMixin, TypedItemData } from './mixins/typed'; +import { + ActivatableItemData, + ActivatableItemMixin, +} from './mixins/activatable'; +import { + DescriptionItemMixin, + DescriptionItemData, +} from './mixins/description'; + +export interface PowerItemData + extends IdItemData, + TypedItemData, + DescriptionItemData { + /** + * Wether to a custom skill is used, or + * the skill is derived from the power's id. + */ + customSkill: boolean; + + /** + * The skill associated with this power. + * This cannot be a core skill. + * If `customSkill` is `false`, the skill with the same id as the power is used. + */ + skill: Skill | null; +} + +export class PowerItemDataModel extends DataModelMixin< + PowerItemData, + CosmereItem +>( + IdItemMixin({ + initialFromName: true, + hint: 'COSMERE.Item.Power.Identifier.Hint', + }), + TypedItemMixin({ + initial: () => Object.keys(CONFIG.COSMERE.power.types)[0], + choices: () => + Object.entries(CONFIG.COSMERE.power.types).reduce( + (acc, [key, config]) => ({ + ...acc, + [key]: config.label, + }), + {}, + ), + }), + ActivatableItemMixin(), + DescriptionItemMixin({ + value: 'COSMERE.Item.Type.Power.desc_placeholder', + }), +) { + static defineSchema() { + return foundry.utils.mergeObject(super.defineSchema(), { + customSkill: new foundry.data.fields.BooleanField({ + required: true, + initial: false, + label: 'COSMERE.Item.Power.CustomSkill.Label', + hint: 'COSMERE.Item.Power.CustomSkill.Hint', + }), + + skill: new foundry.data.fields.StringField({ + required: true, + nullable: true, + blank: false, + label: 'COSMERE.Item.Power.Skill.Label', + hint: 'COSMERE.Item.Power.Skill.Hint', + initial: null, + choices: () => + Object.entries(CONFIG.COSMERE.skills) + .filter(([key, skill]) => !skill.core) + .reduce( + (acc, [key, skill]) => ({ + ...acc, + [key]: skill.label, + }), + {}, + ), + }), + }); + } + + public prepareDerivedData() { + super.prepareDerivedData(); + + if (!this.customSkill) { + const validId = this.id in CONFIG.COSMERE.skills; + this.skill = validId ? (this.id as Skill) : null; + } + } +} diff --git a/src/system/data/item/talent.ts b/src/system/data/item/talent.ts index a151768a..fc6c7e12 100644 --- a/src/system/data/item/talent.ts +++ b/src/system/data/item/talent.ts @@ -1,7 +1,7 @@ import { Talent } from '@system/types/item'; import { CosmereItem } from '@system/documents'; -import { MappingField } from '@system/data/fields'; +import { MappingField, CollectionField } from '@system/data/fields'; // Mixins import { DataModelMixin } from '../mixins'; @@ -58,6 +58,17 @@ export interface TalentItemData */ hasAncestry?: boolean; + /** + * The id of the Power this Talent belongs to. + */ + power?: string; + /** + * Derived value that indicates whether or not the parent + * Actor has the required power. If no power is defined for this + * Talent, this value will be undefined. + */ + hasPower?: boolean; + prerequisites: Record; readonly prerequisitesArray: ({ id: string } & Talent.Prerequisite)[]; readonly prerequisiteTypeSelectOptions: Record< @@ -75,6 +86,12 @@ export interface TalentItemData * they're just plain strings. */ prerequisitesMet: boolean; + + /** + * Rules that are executed when this talent is + * obtained by an actor. + */ + grantRules: Collection; } export class TalentItemDataModel extends DataModelMixin< @@ -122,6 +139,14 @@ export class TalentItemDataModel extends DataModelMixin< initial: null, }), hasAncestry: new foundry.data.fields.BooleanField(), + power: new foundry.data.fields.StringField({ + required: false, + nullable: true, + initial: null, + label: 'COSMERE.Item.Talent.Power.Label', + hint: 'COSMERE.Item.Talent.Power.Hint', + }), + hasPower: new foundry.data.fields.BooleanField(), prerequisites: new MappingField( new foundry.data.fields.SchemaField( @@ -205,6 +230,13 @@ export class TalentItemDataModel extends DataModelMixin< choices: CONFIG.COSMERE.items.talent.prerequisite.modes, }), + + // Level + level: new foundry.data.fields.NumberField({ + min: 0, + initial: 0, + label: 'COSMERE.Item.Talent.Prerequisite.Level.Label', + }), }, { nullable: true, @@ -252,6 +284,15 @@ export class TalentItemDataModel extends DataModelMixin< 'Field "description" is required for prerequisite rule of type "Connection"', ); break; + case Talent.Prerequisite.Type.Level: + if ( + value.level === undefined || + value.level === null + ) + throw new Error( + 'Field "level" is required for prerequisite rule of type "Level"', + ); + break; default: return false; } @@ -260,6 +301,55 @@ export class TalentItemDataModel extends DataModelMixin< ), ), prerequisitesMet: new foundry.data.fields.BooleanField(), + + grantRules: new CollectionField( + new foundry.data.fields.SchemaField( + { + type: new foundry.data.fields.StringField({ + required: true, + nullable: false, + blank: false, + choices: + CONFIG.COSMERE.items.talent.grantRules.types, + label: 'COSMERE.Item.Talent.GrantRule.Type.Label', + }), + + // Items + items: new foundry.data.fields.ArrayField( + new foundry.data.fields.DocumentUUIDField({ + blank: false, + label: 'COSMERE.Item.Talent.GrantRule.Items.Label', + }), + { + required: false, + nullable: true, + initial: null, + }, + ), + }, + { + nullable: true, + validate: (value: Talent.GrantRule) => { + if (value.type === Talent.GrantRule.Type.Items) { + if (!value.items) + throw new Error( + 'Field "items" is required for grant rule of type "Items"', + ); + } else { + throw new Error( + `Invalid grant rule type "${(value as { type: string }).type}"`, + ); + } + }, + }, + ), + { + required: true, + nullable: false, + label: 'COSMERE.Item.Talent.GrantRule.Label', + hint: 'COSMERE.Item.Talent.GrantRule.Hint', + }, + ), }); } @@ -317,6 +407,13 @@ export class TalentItemDataModel extends DataModelMixin< ) ?? false; } + if (this.power) { + this.hasPower = + actor?.items.some( + (item) => item.isPower() && item.id === this.power, + ) ?? false; + } + if (!actor) { this.prerequisitesMet = false; } else { diff --git a/src/system/documents/actor.ts b/src/system/documents/actor.ts index 66921937..dc7fd5f5 100644 --- a/src/system/documents/actor.ts +++ b/src/system/documents/actor.ts @@ -9,6 +9,7 @@ import { Resource, InjuryType, } from '@system/types/cosmere'; +import { Talent } from '@system/types/item'; import { CosmereItem, CosmereItemData, @@ -16,13 +17,19 @@ import { CultureItem, PathItem, TalentItem, + GoalItem, + PowerItem, } from '@system/documents/item'; + import { CommonActorData, CommonActorDataModel, } from '@system/data/actor/common'; import { CharacterActorDataModel } from '@system/data/actor/character'; import { AdversaryActorDataModel } from '@system/data/actor/adversary'; + +import { PowerItemData } from '@system/data/item'; + import { Derived } from '@system/data/fields'; import { SYSTEM_ID } from '../constants'; import { d20Roll, D20Roll, D20RollData, DamageRoll } from '@system/dice'; @@ -93,6 +100,13 @@ export type CosmereActorRollData = skills: Record; }; +// Constants +/** + * Item types of which only a single instance can be + * embedded in an actor. + */ +const SINGLETON_ITEM_TYPES = [ItemType.Ancestry]; + export class CosmereActor< T extends CommonActorDataModel = CommonActorDataModel, SystemType extends CommonActorData = T extends CommonActorDataModel @@ -145,6 +159,14 @@ export class CosmereActor< return this.items.filter((i) => i.isPath()); } + public get goals(): GoalItem[] { + return this.items.filter((i) => i.isGoal()); + } + + public get powers(): PowerItem[] { + return this.items.filter((i) => i.isPower()); + } + /* --- Type Guards --- */ public isCharacter(): this is CharacterActor { @@ -157,6 +179,13 @@ export class CosmereActor< /* --- Lifecycle --- */ + protected override _initialize(options?: object) { + super._initialize(options); + + // Migrate goals + void this.migrateGoals(); + } + public override async _preCreate( data: object, options: object, @@ -186,38 +215,12 @@ export class CosmereActor< data: object[], opertion?: Partial, ): Promise { - const postCreateActions = new Array<() => void>(); - - if (embeddedName === 'Item') { - const itemData = data as CosmereItemData[]; - - // Get the first ancestry item - const ancestryItem = itemData.find( - (d) => d.type === ItemType.Ancestry, - ); - - // Filter out any ancestry items beyond the first - data = itemData.filter( - (d) => d.type !== ItemType.Ancestry || d === ancestryItem, - ); - - // If an ancestry item was present, replace the current (after create) - if (ancestryItem) { - // Get current ancestry item - const currentAncestryItem = this.items.find( - (i) => i.type === ItemType.Ancestry, - ); - - // Remove existing ancestry after create, if present - if (currentAncestryItem) { - postCreateActions.push(() => { - void this.deleteEmbeddedDocuments('Item', [ - currentAncestryItem.id, - ]); - }); - } - } - } + // Pre create actions + if ( + this.preCreateEmbeddedDocuments(embeddedName, data, opertion) === + false + ) + return []; // Perform create const result = await super.createEmbeddedDocuments( @@ -227,7 +230,7 @@ export class CosmereActor< ); // Post create actions - postCreateActions.forEach((func) => func()); + this.postCreateEmbeddedDocuments(embeddedName, result); // Return result return result; @@ -273,6 +276,141 @@ export class CosmereActor< } } + /* --- Handlers --- */ + + protected preCreateEmbeddedDocuments( + embeddedName: string, + data: object[], + opertion?: Partial, + ): boolean | void { + if (embeddedName === 'Item') { + const itemData = data as CosmereItemData[]; + + // Check for singleton items + SINGLETON_ITEM_TYPES.forEach((type) => { + // Get the first item of this type + const item = itemData.find((d) => d.type === type); + + // Filter out any other items of this type + data = item + ? itemData.filter((d) => d.type !== type || d === item) + : itemData; + }); + + // Pre add powers + itemData.forEach((d, i) => { + if (d.type === ItemType.Power) { + if ( + this.preAddPower( + d as CosmereItemData, + ) === false + ) { + itemData.splice(i, 1); + } + } + }); + } + } + + protected preAddPower( + data: CosmereItemData, + ): boolean | void { + // Ensure a power with the same id does not already exist + if ( + this.powers.some( + (i) => i.hasId() && i.system.id === data.system?.id, + ) + ) { + ui.notifications.error( + game.i18n!.format( + 'COSMERE.Item.Power.Notification.PowerExists', + { + actor: this.name, + identifier: data.system!.id, + }, + ), + ); + return false; + } + } + + protected postCreateEmbeddedDocuments( + embeddedName: string, + documents: foundry.abstract.Document[], + ): void { + documents.forEach((doc) => { + if (embeddedName === 'Item') { + const item = doc as CosmereItem; + + if (item.isAncestry()) { + this.onAncestryAdded(item); + } else if (item.isTalent()) { + this.onTalentAdded(item); + } + } + }); + } + + protected onAncestryAdded(item: AncestryItem) { + // Find any other ancestry items + const otherAncestries = this.items.filter( + (i) => i.isAncestry() && i.id !== item.id, + ); + + // Remove other ancestries + otherAncestries.forEach((i) => { + void i.delete(); + }); + } + + protected onTalentAdded(item: TalentItem) { + // Check if the talent has grant rules + if (item.system.grantRules.size > 0) { + // Execute grant rules + item.system.grantRules.forEach((rule) => { + if (rule.type === Talent.GrantRule.Type.Items) { + rule.items.forEach(async (itemUUID) => { + // Get document + const doc = (await fromUuid( + itemUUID, + )) as unknown as CosmereItem; + + // Get id + const id = doc.hasId() ? doc.system.id : null; + + // Ensure the item is not already present + if ( + !id || + this.items.some( + (i) => i.hasId() && i.system.id === id, + ) + ) + return; + + // Add the item to the actor + await this.createEmbeddedDocuments('Item', [ + doc.toObject(), + ]); + + // Notification + ui.notifications.info( + game.i18n!.format( + 'GENERIC.Notification.AddedItem', + { + type: game.i18n!.localize( + `TYPES.Item.${doc.type}`, + ), + item: doc.name, + actor: this.name, + }, + ), + ); + }); + } + }); + } + } + /* --- Functions --- */ public async setMode(modality: string, mode: string) { @@ -507,7 +645,7 @@ export class CosmereActor< attributeOverride ?? CONFIG.COSMERE.skills[skill].attribute; // Get skill rank - const rank = this.system.skills[skill].rank; + const rank = this.system.skills[skill]?.rank ?? 0; // Get attribute value const attrValue = this.getAttributeMod(attributeId); @@ -585,24 +723,40 @@ export class CosmereActor< return item.roll({ ...options, actor: this }); } + /** + * Utility function to modify a skill value + */ + public async modifySkillRank( + skillId: Skill, + change: number, + render?: boolean, + ): Promise; /** * Utility function to increment/decrement a skill value */ public async modifySkillRank( skillId: Skill, - incrementBool = true, + increment: boolean, + render?: boolean, + ): Promise; + public async modifySkillRank( + skillId: Skill, + param1: boolean | number = true, render = true, ) { + const incrementBool = typeof param1 === 'boolean' ? param1 : true; + const changeAmount = typeof param1 === 'number' ? param1 : 1; + const skillpath = `system.skills.${skillId}.rank`; const skill = this.system.skills[skillId]; if (incrementBool) { await this.update( - { [skillpath]: Math.clamp(skill.rank + 1, 0, 5) }, + { [skillpath]: Math.clamp(skill.rank + changeAmount, 0, 5) }, { render }, ); } else { await this.update( - { [skillpath]: Math.clamp(skill.rank - 1, 0, 5) }, + { [skillpath]: Math.clamp(skill.rank - changeAmount, 0, 5) }, { render }, ); } @@ -776,4 +930,35 @@ export class CosmereActor< ) ?? false ); } + + /* --- Helpers --- */ + + /** + * Migrate goals from the system object to individual items. + * + */ + private async migrateGoals() { + if (!this.isCharacter() || !this.system.goals) return; + + const goals = this.system.goals; + + // Remove goals from data + await this.update({ + 'system.goals': null, + }); + + // Create goal items + goals.forEach((goalData) => { + void Item.create( + { + type: ItemType.Goal, + name: goalData.text, + system: { + level: goalData.level, + }, + }, + { parent: this }, + ); + }); + } } diff --git a/src/system/documents/item.ts b/src/system/documents/item.ts index 12afe104..55e2f3d1 100644 --- a/src/system/documents/item.ts +++ b/src/system/documents/item.ts @@ -5,7 +5,12 @@ import { ItemConsumeType, ActivationType, } from '@system/types/cosmere'; +import { Goal } from '@system/types/item'; +import { GoalItemData } from '@system/data/item/goal'; +import { DeepPartial } from '@system/types/utils'; + import { CosmereActor } from './actor'; + import { SYSTEM_ID } from '../constants'; import { Derived } from '@system/data/fields'; @@ -28,6 +33,8 @@ import { TraitItemDataModel, LootItemDataModel, EquipmentItemDataModel, + GoalItemDataModel, + PowerItemDataModel, } from '@system/data/item'; import { ActivatableItemData } from '@system/data/item/mixins/activatable'; @@ -142,6 +149,14 @@ export class CosmereItem< return this.type === ItemType.Equipment; } + public isGoal(): this is GoalItem { + return this.type === ItemType.Goal; + } + + public isPower(): this is PowerItem { + return this.type === ItemType.Power; + } + /* --- Mixin type guards --- */ /** @@ -245,6 +260,89 @@ export class CosmereItem< return activeMode === this.system.id; } + /* --- Lifecycle --- */ + + override _onUpdate(_changes: object, options: object, userId: string) { + super._onUpdate(_changes, options, userId); + + if (game.user?.id !== userId) return; + + if (this.isGoal()) { + const changes: { system?: DeepPartial } = _changes; + + if (changes.system?.level === 3) { + this.handleGoalComplete(); + } + } + } + + /* --- Event handlers --- */ + + protected handleGoalComplete() { + // Ensure the item is a goal + if (!this.isGoal()) return; + + // Ensure actor is set + if (!this.actor) return; + + // Get the rewards + const rewards = this.system.rewards; + + // Handle rewards + rewards.forEach(async (reward) => { + if (reward.type === Goal.Reward.Type.SkillRanks) { + await this.actor!.modifySkillRank(reward.skill, reward.ranks); + + // Notification + ui.notifications.info( + game.i18n!.format( + 'GENERIC.Notification.IncreasedSkillRank', + { + skill: CONFIG.COSMERE.skills[reward.skill].label, + amount: reward.ranks, + actor: this.actor!.name, + }, + ), + ); + } else if (reward.type === Goal.Reward.Type.Items) { + reward.items.forEach(async (itemUUID) => { + // Get the item + const item = (await fromUuid( + itemUUID, + )) as unknown as CosmereItem; + + // Get the id + const id = item.hasId() ? item.system.id : null; + + // Ensure the item is not already embedded + if ( + id && + this.actor!.items.some( + (i) => i.hasId() && i.system.id === id, + ) + ) + return; + + // Add the item to the actor + await this.actor!.createEmbeddedDocuments('Item', [ + item.toObject(), + ]); + + // Notification + ui.notifications.info( + game.i18n!.format('GENERIC.Notification.AddedItem', { + type: game.i18n!.localize( + `TYPES.Item.${item.type}`, + ), + item: item.name, + actor: this.actor!.name, + }), + ); + }); + } + }); + } + /* --- Roll & Usage utilities --- */ /** @@ -1127,3 +1225,5 @@ export type ActionItem = CosmereItem; export type TalentItem = CosmereItem; export type EquipmentItem = CosmereItem; export type WeaponItem = CosmereItem; +export type GoalItem = CosmereItem; +export type PowerItem = CosmereItem; diff --git a/src/system/types/config.ts b/src/system/types/config.ts index 19491101..f93da4b5 100644 --- a/src/system/types/config.ts +++ b/src/system/types/config.ts @@ -29,10 +29,11 @@ import { EquipHand, PathType, EquipmentType, + PowerType, } from './cosmere'; import { AdvantageMode } from './roll'; -import { Talent } from './item'; +import { Talent, Goal } from './item'; export interface SizeConfig { label: string; @@ -73,7 +74,14 @@ export interface SkillConfig { key: string; label: string; attribute: Attribute; - attrLabel: string; + + /** + * Whether the skill is a core skill. + * Core skills are visible in the skill list on the character sheet. + */ + core?: boolean; + + // TODO: Replace hiddenUntilAcquired?: boolean; } @@ -218,6 +226,11 @@ export interface TalentTypeConfig { label: string; } +export interface PowerTypeConfig { + label: string; + plural: string; +} + export interface CosmereRPGConfig { sizes: Record; creatureTypes: Record; @@ -257,12 +270,21 @@ export interface CosmereRPGConfig { types: Record; }; + goal: { + rewards: { + types: Record; + }; + }; + talent: { types: Record; prerequisite: { types: Record; modes: Record; }; + grantRules: { + types: Record; + }; }; }; @@ -293,6 +315,10 @@ export interface CosmereRPGConfig { types: Record; }; + power: { + types: Record; + }; + damageTypes: Record; cultures: Record; diff --git a/src/system/types/cosmere.ts b/src/system/types/cosmere.ts index 3b3696f9..f9279b52 100644 --- a/src/system/types/cosmere.ts +++ b/src/system/types/cosmere.ts @@ -99,6 +99,10 @@ export const enum PathType { Heroic = 'heroic', } +export const enum PowerType { + None = 'none', +} + /** * The categories of weapon available */ @@ -269,6 +273,9 @@ export const enum ItemType { Injury = 'injury', Connection = 'connection', + Goal = 'goal', + + Power = 'power', } export const enum TurnSpeed { diff --git a/src/system/types/item.ts b/src/system/types/item.ts deleted file mode 100644 index 63e09749..00000000 --- a/src/system/types/item.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Attribute, Skill } from './cosmere'; - -export namespace Talent { - export const enum Type { - Ancestry = 'ancestry', - Path = 'path', - } - - export namespace Prerequisite { - export const enum Type { - Talent = 'talent', - Attribute = 'attribute', - Skill = 'skill', - Connection = 'connection', - } - - export const enum Mode { - AnyOf = 'any-of', - AllOf = 'all-of', - } - - export interface TalentRef { - /** - * UUID of the Talent item this prerequisite refers to. - */ - uuid: string; - /** - * The id of the talent - */ - id: string; - /** - * The name of the talent - */ - label: string; - } - } - - interface BasePrerequisite { - type: Type; - } - - export interface ConnectionPrerequisite - extends BasePrerequisite { - description: string; - } - - export interface AttributePrerequisite - extends BasePrerequisite { - attribute: Attribute; - value: number; - } - - export interface SkillPrerequisite - extends BasePrerequisite { - skill: Skill; - rank: number; - } - - export interface TalentPrerequisite - extends BasePrerequisite { - label?: string; - talents: Prerequisite.TalentRef[]; - mode: Prerequisite.Mode; - } - - export type Prerequisite = - | ConnectionPrerequisite - | AttributePrerequisite - | SkillPrerequisite - | TalentPrerequisite; -} diff --git a/src/system/types/item/goal.ts b/src/system/types/item/goal.ts new file mode 100644 index 00000000..93edc094 --- /dev/null +++ b/src/system/types/item/goal.ts @@ -0,0 +1,33 @@ +import { Skill } from '../cosmere'; + +export namespace Reward { + export const enum Type { + SkillRanks = 'skill-ranks', + Items = 'items', + } +} + +interface BaseReward { + type: Type; +} + +export interface SkillRanksReward extends BaseReward { + /** + * The Skill of which ranks are being granted + */ + skill: Skill; + + /** + * The number of ranks being granted + */ + ranks: number; +} + +export interface ItemsReward extends BaseReward { + /** + * The UUIDs of the items being granted + */ + items: string[]; +} + +export type Reward = SkillRanksReward | ItemsReward; diff --git a/src/system/types/item/index.ts b/src/system/types/item/index.ts new file mode 100644 index 00000000..462b07d1 --- /dev/null +++ b/src/system/types/item/index.ts @@ -0,0 +1,2 @@ +export * as Talent from './talent'; +export * as Goal from './goal'; diff --git a/src/system/types/item/talent.ts b/src/system/types/item/talent.ts new file mode 100644 index 00000000..9cde5782 --- /dev/null +++ b/src/system/types/item/talent.ts @@ -0,0 +1,96 @@ +import { Attribute, Skill } from '../cosmere'; + +export const enum Type { + Ancestry = 'ancestry', + Path = 'path', + Power = 'power', +} + +export namespace GrantRule { + export const enum Type { + Items = 'items', + } +} + +export interface BaseGrantRule { + type: Type; +} + +export interface ItemsGrantRule extends BaseGrantRule { + /** + * An array of item UUIDs that are granted by this rule. + */ + items: string[]; +} + +export type GrantRule = ItemsGrantRule; + +export namespace Prerequisite { + export const enum Type { + Talent = 'talent', + Attribute = 'attribute', + Skill = 'skill', + Connection = 'connection', + Level = 'level', + } + + export const enum Mode { + AnyOf = 'any-of', + AllOf = 'all-of', + } + + export interface TalentRef { + /** + * UUID of the Talent item this prerequisite refers to. + */ + uuid: string; + /** + * The id of the talent + */ + id: string; + /** + * The name of the talent + */ + label: string; + } +} + +interface BasePrerequisite { + type: Type; +} + +export interface ConnectionPrerequisite + extends BasePrerequisite { + description: string; +} + +export interface AttributePrerequisite + extends BasePrerequisite { + attribute: Attribute; + value: number; +} + +export interface SkillPrerequisite + extends BasePrerequisite { + skill: Skill; + rank: number; +} + +export interface TalentPrerequisite + extends BasePrerequisite { + label?: string; + talents: Prerequisite.TalentRef[]; + mode: Prerequisite.Mode; +} + +export interface LevelPrerequisite + extends BasePrerequisite { + level: number; +} + +export type Prerequisite = + | ConnectionPrerequisite + | AttributePrerequisite + | SkillPrerequisite + | TalentPrerequisite + | LevelPrerequisite; diff --git a/src/system/utils/handlebars/index.ts b/src/system/utils/handlebars/index.ts index 1126a361..36f97310 100644 --- a/src/system/utils/handlebars/index.ts +++ b/src/system/utils/handlebars/index.ts @@ -487,6 +487,9 @@ export async function preloadHandlebarsTemplates() { 'systems/cosmere-rpg/templates/item/ancestry/partials/ancestry-details-tab.hbs', 'systems/cosmere-rpg/templates/item/talent/partials/talent-details-tab.hbs', 'systems/cosmere-rpg/templates/item/action/partials/action-details-tab.hbs', + 'systems/cosmere-rpg/templates/item/goal/partials/goal-details-tab.hbs', + 'systems/cosmere-rpg/templates/item/power/partials/power-details-tab.hbs', + 'systems/cosmere-rpg/templates/item/path/partials/path-details-tab.hbs', 'systems/cosmere-rpg/templates/combat/combatant.hbs', 'systems/cosmere-rpg/templates/chat/parts/roll-details.hbs', 'systems/cosmere-rpg/templates/chat/parts/chat-card-header.hbs', diff --git a/src/templates/actors/adversary/components/skills-group.hbs b/src/templates/actors/adversary/components/skills-group.hbs index e8df872d..3aaefb2a 100644 --- a/src/templates/actors/adversary/components/skills-group.hbs +++ b/src/templates/actors/adversary/components/skills-group.hbs @@ -5,15 +5,11 @@ {{#if skill.active}}
  • -
    - +{{derived skill.mod }} -
    -
    - {{ localize skill.config.label }} -
    -
    - {{ localize skill.config.attrLabel}} -
    + {{app-actor-skill + skill=skill.id + readonly=(not @root.isEditMode) + pips=false + }}
  • {{/if}} diff --git a/src/templates/actors/adversary/dialogs/configure-skills.hbs b/src/templates/actors/adversary/dialogs/configure-skills.hbs index b8c6e826..b5c2708d 100644 --- a/src/templates/actors/adversary/dialogs/configure-skills.hbs +++ b/src/templates/actors/adversary/dialogs/configure-skills.hbs @@ -1,5 +1,5 @@
    {{#each attributeGroups as |group|}} - {{app-actor-skills-group group-id=group}} + {{app-actor-skills-group group-id=group core=false}} {{/each}}
    \ No newline at end of file diff --git a/src/templates/actors/character/components/goals-list.hbs b/src/templates/actors/character/components/goals-list.hbs index 0c078142..ee1bc785 100644 --- a/src/templates/actors/character/components/goals-list.hbs +++ b/src/templates/actors/character/components/goals-list.hbs @@ -3,12 +3,11 @@ {{localize "COSMERE.Actor.Sheet.Details.Goals.Label"}} - {{#each goals as |goal index|}} -
  • + {{#each goals as |goal|}} +
  • - {{goal.text}} - + {{goal.name}} -
    - {{path.name}} - {{localize path.typeLabel}} Path -
    -
    - {{path.level}} -
    - {{#if @root.isEditMode}} -
    - +
    + {{path.name}} + {{localize path.typeLabel}} Path +
    + +
    - - + {{path.level}} +
    + + {{#if @root.isEditMode}} +
    + + + +
    + {{/if}}
    + + {{!-- Skills --}} + {{#if (gt path.skills.length 0)}} +
      + {{#each path.skills as |skill|}} +
    • + {{app-actor-skill + skill=skill.id + readonly=(not @root.isEditMode) + pips=true + }} +
    • + {{/each}} +
    {{/if}} + {{!-- Background image --}} {{#if img}} -
    - -
    +
    + +
    {{/if}} {{/each}} diff --git a/src/templates/actors/components/skill.hbs b/src/templates/actors/components/skill.hbs new file mode 100644 index 00000000..a2dce179 --- /dev/null +++ b/src/templates/actors/components/skill.hbs @@ -0,0 +1,41 @@ +
    + + + {{derived skill.mod }} +
    +
    + {{ localize skill.label }} +
    +
    + {{ localize skill.attributeLabel}} +
    + +{{#if pips}} + +{{/if}} \ No newline at end of file diff --git a/src/templates/actors/components/skills-group.hbs b/src/templates/actors/components/skills-group.hbs index aad19848..4c8742c8 100644 --- a/src/templates/actors/components/skills-group.hbs +++ b/src/templates/actors/components/skills-group.hbs @@ -2,43 +2,8 @@ {{#each skills as |skill|}} {{#if skill.active}} -
  • -
    - +{{derived skill.mod }} -
    -
    - {{ localize skill.config.label }} -
    -
    - {{ localize skill.config.attrLabel}} -
    - - +
  • + {{app-actor-skill skill=skill.id readonly=(not @root.isEditMode)}}
  • {{/if}} diff --git a/src/templates/general/components/document-drop-list.hbs b/src/templates/general/components/document-drop-list.hbs new file mode 100644 index 00000000..a474d0f7 --- /dev/null +++ b/src/templates/general/components/document-drop-list.hbs @@ -0,0 +1,31 @@ +
      + {{#each documents as |doc index|}} +
    • + +
      + + + +
      + {{/each}} +
    +

    + {{localize + (default + placeholder + (localize + "COMPONENT.DocumentDropListComponent.Placeholder" + type=(localize + (default + (default subtype type) + "GENERIC.Document" + ) + ) + ) + ) + }} +

    \ No newline at end of file diff --git a/src/templates/general/components/multi-value-select.hbs b/src/templates/general/components/multi-value-select.hbs new file mode 100644 index 00000000..b542eb49 --- /dev/null +++ b/src/templates/general/components/multi-value-select.hbs @@ -0,0 +1,28 @@ +{{!-- Selected values --}} +
    + {{#each selected as |value|}} +
    + {{localize value.label}} + + {{#if (not readonly)}} +
    + + + +
    + {{/if}} +
    + {{/each}} +
    + +{{!-- Dropdown --}} +{{#if (not readonly)}} +
    + +
    +{{/if}} \ No newline at end of file diff --git a/src/templates/item/components/details-id.hbs b/src/templates/item/components/details-id.hbs index 42919bba..58326f71 100644 --- a/src/templates/item/components/details-id.hbs +++ b/src/templates/item/components/details-id.hbs @@ -1,12 +1,12 @@ {{#if hasId}}
    - + {{app-id-input name="system.id" value=item.system.id }}

    - {{note}} + {{localize systemFields.id.hint type=type}}

    {{/if}} \ No newline at end of file diff --git a/src/templates/item/goal/components/rewards-list.hbs b/src/templates/item/goal/components/rewards-list.hbs new file mode 100644 index 00000000..7ab45093 --- /dev/null +++ b/src/templates/item/goal/components/rewards-list.hbs @@ -0,0 +1,60 @@ +
      +
    • +
      + {{localize "GENERIC.Type"}} +
      +
      + {{localize "GENERIC.Description"}} +
      +
      + {{#if editable}} +
      + + + + {{/if}} +
      +
    • + + {{#each rewards as |reward index|}} +
    • +
      + {{localize typeLabel}} +
      + +
      + {{#if (eq reward.type "skill-ranks")}} + + {{localize "COSMERE.Item.Sheet.Goal.Reward.SkillRanksDescriptionValue" + skill=(localize (concat "COSMERE.Skill." reward.skill)) + ranks=reward.ranks + }} + + {{else if (eq reward.type "items")}} + {{#each reward.items as |item|}} + {{{item.link}}} + {{#if (not @last)}} + , + {{/if}} + {{/each}} + {{/if}} +
      + +
      + {{#if @root.editable}} + + + + + + + {{/if}} +
    • + {{/each}} +
    \ No newline at end of file diff --git a/src/templates/item/goal/dialogs/edit-reward.hbs b/src/templates/item/goal/dialogs/edit-reward.hbs new file mode 100644 index 00000000..878b80a0 --- /dev/null +++ b/src/templates/item/goal/dialogs/edit-reward.hbs @@ -0,0 +1,24 @@ +
    + {{formGroup schema.fields.type value=type localize=true}} + + {{#if (eq type "skill-ranks")}} + {{formGroup schema.fields.skill value=skill localize=true blank=false}} + {{formGroup schema.fields.ranks value=ranks localize=true}} + {{else if (eq type "items")}} +
    + {{app-document-drop-list + name="items" + value=items + type="Item" + }} +
    + {{/if}} + + {{!-- Submit --}} +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/templates/item/goal/partials/goal-details-tab.hbs b/src/templates/item/goal/partials/goal-details-tab.hbs new file mode 100644 index 00000000..87fd04ba --- /dev/null +++ b/src/templates/item/goal/partials/goal-details-tab.hbs @@ -0,0 +1,16 @@ +{{#with (lookup tabsMap "details") as |tab|}} + +
    + {{app-item-details-id}} + {{formGroup @root.systemFields.level + value=@root.item.system.level + localize=true + }} + +
    {{localize "COSMERE.Item.Sheet.Goal.Reward.Title"}}
    + {{app-goal-rewards-list + rewards=@root.item.system.rewards + }} +
    + +{{/with}} \ No newline at end of file diff --git a/src/templates/item/goal/parts/sheet-content.hbs b/src/templates/item/goal/parts/sheet-content.hbs new file mode 100644 index 00000000..91758547 --- /dev/null +++ b/src/templates/item/goal/parts/sheet-content.hbs @@ -0,0 +1,9 @@ +
    + {{app-item-header}} + {{> tabs tabs=tabs ignoreLabel=sideTabs}} +
    + {{> item-description-tab}} + {{> goal-details-tab}} + {{> item-effects-tab}} +
    +
    \ No newline at end of file diff --git a/src/templates/item/path/partials/path-details-tab.hbs b/src/templates/item/path/partials/path-details-tab.hbs new file mode 100644 index 00000000..244ae377 --- /dev/null +++ b/src/templates/item/path/partials/path-details-tab.hbs @@ -0,0 +1,22 @@ +{{#with (lookup tabsMap "details") as |tab|}} + +
    + {{app-item-details-id}} + {{app-item-details-type}} + +
    + +
    + {{app-multi-value-select + name="system.linkedSkills" + value=@root.item.system.linkedSkills + options=@root.linkedSkillsOptions + }} +
    +
    +

    + {{localize @root.systemFields.linkedSkills.hint}} +

    +
    + +{{/with}} \ No newline at end of file diff --git a/src/templates/item/path/parts/sheet-content.hbs b/src/templates/item/path/parts/sheet-content.hbs new file mode 100644 index 00000000..c4a7f358 --- /dev/null +++ b/src/templates/item/path/parts/sheet-content.hbs @@ -0,0 +1,9 @@ +
    + {{app-item-header}} + {{> tabs tabs=tabs ignoreLabel=sideTabs}} +
    + {{> item-description-tab}} + {{> path-details-tab}} + {{> item-effects-tab}} +
    +
    \ No newline at end of file diff --git a/src/templates/item/power/partials/power-details-tab.hbs b/src/templates/item/power/partials/power-details-tab.hbs new file mode 100644 index 00000000..062286eb --- /dev/null +++ b/src/templates/item/power/partials/power-details-tab.hbs @@ -0,0 +1,23 @@ +{{#with (lookup tabsMap "details") as |tab|}} + +
    + {{app-item-details-id}} + {{app-item-details-type}} + + {{formGroup @root.systemFields.customSkill + value=@root.item.system.customSkill + localize=true + }} + + {{#if @root.item.system.customSkill}} + {{formGroup @root.systemFields.skill + value=@root.item.system.skill + localize=true + blank="GENERIC.None" + }} + {{/if}} + + {{app-item-details-activation}} +
    + +{{/with}} \ No newline at end of file diff --git a/src/templates/item/power/parts/sheet-content.hbs b/src/templates/item/power/parts/sheet-content.hbs new file mode 100644 index 00000000..f3b24683 --- /dev/null +++ b/src/templates/item/power/parts/sheet-content.hbs @@ -0,0 +1,9 @@ +
    + {{app-item-header}} + {{> tabs tabs=tabs ignoreLabel=sideTabs}} +
    + {{> item-description-tab}} + {{> power-details-tab}} + {{> item-effects-tab}} +
    +
    \ No newline at end of file diff --git a/src/templates/item/talent/components/grant-rules-list.hbs b/src/templates/item/talent/components/grant-rules-list.hbs new file mode 100644 index 00000000..b5cf3e55 --- /dev/null +++ b/src/templates/item/talent/components/grant-rules-list.hbs @@ -0,0 +1,52 @@ +
      +
    • +
      + {{localize systemFields.grantRules.model.fields.type.label}} +
      +
      + {{localize "COSMERE.Item.Sheet.Talent.GrantRules.Description"}} +
      +
      + {{#if editable}} +
      + + + + {{/if}} +
      +
    • + + {{#each rules as |rule|}} +
    • +
      + {{localize rule.typeLabel}} +
      +
      + {{#if (eq rule.type "items")}} + {{#each rule.items as |item|}} + {{{item.link}}} + {{#if (not @last)}} + , + {{/if}} + {{/each}} + {{/if}} +
      +
      + {{#if @root.editable}} + + + + + + + {{/if}} +
      +
    • + {{/each}} +
    \ No newline at end of file diff --git a/src/templates/item/talent/components/prerequisites.hbs b/src/templates/item/talent/components/prerequisites.hbs index 9dfcfc33..4cbfb19b 100644 --- a/src/templates/item/talent/components/prerequisites.hbs +++ b/src/templates/item/talent/components/prerequisites.hbs @@ -42,6 +42,8 @@ {{rule.rank}}+ {{else if (eq rule.type "connection")}} {{rule.description}} + {{else if (eq rule.type "level")}} + {{rule.level}}+ {{/if}}
    diff --git a/src/templates/item/talent/dialogs/edit-grant-rule.hbs b/src/templates/item/talent/dialogs/edit-grant-rule.hbs new file mode 100644 index 00000000..6e4b4abe --- /dev/null +++ b/src/templates/item/talent/dialogs/edit-grant-rule.hbs @@ -0,0 +1,27 @@ +
    + {{!-- Type --}} + {{formGroup schema.fields.type + value=type + name="type" + localize=true + }} + + {{!-- Items rule --}} + {{#if (eq type "items")}} +
    + {{app-document-drop-list + name="items" + value=items + type="Item" + }} +
    + {{/if}} + + {{!-- Submit --}} +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/templates/item/talent/dialogs/edit-prerequisite.hbs b/src/templates/item/talent/dialogs/edit-prerequisite.hbs index 6407f714..11d685b2 100644 --- a/src/templates/item/talent/dialogs/edit-prerequisite.hbs +++ b/src/templates/item/talent/dialogs/edit-prerequisite.hbs @@ -2,26 +2,30 @@ {{!-- Type --}}
    - +
    + +
    {{!-- Talent --}} {{#if (eq type "talent")}}
    - {{#if (gt talents.length 1)}} - - {{else}} - - {{/if}} +
    + {{#if (gt talents.length 1)}} + + {{else}} + + {{/if}} +
    @@ -37,20 +41,24 @@ {{#if (eq type "attribute")}}
    - +
    + +
    - +
    + +
    {{/if}} @@ -58,20 +66,24 @@ {{#if (eq type "skill")}}
    - +
    + +
    - +
    + +
    {{/if}} @@ -79,15 +91,26 @@ {{#if (eq type "connection")}}
    - +
    + +
    {{/if}} + {{!-- Level --}} + {{#if (eq type "level")}} + {{formGroup schema.fields.level + value=level + name="level" + localize=true + }} + {{/if}} + {{!-- Submit --}}
    diff --git a/src/templates/item/talent/partials/talent-details-tab.hbs b/src/templates/item/talent/partials/talent-details-tab.hbs index 0cf64bd0..52f2aac3 100644 --- a/src/templates/item/talent/partials/talent-details-tab.hbs +++ b/src/templates/item/talent/partials/talent-details-tab.hbs @@ -45,12 +45,29 @@

    {{/if}} + {{!-- Power talent fields --}} + {{#if @root.isPowerTalent}} + {{formGroup @root.systemFields.power + value=@root.item.system.power + localize=true + blank="GENERIC.None" + }} + {{/if}} + {{!-- Prerequisites --}}
    {{localize "COSMERE.Item.Sheet.Talent.Prerequisites.Label"}}
    {{app-talent-prerequisites}} {{app-item-details-activation}} {{app-item-details-damage}} + + {{!-- Grant rules --}} +
    {{localize @root.systemFields.grantRules.label}}
    + {{app-talent-grant-rules-list}} +

    + {{localize @root.systemFields.grantRules.hint}} +

    + {{app-item-details-modality}}
    From 646b78f8070fb08f82c5063029d04c2fa59a491a Mon Sep 17 00:00:00 2001 From: Tim Bytnar Date: Tue, 5 Nov 2024 10:14:20 -0600 Subject: [PATCH 11/18] fix(sheets): fix context menu error (#147) --- src/system/applications/utils/context-menu.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/system/applications/utils/context-menu.ts b/src/system/applications/utils/context-menu.ts index 2c54e7b5..dcfc9db6 100644 --- a/src/system/applications/utils/context-menu.ts +++ b/src/system/applications/utils/context-menu.ts @@ -37,9 +37,7 @@ export class AppContextMenu { private parent: AppContextMenu.Parent, private anchor: AppContextMenu.Anchor, private items: AppContextMenu.Item[], - ) { - void this.render(); - } + ) {} /** * Utility function to create a context menu From 2700f1017ab3cd9ef16a0aaa1f08e0b23f3fee08 Mon Sep 17 00:00:00 2001 From: zithith <55356181+zithith@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:54:42 +0000 Subject: [PATCH 12/18] feat(damage rolls): allow damaging items to override graze damage * feat(graze damage override): added initial data model and input fields for override formula * feat(graze damage): moved override input into the hasSkillRoll condition per PR comments * feat(graze damage): Added separate roll for graze damage when overridden * feat(graze damage): fixed item sheet display toggle * feat(graze damage): Added support for multiple damage rolls with attributable sources. Improved base graze damage calculation * feat(graze damage): reverted base damage calculation to a simpler apporach for now * chore: added missed null value check * feat(graze damage): added hint description to graze override input * feat(graze damage): spread the damage rolls sent to chat cards * feat(graze damage): new approach to building graze rolls. Removed extra addition of modifier by apply damage function. Removed excess style declaration. * chore: removed old comment * feat(graze overrides): updated damage roll class to account for existing dice only option * feat(graze damage): updated items to store damage.dice better and align our implementation following notes from Brotherwise * feat(graze damage): added ability for damage rolls to filter multiple terms at once * chore: updated damaging items to use new filter function rather than placeholder * feat(graze damage): streamlined a bit of the damage option calculations, fixed typos and linting, updated code comments * Update hint wording to reflect new variables --- src/lang/en.json | 7 +- src/style/sheets/item/module.scss | 18 +++++ .../item/components/details-damage.ts | 20 ++++++ src/system/data/item/mixins/damaging.ts | 5 ++ src/system/dice/damage-roll.ts | 72 +++++++++++++++++++ src/system/dice/index.ts | 2 + src/system/documents/actor.ts | 4 +- src/system/documents/chat-message.ts | 10 +-- src/system/documents/item.ts | 63 ++++++++++++---- .../item/components/details-damage.hbs | 35 +++++++++ 10 files changed, 216 insertions(+), 20 deletions(-) diff --git a/src/lang/en.json b/src/lang/en.json index 099ae792..2cd4da87 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -675,7 +675,12 @@ }, "Damage": { "Title": "Damage", - "Formula": "Damage Formula" + "Formula": "Damage Formula", + "GrazeOverride": "Override Graze Damage Calculation", + "GrazeShow": "Show New Graze Damage Formula", + "GrazeHide": "Hide New Graze Damage Forumla", + "GrazeFormula": "New Formula", + "GrazeHint": "Formula entered here will be the entirety of the calculation for graze damage. Any die rolls will be rolled separately from the main damage roll. You can pull in all or part of the main roll using @damage.total/@damage.unmodded/@damage.dice (the latter being the system default) or the selected attribute mod with @mod" }, "Modality": { "Title": "Modality", diff --git a/src/style/sheets/item/module.scss b/src/style/sheets/item/module.scss index 4512fdd9..a9489819 100644 --- a/src/style/sheets/item/module.scss +++ b/src/style/sheets/item/module.scss @@ -299,6 +299,24 @@ app-item-properties { } } +app-item-details-damage { + .form-group-stacked { + .header { + display: flex; + align-items: center; + + label { + font-weight: bold; + flex: 2; + } + + .controls { + margin-right: 0.5rem; + } + } + } +} + app-item-details-equip { .form-group-stacked { .header { diff --git a/src/system/applications/item/components/details-damage.ts b/src/system/applications/item/components/details-damage.ts index 4684a651..9d1ce228 100644 --- a/src/system/applications/item/components/details-damage.ts +++ b/src/system/applications/item/components/details-damage.ts @@ -11,6 +11,20 @@ export class DetailsDamageComponent extends HandlebarsApplicationComponent< static TEMPLATE = 'systems/cosmere-rpg/templates/item/components/details-damage.hbs'; + /* eslint-disable @typescript-eslint/unbound-method */ + static ACTIONS = { + 'toggle-graze-collapsed': DetailsDamageComponent.onToggleGrazeCollapsed, + }; + /* eslint-enable @typescript-eslint/unbound-method */ + private grazeOverrideCollapsed = true; + + /* --- Actions --- */ + + private static onToggleGrazeCollapsed(this: DetailsDamageComponent) { + this.grazeOverrideCollapsed = !this.grazeOverrideCollapsed; + void this.render(); + } + /* --- Context --- */ public _prepareContext(params: never, context: BaseItemSheetRenderContext) { @@ -31,9 +45,15 @@ export class DetailsDamageComponent extends HandlebarsApplicationComponent< const hasSkill = hasSkillTest && this.application.item.system.activation.skill; + this.grazeOverrideCollapsed = this.application.item.system.damage + .grazeOverrideFormula + ? this.application.item.system.damage.grazeOverrideFormula === '' + : this.grazeOverrideCollapsed; + return { hasSkillTest, hasSkill, + grazeInputCollapsed: this.grazeOverrideCollapsed, typeSelectOptions: { none: '—', diff --git a/src/system/data/item/mixins/damaging.ts b/src/system/data/item/mixins/damaging.ts index b3dafea5..5c1d8063 100644 --- a/src/system/data/item/mixins/damaging.ts +++ b/src/system/data/item/mixins/damaging.ts @@ -5,6 +5,7 @@ export interface DamagingItemData { damage: { formula?: string; type?: DamageType; + grazeOverrideFormula?: string; skill?: Skill; attribute?: Attribute; }; @@ -22,6 +23,10 @@ export function DamagingItemMixin

    () { nullable: true, blank: false, }), + grazeOverrideFormula: + new foundry.data.fields.StringField({ + nullable: true, + }), type: new foundry.data.fields.StringField({ nullable: true, choices: Object.keys(CONFIG.COSMERE.damageTypes), diff --git a/src/system/dice/damage-roll.ts b/src/system/dice/damage-roll.ts index 2d9bb2c2..97522ead 100644 --- a/src/system/dice/damage-roll.ts +++ b/src/system/dice/damage-roll.ts @@ -1,6 +1,7 @@ import { DamageType, Skill, Attribute } from '@system/types/cosmere'; import { CosmereActorRollData } from '@system/documents/actor'; import { AdvantageMode } from '@system/types/roll'; +import RollTerm from '@league-of-foundry-developers/foundry-vtt-types/src/foundry/client-esm/dice/terms/term.mjs'; export type DamageRollData< ActorRollData extends CosmereActorRollData = CosmereActorRollData, @@ -15,6 +16,11 @@ export type DamageRollData< attribute: Attribute; }; attribute?: number; + damage?: { + total: DamageRoll; + unmodded: DamageRoll; + dice: DamageRoll; + }; }; export interface DamageRollOptions @@ -34,6 +40,16 @@ export interface DamageRollOptions * @default AdvantageMode.None */ advantageMode?: AdvantageMode; + + /** + * Where did this damage come from? + */ + source?: string; + + /** + * Nested Roll item for graze damage + */ + graze?: DamageRoll; } export class DamageRoll extends foundry.dice.Roll { @@ -61,6 +77,18 @@ export class DamageRoll extends foundry.dice.Roll { return this.options.mod; } + get source(): string | undefined { + return this.options.source; + } + + get graze(): DamageRoll | undefined { + return this.options.graze; + } + + set graze(roll: DamageRoll) { + this.options.graze = roll; + } + public get hasMod() { return this.options.mod !== undefined; } @@ -79,8 +107,52 @@ export class DamageRoll extends foundry.dice.Roll { return this.options.advantageMode === AdvantageMode.Disadvantage; } + /* --- Helper Functions --- */ + + public removeTermSafely( + conditional: ( + value: RollTerm, + index: number, + obj: RollTerm[], + ) => boolean, + ) { + this.terms.findSplice(conditional); + this.cleanUpTerms(); + } + + public filterTermsSafely( + condition: (value: RollTerm, index: number, obj: RollTerm[]) => boolean, + ) { + this.terms = this.terms.filter(condition); + this.cleanUpTerms(); + } + + public replaceDieResults(sourceDicePool: foundry.dice.terms.DiceTerm[]) { + sourceDicePool.forEach((die) => { + let numDiceToAlter = die.number ?? 0; + while (numDiceToAlter > 0) { + const nextDie = this.dice.find( + (newDie) => newDie.faces === die.faces, + ); + if (!nextDie) return; + nextDie.results = die.results; + numDiceToAlter--; + } + }); + this._total = this._evaluateTotal(); + } + /* --- Internal Functions --- */ + private cleanUpTerms() { + while ( + this.terms[this.terms.length - 1] instanceof + foundry.dice.terms.OperatorTerm + ) + this.terms.pop(); + this.resetFormula(); + } + private configureModifiers() { // Find the first die term const dieTerm = this.terms.find( diff --git a/src/system/dice/index.ts b/src/system/dice/index.ts index f7f8b47e..f89d6ffb 100644 --- a/src/system/dice/index.ts +++ b/src/system/dice/index.ts @@ -4,6 +4,7 @@ import { D20Roll, D20RollOptions, D20RollData } from './d20-roll'; import { DamageRoll, DamageRollOptions, DamageRollData } from './damage-roll'; import { AdvantageMode } from '../types/roll'; import { determineConfigurationMode } from '../utils/generic'; +import { RollMode } from './types'; export * from './d20-roll'; export * from './damage-roll'; @@ -135,6 +136,7 @@ export async function damageRoll( allowStrings: config.allowStrings, maximize: config.maximize, minimize: config.minimize, + source: config.source, }); // Evaluate the roll diff --git a/src/system/documents/actor.ts b/src/system/documents/actor.ts index dc7fd5f5..b204d20c 100644 --- a/src/system/documents/actor.ts +++ b/src/system/documents/actor.ts @@ -768,7 +768,9 @@ export class CosmereActor< public async useItem( item: CosmereItem, options?: Omit, - ): Promise { + ): Promise { + // Checks for relevant Active Effects triggers/manual toggles will go here + // E.g. permanent/conditional: attack bonuses, damage riders, auto opportunity/complications, etc. return item.use({ ...options, actor: this }); } diff --git a/src/system/documents/chat-message.ts b/src/system/documents/chat-message.ts index c6ed41f4..c6b6c9d5 100644 --- a/src/system/documents/chat-message.ts +++ b/src/system/documents/chat-message.ts @@ -248,7 +248,7 @@ export class CosmereChatMessage extends ChatMessage { 'COSMERE.ChatMessage.Action.ApplyGraze', ), icon: 'fa-solid fa-shield-halved', - callback: this.onApplyDamage.bind(this, false), + callback: this.onApplyDamage.bind(this), }, ] : []), @@ -317,7 +317,7 @@ export class CosmereChatMessage extends ChatMessage { ); } - private onApplyDamage(includeMod = true) { + private onApplyDamage() { // Get selected actor const actor = (game.canvas!.tokens!.controlled?.[0]?.actor ?? game.user?.character) as CosmereActor | undefined; @@ -333,13 +333,13 @@ export class CosmereChatMessage extends ChatMessage { // Apply damage void actor.applyDamage( ...damageRolls.map((r) => ({ - amount: (r.total ?? 0) + (includeMod ? (r.mod ?? 0) : 0), + amount: r.total ?? 0, type: r.damageType, })), ); } - private onApplyHealing(includeMod = true) { + private onApplyHealing() { // Get selected actor const actor = (game.canvas!.tokens!.controlled?.[0]?.actor ?? game.user?.character) as CosmereActor | undefined; @@ -355,7 +355,7 @@ export class CosmereChatMessage extends ChatMessage { // Apply damage void actor.applyDamage( ...damageRolls.map((r) => ({ - amount: (r.total ?? 0) + (includeMod ? (r.mod ?? 0) : 0), + amount: r.total ?? 0, type: DamageType.Healing, })), ); diff --git a/src/system/documents/item.ts b/src/system/documents/item.ts index 55e2f3d1..31c58676 100644 --- a/src/system/documents/item.ts +++ b/src/system/documents/item.ts @@ -428,7 +428,7 @@ export class CosmereItem< */ public async rollDamage( options: CosmereItem.RollDamageOptions = {}, - ): Promise { + ): Promise { if (!this.hasDamage() || !this.system.damage.formula) return null; // Get the actor to roll for (either assigned through option, the parent of this item, or the first controlled actor) @@ -473,13 +473,50 @@ export class CosmereItem< // Perform the roll const roll = await damageRoll( foundry.utils.mergeObject(options, { - formula: this.system.damage.formula, + formula: `${this.system.damage.formula}+${rollData.mod}`, damageType: this.system.damage.type, mod: rollData.mod, data: rollData, + source: this.name, }), ); + // Gather the formula options for graze rolls + const unmoddedRoll = roll.clone(); + const diceOnlyRoll = roll.clone(); + rollData.damage = { + total: roll, + unmodded: unmoddedRoll, + dice: diceOnlyRoll, + }; + unmoddedRoll.removeTermSafely( + (term) => + term instanceof foundry.dice.terms.NumericTerm && + term.total === rollData.mod, + ); + diceOnlyRoll.filterTermsSafely( + (term) => + term instanceof foundry.dice.terms.DiceTerm || + term instanceof foundry.dice.terms.OperatorTerm, + ); + + // Make the graze pool and roll it + const grazeFormula = + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + this.system.damage.grazeOverrideFormula || '@damage.dice'; + const usesBaseDamage = grazeFormula.includes('@damage'); + const grazeRoll = await damageRoll( + foundry.utils.mergeObject(options, { + formula: grazeFormula, + damageType: this.system.damage.type, + data: rollData, + }), + ); + // update with results from the basic roll if needed and store for display + if (usesBaseDamage) grazeRoll.replaceDieResults(roll.dice); + if (!grazeRoll) return null; + roll.graze = grazeRoll; + if (roll && options.chatMessage !== false) { // Get the speaker const speaker = @@ -493,7 +530,7 @@ export class CosmereItem< } // Return the roll - return roll; + return [roll]; } /** @@ -502,7 +539,7 @@ export class CosmereItem< */ public async rollAttack( options: CosmereItem.RollAttackOptions = {}, - ): Promise<[D20Roll, DamageRoll] | null> { + ): Promise<[D20Roll, DamageRoll[]] | null> { if (!this.hasActivation()) return null; if (!this.hasDamage() || !this.system.damage.formula) return null; @@ -627,7 +664,7 @@ export class CosmereItem< }))!; // Roll the damage - const damageRoll = (await this.rollDamage({ + const damageRolls = (await this.rollDamage({ ...options.damage, actor, skill: damageSkillId, @@ -653,12 +690,12 @@ export class CosmereItem< user: game.user!.id, speaker, content: `

    ${flavor}

    `, - rolls: [skillRoll, damageRoll], + rolls: [skillRoll, ...damageRolls], })) as ChatMessage; } // Return the rolls - return [skillRoll, damageRoll]; + return [skillRoll, damageRolls ?? []]; } /** @@ -667,7 +704,7 @@ export class CosmereItem< */ public async use( options: CosmereItem.UseOptions = {}, - ): Promise { + ): Promise { if (!this.hasActivation()) return null; // Set up post roll actions @@ -826,7 +863,7 @@ export class CosmereItem< if (!attackResult) return null; // Add the rolls to the list - rolls.push(...attackResult); + rolls.push(attackResult[0], ...attackResult[1]); // Set the flavor flavor = flavor @@ -838,14 +875,14 @@ export class CosmereItem< )})`; } else { if (hasDamage) { - const damageRoll = await this.rollDamage({ + const damageRolls = await this.rollDamage({ ...options, actor, chatMessage: false, }); - if (!damageRoll) return null; + if (!damageRolls) return null; - rolls.push(damageRoll); + rolls.push(...damageRolls); } if (this.system.activation.type === ActivationType.SkillTest) { @@ -888,7 +925,7 @@ export class CosmereItem< // Return the result return hasDamage - ? (rolls as [D20Roll, DamageRoll]) + ? (rolls as [D20Roll, ...DamageRoll[]]) : (rolls[0] as D20Roll); } else { // NOTE: Use boolean or operator (`||`) here instead of nullish coalescing (`??`), diff --git a/src/templates/item/components/details-damage.hbs b/src/templates/item/components/details-damage.hbs index 9e0d5fb8..8837c05c 100644 --- a/src/templates/item/components/details-damage.hbs +++ b/src/templates/item/components/details-damage.hbs @@ -60,5 +60,40 @@ > {{/if}}
    +
    +
    + +
    + {{#if grazeInputCollapsed}} + + + + {{else}} + + + + {{/if}} +
    +
    + {{#if (not grazeInputCollapsed)}} +
    + + +

    + {{localize "COSMERE.Item.Sheet.Damage.GrazeHint"}} +

    +
    + {{/if}} {{/if}} +
    {{/if}} \ No newline at end of file From 9434367fd58b408ca5929516d049dcab0aeb3811 Mon Sep 17 00:00:00 2001 From: Rost <43580593+RostCS@users.noreply.github.com> Date: Thu, 14 Nov 2024 10:50:00 -0600 Subject: [PATCH 13/18] chore: update readme to include bridge nine playtest --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index cb36e925..52762111 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,14 @@ This module provides compendiums of the playtest materials, pre-configured for u 3. Click **Install**. 4. Activate the module in your world settings. +### Bridge Nine Playtest Adventure (Optional) +This module provides a compendium containing the Bridge Nine playtest adventure, pre-configured for use in Foundry VTT. +1. In Foundry VTT, go to **Add-on Modules** > **Install Module**. +2. Paste the following URL in the **Manifest URL** field: + `https://raw.githubusercontent.com/Doc-Sun/Bridge_Nine_Adventure_CosmereRPG/main/module.json` +3. Click **Install**. +4. Activate the module in your world settings. + ## Feature requests and bug reports If you encounter any bugs or have ideas for new features, please report them by creating an [Issue](https://github.com/stanavdb/cosmere-rpg/issues). For guidelines on Issues see [CONTRIBUTING.md](./CONTRIBUTING.md). From aa0e8f92620f8632ecc8ca2386d4f20c66a25812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mang=C3=B3?= <110994627+MangoFVTT@users.noreply.github.com> Date: Sat, 16 Nov 2024 17:32:03 +0100 Subject: [PATCH 14/18] feat(styling): add new chat card style and theme support * Centralise settings retrieval and setup * Localise settings * Remove redundant imports * Fix documentation * Swap to export functions to match rest of code * Rename function for clarity * General cleanup of export names * Minor documentation change * Add keybindings setup * Setup utils folder * Fix minor errors * Add key modifier processing and skip behaviour for all d20 rolls * Clean up * Add key modifiers to item rolls * Fix incorrect default parameter * Make config values override any modifier * Review suggestions * Add as const to keybindings constant * Fix the duplicate d20 in the formula * Add styling variables * Move sheet svgs into assets folder so they are included in build * Add roboto fonts * Add render utils * Load fonts properly into foundry * Fix header handlebars * Add chat log listeners * Add condition to can repeat icon * Rename font variables * Move templates util and register new tooltip * Store selected config attribute into roll data * Skill test styling * Organise templates * Move d20 HTML generation to d20Roll * Fix double dialog * Separate utils * Add overlay and apply buttons * Add new settings localisation * Add more enriched functionality * Add injury card styling * Add bandaid note * Fix d20 config dialog display * Rename function for clarity * Move all templates to unified const * Remove redundant templates * Fix overlay not showing * Enrich item descriptions * Add theme support * Add damage enrichment * Preload cosmere dingbats * Add damage types display * Add setting loc * Improve damage tooltip enrich * Fix type label bug * Add documentation * Review fixes * Convert targeting options to enums * Update loc names --- src/assets/fonts/roboto-condensed/LICENSE | 93 ++ .../RobotoCondensed-Bold.woff2 | Bin 0 -> 64540 bytes .../RobotoCondensed-BoldItalic.woff2 | Bin 0 -> 71056 bytes .../RobotoCondensed-Italic.woff2 | Bin 0 -> 70596 bytes .../RobotoCondensed-Regular.woff2 | Bin 0 -> 64736 bytes src/assets/fonts/roboto-slab/LICENSE | 192 +++++ .../fonts/roboto-slab/RobotoSlab-Bold.ttf | Bin 0 -> 127116 bytes .../fonts/roboto-slab/RobotoSlab-Regular.ttf | Bin 0 -> 126360 bytes src/assets/fonts/roboto/LICENSE | 192 +++++ src/assets/fonts/roboto/Roboto-Bold.woff2 | Bin 0 -> 64636 bytes .../fonts/roboto/Roboto-BoldItalic.woff2 | Bin 0 -> 70056 bytes src/assets/fonts/roboto/Roboto-Italic.woff2 | Bin 0 -> 69900 bytes src/assets/fonts/roboto/Roboto-Regular.woff2 | Bin 0 -> 64600 bytes src/assets/icons/svg/dice/retro-adv.svg | 1 + src/assets/icons/svg/dice/retro-crit.svg | 1 + src/assets/icons/svg/dice/retro-dis.svg | 1 + .../client/data/documents/chat-message.d.ts | 1 + .../client/data/documents/table-result.d.ts | 10 +- src/index.ts | 125 ++- src/lang/en.json | 57 +- src/style.scss | 134 ++- src/style/chat/module.scss | 815 ++++++++++-------- .../applications/actor/components/resource.ts | 2 +- src/system/config.ts | 6 + src/system/constants.ts | 29 +- src/system/dice/d20-roll.ts | 118 ++- src/system/dice/index.ts | 24 +- src/system/dice/plot-die.ts | 16 +- src/system/documents/actor.ts | 82 +- src/system/documents/chat-message.ts | 788 +++++++++++------ src/system/documents/item.ts | 137 ++- src/system/settings.ts | 81 ++ src/system/types/config.ts | 2 + src/system/types/cosmere.ts | 6 + src/system/utils/generic.ts | 60 ++ src/system/utils/handlebars/index.ts | 46 +- src/system/utils/templates.ts | 95 ++ src/templates/chat/activity-card.hbs | 50 -- src/templates/chat/card-content.hbs | 4 + src/templates/chat/card-damage-buttons.hbs | 17 + src/templates/chat/card-description.hbs | 27 + .../chat-card-header.hbs => card-header.hbs} | 17 +- src/templates/chat/card-injury.hbs | 32 + src/templates/chat/card-section.hbs | 18 + src/templates/chat/overlay-crit.hbs | 5 + src/templates/chat/overlay-d20.hbs | 8 + .../chat/parts/chat-card-actions.hbs | 18 - src/templates/chat/parts/chat-card-rolls.hbs | 16 - src/templates/chat/parts/roll-details.hbs | 64 -- src/templates/chat/roll-d20.hbs | 18 + src/templates/chat/roll-damage.hbs | 29 + src/templates/chat/roll-tooltip.hbs | 21 + src/templates/chat/skill-card.hbs | 19 - 53 files changed, 2485 insertions(+), 992 deletions(-) create mode 100644 src/assets/fonts/roboto-condensed/LICENSE create mode 100644 src/assets/fonts/roboto-condensed/RobotoCondensed-Bold.woff2 create mode 100644 src/assets/fonts/roboto-condensed/RobotoCondensed-BoldItalic.woff2 create mode 100644 src/assets/fonts/roboto-condensed/RobotoCondensed-Italic.woff2 create mode 100644 src/assets/fonts/roboto-condensed/RobotoCondensed-Regular.woff2 create mode 100644 src/assets/fonts/roboto-slab/LICENSE create mode 100644 src/assets/fonts/roboto-slab/RobotoSlab-Bold.ttf create mode 100644 src/assets/fonts/roboto-slab/RobotoSlab-Regular.ttf create mode 100644 src/assets/fonts/roboto/LICENSE create mode 100644 src/assets/fonts/roboto/Roboto-Bold.woff2 create mode 100644 src/assets/fonts/roboto/Roboto-BoldItalic.woff2 create mode 100644 src/assets/fonts/roboto/Roboto-Italic.woff2 create mode 100644 src/assets/fonts/roboto/Roboto-Regular.woff2 create mode 100644 src/assets/icons/svg/dice/retro-adv.svg create mode 100644 src/assets/icons/svg/dice/retro-crit.svg create mode 100644 src/assets/icons/svg/dice/retro-dis.svg create mode 100644 src/system/utils/templates.ts delete mode 100644 src/templates/chat/activity-card.hbs create mode 100644 src/templates/chat/card-content.hbs create mode 100644 src/templates/chat/card-damage-buttons.hbs create mode 100644 src/templates/chat/card-description.hbs rename src/templates/chat/{parts/chat-card-header.hbs => card-header.hbs} (54%) create mode 100644 src/templates/chat/card-injury.hbs create mode 100644 src/templates/chat/card-section.hbs create mode 100644 src/templates/chat/overlay-crit.hbs create mode 100644 src/templates/chat/overlay-d20.hbs delete mode 100644 src/templates/chat/parts/chat-card-actions.hbs delete mode 100644 src/templates/chat/parts/chat-card-rolls.hbs delete mode 100644 src/templates/chat/parts/roll-details.hbs create mode 100644 src/templates/chat/roll-d20.hbs create mode 100644 src/templates/chat/roll-damage.hbs create mode 100644 src/templates/chat/roll-tooltip.hbs delete mode 100644 src/templates/chat/skill-card.hbs diff --git a/src/assets/fonts/roboto-condensed/LICENSE b/src/assets/fonts/roboto-condensed/LICENSE new file mode 100644 index 00000000..65a3057b --- /dev/null +++ b/src/assets/fonts/roboto-condensed/LICENSE @@ -0,0 +1,93 @@ +Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/assets/fonts/roboto-condensed/RobotoCondensed-Bold.woff2 b/src/assets/fonts/roboto-condensed/RobotoCondensed-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..030883a74f71f82ba872403b1c400f91e37c90ae GIT binary patch literal 64540 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

    M zBuf_RMmFYDPF`!Pag(l!jkz1AoISza?5!+*4)R;O;&36$E8=-ZJU2JDt1ea+V+yKH zW}VG;*239)7ltc1renet*t$Jz7A)4x$JlF=2>8hOA2K(By1*OX@B+h0pR@O!MV!sP zFe$2pOiGsT`skDqR;&qQ>Vn1>$ZYrQYv&h$({0E!|4-x2hHob|tWFgvO%wQ18H9*_qB~=@&wCs&a*DF}7Zb@*G{>h2rG1#jNWm zlofE@G1%im#*{(p{EOx+;&)Sfw&BO|onkob60lUQ{)_Bd*AqWY`#2vJVlk@SoLNRa z!)xBwN%orP37PEK!O-tagy2xa!E3%W`C)B8_=Cx-#{q*WJ2~=6w+@!>$n~y7=v5$4Npy%by~v4=B9_*zC0_ zGtZkF3af)w(74tkJs7hRDX--J|~3bE4Gi^lP z3-HY4uKKfDHe7i1FpU(?AO8OZ*o6LdsH8(vSXmRU{0XY#^HIyS9}=82mJhpPguxhD z!@~X%Ra8I!JO9o9(c7r?M+LfEjSvC{;q?I$5qV6KNR|;9qEW;He&l}vd$>n~=9E5~ z{m1mApyUuudKXYnrf)U`$tsUyt|%p$&t#o-S8zA9=of<2H%oDjSr6 zYABTU(o4Sg(}e2&cI`o(_@R6J7*R=Y*1cG%RV?2p>*!D&lc@SWUJWP$O-upWr1Ndg zi@qllbs@#CZYzqg41rIO==%*NDaC6a$BHOGKJhLtz=kZ+0rL64fbv!_#a!%W!TF7n zG>j?$fKel6E+}lJNJBDj3HGrslk~`ljbNoTv&R0jZ5X=8!x2jOz}>7h2;agAouD|Y|@Dv0xAkxdLo?yV-7#uKt! znmvqTT$sS0@+(DAfVq3XRy^)%_&r0R`MLoTG!;+Kk*)bCcs&%D$%xi50$kBOQBgff z_=9>6mpJ2YDwpynSgv%P zkf)mM1|k)0g8q3*|DMm_NBApf!2kVvPrvLh{YQ_9;Me&sDMJupA#0WgEBlSE&qyAa zF~>5iPEtGUKmfEDRBK%L^xn% zV2rE@e|=2W$?6*T)6Ibs;fz`qf)^01!7w<3PjYpPdE$t;E&=Q(vyE>&NJg103u7hY z*a6>8iKDr|$o4Fg z2*It4_4B0mGCqrOV9FH}F~vq`M^8W+x6iH7`Y5OWDAX4la{w+dVKP7F3N_VAzQvJZ z``8<~1XLW8T=J7MgY}22ls85Ee7UQDfhpsndsyI=Pur{uG4fFx3)qKW#3>$b+it?5F{Y7`EYzI% zqx*U%zUb4iV=&BSW~m~l^adzp5F64z4m$)BAZe)BrO!pFWM+tlso7nD`gjD)eh=7= zAFhVv`Uo>B3t?+?D(>m4H_2d$Fkz!l`j4TO$CN!mbKRzkLPO`KW=@#EA5{v*?fou5 z>LD)1Rx->N+G=|xflzVTON4i5p#CS2#DrqzNL`TXz#w?ANn4JGb+xh#SU1cjWch}oWGL=XHVivDm^^0}!%c9yf2I?> zqGYzkBtggGijwg0z>FCXkS^tK*6a)LXZXZdGFec<+K>l|T*5p;LZEht;`3P(0SA8r z2J&(0XHUNI(s-4M128zl9zR9QKO$MDs%L<{|MDNwpAMk}ejMa^O(Zbx)$(+! z+>8Fp$lj>A_3K-m#(UTM`ha|#&mGvgjvk`a+EG7N@}%+Wx%caof;>+O^^=~2zzxOG zWN)S81TD54Db(fV<`5xzUUQw#6}sZxPSjHt9e(~%7qW2HUAo}SDPI5eZ%C(c36Ard z56ww#S$}GhCF%Diirms&RN&f!PMeprGW%}Rq7;BaoqkRHgEE!bxKgyuXKnxe)>Ox8 zMwrC3bjjrSs*E(){Eq6CrQD_++}VwZW6eJ;@915q^R?uQvRQ6sV_2a2f{#K5?tj!h z5}kSEaF<^u^7z>vz zHtl3;lU}mLWPXfizIV4Kte&b?r7!t6l&COaI_!e@d`wh9ap9ALNh(>sBMT@jw!hJ%GdET{{FVl*yNr-3B+bL zNs^lhIj*+vkALnx*~k0+4PmftwSY2-dkCUpMt5irh^6YqQ+jy-G4W=&=`2Hd=>JiWmcVM2}Z z-}iFE45M3STy>D&4gk*XH26X8GUXHBABNsuW>b8)JY=l#F6J&9d~VW-S2zuw>`kjB zR}DET3uMM|W_{X3uxr|7=}R3F8DBIqIsg)vv8 zh4Skp6UA$gIntL0U9A^Olc(1%g;ke&y4F_tciH$nxG~42(?XNW1P8C}) zp2=uxjpNB!yo$y#@{#SiRwHTJTEMW=oYBsn=I5T|6kV^ux`2@zeOs zyLa=3jl`i8UHoJP_##}#yxp^FoN8x4jgWUJKF#gBc78G;YPq#a3B9ZYnVRbhpahzk z3AA^$D>~jri>QueZ@#%wDZ2%5v{g#KvREcTdDlpS&h2`L1i0QMTTCmndSJL<%@JbS zV4Zqn*8fMkUoX(hGHur?_wY7NJ0zv(^bL({m}MMry&^7J%EXpvcpfw_74u+4id5x^ zdd%@Aq7BWTHMOzKdMZkLS;-Po>M6&db`#ZmL{IV;bWW)%QZ%XlRSC4WEbA!%pkWLG zYpK$b{>RH3wXc#5wXYdrJo5;MKdVECPAQoW`BxG@SCDnK)(wy-^bjzD5V^BvM(KVb zj+adE2XKm^s%pd^1RXy>nIWEtrCL!w6w=Q=BBKgS(_DY>8B~NDv{;{Uyp~ zA;r6T-@Ln5;Y>q--HCHE>m}=PH)+7-XD5iF=Y{GBl@)O1BP4-@?DC5U7-jG!ppCN@ z#TDE0cW3Gp*Q9YHLid_xRcO(7s%jop4}>KIh)i9TfTTLLy01H>T$;%zTKIiP#rP}mE>avKJMz=Ta= zx@xTHw3ylq!{HAR3CbF}?P37YgC8e)8UlRe9kBf5gKP|-TC z`GsgP#4YUPg~?SjSpX}yjIIXn^g#yw4roG?nN=(K*+Wm=&_cWVf`CvVL=h8=*-J)y z6h+|t_%Z2KuqE8P+L>#4%0_kgSF|DfxY@4}?8D~I8`iH&i3O~d{;#Nd@-tTZ)oQj2~~J|S~@ z>wNQ-cfUGcI~?-vsb^MbB4w26q}NvTwYG?sv=g<0RZLlReL#_1uSgba9nfeE{W#D) z5`l!Yc8v4k{yDu`g_C!hF*+liMC{Amk^NaLx(hBRN1SZJNPxC-YC-_;R`0sOL)lFw zp`0PU9<$AZHDb4AMOd@m<5e=y)N5BuSe9Enp>Z3H;?>%8nzSeq6>#zb^=g;C2N5jX zz02y$l~I9Rc3dmg7^OmD-ev-DB+FdiRBR9 zy%QEGs_GR#+Z!Bhd zIRQ(hoG7)F$k`WRsRciacFYf^RbZu@vyV>3XI0u-=0#PjbFvH>?$F~Qol7tkXq6IB z8CfOx`PoWQ9O+$D(&(SjRKXG%w&$e^h~6o$jij&J>#>|wj+2OGq=vlnHMH7ldM+E@ z@iVj$XDXzkIW7LmERwWXkriqU5keuEY%>Fi$QqTR%kwx-!}GrbGpsb zsB`O|AxCgVCdmCvbf*Z2t3A8K3VLeN*Ue$VVgHAa1Mzf#;DL&bEV8^obqtzuwDN{K`Mc)Z?#ny-(i{?=O!r@ZM?wC)gbxC;Uoao=`Th?Jdi%`dUsg!?7+xtvdifW2Xud zqXPoLnBapDRQ>gs^RBeuK@f`J3e+AP;SkRcBt&aP)Ie$>5?QOrN2a}aW_pHNZ!AFX z^ge7O)jK$mkB=WjlGkgFMuiGtf7zbsC;deA_5jiY8+^I1C4d7{W5E!{!b$DQgYrL3 zT8WZUOejD=v?3##hxod6s{%FSu4grC!z?)q;oUo7l=QH50k{+JlhkRRiW!+! zuq$o4H_u&*peQzUUa~vFdBZ-I`&5E(t^9NOXX4WY+~_oW9&f2E!5@_tVqe-u+ro!N zg{xagGCCzC*0r=EqW7uDO5l7$iul+wUqW=11e=C1gfBKakN70<>Wk10it9Z#mW`%{ z8|9|%b+;*w?_Z7|Xc9vc=Tjp0T7L8CG_G3~*)+5fhSRHy#%b3tmUoNStyxC13bA!U zVSe)K*a_<9%{SSP`Sh8d{KkW-!>5n!W+Qoj$xt0Qi(9m-nH!wj!xFp|Uwl0C_@j4e z@YUY$-!Grn?33EHhWmoqKBzy_ry(A7l=Cn=AAjwmS7FBX=3*=^aaZ58nE&Wl*uB3z z@p>!^jOCr}c6^!{*rZBK(jwNZWF;X?Y+omASk@|@2`ta9!7k6QcH712B(wFUTA7hm zlqcjWlu8Prp)M9n5G|ff{v=VXk(bkuZHYD98WR>Rsa4{U(__rLLLm5NWs&4C)p2)s z(8yzx6k{tQyg@u96x(G!GHuT6#R(CJe`yhG|N}#gHXs8M>-X=E! ziCKrpj8o0g#KvhVvH}gdPcAmLnI@3eVa=Xgno4fT3hS31=?pO;jrnnf{CU;4 zEmBLTA@OhmCEHvTU!wl)bykFwyf7o=9GRqoid_ZK3Acmd$3nC89Q(!|8*DVfsqeOx z$cTK8k-u0do+2lDOFv9c8vXk7aE$=og}vM|@1PcHjL-(^c+Fu&QW7b3o>8Al(xQ7` zg%wQsY%p@FO48X#l>cDClq;u!z@4qg)h7(a0U2m=&`NEBE=`l}TB#E= zijvOoL_>I$4A3F+dsNI^DpFA4w?5CH&11KvR!qrIO9OS5$*R`7+S#`<6$!9LsEVby z3>!VVpQsAVNQpF2BRh!>M?(?+O6!6770JS73gHVwv@cTo0&Q@3>?Iv=H}1(FFK7Hr zi*ly$FGl})xuCHffxq*JN@01Ud&oh6&OhUGmgi*Mqs4O|i&mpYQWW#U&_Hi=_!qDrZu;KA*9U;^9U3A92=`ZU{==V>+_2n`bq^NTJ@X@7 zuV=tg>ix!&)9$=GPZv*0)%xuR;ZxAs1yKl(DPg=4LKzS#>)jKiYn2*fZaTH7eK^r{ zm{zWd_JQdNSUEEvz$AvDaw{uy)QSWA=CYw^g;xn;qcZd5-u1o|`l+nYyM*K8s#ZRO z64dS$VWug;g{&+@wovWH5+e7B&He-Xxy~3*Px|6aL%I*%z5g4%8*APbei9-`Ym(%5 z#0Jo*afXy`+!JnjOR0$!4?k&OR=E*-kZvgS-%r=yliblAz4|DxNWT{}QT#Ezr=RzK zUPQkh{u+RT_iz13?@1r>!uLzOU@#Hs9^jj1t1Y?Bs`q9&Wah*@fpF%_p*Qp<8g>`; zy5!jndbp^c-OwBQ5&ejMMn6+r5U`hB*UaQ%e&sx?mndo8yxXxjmyZ1VAUUucNEh=w z9cVk=65x3^hr+H%W@;GIvrL#E8R%j)p&jjLPkV7id)hdgk?{sFnTsWRl|=o3A~CaK zCj6wHM(G#`m`uo!Bhw-cRXw*IdEK#P_VY^25#%EIV}-&v>Iq|twJ47y6gmC!Pa*^^ z(Ea0I(DxVm&{4H`Z&OvLNcZIEe(y&$BVzi+pq)A~@pm-SUuZ{v5kDVaa$j73T^EVw zehP^pXUp4=M5-~aP->8}p2}XghsQ3mL~9!-QrBnH-fMexMUwc`W@9tVA2CyB!JU9q zS?+toop1FzIAX1$ss&g|Um@>e11?!nGgk>+sWY>fsvu<>u~1bKSa6>NUyvaz7F0fe z#5ft3GGaY31j1QtQ(@Noxm1V9l0Uic+yaCRyM>nGkl^5%U zWH{#BX;BVGl~xRp%QohPDO*)mh*|Ce0&>{IBU6rfh|M)fn-6jHjde9ni?*Qh^?VXy zb9~qQK{U6e>C0w(c9#b!Al<0U-{J^H&5QX=oHQ^VV#5j^VjT>B;fsV{6>`5^C;`~) zcdBnmLO=uz8Wt+O6Qr7T2yYx`Jl&5!f^I25d&hwQ&2b<=fBqbHz(EdN133#7Y(^4~ zh=iUoko<(?%rz=a5~3s|I%_F2&ir5(MHm&B9G&L|vlvsbq*{IN$u~Gl%G*ry007#t zJ9s)ot?Gy9YW3)S21>f_&w=8LvIOMO7esJS`?ZvenOPk`3OCN#VlSGgrTB`S3?|cT z)ZWk1P)M+>sk=+~sIBt^LLL#jPFS!dv!YC5$gyl$2)*frNRej6Rcq&?wTGM)m(j9J zs1^oBgMI=gY{GnkEX;Cpm}HeP`b=N@s8H!FN_I9zb(Tq}jPxlBmY(V5Z~!BgPg&Pvl%%1*m6vpeyaI`+^uQMRUA|!-v;BZ1U_JOWGSCqhMIjqh zi@M4|mPrqo#3&nph9jar{t7_a^!E~kJN<}hqIEXsW*`toLJ$!RbKa_s%e&gGK1O(P zQ)byM00~KpgFW>mJKOgFCE%*8G&7T##EesGI+_Hs^N)YANJ2v)obNN7z(~?-4h;B^ zwl=C%4yNNf>9xWcwc$GQx|NTMr=tad8(n7GFi!oETv5?{;ez~4I|w#RcL z1?*m%n1#kfDOlh1rtYkJz0~s7O&XJRLI$dFJ1B2w>m^CJXcESgyBxbQ>nz18TB3;6 zc-JTBItUj~gh8QJ*GVEAXuMno?aEq{`f`)CN*_eYi*!M~7~aKlzOHtR)=|g6wJm^_ z4zP^jGyJBlhujKhP$fD~GQp%l9_H8$a-@q&J!<9il!$EFj**$D)!7MW;tUJe%%QP2 zVSnaaYKGt|BhR+Xo1}A2pJCIQaeeHTTye^wTB%BYyu`AC#K6EB<5L;78e=G1(E5xm zx#f~*(|WOyU5>jwOu`?PI@NlVO=Ltn+nd4!2m% z!GhJD)QgF^t}EKw`{eI2=AB!)TlX{T9}E;KTSbJ(eWsSdNILPJd?oe1&RK{p`jGW1 znJj0{HlI4&ZlBi+t)N=I`;~g}4F&Q0rx!_nDlNSyzu^!o-wU?g#CnN|U+CJ5{N8<5 z)xQ;OplUNKtD;M6_UeWLFXqY% zHWVj|(3|)jF~> z!Ftk-OeUj1#AG3A6|yii$zbXpkMuzEsHVzfPw}39=UR8=uHDPz`L6h4#AAMUj9@JT zt>dq${CyxhR7A}NPB_pW6<;it=8N;qkLIvtw=(5X6>Af z+v!tpiN`IVcZD@?$Zv3+A z?rOHWtYUmMw4s20jDelZH$MUVGwSD^;Prnl|6d*!f7zwGoGmX)t&Db={7P#}r+~=T z!Ik)dT+)FFaq15x5n3f>AeLvCMs!4_RKC}TUMw%@1~9T@Jm7$byUAc%XqDMmR(jNHZkket!Y-`hXhXFD>$oqct`9)qv5 z<}dPZ@*_W{IepB6nq?;O)CkX}U!U^uHSsp@;oDY8OZN^c(N`<7+f?0V?9#DA>=Fg| zRu=@~{&aiv-{YNYdk)0d7PmUR{F5ekXCuf=P_E|{DTm?Z@GDWVPqu?Gox(S#K zOp<1iAc*+{4YfFA0eJQa^wD^(CRm`Tqa0bNPl()-ovkCqsN9OZ8noRsXo8_;&xJ_a zyBvc0ZgndLpl1kS##Tv3COe5S?o1|VoQLOR{6luQI{NJiKvpCjIsAJU##SGZpK)$e zgxduPEEN&Sb50bBdI20pVLUGM9hKIV!2sIHW6xa;fVGxBoDUw%N^5%0V`j}vy zpd00%-uW2?$=v_>+jBIuEDMWtpB<1ps_LPb^yH2i>3ug(+p9Lgm*c0+4sz03qE z5xYq9txEJ+#@`KC9?0NHmLiq2Y``WL6Xc#-{jRe?(DhOWDfY@qxn@99==ZuS6EwC0 z_NEca+|!z=U|`l5sp<~%gl8>c%8*N22-$zJ$ewMs^MJCe+-zx&>cG0_c#?=@r>2XL z!CvZ47M#jW6-{s`9wcLWvZc4Y$L^fFx!`QYh#3BQ_^l~3noFC)>zYbd!h-FFRr{4x z=}8Q^U`Z*2hq#OkQHF<&bv4zMzC04os?wF>qWCpUhALu`M&h(aVxoQE6a8cf5VbYcbWN^a_>MF9!>ik z=b-;sN8{dDmTmIPQHI^uWuU5?WyN1J!3^A!9(0`QUvI3@tNTjdKJ#U#;bc#d{Y?2F z_4d4jooPR6>SxuIMvi@tOwp>JSW_%Tk`H-M0L4)h`4YeAl>hU+NxT$T3`?6II}=^; zK5B*mhpTQ7*hg5=%`qN~@-iHupHmHYG_36WH zDS20zX4-FAY9~5vKAvvbvA=b6$^Z8B>)W*M3gF{A`2?G2r#viV`gQXpEhvjG6d=gY z*OV6m>bDhckYR8UP1^2+KTZ(L#`-ZiI?H6a35gA4M`;rZkvgcNtlv!`$BLUXtb?vb z?{t!2q^|M0qOK>QWvM|+cz_i6S!PMjtSKRz6f+Vb7YYjGO@P`R5S!qyeT&|i{Sm(2 z<{zzgxeUIB;SK&x1HLYATmPLhcmo^#?y@ir(^f?ngaRhVOg9f2CquO+s=*z}FmnbN z4=ryut4l~o{o*KYH2o;B;Jvl$1sGWEc>7ecE^_LY8I0j$L&eYm0MUEij~Jn$bI);D zgI+cVIQ4*mm3A@}2C76&1>cN0V1C#)HXOQers@W%Bt_lSM2?}VR{gKSC++nqDjrox zS96MO6m{wx;{@rg%NF{V6U~#}E|_CDsWZHXioPaOm$Y#2)53+z6LPu`DKJQArL9>; zL6(xvw)Au4-?WckoMO*(()tyNEZ*aU+PIv6PJA%tdj)1 zql)oVGh$H&xM|@B7qP<_V28fdltSmab2Zjo|JTl!oS`Dhyz{~-ZAZC6>LHfbPicH3 z0dc*Gq#y_VZic84fn;P{i|fRc$VSBrx2cQU$pdJR0~lbAMYf+pUY)$N?J(2x4* zOP2v-0|9A3KY+-0BxuLxgde6lSdD!lNuC&`L?|be1a0p^J%%ekjC|}}9PlYG*mf5m zq;nrn4JAot47@AUh5$XuZIT#W*)iV`p!F4=01S#^MYL=zYQ941!zipt!t<<@A}DAn zu=dTW`6+|hOZw33489#Jm0Dh@$aT+IaPa(roOA>BfHw)UrL0ywi9*;gmh?^+NszM@ z`f)?nLdCqzrFuvPpWDKLzu@9gf`HH}Po4oNYgnXSbjAC$^cNnk0j z#gWTEQ=ma(u(!q^Jg43cGmHMa?upd@MiRz1s0El6d(FE=i$0TjxK8>Orm z`LAOr%`h03w<&N%MrI_U7gG~KYv<|aV(f3Z{(X;4ni09USqBAzVF^$^6&ZQ9Tue>Qh2>Gvx;cmN%%zJfv#LoZtjM zlSKPsQ)Q+QM#RE!b|NLYsf!pw;bO{@{)t4Rq{|;ec4~d|J2q$tVWXcm6v&C-8n{?J zB>aIv5LN2~36jqQjCH^PUm)72O|VgEG+!nYw^AUwk{{vZAKxAK!Lvh8CK_Mwn<<+@ z;usOZUK*3N(5-7N8en}PoDGioT53asy*JSq|tmMnHr6h%lzT-`> zxcGOVj%E(wjAEw(a`qK;RsC5TNenJ`t=N&b%$$sOzOHwGA^>uPD0f7_nTf%o(K02k z7}S;7$(YdVqho7437e8?O|7|EZCW)`5uMtWy1SI5HqXH z(eJPKrXDC2QqS>tQ2`J-MO6AGt$#Q-=i$r%fT375wl1^^M>I+7J5E``RaFVL=O*;y zYGwtOi=Y+v*YGCk8`>nUN@RR*@mqWMAA>t{V6BS#F1-wCs|tcJk%;?G+>XZKcv)Yu zI2X6#*8)3n9{6-r@KNYA(rMnicXE-N_V`>J8V8)pPeK6J_O;DPCZgMSCvo*b7S-*N zyjYUJC~Yd5H!J^me$=|^n&rWq)YTPIu*z0`KoqN~Bz;1*Qtz3py3t6i&D*+poI z8gi$ZR2O&iaxUchE#8l_RCW;S#9>XMO4{T^iVZ@%BFlJHfwj(BYq8r-qTFp*kgp}p zL7roix^2!OomDe5*9E{1`4EJWh0O7{x$o8t`ZU%fy@V zd<7HqoE$yJYkk;T?A?72S|a!N{356>B@#LHl$dxD76X~^5cHQ@>dV?_Te7pLYK+c~ZN(acaG*p_B)s`>={4n@ zaH&`nPnU9D^@6&PBMXi0nLpjyXiQCZ$3^C60xCh;(5B*)?VHL*EAupJS+P9v1!Zxl zG_Q|=6^dNHCc_pcWPj@vyO~=3Ojyenxus>uym{{06{~{rNSPg=V;(E_pP>3R>$tqX z_K)g+X#-!`_s*M5*z*Wlhu9M5)3y!}7GZEz6B%_mW00*oDf^yw@whEcMx5y&JG3zH zR;=^S4sYQjj4(qW4@d6o4E?b-_K#5dd+X7PR<_n;m&G}OV^3u{3uMG1jZ=D{Ktaxs zpAmoTu(+4c;|b@97RXHbhf#1Mq(;io9qJHB8>Xx$LWCID=U27*wMtlS z`GmNvz4`a2BAK3U>3XNg42cl3qKWVyf(@HJ;v#izPMgv`r#37x3Pb*KPD}sp$K9$5 zu=}J^+!15T8qG(KprY}FX2+MVuiOJ(mKoB^)vv=$3^6L^X6MJ{yHD|A@3BBT?jAt8lWsg@^*kkiTymnxWi zlX6x_sm> z@;ajXbtPq6WZ*~m>5o~yR*LSqd+S!<%|9;VyFc?ex<$W65oM%kSu>A=P6*%<#}X$(X!Vj}M5{-xb8I>n6F=*Sqmu>W`iw_yI6q5i6(e>;EK4AL z@8$qn5vWWRAvwG6#Vvw%bq1kDb^-HZ12b!f)$4d5Aidv#MJy%Fc8gnj8(HFH0YvSz zm&FovN$b8~8RpjyR6ixPCc7JTC=3;S$6|yx&r6LS9;8mJ1x(HFn6HWlxsxQi(3mOG ztkcUp-4Lilo4lD|_S&%RR$8`St#UV;J87SG!%b{fi;KD@KtT;2=1_@BwsrJ$T)hg< zACG1xW1rVKnST~4sa9%o+vzTe(JCl%d}XykK`Cv<9m`e2s1KsyHqC2?aO@~(7L zuA)Y*sQ^EVd(GVb(c=k+J$F#ytWuVGd*s(_<>wJ9daW%n5fh4*vJ@lj_#1Z+Zyh0B zzym_+!|u8;h0^cAUU&D7%d?g{1?V)WF{VQK7E$jAq_O1D%V{Yx@kklSeJsqX!|JAm z3R%VOS3kGT#ID96HrI7qHi1L*!i44ZN)cTkAe)?sy=;BSIObn_bF+vn%-qX{E@SY6 zxV3`-rfRj?icq?}rA|?n=pDtRD6E$pnZ#^p2Cu-E3WPk=rUX zlPR{!4Y&%OD75bUTWmdDQ3~4|9p+-NikH^-2sm<3vYM)efuNXX1&hrORP|FvEhVFF zD^;iO)yO^bWBe3WdrH$A7RoLu^eg?GSDRA4Qu2f1;>;JWsWd*Quk0q~hiCmPdMmJl zYm6|sHrZ8XP=iayj0&ffH%xTdFgtp*KI|@L_d?Ult~^1#spS%j@zZ+IVcWSOz~0UJ zs9!Q~K-dbnee@KnPyUsT-v-)U&}aADaw?DI_8`v}g~s5Eh1Wf8x4y{^=w*ddLpZqM zTX+XcAR&8KoeGFUwkuGRo6Nr5>Lwd#x6tz_5`cypx}ZgR@Q%;IjdIE*H6+FU2FO83 zwMlVv(QjQFW z_NlkZ`s^l0?8jPw&b8aC;)B!wI`rx^_c=izv;S?PtslgtueOhdNv-^l;l!+*O;$PGaP{ z`;_02E*o%_j_A&}e$00g%pB)P$N6%N=9kWK@$;NG=eU}jFv8@qvMw!q0kK+4q*iCm zYR$R{wlct5D{r}LqG_8CnVKhB>&YOE-%b1OVQ=Rf#@oUj zITm1aXct;ASM;oFEHNcBTBm?jR%I_xr`2#z2^QrhJy6eJpv(ltlj$ zM{z;1vae8WLdRjfOet%wX1F4|*!WGEBH+kG4^?G8dNkTt2Wh{s=aH3<2pw{SfRWIV ze%eTWK!$^;s*s(C4-LPU={iKjNj|7doTP-P-u|&yOe7cd;w!)b_cUf)X~nf~%U?Ge zAF$c3`sXD8iCz3oX$p?AtfPeak=ka^LM4Rz4l`jUCq|ntA9Zd&s<@hpX2a|-XrJSnRFy`8j zM;c$jXp~Pq0&`@@imQhbZFIZR#o2YaF3*%vdMY~H?KDx?Fb#cl>=S9UA@Byt5I%nF zl}?4`vtZD-Rl{1kSj83J{qz16rn)mM1lhW;Q@QKJ*St1a;wF{yreUPa~u+FF4ZYW zZ+g9IBw0nX+DOd_#w6#^SC(tkiC5<89T77X^b$pw*!BAG*u@0|cC(Z$el3#M;9%qk z2?p=V++6`WNTRsdyTUIGAiH_5-6L%_--CVMGIzvu<&n+>BXoS@f>!M{A*4DPO)uh= zyAZ`|cTG87xbsMy-UU*4_2IT|%HZQ)MA%H-M(%p8tc~SrZkI>|SuK;&MhZmxWv7kA zn8sDDPC^yyWuaMI3Z1lV`^sxiMARn3#SPrFnQ+{=22JROVp)-p!JS!NYgQx*5HRg>z8a5s?O!0`sMb_a^> z0vTMGRoZ4L>kxNzd5}VL?V89XSD?72oxE5@<*Alao`}s29NX-%w0ViS-E)fVF37Yw zKK;%}Z=r2kGz4`hcG^?go!V{Ny}HRA+~iW%_mZ|935G_El75*^BoCwZly+mgq1~|8 z1A3?5n>9+5XJwgpOGll`r@NVUn~&$bbFh$+5E#~&?S<^eGPC5(l8jTbn<=`(`c25` zTfQ^qQP`n5_ZmQ0@onQPB{gUE(xH~LDKIqmXxNi%)tuB~;#tG4&Po&8&#Ci;`8=5J zB((AjH;&u>h&*Ki%DtTla$>wncct2ud`za)cH;wJbX7_X>M}|bYDKjssl_J7lEn^m zO`ST*exWrvgV|YxzNv~H^Q5>vRAFGN3em_mH!A6e@CD#*6*RLlXPk7mV^LC*P6;Jl zdHC+ml^vOD7%ghH2caQmT5iCXUzvL^mlz{2x6|)lN@*J9b6P@m13PSVWkypnu!3+U z*=CTlHWdm>%`d9)!lgQ!NoAK?cNLk=l!hvLje@%$Axd06sA|B8mFLo`_tsK*8B*4` zR!9*VtjP*YzEqE>WRenFAz($vaWY}$`e$;fLG>(E4)asfIK(p?``_-pV;=Xiv5q_3 zkJ9Py)t8aYemtl+FOZ~`B<1W=-`5aB&>wM*Do~YVDh18GVDwB!bQtP@5`iW_z&{Vc z!YrA};%KENdt}fmntN_{QD^Uvbz;X^g{(4jOJz+{NDht?C;cloA58qS%m~Y&kqu7x z>xfea!0ip(0!iXNqTo5*nw*<=-jTN8ZPR%qQ!Er60vmJ-8F<-kS$MO7Hy?8UD$Z}5 zzPl`}aXI=DMCAz;UrADaQ@N|HlCBf&uJopjSB5HSO3F4`5?imABrgL006)DSJnUk{$Af*eq6Ni;peo21)(7T0k$5$ z;R3MZ{GYKlPi(v)0DjTwdoO#U3`aEb*X!TU@3E~|?Q;{~uW%m+UUdzx1Digma3UO< zsQ$-($C=>QDgC~eXpbVZndv`5Zq?60%#p_;;h2A1<@BFU>p_N{*?)=TLX#6@u*O^A zLx8Q(jp&GJxNy&7GI7$<}tCP=lFid;1mn%qas4aZDX;Ndtxo$~`RD z1IqHlb-gR8s!CExulM&%>o|r>npyrB^p^?ujwa^tk;q}k1Sg8w&lLw4f}kCU{T{7( zy^9-2pDmJ6B)Slp;{d-|1h&s%L~hd?f8KNoB-F(yisNK6ICeQj`*Vz4f2WaX8Zy&? z{#Z;iA0f7sTjcnUQ%`k|W|eU<__o-OnwPi;pvTpxX&?4}qj}%+6m3%NnN(-yf)9LY zi=(dgHyQoD=}9$&?mcZu%|D%9o_#Fvv)NvE@b9tS$Rmz~ zJ%vyIX?_lVycf#y-NK5JhndFKhn`tZWsS9e)TNsji&oDp znkM}tjBep78k<(rLI(`{izLuy!|HG6K6QXUo#m$L>1LM`xli(`YT-bGf`V!p$C;g(To^O#NEa!;sgkN5+wY%aR}Vv2L7 z#%o}ZRAg-&CV{s-p14<>Sq{fIzMOvx!?%i~fu;{ICyzKW=!8d!Ph_POu>>~sAN9#H z?ejZ%Q9(SP3f)eT;92)(Cw7s3efuX@-8_~#w;G~DB(ps-hIWM_haT7Yz@9rINJiojg0kG;{Z07Ds79F;SRqoywH`g(O~@KlcauNcxRYc` z6p}z`RAC~})5tyGHw=!tpT_<9D7RXaAH~?hGQuD>Vjvc8l?*ZFMSoJQO*-2kl_W}klJHzN zv1OdXi>i}e*vgP(8&=}`M{?{77u># zVU_|LeEHTa>wGBT#SkqJP#}daR^1=huI7xlrb;#VTjeh-hs`G5qk2x5X2wIe;}2o1 zhZyc!Wg>yOIwWsZz*-#uPd&&m7QX5XUvx;eDzUp$;F@EX8(-V9m`Se(8P>ctg44Xl zc))SuP~%Zd_@D!;%2lf}!#!nNQ~P~C8O7aJ7TibEfs8M(ExyE97;{`!x_Ev5K$|M@ z1Xfd;(^FVcd0=CFI<}iGtno5tecUnj&#^ORy{G>5)Slo;43A@CfZ%d$To#OqNnzm8 zkDnVq#jCx4n2Cm|-5tbihbtM8Tta+z5btH%-d=z1kr3w{>}JvbqTdu5a79%nbf?h* z9b`({u4E)DNf`S+$SLzM`4t#;e$cChhYYo~4ejqD0@sZE%zdNxFYrwJwVU8)#g zcv9Ns+6RYYZ@h%LaW$RbOWHz}Xwqn&+2ub4bL)rq`H+PQ$_2e~b&Td0zhdrTr1`=9 zPrIW)y)>G!M1y_Cys2?wX{>4o8DMYTzwGxmD4@f2__!+RYwAp?Crq&2ZH#3c>KM@! zW5x)yg=z#pfAN`e_?8uG1on@}(w@>-1I?fYK4tX9{$zB0Eas$N<%y7bdK~tmYD5X@O3m#FP&&}KdGhqJ_dC(HdTI{HDA^Eh+s>e zrhu_}d%(M)FEWW@I!E&q={w!;c^*7uG13(0o9)h_ocog)cEP6j?d|8psYI4WE`~LnfL+SIEq?5A%elAI{5tV|8xl8B za&IGlKCM(V>VGt?n?2S{Z}y!kWcko{a-#76aVvt=VVb?+Jxr@O|Lc9*eu96PwoCk89EIJEPH}31inZRz@9)s?;2xlj; zLDEybK{3GpS-#M~fr|n%m5OA^kg0?wV@yV6>5IZy!QR{EO51gnFNIO;7rC$R%$SS4 zr1hSrNLftkQQxUR@`sXHbDN$oRhrGk(RjK4z9hM_q@?|^=A3XTnzK@lW(`YO$%F#) z=f|5nCe^E3#u%6Td=FsVx+L7orvmH~0qtwJDKgSj5XS&Es{qC!)K*;<|J8GokK}2s z^kN1G>tdlGG6T%;vr`e90lB715)+)kUmWLdCO!k|E|0a5n;~G#2;4xN0mHdjDvHj4 zmn8aFN_G&oRR5G2$oCgpQ|xA-(uGhk{u$`kP8^dE>IkBoOv`9t%r_J?L&(izgA(Dp zU}IuD%%#@>k_rf@N)OwOeQWC)Qm|drU11-9U_^|B~fC( HPLzNw28K_| literal 0 HcmV?d00001 diff --git a/src/assets/fonts/roboto-condensed/RobotoCondensed-Regular.woff2 b/src/assets/fonts/roboto-condensed/RobotoCondensed-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0066a53c1c59794ee74af132794df2f9198c071d GIT binary patch literal 64736 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�Rvu-bBuYT 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

    p-+pi|GU?!eR}h;K`GBn# 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%0D_r}!GwxlD__qpNLUn?cy2|;i*eDRF?s1%3*8c? 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

    &9}t1GTc?^TUF*?xQA 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 yKarY5hr&@fAS2PDk=O?N#Wdks_K-x zf;ck}Fc1(BFzRn0lz%x$t>(Y7{(rUotNy=+6JmrL*e#1!jRau;R3Z+g2_4Lf3ow>0h>Yqgc5}X%nm{dTEPhh01p<01i%F&>Qp!-fv=C+EitUB2ugLq16Nt=SfvfZ z=L}5Ldib5;WrKW%m`T@SBkW-8{B>hIxar4d{`mQi(M^bs(qc}M$yov?Fo|*K=l1&- zCK?Dk1_2YX{G!!tGQnnco>kk>w2masgBC|2ht4k@BDU70V8;%cfZ=JLvc#1xk0-$0 z*g0<&Fi+hQK46tTYn~rfWadcQGqBl6dji9%C_Ui z8I|&dq-_zeU@0C{M8F~m9Vb}|aw#Jj+?fE7v$HX-@x&TL%mRt1MIpRVOa;976P6mN zR3r*q%7%C;2&g5xkT$rgHiKr$v%m02o_{V4`WG^f5~9_W=R(Lm!R3Tk@`d=FDGj)N zqZPHt-f^$P!Er)B`5soI7=&QYU7hk{8gMRx;olIB8=To6y5@`UJ8bMk`o-5tYKBUa zjWwnE7YjIpULXX)4-7_lgYMfN1V&&^(D~lr@Vdezz8f>QcB!SPcy!Gakpl2hLpYp5 zsH~ockiA}GohQJGTW zLdlXK7>E`a46KX@CFct>`fs~^v5{+juiM@W!h-tl7qSZgZ=|!60#*%VcW|6ysiiWx zrSp7&{Bsy|WdsoQ{pXZT1PL*CHHprc4l-O#Y587=?-b?H1TSUJIEy*G&n zoOinI+hMP7hDQWb7+l^rbHjiX972ghLe7%N1Z%u&+Umb4_EM?SsbT(8pJFUVcX3CG_9C>*VaiADdvKzWqY~9&l6 zh2}{{*ME)Quy%i+<#|eO=OjN_Rq(LdnvW)|QY=O70?MTYNzzNebY`!?tm|9a@&guU zrCq~FB(jGLXFeC?x7YCtajPq(s}3xz(`cdr+K_x= z0kw%jhekp`W)r8>;3PS1OwF9Rm8mv3%TfWCV+30cerDkjmG{XpyQF*~{bZHDnyagt zt8su`Kp8F;s1aO89I4y&l|v^9>tHXa`RREg?3zWZ(hK-tgC`#2?wJs_zfenY6?Ig7E zk2jmV{;&9+c6|LJ(g~bMIH5_BGq=tsn=j%yL=~;jVgty9K=*Uy*Hi0dasz2vUlh0|h%Y%K2SCN9)D5 zH#2YoSf+`o6NM&C3e*poBAvBcYik<#j_e-rxNHMVkyRR{n_P31Te(;3fj5IvtPk`v z(nM7xy<7d67TZvkuJ!7>u*LAtzQ2OSjlY6UpK{of?nm}4MZ|O8l6UfZUQ~3$0`kc> zqTFOk-(zvUV#>9&8WlAH?I_Wp2k9t@lC}sd*M768GmW)(0sWsvjOY<7(F41aXG?g` zS=AyDTJBW(^;9n;QZ~ez#a?1tC8~Vmo~WCPDZs(>!n-TsTJ=KB(8$Pd$i`lxygB9%xtebuN9>k2T4hAu znS&jp5e6}gLlH=6=U4tYirM`7W^{hexg!|FLP0$jH7svG&3t&?9L&%i73@p;{HDHYZMQf28Tv0)2BDaFqOpFHSu6Y_@x^S(bf1&(+ zCjevb_c4ff!CBMif&F`<3-(b?>SbD1kEq*%pJokZMi191r zE(s_I$-sTU63_=q;C&D&92$j2rH(fbMQxS15Sj04vrh zcwdoh$t8II>Pz+}2m;B-1P=AsK!G_0^y3&$ISC0900ae9C=CGyhWi_E?f~3N5>zON z42&F!VoI%AS-8N=Wq(bOr?=DdaeF@1PS`)tA($j->J%z~Pr`ou>!QOGUJ8fZXgR|X zm0Zq~vc90Aq^78|#S9q)hz894 zfSf=`Tu{WG4R^IZZ09p|chO}PDQ3XgE^$-S@#*xHEm|fX_&LHWLGe8Tr?BT53O9Yz z!q2FYTED|ic)Ay+OIv-Zch#F)L$&D_=i!@~xobSIcLgD~#Ni>>Pc{B7j(Gx|b^~WW zZySvMNG*zbdmFS)n)^+{w)s>fB!OO{=)J%d#Lr@buiC0?K^5_)dwIU~@b)#)qlHHe zzy3z=s=isR?VZ=HUs8DgAlpJ3rgxd&kiUAM#Q9gG8Tk3%JTA4vT<$%I_x4|+i^UZR zA+wiTAMo`Veo3NWC2{^i1rjV-H)Jyos!H5|#DY_jF^)`~c&G>?@Mej*Qzm3?Gw6ib z;NoVr-N#<%7`p>GLkZk2swB9WJ=JbbBxQ437md!ijPx=*^VDmPm|1pIO0w|>EVhRf zFi$^;!-`-y_SilpDy!h2HB}8yqCB^%qYky(ST@!3Guq8~?D*1gJm$6OrgZL5J0}1< z>xe4bWx3UhQ3+2wr3Nchst`d$z;hFBNN?IfF6JN|NCklpo3rFSt#TeG+G<%KOv+kt zgc#bHl4u-pKk9lH{HU>vKHp#D+Nh$IcunC1Yjw7?DJujHl+i^7=b!eql@K zwF_vRdJN)O9Pc&=PMt7s9nj38AAJ#1Y9_vypiJ#nO+Bv>Wzbkn%QAFa+n&K$T`vbm zLjF2E=J5PoI?gluDTKG(E)sr-fH4TLI{+A+W_|EusX&*`w|MFxe_ zZBgC$f((Bws)hq*V%@71mG1E1o;G6-drY12wMiLz`E1VHx-B_}Z!xX?a~YqT%<5^T zPOsnG_Am>MlQrYtoiFpS-H%nq1Aab(XT)i(|i%pzJ>3D*5?C@;sI|Dd$HVBQA4N{S4 zp>ppMnv+~C`9bMKjo#6Fa39>`F&s>91mlq7qNU@XkRgjV3j!y=LP>_W8OnHW_ktNv z@eH$p(jMpAQn(g0wurSc>L|GNm4PbH= zGvY(y2jZ2RQ!mrE2-! zFe{T%sb-8??mL%rw_>l1^FQVN5Cw4b;cydjwOd2B!`CJ*`AnINrlY>iCwxr?6H#mm zAJ=L3_yU_ZI%1&j<%7xTC@hu=yDyr}u;jUCGN_ng zbe=2l7CIdc2cr=MfLVgM%8(3+MI(ud4hkAc>nOx_RYlZGTeBD}0dytX=c=Q6mOCcm zYz%G3&-?PfhEz$p1f|(6*^u8!on)8#uWSEnKG4kvx^i)fOsZ+)>B-ncwLEG z$YnE`%mYW35cJUN*Qr|%p-1W(x=$?gwxe5oPUh$qx{#MG=8hRzrfA)!5le&bX zLpkzxkg$|05*4Z0CwN50!;nUeb=~Rc=xpd>iB`0F@u+MD^I@OX1A$h9$%uAdn`;># zqkw%#{#@9N+|`xo-(!2o-;i=i{2~;&X47ccp^yyxAj=jCr$N&&YiQI)YD0xe?FEV` z=%O%@*#5wg7C3B{D@A`Qm{7~6JM33_Brs^T8q>;cb1f04y$_RnKd%B_3kvH-gUD#u z+nU;Aiw(L%)+vUQ(QJhdc)*jgh)1MTysSpF**ADY_gzs;Iv$Qj!WsMnpGnPOiH5L6 z>LP~|Q;w|bC;s@}K@70E;ES^B`E{a5^8)CUfY2UpQL} znT-Yg?+$khQSCd3!a$J7BRl=y!S5k2^*)|xRsZ>PgM}=%rL5~vNEzp>{g*T&aC~L%)lqn^#%;rlDW*7 znGnH?Mx|6Hom+4bGw z`#~cVlL@WFKW$7w%>qtW`;j|6$W{x5hL6--Vme%+ki`>Ac47MYpnF+b$3KN)08` z0jZS!F=g#Xo8@q&Top!XTWPOLNwRGJ^pW12?2&GS!3mF9Yg($mTwSI)x4~?SsEKL z9!t^x0DI+Pzf>dt8)tspK-_d%w2blpVBEV)#ZXTy5}87(Ys#|ax|GT`)y>81eKvTS zHZz`<=kgK0m0zL$9)i&KKSTYoO$Hu>)b)ss1c)|C5QhDab4Aqi0YeMs_-~(D$r;;7 zT4q*Gb|qiV?5e;LBU##yWUvjQ5;$}*=(qT5D;?Nwqi=UE%$;c8lH@MUQ}`tO0Y+y* z-fRBxV#%MSfFhU&U7SWbhEr-WF`KP)W@AapjAqKRmp$YkV152B0T17bB1H+YyfB9T z_XPT8VM|~9X8ePJ831&DPDkl9xcA1I!T-*Y4!&vi&7VXpk(&}4i7r(w*Iki;z+yJj zZM)E<=Dz)s21%eb)qQ0KtG@LVoBx^j;|^5QzJ$Em`&X^r8&$Cl&qURQ*6>d8*7X~O z+k>1LbA&o}O*}X7;$}CxVh_|~5fn6F8@kC5>HgUjK!CYM z#gz=V$jFy+w^TOYwL{hgK8qo;qVmLSQf$^Ffza#^y&Xj_Ak1!1^$4FzQ8l!z*{F;k zcQWH%K}<)UhIW7?Q>b)Lb2c091dY^5Hi)V>Y_LNB0|?=VT}IGIgC^%y zJI$}ea`>LCY$TT@+smEEh4V7QnO$X~R$y{F24dZPc6?Sr(M|Rsm}0i*i%F-GS@r(| zs~2>ub)s}&#$c0vr-=HiP5FfkO*k7#$3#$c8cfdubp=SvwNl&b;2imc2`U!%YvZ=L zyZ45s655yIAk%GMk*2w&YMWV4nV*9Bc)TZC$h>~uYxkZ&EQo6mO}pD)2b{yfs9{h_ zAzCp~r#V?x`68J{loWYqIoX}G)uLby z51p|FXW+CVd^qYZz1Rmv-=Anc0|&#v!1#&v+&wIdM)aw&fhz1xUUDG9deKo;rU6DvORWUzPFq3_{k zgVIf4)L3)8@Kt!YxD(O{!Zb+Aq$ML&l~~NU1#2*DnIt~C>RRHj&{+D~6c|peXPHmK z*YmL-s~evGkW`CN;)u+d)ESJ)-`lHLxl8=5ODI}a9K3>$hzEKNtRO?9^r9HmzGIz! z$X7AM#O`>Q1d^H1LPpInFi=^kol3AOd>rbTS2K$O-i6koL7OgofbBKEVOZkV4cM`J zu!zXXt(+_(;uL!1e^2UIr9s$`^0t+q7$rU+KS;_aimtXwBzqkaw6=>ai#4Ivj{M^_ z$#g|yI1I$)K9Gw1Ksl11n6;7%P0@0(NF<#fRCZMM^j39)WM8O)Zy_DW22%M=*}h56 zpA?hPvZO2-Ly&S9nNOx-RPJT6o%@$r>ZlMjVa{IYRc6-3Nf zn`t17RU+?=SOEOY`$?z+wOf{1;9)?EumS@ik8$BQv7Rv5g8HqYF)M*? zB@)*QSDHa~>r0Wjnv;Z3bn%!u0{iZOV|U-+vPh_J?*{3U1%d}v2e}eQnOd81ljM}d zS@L*+VR295q^rtfC6<9m)_;~{*=*>+X6J^5KY#9kfi7ul-%%sVn@re$j&y8dA z&XR;i6J_mh+z@6M13iOMl4EQc*}F~_)ggzk*@A0k=TTUZ?*Z_rafh67`SFLZrV)UM z;Uo)cmXD0YVyeYl(==<+PK(Gcsv!y; z_9L;~(68lk26j=X#FhGD-~Q*?$(zu}ulw#~EOnEUf9$o$@hD_A8PlG>NHkgqm^z|;J9P`bqob$mk22jT^eAJx~2<895t@aY>p2d1jrtEHh^t}s*qN*x?&zw z_MWc6t6kC;#QNYyyY(>Y&BHXZah-AH_^!rMtQS^}#c91*wyqEtZf%Q>I)8P|jvw=( zJUrz(IWb)Eu`~WZ;s4>9!ItZLtbsT^$DI3d$CQpn?|^qtj6wW7?@a--Ckp$nh1UB) zTLb7oVI*$0LSz_&b)!(j3kwdLDRYJ!2I$q==GUHxL1N7A zin<>PRL7L+8VUW=0eg8`(Pt%Q7%IXsmjE#aujk%98Uz2(5OdS?glBfN{iMcxTt~q6um~3UC~2I)>`?<`Ig4V~GnC4TgLkf4AOLv;!BA5i+clQA zIM&}3z|2(4n+P%Hi1#n~k8ypQeMfD5_su}2yaCe#EM?_$q{|V9MAGdzd|p`kIba6; zDAC|RtnBWDc(%H~Eb_weh6mF4s3lzJw_YtXx;OmusXw+g`~tLlf2}&?7kmeMVmU1v zxc!TXymh+v$*Z(I>xXV}qZrlc?C$yvUwhib+>=3uSY^X5SfxwnF5I-e?Qx?hmnSU} zUs%S~xKPv`K-vkxCeRfpmUD*L2;jU>pm;sV9{2pJ{Yu`)K*oKtAMpo zo7fwkt=^$=#hICda7rDQ!I#HTI4GMjLfSp5UA9vuYY9*8?FzIv5TO_TOFbiT(3B*x-)&9(1ls^ znba7{I}zvlca8R=txx$-L$N+Gn}{_rQmGZ@NV%qjuiUQzF@$(j2O}D}j4uxRY${cx z_aQ~NhoksK1mNE?B2yJv{eJY++JUEXFD)_+utoSI#)TLsikgnVo$F*fG_oGl(?NhH z75iD=YTkO+=GNTMTXvlhsK-VbA>p+_x%>J%pqn$ylNbP3JbBA@F%|4+HUycUD-j$D zJN5`2WJzJ6GwlrK`-ixtevR(V*c5bYAI$R)&)GbxHR|DH+Y7ujQu8ZWi5zHrAlw)8 zlgu5~9*!`id80zlUcs5h9TRbD=vLY>jD-jV(W+pU5O>|_3+~hT+IDP8`2En2heMAx z*qLP7rGE1J0(;&Ztowoiba78~2UNO6eG=l}$>X24RGE$BzUBe#$ez`*lLvOLpH%GQ zWA;%LtOP~x5lD8ARmh#kx|grQ6A^!pRdJ%5qk49lhMC7?wwGRUg6|X{?Sij| z0L*T94HU}DmuXhc)MKMi*$$<8*iOz;^E*i%_talrLWfiVTi2n2`svT>T7*@_N$ge2 z#oYWxsJ^83*Wb~CGpO=({pkIAnf1Sy&rpl&LGzqmAJ4Yy(;QQKgk&Y6d&U-)>XLpo zs@red^e+Cw3ITLnd&>!c9rF=H1_*yq?FLW34<8d5KCJTdV4Aue-StCWpFT6V57zeI z*nil9PKLH$_jO+Dy&*n{GXfr!-4}Y@5j?uDK>#;ET!$9L$1Ai$Fic}Z1Q&9b60Hl# z!BdT(O|7i8?e8jrMhzwy8&tx)fw+=;1{UKkgd^d*f$kpi* zKdWBabupxT%DYF^8UHDJrkYP^`A1b?=~RK!oxURy_p(*+KkOgAY!5fr-Cvty&96-7 zN=UA~tC;C=Xka|=@eQ^d8WSnHPg6V^yyr2Rjw5KTGb$HhTN88X5tvGcp7Jmc#&-j@ zcEwh~d9!7ov4b?L-fzQm6ArQo57PEkQfd`>{MG$BB(>IPsB-Gpzl~v`*Y>0S?hxJG zLel%Jw$nVkZo6s#c|ud7f+j@YupCawWDGT z4~5?_kfhp9e2xFfTXSXFrg-B$y7-emrZ8uivptLqxZMlr&LIgA!zztN7z?0Mf?iKL z91n(B6|T77TZSMeRdZiO5pLWN9$6YBYT2eym&k;1VSo-39}>hh=fr|!j^vMlg*Q52 zVTI2h3IZBhaW|?a8=Cc=dFCG)U;`H69S^uf3JL6dkUV<@Wt7Cyd~<+`kQCC>g*P&! zs{y5&!1W1G5F|~H`NafIrYck1)6OmM7trJl`z8XfYB^scc6r$&YnIfu0I}hEwp_Yt z{d16cs<*d`TPM5@FD`A+LONPC?V*-QnK^Fe^eH6EH_yg*Z@?(v!SNn~7y$$Z?Nrew zc-q3^*rqUK9){n6rt!h|dXWLDCFm4zECgBh1GWf>CkbW%gIpykIowMhq?=~QF=)$p z{V0jWZ1elyYvjKtKJ%R*F&g#lJA-o~Cc^lYnGgQwNCn>$XZA_5(iSwNj;ZSi4 zDBR%rV(DyN`~-ep5~G+%79k^$Ccyz>Q&1-MWlbeRxj1;}XA`cX4&yt(Nz_a`Y7iJn z$bfKThzeQ|hKvxFHZKu^A&($z#UxRh;1m)?Bsc7-a)=x;nl~W)hZR+r2_5FDL=hnr z>3W%_5}|v&DQX@n7P=}x9J-Z~1P3(47>Z3c#W?7ftWv~!P)BaaYl}x)s4V}cJsNFE zu*ME1Hb#E+_63@oF%=oTBP&F8OJa_L83Za$qbaf05=mBNXCq*B;@>iKq3ztuU91B+x8BPJ{p&%>4PBC~bcJ^7 zi@M$y?6C{^3<{MSrCLt3a6ayOB6z^zlMkxVBG!V$7pgu`T&hTwkBYm=jv_%5D2@*G zj;B^tcn`w+juNpVQUL6UlPH{>P>fB~0*;&l8P!G<(rC-i0L8tyBi7)Z$)n z&r$j#c$^{)4(-xlt1jT1PsIc$9TOxnCOGdHG7o)whDLk_XEjY6HA`Xy%oOdgKsbNK zaP$@nG6iq}htUNuv{pPLCylBFULX{8>?RFB1Lp!wfI`}dSPq$HcT$OBXNJ#=U0cr`C=-Kx%q0{c8BBTN-obF@59!E zw@|F7RTIO*@|{rw4)IU6?*tcAS92^om-=^V7{ivOe=?3M%mQzV#yRLvV?+kXhnSf zd;q0B@%ImmI4~t;91md}`U2k?YEk?tqr9N2DUlHB%PFp=E{9!{zK)t)j>$C4{yh1S zQGgM<00>Y3*a#bO%i%6su@_8QHAe0Dmnd>WrtK+K6j@oE`oouYc7=mk$c-(Ow8{nv z3+9jkEx#ZEt5fBZ(6IjzLtkbigUUq>pS&7`P+L+F-dd%FqjF+3Y_)qt5%U;>YndE| zKri||_mnRj!_UIvl(^V;6B;I|(&{chF^=Q`zmSr-;tLm(zc<`ARLc;Tey@HsNe}}W zV^t@+UA&{gfO}md10j&;ve2ldY>CBgs})^JQJuoW*ZlC?iqXurDE^!1hI z(PlHB5rGs&0Wk32h%C<`96O82cKv;9y|`FWA*b+cnoxH%j#&+md~e}qA>afGQJEMZ zqC_r2qH8cR_bUynn`wd+qRUk7M3{BK7ma1Ewo|S^&O9vNbl`-h;iJ$9V*QH-xHCXe znxVgAB*e-%Kvt7njaCG*vj*s92A`5g*iEBIC-n(Fj^}jzf`e-JbQ9S_>!`|&+_8W0 z4t^o6zjJMzWz@I0K|PWERQd6%vVZFirP4<7gYY>@^AUhKtwBFnc$MYdu;d!0A8_-; zl;q?3+~2DYj5mler`cu4s?X*YA;oYc7gB{_AzqH_CWa8aOW{g%=yD z^u)|GU}gC;h<83yFC_)!y>BLYVC`V%wYdK1B>g0?-5FNdX^@BGS|XUikDCr;7hQC; zfBdZV=S{&>FADBcM$4wilphKNSA>W?5XA=OcnvOT4KK-FOK_%K|8MxD7yj_`RolbE<%jod-0Z5p_wkil zm&TIy1uXp`QM1NL%d~6$3C*Xy7Wn#b(@15?*5NU+irvOTH{|Ef742lzAKBA<+PB&E zzPr|Kw{^?#E5yD_mRU+O?y@tWSZSi<7FM?9KdNdesc7g&kw{xpl`3jUMT-r728~?5 z2!ehWJ@YkrsV@rt5E=(jnPnIUlBsJN2k%ZEVDbEY>le**LWlXMpi!@u5BAdfztuj< z;FL1#33vubikf*xEVsir%BQrx&l{(>w2>pIwOKdH!qMo3lq^784G63I|_J#>m@|IUMGYf%%s+PF7mY*dp5TGS4COy<)Lx$072^dWQob7_~w zsX?=L-7+?2PLZzb7iD{~f$#RLLvyA^{a>%l`Oh#;RtAJTH4t`#}BDD4`rE0s9pQWd)#iZMnjq`$J`Yumf_gq5^ z;N90*yax>0_x*BxCYfLAHM6#dKX8oj3P?h5(2~M1O$E^SUT|1kBXCff1R)0{XR)zz z`;yKw);iv-D+}v?@NdqqE(x(@;mE=z#K$Pg&CO1`z1~qO17+#;X*Dk8q=1n!+hinZ ztwdQ1Ey9MI_>QQEm5YR9x#4vz77AtZ18M2BTO*^+=PPB}I|zE;w^nK;>iHd^rKr9j zN=!|TBVeSdt$3GTa?^kvi8-lqhB|neC9XT#BKAgrz%?h9jse<<>SuR_1@ww@llmfl zgKJKX;eQZ>p`NGzF}bm(FDF* z*ExJSG=4w+ApMHXMn)=1G+ZR6d9)n)V|N z%E2B$WO@aCJWwbwqmDA7G7*Lelvo`2H*G`(cSJA}+BIcJi5YKL#<5For*$YBLfhlj z=Ww@6Gk=qft&=uWG8p|q^pa*UGhxBnxot|{+;dfhf>ZeH*qv52&xe+trA4QePY}s@5GBg4^{V5C8v`|op!;@I(Xxx7py_1v}P6kkw6j*Q2ng^@ND%|yU4#ww}y9RrV!;POgouN z(ysa-4_$|nwkm`NJ9It>42|ON6>Ja|J~&q#Zzn7s6U^McDgl&|~h#XmP@)U>2jB0d>*5#LEIHtWCKF}UyER>-wRWrP>M6v!Z1}^L02wBSKmihN<;@g(3T4)Ks6iFw9Xf?rdgMB-hZz) zqAm*?((|GIoB?JkQY1Roxjt65JJ!}aR^mU_U2dYP*1VY&#gN*h))?r{&kZ zPhu&C*rjbd#zL5ofNxz^ir4wvAEfahf=!GPMORQ^&u$GR&g+n1Vy8Yw?<|_j`n;P& zySmwqp!!>X3uoAT!T_{H|GI{J7OgQ7|H=L53wIq_-yIenvo_GbSKjz7P|-6q zh(>@sI!|N7xV+}rb7~vA4l48&kZ}Ui%&*x|M>?Ck1$_U}1}xKS;b5^9r@3*oe!(tJ z6K3>;b0gkGpAg`KXOnWmLE^-EoGQEZ;i7>2i@$DIk->4@9zhb{baijwXV zb9_tc!B79e7hvDRG5{)QU{|w8aywpI1(LNF4m3&ziwS;AQ@#)`A_SS?vAQ}`>ksS) zNJ>D#N;i*Y8j)T;yi21xS&Ly!fv4Lr9OdwXmJ(-nCTmZ^wL1y^V`!>0$acT=+nG`z z&)P?k;9rd0cet}iX0%kxst_F##|;~HRFv3@z@{oTFo~xqwpothxZFJRqeEh79=8{{ zPd!>Q4Ezl4DY}+IF8wRM9$q9#q*8%q3zKXlY^YL0wMkV@r9tVbvaiaUD#x}ogRak0R(3l;isBxjU>{~gh%B&WDA-pZaCwloA|M|V`zjb0WXQRTj9MV~>Q5DF( z!!*MSca7g^Ax0s77ws=>ACbd5)22;29{fcG9D^)>vH7K+?kea0>^sj7kjI+dXSE1s zGLpEU#N#SBi6E5*#W_7|+p@se8 zK$jIu?aR1Gx}kQ=2f+gq(!XDN^9K2-U%I{oI^w9-zeCr*2hV@~$j=H1Ic<8IIQjdI zVDJ!e+I8f&F5tVwg#O?`Ff%-Xhrq~jN)(`f4Kr}`v-?XQbPuy1#b;2$_qX?bntU!# zOCsbq=GRaDL^!6?=+D(rDNBW-Dp=spJLJHNn41aZ<-Naa zd)@J?HuaATgIr+|%4^lKrZTwJqD`GkWIJ4^W>e!uLJi%bz8I!z%xb zn3shIUjD3ViMO?sU7S`>^UmsUui}??c>ly7Cf9+-gG+mm!JB#5T;}N8=Dzk{F3t7; z>6RQ{5+gx3Dw#7x8bzFGZ%ESyt-V(y-nJ z)}BqMUs$JpH`U+(6mP@lv;52|7z%?KS}SKVRqdzDx?QhM?r0RNKGlsY@5@!irYDn& zDU>bY`}jfr_4Y@ZI=9n0|jatZ zTtUzM%};S}-br50u6Zs4Dju=O=*PqB)iW9zD_o5a=j-GmF@P8xAQ(OXCX@gMUaYuS zdZUQaGe6H%RTH5v(FF+05tC2vidfQ042|9HLw-FcwCXtW#CYKZufjhL9nHQyMN8TO zXf%S_OG8KrReJebYt|-D53^{r*0xjL+V#>{?tGj@^*wS#FgJuL2HI=JASYMNE)&f@ zW{DhThFfE-*t=*p{p~`>^_nGj2!cl=4gU9cM_8GGk`+Lp33IJfLOIAZR-zJRMsleG z>n~)qOy|39HXw*1LcYUdN{*e`%ExZAZ8EliOySbb_3#kx4}v2G1J|q+vlqhZBwqpd znrjJut#>;a;7zG^(FYMr&`~I{@lE(gd{4ho8{2zC+f;tct3kLvxg{kE%appL4P2ZC z3d6>A)esBfCOW<5>%77KTh{+nkzM~DQd$Qdiq=-YpmZB{VQ~ktq~Gf!lkPQ&xGZvJ z|L6DqOzWbf^Or-P0*C`?C)v)`7IyAl-G}lsXv}N^^~_an+yWP~NmqBXVpj**<`)N7 z>6DHWpU1=Q8I0$B=`~17oxLaN_TiI>Q!$c87&F6G9?t8H>lMXT<%4pchF+(@Q$jfr zZ&&FI$<;YlZ}AdteDCU^v;S`rUra_ya{A$-BWC7zU>G$R$Wu%LVCW8Dh<$%aNl-;t zHMhb-csn7QdH3L9pEM%jkjLSnPH05?07k?1NB|b8`1CD#(fl_o1-}6lisW?yNxVW} zkW>_F%zTMu6b3$v%XwDW*noQ&+zg}BMi9$v$5=+AzHCOm=dr}Z?~VW!RFyy^)KcZLAs z>CZjdWn+i-_>y@4+nB)CTr=wJ6?Xu9{jFy&dpobq8^}eq{UY9*{1#%r=i8w@j6Sbx zpoAwCh$9LyKW6|M+|2DoLj zlyAZ^S^F$(1P4!WV_W7*NBlloxz9`5d@(?+)=n93aVoGnzh!mf750dpF2~S;^w+!% z?=Alt>*qUGi1^O7+2*@fsrU}c+1-mFJ{#!YJH(Ht>&N||s`hQ{GJB@f|D%@MJa6cG zrxPA2`k?I1_dI;7&B!a>#(tQ(nZ%Ac?)kx=V%AL>oY76{6k3gx;krPa4$bMprNu1} zcY|e|C=;~5LQ+MUz)e;mN>+eFfcPbT)axo)C4VTR z4wY6tJ6>GqSAOso`LYJd-X*vkl{VmcNLqubav~p^gKNe1?{amS@~_? zY}Ff<%%?Sj`BRPfBR1j$b|?M)JW<+sN;N*3#XKKRRO=L?tNI(H#%k70q;bA`fqQ;p zRk{d;u=JkK!|i0SXPGSap1(VIDdG5y z`i+6r@L`d}W?*c6bO~MiDy?H&K_oo+!BVT-6Uw>}d&)x)qCbsFDd^0S(p zya4etXL10&;`YJ*gJ`Tz2C(fOMwB^mXlV0v5CTXNtkgGFMu$$A+yNn}znQOLEyjwy zQYExF&k}gb&oWFC!7_nB1hBj`y)-R){6-cn9&nbejQ4FhRSl9pz`uZT>Rw?5{fr^* zeoF05VFy7DJO&o~9sEXInV1?pO6Z?~0G=4y(9VVd#6~q%RG-(X%=cFGG#?tND*6rr zfY<{9K{AGfH$emn;3m3`9~n)wJNJ#@OQsVj->DByJ>GkN!gyiMy~f4N5}W8cr$Mwd zOrw?JLJ{q@8W_G>9|okH|WitPT@ zt8KYT#OQjBug^a{RJyd?ZBrNnil~TCrj>)Z#sEo~LzriE?*S6rY_q$mwcWh($?|*v zlK^8;&l#Ff44j=fwWP%d+5?-y?c@8&u6A$0H-H4r(dukWGvGcaMIq-Q?nzI`kwQWD z!N!a|n%$8C;d*#^SQLWoO-@fi#A;i0)1_J>mEMuFU-3%-snZhcVz9H&5qQ^8*8V3{ zc99Orha^4CBt(u=62ZVm2Q>L8(X=&JNtQGt8wSH*53O&DG)`-L`NZ=+l7&B^86s*M z#8NC--x%IHFNicFGOtNz6OyLkl!jIgSWGM?UTl1xycd2r+g?0)TxBw6f=ho4-?Hg$ zKR#Q7aNL!e)21CqMZyH|>t65T{-GG2y&}U@E>VT5LNK@o8x_+|X#smy6lW~Y`!&MP z7%kf=k!7pq1hQfb&|$3?EXjtKJd8D!l>azxu_uKVfF8 z3WiVvu4W!R-*-&~ga+rm+DLY)z|K#)JS$g%{}VmMU$?CJ3o1(Sxrc~H+$s5g0Z2f% zzX{jcUH-q%#t8cVcF9ZPd~7V37B?f5J+)h>MyQP>A)ta~fYY|w+kK9~_|Zs)vUDyW z0LQN_I_71!7t#5OoC$5dz}!auCNR6ahuJD0dWd36CqSwPwgafH6jTGO>Xj`W z>tbJ#K5%v;T4aMRZ3qZRNN<1RF==AI8X=nWdH$}vVc09&3cPS1tUBW5Y+F|Z_X-4l zLYD%Hyk=yzJpUKiYfk%$;9leopK+}Pl|EGjZNp^2vc(iW$0(YMIh*17x7xCPQ{)%7S}pu$r$uOsS021zk{ z1;)T|Hx-9TlmHWXcdZV2IG>e!1z zz#e$j_F}O9fy+uaGsN|_j3R9nU4dQv4lA2HL5tZ#*fYPgeF`o)4Dp!w>S`+Ht~KBx z<(Ys8Sdmxfop3OVyk^n|KyNS$Wn?LwQB>6Z`$4uUZlIdF%S~C5t`o$_&k1#bIyC3N9o8u^=mopMjJzr}=XZ<&Ot7k%FmnXdJu|6HV_9u?R}o10ffok{o^r$C#WOKF zHn=K^qcg;#Jz~}B7yI$3q-?qDXv~@ zHY)WWc8OC?4_$Eq|MZ7`XMq7(Op9$zoYc4wU^GmyD(q__Lc!mME8!Zg^5=gOmpTNa zltZ2%8K2Kw%1engt1Bg}C>r=M#{=up>VX5C5l34^=rc?rCgRYnLSOf3g1MJzT+E zUwmf;&=eokx)~t0b&CeN2V3PR1W3DJoR2coDov*0`Fo>mD4p9&`dxQ|vEg^0_ygPn zBi=)FMfnO1{UE;twP@=f20QYUMf>!?-j(N~iI`pDiVB!!4Z@B@A_kqbsMFwjN44wJ zXg3W?xT?MOE*JJh*=y0La4H^4|IP>sLdx1AKsRfJd}wYs7d9p| z)hBFmfwv079k+3J>)8;BI;*^PVR*SC4zK?mIM*=%{_^&})=^RMv-K8xzb>7`ZJxTn z>gH+78%)KLB|5c;n^yL1)q`B~4#0x3T4~8F+U_eMVc-J@2y7q_HwoGva4}5Vs%Bp< z?w3Y{MnmYM$A~$>zXEsxzwgkPJ_#8kh~VAGXfu5Pf*^hS*&+dfxTHU?f~mjkIh&8^ zCZ9&#e)ju=L`AaipjK-iT1N%yS6HDCVL9H_ni~Qi2>Q3IleFm|a}{&HbX<5LxUr*i zn9_2vlm~lRIo4-lm2y#iy%!vMtw`4sk8I%Hb+Z zFBT2?u+PTutFVe#YZH{JV=@y_E|F&j+R~F-t?7eD8EjB9O!ilHIuG0`Pa5mFD`-u$ zq6p?f2w`PlVi|Ad+-SLPc8uSzGoRU@H#Zsio`djf7G{GNZ~bT?ven&zN$vdl!>{x1 zv2@4xJ%^N@fC4nS02z||&QHEyw!H4gD}VN3RU4k&(p|y&j{RS)V|oK4a%|FbBT~Xb zmY_gY8RCmq2+N0l-GM7QAON-}_JYm`maZ7f)Li>dzg!`BQ8DY-JH5OLc#T#KiHn{mR0x1n|exv%OLYC0+sA--v@bt51BHyzux-0@-%Y@#n8a6PgKVh0% zC8cH(u^565be`neIWd)bZ$3w4mrM%tqGy;wztx)xq? z7?{w12=N4s*64@FOKOeui45$<3N;5F^r_>1l>%}uCouLMqIO*J*q}}Z7UHR zAhualye2I=QaS!$FIJ7DNwi{RvrC;k%fc5eU4{^nhk0C8J$E}dsXxm;-D=f`B@s&h zBV$&`{P9mM8(!f9t?~sbKw|LETJtzg-@h4gIPoy-+Hn&uP4VqQzF<8@HBS!(OhhIA z6JDg3l)Jhy*v{Eoy&ui%zv%}ajedIG``&itg^5qLM|9Oju)f;~N}O&B#z0X9k>!Zg zOpM@i9wlCG$;pD}e#l5_oyvb*6zBc41Vp4o1mHLNU^xk5+=TY?CNQ+5WdtIn@-NhU2Ivijt%Hbgu_zmvoWQZv^OS2&TME0>5TNTsVkePy=?bK*NX$ zzgsk-*c7$exZ((l`yTC+=uMso>%+*Jw^=nVS$X{50GdDt2w0Rzt}$k5hkJazfm@Md zX~v#?kvBqdY1O1)SA}8lgtyCyNu|Ko#=!iRM?QSQ7#Vv$B9;+v)TTC6aF8SVUd}dX zThK9}RIv1P7y>#w%xA+0i>h_EC{s7My%H*0&1ua+gshxs)0qANjhoj_o;SA2k;W6S<6vbov20EnqXZfWpM{0ab!*EB09#u z!)H_7`D3r+dqLUbdO__+sDOy~Qz4y|^*5 z4ciiY`%h65;$Gl9tBKF0aA{F z?yu(Q+FMIyPk{A~Nle7{@tbqwyBm-t)Ri%`Dy(pP=A{#Egb%+BKMVOb6Ym9buv}(s|75K6HclytD1ZD-jLO!X> zQG3Rk3|Qx~##%cPTV-|LHmHk^tEQ7fnY)k<_6)cnwP`OBp1StdpFeOj z9})%k*_43HZ1(k8s7{$rQ{<}^y)%^ z7E`y(6eDX8fg8Zh>P?$23CT=@;{Mp|f8fV4q!!aqAzhT@#7(n!+r+j3bP~c@#u+AV1J`oon~oy-fH(_( zpdKG7&l@|?53-))XYDEnBna4%!kY&@b|2JDcvP?gDq|_h6^J?5lTT3nZDZQ136rjD({) zpBO{;7#_dA)txuo-ai~a{7zneHUu?iB9#47lUnJi7B@|0Pwl4VUA>pQp~3b3={hxx zi2g)+tXb)mlI$(W^h=TFqK@v19IlBnK3V(WW z*8~MC$!c^lNtKR(TA-`#W78E1JOk9`Z6Vtl8Ii-*fbDrs9`8k2i;4Cfb~d#Er9n=| z=Czk*+0fgFS$prKbi)PR7c_tN#pk)m2n)cza0f5s8)kajr2|T2llNF?Z6B>eL1qZz z`U-@z_7F+1xfLsV_C&#YbpN^EAw_+D1nK)5aHEKZgDZ1TI7zFlW@$N72bdPQUbJVg zZSpEjLrouLE4a3~X8w4LKMS**mpSv!VuMrjTy@O`&zK1fpQN~74GukTsA-u;lnmyj zB&5?Pe99aXW;c|C*xa*}Y#boxoH--n#MDNsiiD#wI!lFt4A>E$bs@i#ptmq+b319x zM}~Wt)D1s`4}nLyRYmU<%8+Lcuy6LfLcXo( z3WYI}500=;J7HbjGx4` zZ_I-19pQ(N8c4JD{C;BH8$}M-)S;+L=!*B@!n5xr+GYL>ffb(H5Aj)&ec;W8%*1{9 zH|)PIjg7O_^-rOeOqcsFf8Ab7m<&5FeA7|K5|~5H!^7ancLrHh96bIoQ( zgv3OvVxKG<5YqWu61cKv3?@W=kmZaSPlr&J*x#TrfGu}4|F<+Ct zf;;$d3kV9wPq z!AS7|)Q{+l1{8@`E8v&Ed`I{dE0m8O`bQkZ`c+ULIzZzux zNwR88ANgmcEYOyc_hOZEi$;*v5je9^W&mf{zvx2Q>DGG*DCWis1ATM!z87~n<&2~& z%qfh8(Q$2j)hdNq{Ts_ufnfYKu@w(Ht1fF?LU60<(04Nbq%ky-Ep-=M1RkgN1nYE) z=E(WHt>rOe7Z-Ve8dytKTjP3CtUJQ+p*)-1W#NLa%7+3p^OWC82)qp`%lDRBX@rDy zlEU6r29YEn!%~1#!Yf--NEcsezgUb6%f+n^=+uGmyam4x>!*YM=+l!v)JB8ywc*XO z&PLe~tYiv$7_kSPxtXo?N`Oww!FD~qQRXzcS24K@t2pER?OW$wFBSx7cg>a2Y%T&34*JW`A(-^ zfEBQ;`*o?WDbn|4SEU@gm<9%>$6@CjL?@3*ZD}4m8D*0SR26^sl((#^q>&Sb(8xOQ z9vK^#A-SpS=z>OvS>n=)(p-fXU99KMRjaT#!%9pA^;YBncndnHu8cp5c%m9On1jjQ~OS#`@Khgz_Q9L1jfF+cAS#G=Rv9u=#pI>ZF0 z0Uf!k2<35R=imaj0-RZS0~(kqQS_}UR+7Qte1N^!FBB3QnN*3p0peulc&zi~o;2iB z#l%(4w`Z;jBw|Nb6x2@$vVF|orIraiRoYm%c5_+_r{9pB3KQWK;YxmZmS0M? zer~k+V6WzTss|9E59#rPTkrk#?0`*LDmtoUW^hDgh_~_U6A%0=Kd%4pu;~{t#H?(8 zR9lAd#i}UB*XIE`8#lE(S3UVyCV+M7D=DD1+Xq$6t#6rJ-PQqK%r4M?kxGq4PFdY= zjHzfN>iFlAgwYJsR>kfINrJ#Y&4w>96Y;6$Ad1pU{=*~5;Q9z#PciE|dW(N658fF+ zgNUFfufv-bBP>isj?FSkF?fYX(?C_RU>y;@=8V@%tD}3R;)*?9 zRq%CH8?_uoT{!!j=Y90Notl4-DA27R;9fCw27JdktMO*DHgqssGyhpXW0iUD{)5|I~4UGYaF+*%+$wMJC!@s~sJ&h|m9giuYvH z`1;7^;=;KALowf~98q#g2zlZ70Oo5`b_?vGf9I30buX3|0C$aF6h?m*OPi@?Dn#ps zJH{DtE36##D3dF_dKlw2EdH2o^2i7-)rk-;2>qz_aGxUPl@M-cD>(GL&!(O>JFTkO^g=^k<> zWAkJ4&K*!Fmy~XB&XbA&eUDoFM(->`a=WEJhs$Ejn-1i)3>L0|=U2>9MWH3v-}3Ay z!x9Ejk1#SDm83IUyJNO^ldz&;CIG8Vz%BkhlbpCUZHDLXIGdxsg!ZmteG%Slkvrd| z3l$>48{m$I4O-=uzrfeV9-Mt!WLQ-_26YmLO_Ju#R-29LcgGj=O$7lfd~I_Ugg#{T zP{2R_9(R#Tc5IU+S7yT)hZu&Rk?aC|2Af4-8Pq6^4?MP?x~-QTE}@YzPdw4b3Dk&a+{26dvHlDNIVrNnCuim_FY$1pY|4VPh?} zm@CGfVRe+9V1ra<-m{jd%r&tQ1rk0+7UXKH*K%mrDZ_|EWUYnia8-aaR#kTthmnBm*Mspv1!K7xi;9TyjcjrdJ5 z%rD?*2FaO}kfPW)OW*J49E5F8O0#zFzeus({f}It?!eICX;?rfyu*=X(RP^GO(swA zMuM5-c#l^|K<-`|9lqkj-K;4(fS*<+p)8X${TAy|f~4eVyJn}|`+^2qeAC~TW$^L~ z#ovMZthCAwZ|!-pbV9a|-CyP^PlnOXmc_kFc+>IfC=Ww9OV}wt--XU^%0Ma&#f5<2 z+*^K4%Y)*rW;lR}J1if(|AX|xysfBV$@Vs&&+(&iESvWQnFDggk?mZm9db7PGJI<| zD52tSgmiBmgb3?ZMqlR%A~6QbtDcb=@R1Cu?Q`W)ji->y|8&)x zAOn0!W+;{j9xnUs75kt3rv&Epna1 z(S07b&vTdpFR{4QsG>hNYuN zPj=;n9LsX5R4V1F{L0(A^}{*y(C)2!aVwmCnc*9S3Viq6-m6la!n5)uG3_kda~~yt z9eSu!mS-vj32<;;Z|p8B5i?tTGHZOl=n<;0BbCyQ9(Z9+y2x*&-tx6|PBMs22&<*9 zy0QB(m6Okb+WTukG5=a=@6}I!Yj)XL9548H_)`ZWyG^|g%t-}E zA>PFu(o16OUWEd=ZNh+5DUn?&-@F9=3kZ0hfImpyXrir~zS~4kjf*S82`!JrX`!ElFc0Tt*2%A7}pAip;2%wY85bh$!?y zzdP&Zhgekf@x!YcK%YIZ{jXqi8#ZI_IkJb0lN7*3Dx~{5xdZ5t0&}R!;SKlyy})3ga?K==LN_kBL#-{Yin=_xBboc z1X{I+O(U$SZ@G*7rgd%L4JU8)cI_4K}Hg?OW%{0Zsa@X+nxD-%enU& zx815$O4ciN9*gL%sJDwZbfh}8i`RFouDbFP9_>%9Qn~s&O?ys6go`W=ojG^eJVzzi z7-Z&PC-Z?Knb2bj$VZp2aIptB-sZRPI)?Xe+Tt0aRQ}#xTzx5Sw~%OmraLRao~CF6 zDIqkpI6Nmg6w+#t3CHVeKfjm+bD`AQWb0Z%nj*;C2?>eXzoiavmHaC1`xjpipfK8T z{c3RjHD;Oq?A&`EtcSG$iV5Z6XMP54ps-&6&{+>#=6?<|ztM$$z$xbJ=lz&Zi~K*E z(GvhA2BAHHh06A3DL@reh=c#jLz6pAveTa*sy=0)+f&6IonJVmlIh#)VInv)-v|y7 zeV_9N<>oh{0<;{K=n}!g-`|}E%?F}6-$Dlr-sCj!8ai3u?S2X|P#?LW28I>Y!K)A>wgG#r7WANLrNIUWeFb9Yr z%Io{8G1Q{3@lOv7mew2z&dmQNUVF;%-rFFv{oEJ%+m<}=YDZIZ{rwAHyTzfM8NE3- z(G*|l8kD9rs^Hxn0;^-zgv<^Z-o!R44 zRD7tqKjFqw$(WU3}cnfVhcwesJ;JffTI`HDBQ#5M;v zgdzsAbt#uk%M5~exeOj1>l2Eqx?L zs3j|Z<|ViXFFz4n(Y0Yi*5Xf)WOb3-MQkQLP`FrzeZ=e+IvdI|{4~0!=y(}EEnq+H z>9!$oL*^EF7%Y>aIb+WrZn=)7X zfp{uE0P`94SzqfMr{Xg9|&);CyfD`2OH}d1i>fS3`tgi=i=SqIK31qdlHp5B4kY zV~|p0+Ks0_JEF1MGfr>~ZB$)V@?@Gp`1wOoItRIl1{-hI0gtZ^T83J_*#Gv!Y{_J zm>=T3V_1zt>SdXW+>W}6Ib5M@^Ul?htG8c$*;e$hr1;^E)fd?R5ZT`(NCWE~*L5Gs znZctp4**Vg%fP8?WMVb}66l0=9b~Ku|(a zB=}u#Y3>>*bD*E_gV7uFEbt47{|NAkGXo9grZAT~iEeQn*`d zU68k|T-?uG?qq7pJB;9*7VVT_j?YDyS#tJRN*Tt%UVq=9vc#-vEXA%`r5v$y+1omB zHLSk}Cj#UPNk3MJ4F`PSdn2e6FG+pz$YG_o`pL;*`L z%#>Zi$X%NeACbzRvTdR+%n)GK`|d1f!KN!ujc7d4xLHly;mksu1Hs$|xq4i&@xo3S zYFprYe^l~N$wr-C$#3nh781`aPMiU`n3?!gzbTP9Ri&Ys{<5w8!i&}$Y{^OIyH89; zBV2yZ#_>ad?_< zf2)lB4(s+4=RQwV5!oAsl|*n(r5mjxAjlrw8;R9K_`1>{g6(!ep%R3sNM!X1DNlC; zktVNWC#-`tcgZP4SS_mPo5ux^$(=L1ks48J6D>3nOGy>sKV;03X(sp&U`Ul__~<@^ z%_e=!C~LvB&~p!sfsnOwY9X@!;Q<6TH;m+nUYX)<5tmD-3IBpgWS-tZ#R08c=N)Vg z>jM5v-v$sD#y6HBxtgW7D$=*iKA)1Y!Ks$Ovnp>b^}~7`Jxtb2L$pt<3q+)Z(;yBy z+Wfl9@eI0`_B@)~jeT(P6d9NW&?hW0AS5>=UR~G35K^yPTvs?I201&)-tpPRwJ|aM zoXWi6ah2kFLr8!}d}jGBtbp1*y#%G?_;m3}48>4O-=r>z*3XV=bsGX9& zQh1|m*lD8<1KmbLEFC7Kt40^V`9%6Q*hzqFTBSdlziCN4I{#bYopOzNvC-t-f6MOF zteZj2gru**=L(I=fw!#B*R;l<&zyyr3d%MT+UB{371J9sf3)K-B701^L{VGtA1U{` z@+FIw+*_fNchEdGSo#=*!Om*#uB-F(@omYMC%h~}#0d*NIzrO#NE6j@k^W>Y%GdlU z4!c1eq+Vc(Mrb8kZcZvg+v|R7VQUrXSw;OSeRKRq2u#qXbUrVdRu%b)S$xV zpGwuoopS{OoA%CO#-}hyr1(pzXU8|I6CKWsZ!)`<pD?Cfn=dI-l&pjQiOlAKt&NH;XQe(&qT}ZQX|me z8W*MNxYxGvf+F>eENM-e<}c#o|Mm_L^{DwaduS1`!n~{f5CQ2%DO}U*T4QkFbLB7IWGo++sX#1AJ-o?rlJPj+$<_7Y+XL>YTIV8C&G?l>e zqW+F8rd#p+Vy{~xRXJFN-`U*tLZIa-JZ}tFy?+mFcpT>3>RT|ERVc38&wkx^*Uwy+fc`JR}em!*eemuKR09*{JcRaP($Ea3-&d z-~ay65j=rczC|uf!_DXNcIHAM^jGq@a_8&4gLQ7%w4dj?g}3@sg0cmj{P>53!#IJb zUU65ZX9-A8md^IoDgVew@$#HyVX@)19QPy#BUi!0gcUFu(zfIctEae z%ZTGfcjRg|8x+wMDb^7~PanaBV`J%%35|V_i;G4E(;y34yEdf<+F6sos2lMhkzY8m7t_pajo3oo8)6;U?LEWnd(2Ta~49JIuQj$$6wz(#*1!rRM zU_&t!!O|MY?}Yqlc*Wc)nZwV-uqNqOz^JK0y&Pf3h*`i8sMP!A$U$IQ*BNl9` zFwB_hsvP(lIs6vt|1D1RVgmcsSQsgDzs)g=R)L$w-T|<+`E}K6{HtbgXx2y-V#>wpb&hU+_X4YnZg@F*#?^TS-u0_0 zy6(P_Vts_q2eEx}23o=XAHt^TuQAi;xL&@~CE_oWxDN}83rAbQQFtbiC?k6U5A0w2 zwj`C6>MiG~yPaegQB5*&dvW1gOM3Tdoqo^lF}RVq$Hj1nYKima^7jBejJ}~VUbZ@_%S43nBjaCp}IWxu@<>-{SwFRAW2VK z7Mq0XL0ry!Bwbg*8qS^Ei9L|zX;taw7ZsYBMq|_TBZ_t#B}H!#w=O%Y9I)oNk-1hk z?4X_8oeKbXGXMRN$=Zd9R_xO4)k`rlXOc5sXs5@GKN2Dbcjv??E|F(nap z`S)J!w1`^V6dcxVP99paOlw%$ViEQ2`Qyo(Nj!Gs`rj)q3-1WR62kXV`h;rL=WZ;0 zQ*%ZSD4YMx9G&_5*}?6fK-3-`<9wou&@QKiLfC5e?h0VK8QloZQ%Wtgz=;t)7=&xO z_EZ4ljl^1b$JSkk^cTLj=m~^~C~Z@7n!ecC5kP<24ncfSy2403%RLOQ+32VP4Rw29y@ z)ben5h6L=qs!nXjbw9%eLZTtZzioI8T!S$=CVTfK>=_BCOTwwMmOFy)_M=i%&=bkK zP{1PCxO$iC+I;K!jvVF75uDS2;gYfSiDOHgbbwTRIm%47|AegG)QoOm(R$K^UKCwh zw`9V#Ab`65Q>pXS4f%7=mvJP82Vr7X_(NZ%yfwchGp^ZB)|{i;8ZttUHMSflE{mzR z63xrC&U!anG*E0Jnip@H`D)h3N4E!ame|khI9iKdC?j$K+G6QFRK8Lkm77Wx-3>ac zG~mGb(;-Hzb5gh@=|CS+L({?C1cP-O@9(&_vK5`)mZ+wx1*vxkq~IVP5aSx>2Go#R zPN$qI-2Vz>gx7$nB{{uopv8Zv1(Zi;8c3;#kgOk>4&iQ!*Pf!?`%_x8?|~sUR|%$w z$JrrYM&+SlJ)C{B>Y2J4zdPNTyRsun6W>z6THIES*svj6%U#y6vme#M@Ff_>1cg$4 zhy`U2AB@1&Sd+IQqhQK88FFD$nvSbq+Wy!C=)>J#;@fJWvospzG2iT<4$F6V3CLv%`ISIE zcK%d_HZBZ^U`x=%l39jJrZsj&7M%t0%+(c`m--9mnFG=i#KOF?2n$mWR25}?LpAU% z7wMI46{rido3hnJbC9rRIZotgvO3BZ{G9_Nk9RyiJjPMQM5X)&Wk@Cef9PuOFw>VLk4v_IoL)Vw6u8 z8RfIg4g7(rMNwEsM5m=~aNE;xZ-uKu-6cCZi7j-uJtE)CvfW6GG;NfY08?31yg7^I zWm5+;__%D99V28yk5YT{k$N~3EGZG%3s=35EbrBqUZwWI{ukstIkU!y(7V44 z?%YE&oHP@|d-nIE9X~P5DZ$QScwA@ZDMCNhvlVNhryFW|098_h!2lD=$<)T|IvdyS zEnU?_cfMM9ERWGmhLoDkQNcyUVUSc)9Ti$sm=wCvcb&R}dr+K}=~{KF=jtQAQxORi z&KChaWmQ+)-2ze|mYVn@#X#rF3#Kr$DF~j>_#*Mz3>}FqpteTkv<1NjmC1LU(a|VZ zeciuZdz@?2Rv+I|FFh&!%_2O*aie{#n`>yA{e)w*mz$r4xU`6|gygZucxlQSG=4q* zpzgF3Dj0mEtWY5(Ht;JID?!X$_0u@c$-W`_<{vGJhZT7+L{~>b6wJhPp?WG~=W-mJ;rkm$HR8 zUsk-Z||1@9ZE>bq{Lyq_g@v{r?QCd`-#w_Z?mM%&kG4 zDJGI-*C*1Ow|R0R+UED~cP&Vo_2^$`ImJ|atM{)-+Zls;%bc{@TYbPs=lBQ2!AC@L z_OfekqqOA#KS)yrN`A0S1D!0Z`=)e{0vLcjb zzh}m({&ZEr_c{jEx_Lnx^gKM@Q<`(;&=%B!!Q0oQDZhq4?m>Kn%yUQBA5`4@y_3^$ z)wHAArZp8aJ-Fu)w?jBGQs`r3b%fS)tVQ>Z6%<1|rUr(do)vT~@FkU}j%JgEiLk7O zk)r^d033^|+?(TDCNi%4Jld>iqYUo6C_G_dcPfbf9hu z{de9KsY{rwH7wHU0D~!4@Ngt9Bz!l-gHV(;9@mY!(p)p<%3pI%}oDKE# z_CVu6#mm_U=~2w?R%l&PyCVSRs9aa|QOYc!Sp*_;kM~CB2-d4U0*R}}9g1>?iF`Mv zwxjsOJ^saCM2@Ri=OjL(tb2zH=vyfrhENdBNZ1S~7EF>3wxKtJ-Hoa2=&EkSf{k;( zLO$4cfxbam6-o#lTJ+ysk5M~eqVZ&*e4X5Tebb*-V{%VcUl&LX;L;ozo2)*y`bmU-uVgATP#e#{Dy=+oqWnkL85_qEas&;pK&#ft8++3e79(9ZovV z0UfCM5{facfW`8u4nR^^cT;l5T^0U3K6!1DE$keTn=}&W5*E3^&?B?bQNnVq*3Mij z@%^VE#ep^cC6vvme3m`}%J+de$erbL1*&)?@o?ea(^VBOz(w|T=Ifo5oCrKn9v6mK zQtq(bk+=Xm2km9utmu1nq6f^O-d0j=5_wjpGzbIOEKC(SWN%j_R_wYdo7+V8P|($0 z8$4EBg$#{S$3fYWjA?iz2|AiN_g_J5xMmTI6ZyIA8(UFsaqm63Dzt5b)TP(y-a$=i zsaYzJd{me+5GhT$#ue3VN`Q3W&xyD|6*Ap57J$iVd6yeAa?DZf31I3Sh}LPK`8Hm- zy0C#k-^>Ml&!b^1 z{l&N$yzEe{dcp?dY`Yp}#EXvhmLp_fT1Ozx`or z3>f17Z$IlE+32_3~!>SwtR;epvAXBjr5qb!DATf1Lmh2Zt;iqDkr&K%Cwv4e&#( zerVlZ&LwTN<2R1|6fn12PDa^~I%D8b@0uoG<$Pg_p%0vb^M45EgqDB&atE@7`;xly z0qe>}(U`=jFhoYx`l(aP{C!w^X>CoRgVuubE}n0a(4gM>(7%AA+PyWX_n@f~NOFLeZjl3EY`y6J9;gCNioII~^O(hN2>Jk|pn z#QlcHqRN)ClKAUp$%$9I1Y_EC~`y)K1Y@bw-bWGJkgdGRuVS$I`~h%&!K;1tmcID?m8 z#>U_kt+dF?z7?xtyTk)@lapWarvwY|ACu@~s^Q%~`)jT`1#oC@NYTXm=XSaxYJA9`(#owqp}7%`^4!egfu*8>%~JzEtRf43 z9=m*`yfLqQIj_8|r~LWr{`WsunzZQVNzl{4Q*))cO=*w~-OZxtLqKl$&-Nl7#VgMQ z$Jm0c`|_=6>+JWlm9)9x%JcAAoWM&z!X_3ebxuzr(%`-!o`$PQ-ja>$fHaciSUP`9 zur|NMO?NTEyZnI5x#D~#=c!8gh$)I&CwtRK>8U_JzARL|m_^o{(S0H{S9CDIJe$z0 z{zOUVTX)jL^cn-fDt`(G&j)x6a?1_I&8=D`1l#a~KY0_};f@IA?jCqnajI+eG_D2o z_HX?A+>x$G*3u|?;rOF#YqZayhSHfrYL5OROd1Ch+Y|otX{5i*%5Yqj>X4-Yy+xQy z`?E-j$fYf&--q5Hn3eUZG1WK5&ZeMo<0_AAhJpG85dPUE^ zr02ZP;L<+22WbMPw*CPrU5TY-{ChK{>Stn-nwaW>Lq_lu!#OKfj{J* zA?W3}HTSv6fRU5Xtp>G<2=~M+WjSBKfFG8AvDWd;yN2iyP$bqqb$7t(J?2a1bmgM| zKttPAlW$9FXXN4trr?=n{vskgw63oY=zj^{GEQhwvNrnf{wlYg(1FP{Vvw7}-S_Zy zu9Xa4?_3vxCm74ylyhM5;BcEExPxk-KSfmSOtSpf#qz=VqDV`ZON>$OA@s@Pb|6@r zS7mIcv55)(cnxqiP6OG!X>P}|b>w~(;>a~tk37GlkemBqYEudF;lbzBxPiw;?PDJQ zkKD0vSIUwngti0P*S%tkH+rR;XWx2tq+nMO^4{Q%${WBB>yU)-oL3$J(`sXy;#MQ3 zZRntr=^lf1pITF10U8uXGe|nu-PZ$s+;Ina4fM2zoFR^dR0~ZJWJu@aN3t)9HSvXZ%k`tB!4y2_Gmel$bG8k(GO*operQ zfuVHp@!?_Y!|~&!?*PC~^?hCt1(g{zTE427j00&?De!~z5H^wpa*cNN%1YwrO#$AO zJ4^l0jU)TVOoD8B5eqgv0VV6$3N*=Cu;~)8v2$9lr%PMJs8{^+t~?t@?pA%6Y+G*h zSO@U5Myx}j^s3rM@8^y9Wo+Y~J1Lu%E+!< zrCezElk3U~ zSanKy6j6M8Gfgt%i*zk;gz_Kg6lt68TwM7~{DRHDV$|IhBtV{aW0D{3wldji_o&;e zK2g;h29fWX{Gis!F0E5w8id(CcF%=O#ZIv^FtPhP7jTWz%6&av4_RhU1K%(|+S>b31dY>90uXzT+BX!QvrG zz1qmaJizb5MIZy0hud@cnVi_&E7hR0mFzq@B{{A_wxhJ_=N=J%Y$9;dSh?vBRb?XI z2_W=sKD&w^khw2a-4PGXZw`2Hs0q7?=vPeZ9>5CmZ}dh97QtxQfXGo+mk?UXu#f)C z?#k$+cYun1?f<Jgx{v@gUrg(23IKm1@c zE+Hb{ix<&6*nHr>{HFQ~RmZ@5ohV*oQi%)io4F*%KokBmI*F4+IoH-Iemmb}sqSG_NASr+85YZDS8O7%W7 z^1+2VeLG9S$yD#|Qt#ewnyd+crA5jC6F@1neZK^=fiJ`7G%Q8S)xJ;XJFy#gJSF1e zpd_%;3$d|lz<5}f$TTbBOVELvr&(@J!_|`muz^WyJg_emMH+tYyxoW( zpuagJ(+E`DP4^^o_kKdB88ey@ z-%P_IVRD|s)smQf`l6o5N7i6fYQ@1N>_)yHL<5K`as!Cd@*q2iwhgL{CNy0F4F{w% zjJP7t=Lk_QiFblfQIlMztL4~09ix;-;{LJAT?7QmTqR~X?fuvUD{jfPq&%Ljd}0r( ziX(CfUNuip_2h(w*&dconx=?SBq$_>GJSa?uo3kVbdtfdOf$Fl(c>CiW3WjKM0TaM z`K+}$sodgw{0d}3)n05r`hdZVE7Fdus~=~e`DC+s08>3efvP^0ZMH{Z?_Guwg39@?G#aq zx*o!T34kJkYJE|Xh54xBo+M$r1h4@iVb$Zfv{dXn-c2+$q2you6KjhBfw$U;UwnI| z(0ApKHu2QYS5B>E&JQzJdwMdW*6N76IVd@qDe<(GY`fOnB;k$9;0rb_%HzALMnJOE zJR&*Lkg)AG#N^D+8w|31Ru1{Bq+DD%dHu)-yCW-twfPl=6;}ft$#XX2Q)iOn_3rOS+kaw$C7c_vIxZu9b0m$TfPvm#Fa;n9 zeFSct+{?Dm{*y7Tnv_xk&JI3Zn(RtDQ$R(ioC(Y#%BI?SRlLg+7?eWgQ&>#7uq^e` zv^#!G;0g@Cl`M*L@`+mdaUqq zR;UK9zKFBZP>G=NkJ&mhN7=i#?LI+pkT)aXEG|dB5MgeM%mk9+IU{`K`348 z#Y0#qY9{l#j8urH8g+dmE=|bcI#3|^Ou(wV!9fN;|CvXDEg<*LmdN{^h6a)q-_d%< zXv(aZI#$f41>oXJXXJEAaw_zyOCMHBA0P>p zRy;wt?abcr0|GIBf95cJ8XWj1ZPB%$Rht6?jJdUFzm*(sT)SD?fNtV@>|N{2f>7R} zVpKuQevo@3yDlgqn1nH@FOpC~*sjg9ZY2e}tS?ZEyE#CPTR_d%mY_PK{W-gP9IzPv ztv<*^G-|*<*@L&*Xg-8}zjAZhr{LCstIng)e{;%5c6;i(vYS)BMYpDI`3{mTcc%Ob zt{)Uh=F5qs?*#hajmbys1iJ5HVP{2dF~t;1FCL_wHl0ZF7k5&<73I|t=RCa?+G+k` zHBsF+_}DQCn;7R|jT90VA$z-)C}uUur*hA(9?9$;6K>!`zg5GeFMV^d8Ovb z#hBW_}?knOht8j9VC<-a}feKWxJyugSqZnSNtT8Li zk2mu$_gnok)|kzRVOhcTeq3~-%S zo8qKklt`_ZJrM z_qA`FuS9=yGiryB*T@``*61YR0%U5xd@O2@%EKJ7_8I+%!m(WD$6QS0v&e8J$@t&zT@cIWYC>}OCEq{(BU;ZXAL9S5g zGeRvZxKU5KBF`}G2SF`OOvwnr-ZpxMIn|h2)n5=-BV1pq_d@J04Nmp2AHV%c^sxre zk;#?xNKao-87(S7ds{+q%~x6<#P9Iq$P$Cu$m~!w`}u8lrfTa<4h>1-+hVZ*ivd~}&GQ>>n-tU_dy0K@Pqk*$hMs9ud0#towP z31((}YDo2sixX`(KbEk~RM=x|C0EN$u3~h`qg_@e1Ab~VJ>HiyQQs8vif)mKb^JBU#+JWP^|68Rso6ncLFRC%$qxTb)Xli}>isL7| z4onwkJ;PNfkI9t}&Xa_n?D;B3g%?Ab7hf){0r^$-Qw0AVjPX-JAQd+H{M#+fxUF<7V?yil;igSb&X$>X2Bal zo1pc<-~Bo=?9f#yJ2^6*IkP%@023k$&eI@*udA@_nRS5`V) z^?u5IotTmGVuNkm)on<*|uDZiWgK%0IMXb54`jSPiWTh)+zf5P1Vvy z+3|kI-$vSz(?wPOFc6G*7mZvjz9Kj%^a$rSJl`dV{va3;PVxV3gp3i%-;e`KELCJr zC@RNoFNDoFUN@^8NLyo<{t&N?TszhHO2VB{$lU$iF1gxW!H{qQ{P$rpN+#YgW3wzx zY;P#C;OJet6>o7)i4H?mK-%iZzQQU_u^SRxn?DEosj**#qk>D|?+g1MCRqsrFTuzQ zZZm}qPx8drJz$!e`bjt@bRY1y1ziBgZV-(Z>$9-!EBG*&hu#Mm8i8iT(-h{|wdk{< zWGl>jzs(Cv_QEtx9cnX%=Voo_L_R*FA*Jp7s)g0OK}ZP_$l;6vb`W48EZzPkS|*-p zN|_l)c3AfmPUlz)$3EXzs3oeyO2;bfc`8}K!)PdrdDM$6DRw$GB&<&30T}KTdv6*Z zs%3!fQcx#vQ8Al54>%Md0EWrY2ZB+B?VY%-4*WNika_%+7=J=QmH#7-=650440k_^ zlk&VQ`O4vDsE4L~>?XE2!FCySeLsqAhJd929%7V1kO(@Gq&?HL1&N`!id0f?uB(wX z2A`@p4-%jvf=aPg6>r-Erz)_y z#19}NunbhVHOXs*(THBXW>q=ke#j7?w;TqF4*AW_o_MdoBE5*j>mY}FbQ_R`k?yg7 zCiWbWuB%Zwi5zEyoxVN~<~gw_H4_u+*(O$#3-2H} zki*#rXhzEG+Qb)2+p!%w&hdK<6_ulFR-mD#!tS;4-D#uO8v?JZr`#MLH0XF{s$LnJ znLGV1BMe$d$a&tyEIOpa#cZE5Gd0iw?dSMCX}>ANqyDnw7ub%#>}^KE`HdPQOnRS56>k zu!V;jWl#i?)t0C;)3g~mp#3br$5XbmbGDst<|>*ye#JvOL`h3PVP5q8V~`0gWhQ+_ zYZQJ$nSN%pL5j}3C4ILF8pQ9tf(|SKGPJBY9h-2nkE`Ss<(22*b|8(!sFhc=Iv!Ts zJ82K*f(NH4S-DDaU*0IU(UDGT?50mOo+NM$jS^=!Bs%))7@LgF zF`SJk+X&jsyei5y3Z|N~L7U7Occ*9lR7BDa(L@vi+2e zvv6oMH`>4fxwX5e^RWROaN?3mpq0$BHLFvaQY=>1Mq2SAQJZ< z#4mZ^VJnu&H_funs@^e4*=Gwj6TCJ?WNAsZxh#e3nI4vnt-=4L?EioY)^_;-d@_sV z6p%lhYCgJpbZQ7BS?~lG=S=_+vg;~0Rs_y%=r)AZIxI!EKntumgIDp`0ILZ$SoE(R z-0|$l-e(yqoNVW_6DpjM$yYN9n=SpX4uV&osc@Rk)u?cS!H09)4;Q+h?bBdb(ZMV8 z+2_tt!7KC0VC!TR_m;=oG=EKm=xxxXjVwZ_D{JDm6q%=Y{_mdW@CNZ%F@fp`in-OS zg)IxoYN@2w1L1OwkjEkfz(yI*XHs2%h2&hBVlHcLrf{ERnRl)W$u6pDKxmXVc`6OU zkVp&Clq3lNU3ltSG!KC6%s!x~YZn(@R!DDJeTVz+qvEX)1GVb%jqciX`2TRHrAWG= zXrX#p${0?Zz?UXXM0TTqKCZ&vDr*mhKr@ltq8|M~%5DY|H)df5dj!dOgQ_aPhn#&ai z4M%dXq$hbAW10%UfGc`RbG*b*d43ISp9Z!=ytZ9j*deLu*z$M z0uEF{AL$AJ8J!u9u3Oshn1!yFYJOr{HY}ZH8=^5Z1_t~<(*kh5JKnloQwBp(861=R`k>d!_UJF4 z?9RaSB&vRpW2F#WgfT_I2dCd~fH+kj9l}WE*+qB+Llr8JjtB!6aao?H+EH>^*k z-;6naN4lpBw!o<-!9LVe-N7j-rZvCCF8_kk2P%>MG$+793EO+m*I_-bIK%O<@&#SX z=glVond*8rLNkOfW{OxSkjb(q6E3uWSK`p=xDbDqt16ojtj!-2npbjFl~W@&yFwi) z1}ax9Is;;r{nuU^*q#xmOmn?d5^yQd|57OrZ5wS1pdTqdiEZ$$T`6!!A zeE~C!#F8DHz-ul=lNK5cdhT^qXA?3skE+>&rARXEYtO7DvE-6foA*=KGR`xmDq z>~{H^r%CwuBLiMrdeg*T+!6(6%6Ze?+@%5c3)$}i=&Q(&nQpWR3yxVwv^)YszH^AXg3m=IT4Di z6@hPk91Zxdgw91kE}VUB-WE!rY$gM9&-oKpS=f)=UuMfUH%`~0--FbyJO=H)@fPk4Q@SPHY+rOf@9rmP6P`_V5l(kBHD+iX;BHISwXkMt<9>9*aaJ z)$8B*<(0wf&THK_TCc_g7jIFx&kh;m#v2*{(?~abe^9|DarF|dm zqz#o**j1@H*RR^}IzhZQ$S~(?uYP^|+O})2ULKmk)8CrI4gOEA^*gie#F=gWXKHOv zHh6palqf~Z1?;7P8Vg8>H|%m1a%n2Vk1to_&x`d6)T+EKe3sCu1wql2a&bH7UP=XK zm~XZl7B8>SCbNku7%6MrHJ0{j2$RH}V<&qt404s~6$QWiGhN_ko9oWGPMo_UC23H) z8H_3(nZMHnKQGojuU6%4?zezWKN1wrdEgt4=kNToP|T)BVvL_3<IZ;H}h`OFJ8UD(4)PAT$nBR zBUZ+J|(xW2>nbr;UV!4ian zob9w-3IzD_2Y?5taEwK}>)}+ok6nL%e&|$i;v^ZIF6bGS5*WJP*dQ*g#DPPdPoZO! z{r-`D_=c4t+>Ij&Ufh?Q3IJ>zxTVmA#Fb#KYe018z;|4B@j^7D^l=>jlXBSaXf9K%3jwV~97AWo6$z9_Gh^ zaEtS;9m_E;kO6H3Qj=^_X=HY^UvOFwz(v9o-w2p!YR_UJv%0f{e+XBxzbV1 z?1K(#Xi2EySf|vk`^+B{v5XiURlAwidAFt?lTYlRb0I-gdb6zpOOVd$QDE`YS=|aO zUOJ2W&ShMzAT72>6w6PG?H0xI(qa{JC&Pi3+)mr!O0D++mrtn282pS;I9IUldkpi( z#{z?+7#T3;t@|0Ja4yf_dz6p5IF6z|i2@sgZ4Vayeo-*BVDj7VM$h!E^}HIrYxeEv z?;34|#%uCrDu$UBezCTmjz(U-SE8>@UG-ifQo(?=&EQn9&dU*Qy|{Ue7yI?F_8&wH zk{;#;cxL&|(uEQvMbbH@g=dw!Ub3L006Omv`Dp*7P>13fMZ1~|lzvaB-)f<22*0(* zrZ*tH43@*{`}{7!__Lp?aV7ShMcojmn4=-DtGy3az;M8Z5=7``3qgvHOYYf3sJYCp zLSVPpWU~VXw|^zs)!@_>Fp6$`a%wlO!@Y~Ni@$U|aL_E1fUvw5kN3eU+&uSR4TTNJ z@(6^5C2TSq>zC>k42z1qQz)owl06x+vMCG&bBedOOv-MsDi>44i``XNIb0*o-Lg?n z=o41M+VR?=^{ud?>RMQRhubX}e*A4cw!-jdWHTbElxr(!s{RZ4QLi`LQ;+PY1Vr8~ z$84-ULst?xE@5e1ZiDV-5{)%st7t~_mfky@ICt>Lt7h!L@g?lp3(@}Z-Y_338@MGj zE1=pRVj$Kk8RTIC1?QG>Ng|VG?9bu<^i|n6DxSSr>I>58#gc0*8pN z4zVs8k$%H$Jg@K2C9)4i@|ByT`5D}oN;&rDv%IzDw|={J%=*mVe0J0N!#b(=>3*LV zj%Rz1uDkVgA@rfugq@47tx|5;E_68+b%}7yd1>C|2{c@#l$$z+(l6J7!~t!vqmGMm zKl6g6$}ynPl}zqWIkeHl);`RPj@j*&wz!QR(2To}aw5X5 z7mU6yIFlxB2O$fZi#QCv$=5_!YZQ<&;JACwru4(-t(9tk!$09=YT?N5vJ>_ z%R|?9-ho_bmT|cZEg&xde*;i6f-oNWmb`;2Q-`OQDT0T;C6>?!wVB_aICYO|jvqMGQCs0hm%wj*|i!;;4e#^PJ>3A@3ZdT zr-Uon@pFH$!~e*r>1`73lZ_!eyb@c!&>f%JB>T0eEXNNGh?Jidt$WFmW*(*N(}3~~ z$q9#~!UP({6*o7(sC9XNzer`X$Y3i^xnzQLbpa4vOc}TMotvC#Tl9f(2CVqKzPY#ganH`^V{>4CC9vr_b4Xc z3YDk4P)d5B_nfEq{3$-^Avf=#Lh{14;)Me9sl%(xABVMb-O9{O>$F!dj}+QMW7KT@ zo}WEEaFitBCTTTQh#BGon=c9>5kUJhwq1e4CA4DVZ`x9}5B<{6f zDAvX2&ZQ`cDQ`bXJ_=$LX}MW@)k-+oT&?QVq(p>gjf9((VK{iK@0Q_*E3t{h&}mFe z4#6Oi1SA!++Pnz-HgHbYa+ZO^i8=rFknV-AbM6DyHC{f2Qw&iADA*LIG8j8 z-cJ+QsPsUtqWFr~zgzSHRoc;CiJ`H~X$X4Zz@ zYvVK<@FQ#e4BA4EwRGI+yvEHm`>O?@{5==*w~OQ7UysHw7)}?yUyS)M7yH5HSmVx;pGaTT1J4{CeBg+b>~elK0S(kJ@T4=RgzH})KO!UyZ_2{ zb^4G6Gj{Jmbp9ExRAk)bqb*#naTvH-WO4h`-|VuX!;0KMT`oV*gq*1|PR1>;`H^VY zFmT42;lse(!d(#u1&o;HJj?RLqoEqpZJ_#bTMrK5MDBpk$|eU-sH(yoOpeI#!z<0xXZ5va9PgCxO0~nC?gDO9;!g(T zH=}WI%HWZ|ghNkrgzEUZC|rQFC0cnMKy&iV<8~Y&VEUQUh~m=4-Iw8VbrovG<2UhG zh3U9Z5DKM-93vG55i=m-LlrBJ_wd!4}jGdAQLKb zQdEBRMZTYje7~T=?hXI9Ov0VD^IOcYB{}z;Yz+Hh(1xDd^;f4mt3$tAJy_fx_QS9( zJ@)Bee&Jw&*=Ag9th`fbu%l*SH(rv}t!_X0Vsh+pk@ht9_?u+%D%X6m0@URI<)nN; z5IMKvJ~%ggc>a>CVRdt>Q=(!Y*l2mqE(4Ci`){e2M(|kC^$aw-wF>R2%}15;h#w$+ zjZM&nXQ8{nU64ru*&vOV)87XOD=xot`D21aZ@5#tq z%xqc%&tb13eD@sO5nA?6GMFrnFee%4fL)Pj8|Y9H4Ma%67_lcmvylL48s1VW=jjJU ztEY>ExliPIhJmv-3<^%w=c%dvTV(L@lZTXP&ZF_uFY`jrY%)Fz+i>`a=%yiKWI`u;%0WOo78$rGe& z9KkWkT1zV7W>Big%2y4#T?>>n72x77uT6@{MWfP%dmkzYMqxAi$mgXx*!|8db7*rE zY|m3gaFV2MumdN)XU4aJeVS7F$Wl>qq1Ez-e>xx%mZ-~>+o^d$PD{m+*%lfNRpC}#2%UoRBMYZ%aT#_TWxEI9o6yW8lnL?K42K1Cw9%n} z-|?xO0?B~`TZozdum7S(f0sso4bNH4Ck;Nts!9(if)9Ls@i-m$_LXI{4BQnT^`puBH9VqmxoH4JU^4w18Xc+`+tjM5p6J^j*s>5`1 z^MmAs?Sz8T_7CU6BB-9FtF&erT(>*C;1DiIuREqmiSY5#w@wQ@)N*J~OHYbY zHo*L}4WTS^i?9JDVo^_BJ``40kp*mHov*hw^ik86ti-a?Q)lctlrbmC@ljiiG>pwm z&)c|atDmH2t|f^pU5PI&&4h+jEnlbgo34=CN~kGa&;C3ph4LAu-WK=t#qJ#;BJ5x#uaBdV`rIKg!A2fC-eck8YUx{$9;%~{dZT7n8D2MzY63U3!=c?1hn-CKH`6R_8Oa;VJbNG_% z2^w+NI8(!P9F1^RG4G@(oc6nm2SJ&fY1Ikf1I2EJX)GYGP)5$SFGDnv#xiII-2=@puyNdFl7@CR_ zS|Rv@2~*1Y>S>Pg49$bukjX*?q}$1d`D^BgxcVu=oq|(sWEk$3g@LLrULOyDlV6kr zxW?MM!q2H##_-tiIq>V^Iq)uYhMG?=v}6vA4V~416uO0$RKs3>3-C_smZPVSP68gd zv$k43X9(CaU06>L-th!G2xXI!LbXf2=7&4YbwkI8_56W&ONy!N`73?U1x*+=hHom)_Q4nQ+{>^)E37z zKT;GxKr4j#nBA{-Y|{|LC1@{qZuNUmh7$x(hrNGev47zDHe8I!LHj&t=u6JBh?V zA7R8}9mzDHj(pO8O7p)P*nq}clUaZ!5OUOsB_Nf?|F8l*BjFOHDwX6elqo8+^SLu{! zlmr`4e~RtJ#PID{4n`WIe&tw1i)L*#yTQss;jGcL=%^a&pUUQ6 znmj^E`6(h7Bs>0=xWb+C8V9d%h_z;)Tl-Nb_T<_Z`=*aW4hU}xd_$?Jg6I-o6u{T7 zdT%HvsO1MP8>|_dOE|xdYfuic*{vmckPi(-$;}Y*vr(XG!Yp?y-7m?OC|A5hstIQczZMr7Rs6{g$RtG(?I0eXc_tPJjs zjs0E;r^%`8&EK>K+KLNXV$Ij9p?^#x;rsh=57Hu`t>#5XW4R+6WDPZPR;q#1Q8xYA1Z5)X1OOh= zgzSv@Frf3FNPF{r|4Y-LuJqzfZTsA4$VDs`nSAM^?72r&U}w z4yXtdC=$+BBmFHgTyrL8v?dR=VdOTQxB+1sU?x*Py1E0qu%SaN_j!}}~$qcK_V%M(4=jk}%_@jXZuQsa%3 zgzu{Ia15P~a#2xOiC?g~NP8|lwj~d_Fg7=B6%R86=;H};Yj$7?vgJ8ngDM6yOF$`4 z)MOOYB1T^X_iAAjDkIunDBTJUQODM2@+azKD2$OcIx&6B?Vse14j{LPW?YeGe=#t+ z0pB8^ze~a*Wkt={4jX;|3k-0dCsiADFdCMjf*ld$xl4&yOSHXI9E@qyUUf)A{>Si@b5a~$ABQ<%*hjA9j%6b4Vvbe4fJF)-OHLXtMCe*K1yah4KlXVv3k+Uq~H(9Wn zNM{yna%&;-U~G|Qz`&tTxij&<=VfifRj}ztFb9)%U~9?~yFUsRB6dT9k?y%1qJ^ZK zGi2~f^UjHyfH$6VrdUQhWWoJ~taMa?BL_Kdio{^#Qr#l_*rL2`Q9uI~QF@u#g{1Aq z5jMf08sMD^04~01xtj9S5e(m|8{Nlz`Ek|z|3MF`!Rlc93oahTc!`95BC2GvCR`5d zzk|y%8${goz1brkG!o^RiT3B92N|wr)JXP~i!rDe2X86Q6nOBBuz8eK#tbfRb2U}8 zv1U;;mTGdS5(;5O4=JRBEm;xH17uEtQfZ}Rvv5!Ooh38Z?yR=KL?rc^F`!u3yE7Cv z$lfL8@ATDHnI67&0#2@<=_{Lh=l#F^fuHAorK#>C-j%Eo&130%a{2-;J+O=RysH?n zK66&3oUX5GJfJ$RwsU!0rJ~8mHp6W3?N2|g68`H0L3{2Th>*P(IU%O|n~Qz@K>tUc zs7%>vax36MO96+=Py_MLTt$$D84=DH6-=j5 z6}1@pGSyRsZKc-6({>B0lC1w4k~Z@HF*miQAJ>{=+?BenEp36HJ4>ry>3VBky~O8< zSedl9RD}2k4D~PCH7Q}Y$Db!bSf_rz? z=gIxMRN1%6%n$U31-`WEHync)a?EWeeb)6uJK-<%n6;)xxm~y3?udjvsD3-vZNQ6# zyNAZ@8&wK;JX}=7jNnl#;CMJ3j#}fu>IG3Go?KQI#p5a7h%RsL#f+N;oBDt#I90GV zDh$3UxP7r@myY|mY&=x3fuI#Ydv=uhUNWcItb*4+nQ4CSfIa=`N(nv(QIDm_!Yd2hi30QGH6I}0*752?vm1cvezgU+m75rX$CkuqmL5)pHNdjbX z(Bcc)+5&YOjzZ$QK_2cMUOfzcqAA~Su}}xZz8j_6pzIQ7;c#y6W(-T$3z^A3B}qhdGVRQ=zkv`N-(o)|wE))we<(PN zj%AzW2+n@(j?mW7;Ip`Y6hho0s3Qdl_vbOw~M6RsOkV>vKk>qgK7d|GZ2qnAj^#vFPQ`XA`rQqVL9PiT3}%lP zP4u8i^TP#E`}wimeCYVB&!J2;)+DLdLQG@J2Ca};``|uJ=iLn_<&a&n-myxZH*>9o z4;h^Go=RGkbdGkB7&c<`zy;(mL@*cZK#$zd0N5h$cAv7k!;4`Q;hwyv*&)BARFzxv?>YMUY3*|Mm^^th7y^^+TNded?7tuvB&nn;- zz?Npke5usM*Bxz^K-;)u8qU@gvO>UHTyrUC7MlP6ku>+&X9qUC7liY4n$Ni<*V_No z^|MoE@?{Pde_~*ow78iYyffD}TI5c~d%Wb(i~rV|8yo%+hHacGZdv{hX%LmRkfx@6 zAwr19aUiBU_9#5RxegTWKL)VyIuU^6(4Su?`T1Ak`|nIOA1}Ad0J4H1EubAvaNxcF z$oQ*J{3;+y?s1)f=3dsWk&O9SFU__3i2iEQi0p&ezSEEIiE->dW~;Ol5R%eX%F3Lb zOOc*y>5UFVmqh0=EkKrS1sQeM*;g->SRa|Uvh0}~jSbtNVp1sUhD9ba<~(E`9=sfD zG6|n_u}m-^pt<*u3V2L;$g({Un;>LGNB2NK;PTQ)pIMpgJo3qVLN1bn>|oNr;;;#Jd(Kxw{wd~9cwO!2d(MUrJ*Aj5Q=5istcM(RDQszVKqHine+sI^G zjis88-wcoM%f1*mvBGs?ZZ1SvH33$qm;)zc0PJiw<`&lk=)V_>WFa9_3`7z{r{^Q` z@2p_tvQIlK2YUcs+)$d!=X+9PVUyD!bhorvSO_l)j)BlS&#{a{jsyuf((3O~8B@T) zx*)7%cgkbIHMh=Q%LTEVNaGvXgKwO?8FyTlxi{Wsg7qC_iSJCXzEvzIHc}*bmOy%^ zAKe#=n78+Ztx?gmTgIF?f&1n5e+7{9%=S{r5Drp z)yrj%(c|$)s*6z?P;#OH+^1FR6T$K56VxN~(#J)el=^a`qc1@np75!2$>?>vnM@CN zcisiV1Lv6p%z59-i`P%)ZYIL@lVyBb4W6`w$GDRoj*m|-8g2@~-?cZEPJG9VSzR)k zg&%GTa3n3=T}IR+*_+4P)5{reb~_Ok|NYWp9)7S$M*MN+$8Jc48b$o zcF6V_lEHhEKSXcA!Pik=C<8eG>|9eJIsa&yeGmeC6RvNT{zRO&d1(6emC_FefQo%> zsP7j04C{NFK79}A>o>@E!rR9>`A}h8jlH%er(bFIWs{x;?azEd|F*%^3EI8Y+&7+A zN;$X507T#MBM32yCm?IG|8klF*5=`MbA3{yt16lS`SPI|lpsQxR0X|XsE_t&fQD#{ zrf7!dXo1$a5$yiBGHo8zSX<6TWv<0~Q5e4cbB*Db4$W%aIpo;`UAI?o=m4|WfgxB1 z(Ou|P_Dcl*(pQLYLY$Va^J3qf@eTeu?We7XSjMGE1OAOgUFQcznJuC(hJn|DqnU+2 zC11pITYYf>^c`_(0&FDE6b;aPdbq;4nylS{Zow-F%&YavL%&r8LqnW{*bNJr2-+}= z-9JWv--ab@Sb_hyECi1KO=}AC_~8((GS@81E-^he*Yncy+-84z^?G)yvTVPj4ZHfG z%XHE8Ugm%^tbl6g6fYyQh#7B=&O;5XVC=UT_`2?S+Yc+ zy+Wd2l*9pjc0!1;3kbBCg_PWmXqw+9$Y49y7%_b7iU~`O6fu13TF(u7HQyJ;_OuiY z$Y=!qY*rR$3h3ukF91%&=&>IUr(C(XNjZ|(`vai;rk-tGpB)L=Y=1{uIXzrrfsW6o zy8#*feTao_4c04Saox(NV(Hf=XYCZOEcK|8Ti!BNvAt2~CH4*Pcb&)q|0EVqlVt7m zM*H~6+IkqH_0yM+y=LmEW(RG8;1f2_t-J$*j-&VU1ZJ8(*o=DaeWB3n%03w5Y6p|( zOvp}hg@R5$F{w08&sH#b1@7Z2&S_yASA7c6xgf5_RbN1K&WW~h)n^f%Ga_eP^=U|N zXz1RUcMdM-OE3)E&?Mfe8dBaj5?d1$Pci5abG{OoF1`-7cCMTrdt()Sai^b>fiIpX zWEx+6E}8Irwi;i3C7JMyYQ|SzOeQ>~i1F3uqe(+#_r{`gaAj{4AC#r(i;<-IskENE zMyaK)J*w&98`Gwa30);_ThvSoq!*-b#hvERZeDTE6N_9DJOBX5gps=Q4c$-6h3p{T|Z86P?O`$2X zUXVavp2cHXDYMRaK1}s&h*DqSbOh?IwWjymy2WxofYPu6@h?6~vci4k*zlw2mjRs~sx8eM{+%oKUIkfujo#3UD%a#|=ubWZ` zFCa(sgE*6zcmUWNALrr)J{5a0^c*8tyufmth{@g<<87O6jO=1eKFBo2cI47dpmYPO zG#`6H7gHM?8#D29!KMmij&3Gk)!Hx?`$qs}%w~ttIaUk+3X<1D!)Io*_#nHS)Sy!g z>9W-xYpRbQu3+E=0%K(tAG6DjcCtlh+N}^JF}dMe`DY^lfLp!Q+`PXTveLN>#pcc% znP+0BRG(*@pT6PQ&^O_hmns%_!;}L7yjQw zzWVikBSn*$JG=$}+gC6E>&DnY2#$T@=Uca1^|Mld7?rjLGVLgd{iVHjkC5%N|8_M5PWe)e&HzQ*OZxmpqf9L{t4mv9g$aKr*Hf_e~x@J zee?Z=wCRI4kaoBduP|F<|u96v2%j=bZa2aBz;;go4_74Os1@HV`taJyw2Vl!;4<;V+{ zPA<_u&D=^msWz!9RU+}FX2``79w{uj`~z={Rjb=*O|=DL-sTpnTot;G6Q3`esyLI6B__9Bf6AM6#GEU#Sfs{#Y zFgKp{#jsl!g@;&xtjuyagERrfieqUqHl3X|f%GBhX23}2tR1(1+qJXqy_%*;|106v=)M^i)i0#d*f~AbSMDc%6R8$Z^opA zMo;DLgbd_`?>>>%{PtT%ECRw08+L(^&3`;bpuil@Kv9*nI{)8e>4^6(SK4_FlBOYN zubuSkF{Dl(=Br;G*|~CRippP3<<`0B@1INR>2UkWqWUd}tx-Q=U~w>3)ukZvv3mi)QQ-%PO48+Ms0a~}_ zH6(QlavfZ|gLn}Q7;l$n>3Ary6|gw%hm)EKO8oJY%@0i0pT(k5c#I>YZBaBMG^Yzs zAyMO7q)~jAaY$u-cfCWDEhsAFb~tP6r2RWB8JF=M`~MyNe-){Db~kbnP`=wMBV5jZ z3<-^$Mi=ILcLAq>bF8b*#(6LFu+`9d^Fd~5bjMq_QxeNdx9(>E!7Yq#=;Ylq`xz+{ z3`7bvwr4J`Kp8Hu1l~K96YiSb=zIZNc!^)2M+A-TT5DHYV|mu;utl(xeVgcWpmZol z7xtgoBIhm=f8F;M642w@)!35f!qvndY%9nH9~nVz~klkCsp&0uoj zd!H=5S(vU;oh-=|>QO0J$1)x-g~Aw=FQ=;S)%PY*l5TItd)Vkum#`4@mq&;uYkrWpP^8SC_%unQ1%y;c zJqN-Gk)=?%CS8+FS!!#wYBb7&yP)W$5|=1R7kXH8e>-a%PcHO@-9r%z(H9!we%@0^ zT@($w*22=rM(m^Vs>vx(JK(MG=wv3Vl^-touH=l@m$HYS+^r33RcQRyoonA@ftX%9 z{%3gBqbvM*O4O+HBez~KU-on^Z#OKJv@Nu$0#+3}B5Ts=uo#c&px7EU0NT!@OR|Fw z5|0Acw2CB@Dv@}_2y$0{%lRB4Z`pLuVDDN|-2e_QTjT{3vNQ(|kiVyC72w0LqjA~z zwzbUZ z_^R)m%Bm=p4QoEwi!7- z(Kj{hX29ARmTBV@L3AU^VaP}i)!y}`*7cp}bm-4)i`_F2v4f2vuzT7fxVx*yyWzD@ z%Ki#g1lTfr9B%fmzneifCA^-@EY$!ZIdyy$=2;&2^PD6b=z=objuamM& z(ueH{>{PpnI+ZBATsCR_ZzDGInA&4dktt*0?mj!&>I?ZDHfTR_JcP&ilvaA$dlg0Z zdWL>TM3{`G4wurlipI{ZAV{r8PgGZLB~vQ~)kiqJGwnPUiJhHwIpA>9S?O@9>v!r* zw)8glcw^_h5SDnpBFd<;&f9lKg8@IcFFa9jxd1ov4EqkHW0a|D`!}#=%&(^{w&d!i zdW1EsZer^DD&(5)vuBeQt#I{MlL>p{lzVTc?7o#{N#VgHcJo_9aX8BR7nC>d`Kv#( zQFVFlZ|meACwj`{KZWGp@>}6)IZOcyJKOGr>umP;_=Y@BhA~H;ktAlezOQud?M16M z=_=nfd2(-@a_;@U+h{Apsa8RLud#EOS^#EB8HL^Lwc4oe*~cFAwGH2C{}eo0d