diff --git a/src/module/apps/compendium-browser/tabs/data.ts b/src/module/apps/compendium-browser/tabs/data.ts index 104e5a00994..c171dd2e6d4 100644 --- a/src/module/apps/compendium-browser/tabs/data.ts +++ b/src/module/apps/compendium-browser/tabs/data.ts @@ -140,6 +140,7 @@ interface HazardFilters extends BaseFilterData { interface SpellFilters extends BaseFilterData { checkboxes: { category: CheckboxData; + defense: CheckboxData; rank: CheckboxData; rarity: CheckboxData; traditions: CheckboxData; diff --git a/src/module/apps/compendium-browser/tabs/spell.ts b/src/module/apps/compendium-browser/tabs/spell.ts index 5fe9f26c160..b4132008394 100644 --- a/src/module/apps/compendium-browser/tabs/spell.ts +++ b/src/module/apps/compendium-browser/tabs/spell.ts @@ -30,6 +30,7 @@ export class CompendiumBrowserSpellTab extends CompendiumBrowserTab { const publications = new Set(); const indexFields = [ "img", + "system.defense", "system.level.value", "system.time", "system.traits", @@ -91,6 +92,12 @@ export class CompendiumBrowserSpellTab extends CompendiumBrowserTab { system.time.value = normalizedTime; options.push(`time:${normalizedTime}`); } + const defense = system.defense; + if (defense?.save) + options.push(`defense:save:${defense.save.basic ? "basic:" : ""}${defense.save.statistic}`); + if (defense?.passive) options.push(`defense:passive:${defense.passive.statistic.split("-")[0]}`); + if (!defense && options.includes(`trait:attack`) && !options.includes("category:ritual")) + options.push(`defense:passive:armor`); spells.push({ name: spellData.name, @@ -133,7 +140,25 @@ export class CompendiumBrowserSpellTab extends CompendiumBrowserTab { }, { sort: false }, ); - + this.filterData.checkboxes.defense.options = { + ...this.generateCheckboxOptions( + R.mapValues(CONFIG.PF2E.saves, (l) => + game.i18n.format("PF2E.CompendiumBrowser.Filter.Spells.Defense.BasicWithSave", { + save: game.i18n.localize(l), + }), + ), + { + prefix: "save:basic", + }, + ), + ...this.generateCheckboxOptions(CONFIG.PF2E.saves, { prefix: "save" }), + ...this.generateCheckboxOptions( + R.pick(CONFIG.PF2E.checkDCs.Specific, ["armor", "fortitude", "reflex", "will"]), + { + prefix: "passive", + }, + ), + }; this.filterData.selects.timefilter.options = [...times].sort().reduce( (result, time) => ({ ...result, @@ -167,6 +192,12 @@ export class CompendiumBrowserSpellTab extends CompendiumBrowserTab { options: {}, selected: [], }, + defense: { + isExpanded: false, + label: "PF2E.Item.Spell.Defense.Label", + options: {}, + selected: [], + }, rarity: { isExpanded: false, label: "PF2E.CompendiumBrowser.Filter.Rarities", diff --git a/static/lang/en.json b/static/lang/en.json index ee81ee7f196..40ac07724ea 100644 --- a/static/lang/en.json +++ b/static/lang/en.json @@ -1072,6 +1072,11 @@ "Rarities": "Rarities", "Sizes": "Sizes", "Source": "Sources", + "Spells": { + "Defense": { + "BasicWithSave": "Basic {save}" + } + }, "Traditions": "Traditions", "WeaponFilters": "Weapon Filters", "SearchPlaceholder": "Search Text",