diff --git a/less/elements.less b/less/elements.less index 2b6ef42439..794454ac04 100644 --- a/less/elements.less +++ b/less/elements.less @@ -119,6 +119,7 @@ item-list-controls search, .dnd5e2 .filter-element search { > input[type="text"] { --input-placeholder-color: var(--color-text-dark-secondary); + color: var(--color-text-dark-primary); flex: 1; background: none; border: none; diff --git a/less/v2/actors.less b/less/v2/actors.less index c61424cb29..ee9c7ef7f1 100644 --- a/less/v2/actors.less +++ b/less/v2/actors.less @@ -273,6 +273,20 @@ .pill-lg.empty { width: 240px; } } + /* ---------------------------------- */ + /* Pills */ + /* ---------------------------------- */ + + .pills-group .pill > i { + font-family: var(--font-awesome); + font-weight: bold; + font-style: normal; + + &.ada::before { content: "\f132"; } + &.mgc::before { content: "\f72b"; } + &.sil::before { content: "\53"; } + } + /* ---------------------------------- */ /* Spells */ /* ---------------------------------- */ diff --git a/less/v2/character.less b/less/v2/character.less index d08ac04872..c27cc384d7 100644 --- a/less/v2/character.less +++ b/less/v2/character.less @@ -828,19 +828,7 @@ > h3 > a { color: var(--dnd5e-color-black); } } - .pill { - padding: .25rem .5rem; - - > i { - font-family: var(--font-awesome); - font-weight: bold; - font-style: normal; - - &.ada::before { content: "\f132"; } - &.mgc::before { content: "\f72b"; } - &.sil::before { content: "\53"; } - } - } + .pill { padding: .25rem .5rem; } } } diff --git a/less/v2/compendium-browser.less b/less/v2/compendium-browser.less index 1afe046d8e..cec2059c3b 100644 --- a/less/v2/compendium-browser.less +++ b/less/v2/compendium-browser.less @@ -2,8 +2,6 @@ --icon-size: 32px; border: none; background: none; - min-width: 750px; - min-height: 600px; > header { background: none; @@ -266,4 +264,12 @@ color: var(--color-text-dark-primary); } } + + &.minimized { + nav.tabs { display: none; } + .window-title { visibility: unset; } + .mode-toggle { display: none; } + .window-content { background: var(--dnd5e-color-dark-gray) url("../../ui/denim075.png"); } + &::after { border-color: var(--dnd5e-color-blue-gray-1); } + } } diff --git a/less/v2/inventory.less b/less/v2/inventory.less index 4d097a84da..3c3e4cbf4c 100644 --- a/less/v2/inventory.less +++ b/less/v2/inventory.less @@ -289,6 +289,8 @@ width: 32px; height: 32px; object-fit: cover; + min-width: 32px; + min-height: 32px; } /* Item Weight & Price */ diff --git a/module/applications/actor/sheet-v2-mixin.mjs b/module/applications/actor/sheet-v2-mixin.mjs index b4b5fd286f..f2050be7b8 100644 --- a/module/applications/actor/sheet-v2-mixin.mjs +++ b/module/applications/actor/sheet-v2-mixin.mjs @@ -93,6 +93,7 @@ export default function ActorSheetV2Mixin(Base) { const firstButton = header.querySelector(".header-button"); firstButton?.insertAdjacentElement("beforebegin", idLink); idLink.classList.add("header-button"); + idLink.dataset.tooltipDirection = "DOWN"; } // Render tabs. @@ -140,9 +141,10 @@ export default function ActorSheetV2Mixin(Base) { // Portrait const showTokenPortrait = this.actor.getFlag("dnd5e", "showTokenPortrait") === true; const token = this.actor.isToken ? this.actor.token : this.actor.prototypeToken; + const defaultArtwork = Actor.implementation.getDefaultArtwork(context.source)?.img; context.portrait = { token: showTokenPortrait, - src: showTokenPortrait ? token.texture.src : this.actor.img, + src: showTokenPortrait ? token.texture.src : this.actor.img ?? defaultArtwork, // TODO: Not sure the best way to update the parent texture from this sheet if this is a token actor. path: showTokenPortrait ? this.actor.isToken ? "" : "prototypeToken.texture.src" : "img" }; diff --git a/module/applications/components/checkbox.mjs b/module/applications/components/checkbox.mjs index 995729e3a5..2698bcb297 100644 --- a/module/applications/components/checkbox.mjs +++ b/module/applications/components/checkbox.mjs @@ -33,38 +33,32 @@ export default class CheckboxElement extends AdoptedStyleSheetMixin(AbstractForm width: var(--checkbox-size, 18px); height: var(--checkbox-size, 18px); aspect-ratio: 1; - - > div { - width: 100%; - height: 100%; - border-radius: var(--checkbox-border-radius, 3px); - border: var(--checkbox-border-width, 2px) solid var(--checkbox-border-color, var(--dnd5e-color-gold)); - background: var(--checkbox-empty-color, transparent); - box-sizing: border-box; - } - - .checked, .disabled, .indeterminate { - display: none; - height: 100%; - width: 100%; - background: var(--checkbox-fill-color, var(--dnd5e-color-gold)); - align-items: center; - justify-content: center; - } } - :host([checked]) .checked { display: flex; } - - :host([indeterminate]) { - .indeterminate { display: flex; } - .checked { display: none; } + :host > div { + width: 100%; + height: 100%; + border-radius: var(--checkbox-border-radius, 3px); + border: var(--checkbox-border-width, 2px) solid var(--checkbox-border-color, var(--dnd5e-color-gold)); + background: var(--checkbox-empty-color, transparent); + box-sizing: border-box; } - :host(:disabled) { - .disabled { display: flex; } - .checked { display: none; } - .indeterminate { display: none; } + :host :is(.checked, .disabled, .indeterminate) { + display: none; + height: 100%; + width: 100%; + background: var(--checkbox-fill-color, var(--dnd5e-color-gold)); + align-items: center; + justify-content: center; } + + :host([checked]) .checked { display: flex; } + :host([indeterminate]) .indeterminate { display: flex; } + :host([indeterminate]) .checked { display: none; } + :host(:disabled) .disabled { display: flex; } + :host(:disabled) .checked { display: none; } + :host(:disabled) .indeterminate { display: none; } `; /* -------------------------------------------- */ diff --git a/packs/_source/spells/3rd-level/conjure-animals.json b/packs/_source/spells/3rd-level/conjure-animals.json index 5e17360ad4..70dc5d6237 100644 --- a/packs/_source/spells/3rd-level/conjure-animals.json +++ b/packs/_source/spells/3rd-level/conjure-animals.json @@ -52,7 +52,7 @@ "scale": false }, "ability": "", - "actionType": "util", + "actionType": "summ", "attackBonus": "", "chatFlavor": "", "critical": { @@ -90,7 +90,80 @@ "somatic", "concentration" ], - "crewed": false + "crewed": false, + "summons": { + "prompt": true, + "mode": "cr", + "bonuses": { + "ac": "", + "hd": "", + "hp": "", + "attackDamage": "", + "saveDamage": "", + "healing": "" + }, + "profiles": [ + { + "count": "1 * min(3, floor((@item.level - 1) / 2))", + "cr": "2", + "name": "", + "_id": "L0UhkCz2NI01zinq", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "beast" + ] + }, + { + "count": "2 * min(3, floor((@item.level - 1) / 2))", + "cr": "1", + "name": "", + "_id": "CFJttKXu4rVgI4hX", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "beast" + ] + }, + { + "count": "4 * min(3, floor((@item.level - 1) / 2))", + "cr": "0.5", + "name": "", + "_id": "D5jhKf0u1tiEPE88", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "beast" + ] + }, + { + "count": "8 * min(3, floor((@item.level - 1) / 2))", + "cr": "0.25", + "name": "", + "_id": "04lzPfFqexz2myIV", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "beast" + ] + } + ], + "creatureTypes": [ + "fey" + ] + } }, "sort": 0, "flags": {}, @@ -99,10 +172,10 @@ "folder": "5Si35RRLLaaoWvC3", "_stats": { "systemId": "dnd5e", - "systemVersion": "3.0.0", + "systemVersion": "3.3.0", "coreVersion": "11.315", "createdTime": 1661787234055, - "modifiedTime": 1704823521528, + "modifiedTime": 1721324536686, "lastModifiedBy": "dnd5ebuilder0000" }, "_key": "!items!1Drt0SHxbEAHxprN" diff --git a/packs/_source/spells/4th-level/conjure-minor-elementals.json b/packs/_source/spells/4th-level/conjure-minor-elementals.json index a5d7e88b22..f23294db9b 100644 --- a/packs/_source/spells/4th-level/conjure-minor-elementals.json +++ b/packs/_source/spells/4th-level/conjure-minor-elementals.json @@ -52,7 +52,7 @@ "scale": false }, "ability": "", - "actionType": "util", + "actionType": "summ", "attackBonus": "", "chatFlavor": "", "critical": { @@ -90,7 +90,77 @@ "somatic", "concentration" ], - "crewed": false + "crewed": false, + "summons": { + "prompt": true, + "mode": "cr", + "bonuses": { + "ac": "", + "hd": "", + "hp": "", + "attackDamage": "", + "saveDamage": "", + "healing": "" + }, + "profiles": [ + { + "count": "1 * min(3, floor((@item.level - 2) / 2))", + "cr": "2", + "name": "", + "_id": "GXYOvyt5u1zbrtH5", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "elemental" + ] + }, + { + "count": "2 * min(3, floor((@item.level - 2) / 2))", + "cr": "1", + "name": "", + "_id": "ip4lVc7sx8WcM7Vd", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "elemental" + ] + }, + { + "count": "4 * min(3, floor((@item.level - 2) / 2))", + "cr": "0.5", + "name": "", + "_id": "1jJHfKlD44tW61sJ", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "elemental" + ] + }, + { + "count": "8 * min(3, floor((@item.level - 2) / 2))", + "cr": "0.25", + "name": "", + "_id": "7sGiKZLEAIU83Lqx", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "elemental" + ] + } + ] + } }, "sort": 0, "flags": {}, @@ -99,10 +169,10 @@ "folder": "5auWSClKMDUIV5Ni", "_stats": { "systemId": "dnd5e", - "systemVersion": "3.0.0", + "systemVersion": "3.3.0", "coreVersion": "11.315", "createdTime": 1661787234117, - "modifiedTime": 1704823523272, + "modifiedTime": 1721324756744, "lastModifiedBy": "dnd5ebuilder0000" }, "_key": "!items!KgEw3sDr39C6g8nY" diff --git a/packs/_source/spells/4th-level/conjure-woodland-beings.json b/packs/_source/spells/4th-level/conjure-woodland-beings.json index 88ef738892..5867b989ba 100644 --- a/packs/_source/spells/4th-level/conjure-woodland-beings.json +++ b/packs/_source/spells/4th-level/conjure-woodland-beings.json @@ -52,7 +52,7 @@ "scale": false }, "ability": "", - "actionType": "util", + "actionType": "summ", "attackBonus": "", "chatFlavor": "", "critical": { @@ -91,7 +91,77 @@ "material", "concentration" ], - "crewed": false + "crewed": false, + "summons": { + "prompt": true, + "mode": "cr", + "bonuses": { + "ac": "", + "hd": "", + "hp": "", + "attackDamage": "", + "saveDamage": "", + "healing": "" + }, + "profiles": [ + { + "count": "1 * min(3, floor((@item.level - 2) / 2))", + "cr": "2", + "name": "", + "_id": "kQDINPmZasFM7K3Q", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "fey" + ] + }, + { + "count": "2 * min(3, floor((@item.level - 2) / 2))", + "cr": "1", + "name": "", + "_id": "3iNRyDrFhh8f5bXy", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "fey" + ] + }, + { + "count": "4 * min(3, floor((@item.level - 2) / 2))", + "cr": "0.5", + "name": "", + "_id": "x5Bkpxb7uJN3KDOi", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "fey" + ] + }, + { + "count": "8 * min(3, floor((@item.level - 2) / 2))", + "cr": "0.25", + "name": "", + "_id": "h5hp68lZiSO919OX", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "fey" + ] + } + ] + } }, "sort": 0, "flags": {}, @@ -100,10 +170,10 @@ "folder": "5auWSClKMDUIV5Ni", "_stats": { "systemId": "dnd5e", - "systemVersion": "3.0.0", + "systemVersion": "3.3.0", "coreVersion": "11.315", "createdTime": 1661787234178, - "modifiedTime": 1704823524907, + "modifiedTime": 1721324746022, "lastModifiedBy": "dnd5ebuilder0000" }, "_key": "!items!dEfSELiY1eO3cpX9" diff --git a/packs/_source/spells/5th-level/conjure-elemental.json b/packs/_source/spells/5th-level/conjure-elemental.json index fa7e3666e9..46148a6a6c 100644 --- a/packs/_source/spells/5th-level/conjure-elemental.json +++ b/packs/_source/spells/5th-level/conjure-elemental.json @@ -52,7 +52,7 @@ "scale": false }, "ability": "", - "actionType": "util", + "actionType": "summ", "attackBonus": "", "chatFlavor": "", "critical": { @@ -91,7 +91,35 @@ "material", "concentration" ], - "crewed": false + "crewed": false, + "summons": { + "prompt": true, + "mode": "cr", + "bonuses": { + "ac": "", + "hd": "", + "hp": "", + "attackDamage": "", + "saveDamage": "", + "healing": "" + }, + "profiles": [ + { + "count": "1", + "cr": "@item.level", + "name": "", + "_id": "BFnNfSl7Ojcw4Rm2", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "elemental" + ] + } + ] + } }, "sort": 0, "flags": {}, @@ -100,10 +128,10 @@ "folder": "bG9QTayc46rfNkv2", "_stats": { "systemId": "dnd5e", - "systemVersion": "3.0.0", + "systemVersion": "3.3.0", "coreVersion": "11.315", "createdTime": 1661787234056, - "modifiedTime": 1704823521541, + "modifiedTime": 1721324844592, "lastModifiedBy": "dnd5ebuilder0000" }, "_key": "!items!1LkZvINag7KqBmDR" diff --git a/packs/_source/spells/6th-level/conjure-fey.json b/packs/_source/spells/6th-level/conjure-fey.json index 15dc3b5f3f..c03f68153f 100644 --- a/packs/_source/spells/6th-level/conjure-fey.json +++ b/packs/_source/spells/6th-level/conjure-fey.json @@ -52,7 +52,7 @@ "scale": false }, "ability": "", - "actionType": "util", + "actionType": "summ", "attackBonus": "", "chatFlavor": "", "critical": { @@ -90,7 +90,39 @@ "somatic", "concentration" ], - "crewed": false + "crewed": false, + "summons": { + "prompt": true, + "mode": "cr", + "bonuses": { + "ac": "", + "hd": "", + "hp": "", + "attackDamage": "", + "saveDamage": "", + "healing": "" + }, + "profiles": [ + { + "count": "1", + "cr": "@item.level", + "name": "", + "_id": "bsUNlHWgMcYsorA1", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "beast", + "fey" + ] + } + ], + "creatureTypes": [ + "fey" + ] + } }, "sort": 0, "flags": {}, @@ -99,10 +131,10 @@ "folder": "0pdesvXqKd55VOh2", "_stats": { "systemId": "dnd5e", - "systemVersion": "3.0.0", + "systemVersion": "3.3.0", "coreVersion": "11.315", "createdTime": 1661787234242, - "modifiedTime": 1704823526339, + "modifiedTime": 1721324879876, "lastModifiedBy": "dnd5ebuilder0000" }, "_key": "!items!yN3XZZujhR4aVvPa" diff --git a/packs/_source/spells/7th-level/conjure-celestial.json b/packs/_source/spells/7th-level/conjure-celestial.json index be0ef205b3..e4f999ea70 100644 --- a/packs/_source/spells/7th-level/conjure-celestial.json +++ b/packs/_source/spells/7th-level/conjure-celestial.json @@ -52,7 +52,7 @@ "scale": false }, "ability": "", - "actionType": "util", + "actionType": "summ", "attackBonus": "", "chatFlavor": "", "critical": { @@ -90,7 +90,35 @@ "somatic", "concentration" ], - "crewed": false + "crewed": false, + "summons": { + "prompt": true, + "mode": "cr", + "bonuses": { + "ac": "", + "hd": "", + "hp": "", + "attackDamage": "", + "saveDamage": "", + "healing": "" + }, + "profiles": [ + { + "count": "1", + "cr": "@item.level - 3", + "name": "", + "_id": "4exNRoIOFTvFrefI", + "uuid": "", + "level": { + "min": null, + "max": null + }, + "types": [ + "celestial" + ] + } + ] + } }, "sort": 0, "flags": {}, @@ -99,10 +127,10 @@ "folder": "irCSpQWIMtp978TA", "_stats": { "systemId": "dnd5e", - "systemVersion": "3.0.0", + "systemVersion": "3.3.0", "coreVersion": "11.315", "createdTime": 1661787234156, - "modifiedTime": 1704823524313, + "modifiedTime": 1721324908906, "lastModifiedBy": "dnd5ebuilder0000" }, "_key": "!items!XT7nzJmVGgv73uaf" diff --git a/system.json b/system.json index 11d79ae0f5..870e36381c 100644 --- a/system.json +++ b/system.json @@ -2,14 +2,14 @@ "id": "dnd5e", "title": "Dungeons & Dragons Fifth Edition", "description": "A system for playing the fifth edition of the world's most popular role-playing game in the Foundry Virtual Tabletop environment.", - "version": "3.2.1", + "version": "3.3.0", "compatibility": { "minimum": "11.315", "verified": "12" }, "url": "https://github.com/foundryvtt/dnd5e/", "manifest": "https://raw.githubusercontent.com/foundryvtt/dnd5e/master/system.json", - "download": "https://github.com/foundryvtt/dnd5e/releases/download/release-3.2.1/dnd5e-release-3.2.1.zip", + "download": "https://github.com/foundryvtt/dnd5e/releases/download/release-3.3.0/dnd5e-release-3.3.0.zip", "authors": [ { "name": "Atropos",