diff --git a/lang/en.json b/lang/en.json
index 85fc0ce..f4b8e9c 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -103,6 +103,14 @@
"hint": "By default, show Lair Actions (not normally included in 5e monster stat-blocks)."
}
},
+ "show-region-actions": {
+ "enable": "Show regional effects",
+ "disable": "Hide regional effects",
+ "settings": {
+ "name": "Show Regional Effects",
+ "hint": "By default, show Regional Effects (not normally included in the 5e monster stat-blocks)."
+ }
+ },
"current-hit-points": {
"enable": "Show current hit points",
"disable": "Hide current hit points",
@@ -316,11 +324,17 @@
"innatespellcasting(psionics)",
"innatespellcastingpsionics"
],
+ "RegionalEffectsLocators": [
+ "regionaleffect",
+ "regioneffect"
+ ],
"LegActionCost": "Costs {number} Actions",
"LegendaryText": "The {name} can take {number} legendary actions, choosing from the options below. Only one legendary action option can be used at a time and only at the end of another creature's turn. The {name} regains spent legendary actions at the start of its turn.",
"LairActionsHeading": "Lair Actions",
- "LairText": "On initiative count 20 (losing all initiative ties), the {name} takes a lair action to cause one of the following effects; the {name} can't use the same effect two rounds in a row:"
+ "LairText": "On initiative count 20 (losing all initiative ties), the {name} takes a lair action to cause one of the following effects; the {name} can't use the same effect two rounds in a row:",
+
+ "RegionHeading" : "Regional Effects"
}
}
\ No newline at end of file
diff --git a/lang/fr.json b/lang/fr.json
index ef6e2db..c13f824 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -103,6 +103,14 @@
"hint": "Affiche les actions d'antre par défaut (pas incluses dans les stat-blocks des monstres)."
}
},
+ "show-region-actions": {
+ "enable": "Afficher les effets de région",
+ "disable": "Masquer les effets de région",
+ "settings": {
+ "name": "Afficher les effets de région",
+ "hint": "Par défaut, affiche les effets de région (qui ne sont normalement pas inclus dans les blocs de statistiques du 5e monstre)."
+ }
+ },
"current-hit-points": {
"enable": "Afficher les points de vie actuels",
"disable": "Cacher les points de vie actuels",
@@ -324,11 +332,17 @@
"incantationinnée(psionique)",
"incantationinnéepsionique"
],
+ "RegionalEffectsLocators": [
+ "effetrégional",
+ "effetderégion"
+ ],
"LegActionCost": "Coûte {number} Actions",
"LegendaryText": "Le {name} peut effectuer {number} actions légendaires, en choisissant parmi les options suivantes. Une seule action légendaire peut être utilisée à la fois, et seulement à la fin du tour d'une autre créature. Le {name} récupère les actions légendaires dépensées au début de son tour.",
"LairActionsHeading": "Actions d'antre",
- "LairText": "À 20 lors du décompte d'initiative (sachant qu'il perd en cas d'égalité), le {name} peut effectuer une de ses actions d'antre. Il ne peut pas le faire tant qu'il est neutralisé ou incapable d'agir d'une façon ou d'une autre. S'il est surpris lors d'un combat, il ne peut pas l'effectuer avant la fin de son premier tour de jeu."
+ "LairText": "À 20 lors du décompte d'initiative (sachant qu'il perd en cas d'égalité), le {name} peut effectuer une de ses actions d'antre. Il ne peut pas le faire tant qu'il est neutralisé ou incapable d'agir d'une façon ou d'une autre. S'il est surpris lors d'un combat, il ne peut pas l'effectuer avant la fin de son premier tour de jeu.",
+
+ "RegionHeading" : "Effets de région"
}
}
diff --git a/lang/ja.json b/lang/ja.json
index 12f384d..73cd173 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -103,6 +103,14 @@
"hint": "住処アクションを表示する。"
}
},
+ "show-region-actions": {
+ "enable": "地域の効果を表示する",
+ "disable": "リージョンエフェクトを非表示",
+ "settings": {
+ "name": "地域の効果を表示する",
+ "hint": "デフォルトでは、RegionEffectsを表示します。"
+ }
+ },
"current-hit-points": {
"enable": "現在HPを表示",
"disable": "現在HPを非表示",
@@ -320,11 +328,17 @@
"生得呪文(サイオニック)",
"生得呪文(サイオニック)"
],
+ "RegionalEffectsLocators": [
+ "地域効果",
+ "リージョンエフェクト"
+ ],
"LegActionCost": "{number}伝説的アクション消費",
"LegendaryText": "{name}は以下の伝説的アクションを合計3回行なうことができる。1度に使用できる伝説的アクションはいずれか1つだけであり、行なえるのは他のクリーチヤーのターンの終了時である。{name} は消費した伝説的アクションの回数を自身のターンの開始時に回復する。",
"LairActionsHeading": "住処アクション",
- "LairText": "イニシアチブ20の時点で(同値の場合は常に後)、この{name}は住処アクションを行ない、以下のうち任意の1つの効果を生み出せる。同一の効果を2ラウンド連続で使用することはできない。"
+ "LairText": "イニシアチブ20の時点で(同値の場合は常に後)、この{name}は住処アクションを行ない、以下のうち任意の1つの効果を生み出せる。同一の効果を2ラウンド連続で使用することはできない。",
+
+ "RegionHeading" : "地域効果"
}
}
diff --git a/lang/pt-BR.json b/lang/pt-BR.json
index 5c9a27f..daece89 100644
--- a/lang/pt-BR.json
+++ b/lang/pt-BR.json
@@ -103,6 +103,14 @@
"hint": "Por padrão, mostrar Ações de Covil (não incluídas nos blocos de criaturas do livro)."
}
},
+ "show-region-actions": {
+ "enable": "Mostrar efeitos de região",
+ "disable": "Ocultar efeitos de região",
+ "settings": {
+ "name": "Mostrar efeitos de região",
+ "hint": "Por padrão, mostre os efeitos da região (não incluídas nos blocos de criaturas do livro)."
+ }
+ },
"current-hit-points": {
"enable": "Mostrar Pontos de Vida atuais",
"disable": "Esconder Pontos de Vida atuais",
@@ -330,11 +338,17 @@
"conjuraçãoinata(psiônico)",
"conjuraçãoinatapsiônico"
],
+ "RegionalEffectsLocators": [
+ "efeito regional",
+ "efeito de região"
+ ],
"LegActionCost": "Custa {number} Ações",
"LegendaryText": "O(a) {name} pode executar {number} ações lendárias, escolhendo entre as opções abaixo. Apenas uma opção de ação lendária pode ser usada por vez, e apenas no final do turno de outro criatura. O(a) {name} recupera as ações lendárias gastas no começo do turno dele.",
"LairActionsHeading": "Ações de Covil",
- "LairText": "Na contagem de iniciativa 20 (interrompendo a sequência de iniciativa), o(a) {name} executa uma ação de covil para causar um dos efeitos a seguir; o(a) {name} não pode usar o mesmo efeito em duas rodadas seguidas:"
+ "LairText": "Na contagem de iniciativa 20 (interrompendo a sequência de iniciativa), o(a) {name} executa uma ação de covil para causar um dos efeitos a seguir; o(a) {name} não pode usar o mesmo efeito em duas rodadas seguidas:",
+
+ "RegionHeading" : "Efeitos da região"
}
}
\ No newline at end of file
diff --git a/scripts/dnd5e/ActionPreper.js b/scripts/dnd5e/ActionPreper.js
index 5e6889d..ae81d0b 100644
--- a/scripts/dnd5e/ActionPreper.js
+++ b/scripts/dnd5e/ActionPreper.js
@@ -30,11 +30,13 @@ export default class ActionPreper extends ItemPreper {
multiAttack: MonsterBlock5e.isMultiAttack(data),
legendary: MonsterBlock5e.isLegendaryAction(data),
lair: MonsterBlock5e.isLairAction(data),
+ region: MonsterBlock5e.isRegionEffect(data),
legResist: MonsterBlock5e.isLegendaryResistance(data),
bonusAction: MonsterBlock5e.isBonusAction(data),
reaction: MonsterBlock5e.isReaction(data)
};
is.specialAction = this.isSpecialAction(is);
+ is.noName = is.region || is.lair;
return is;
}
diff --git a/scripts/dnd5e/Flags5e.js b/scripts/dnd5e/Flags5e.js
index e7090bd..089d98c 100644
--- a/scripts/dnd5e/Flags5e.js
+++ b/scripts/dnd5e/Flags5e.js
@@ -15,6 +15,7 @@ export default class Flags5e extends Flags {
"current-hit-points" : { type: Boolean, default: true },
"maximum-hit-points" : { type: Boolean, default: true },
"show-lair-actions" : { type: Boolean, default: false },
+ "show-region-actions": { type: Boolean, default: false },
"show-not-prof" : { type: Boolean, default: false },
"show-resources" : { type: Boolean, default: true },
"show-skill-save" : { type: Boolean, default: true },
diff --git a/scripts/dnd5e/ItemPrep.js b/scripts/dnd5e/ItemPrep.js
index a6655b3..bb281d5 100644
--- a/scripts/dnd5e/ItemPrep.js
+++ b/scripts/dnd5e/ItemPrep.js
@@ -41,6 +41,7 @@ export default class ItemPrep {
legResist: { prep: ItemPreper, filter: MonsterBlock5e.isLegendaryResistance, items: [], dataset: {type: "feat"} },
legendary: { prep: ActionPreper, filter: MonsterBlock5e.isLegendaryAction, items: [], dataset: {type: "feat"} },
lair: { prep: ActionPreper, filter: MonsterBlock5e.isLairAction, items: [], dataset: {type: "feat"} },
+ region: { prep: ActionPreper, filter: MonsterBlock5e.isRegionEffect, items: [], dataset: {type: "feat"} },
multiattack: { prep: ActionPreper, filter: MonsterBlock5e.isMultiAttack, items: [], dataset: {type: "feat"} },
casting: { prep: CastingPreper, filter: CastingPreper.isCasting.bind(CastingPreper), items: [], dataset: {type: "feat"} },
reaction: { prep: ActionPreper, filter: MonsterBlock5e.isReaction, items: [], dataset: {type: "feat"} },
diff --git a/scripts/dnd5e/MonsterBlock5e.js b/scripts/dnd5e/MonsterBlock5e.js
index 174283d..20c05d1 100644
--- a/scripts/dnd5e/MonsterBlock5e.js
+++ b/scripts/dnd5e/MonsterBlock5e.js
@@ -101,6 +101,7 @@ export default class MonsterBlock5e extends ActorSheet5eNPC {
hasCastingFeature: Boolean(data.features.casting.items.length),
hasLegendaryActions: Boolean(data.features.legendary.items.length),
hasLair: Boolean(data.features.lair.items.length),
+ hasRegion: Boolean(data.features.region.items.length),
hasActions: Boolean(data.features.attacks.items.length || data.features.actions.items.length || data.features.multiattack.items.length),
hasBonusActions: Boolean(data.features.bonusActions.items.length),
hasReactions: Boolean(data.features.reaction.items.length),
@@ -430,6 +431,11 @@ export default class MonsterBlock5e extends ActorSheet5eNPC {
return this.constructor.isLairAction(item)
});
}
+ hasRegion() {
+ return this.actor.data.items.some((item) => {
+ return this.constructor.isRegionEffect(item);
+ });
+ }
hasLegendaryActions() {
return this.actor.data.items.some((item) => {
return this.constructor.isLegendaryAction(item)
@@ -1175,6 +1181,11 @@ export default class MonsterBlock5e extends ActorSheet5eNPC {
return item.data?.activation?.type === "lair";
}
+ static isRegionEffect(item) {
+ let name = item.name.toLowerCase().replace(/\s+/g, "");
+ return getTranslationArray("MOBLOKS5E.RegionalEffectsLocators").some(loc => name.includes(loc));
+ }
+
static isAction(item) {
return item.data?.activation?.type && item.data?.activation.type != "none";
}
@@ -1186,7 +1197,6 @@ export default class MonsterBlock5e extends ActorSheet5eNPC {
static isReaction(item) {
return item.data?.activation?.type === "reaction";
}
-
static getItemAbility(item, actor, master) {
return master.object.items.get(item._id).abilityMod;
diff --git a/templates/dnd5e/main.hbs b/templates/dnd5e/main.hbs
index 9d6f50e..11161b1 100644
--- a/templates/dnd5e/main.hbs
+++ b/templates/dnd5e/main.hbs
@@ -92,6 +92,13 @@
{{> "modules/monsterblock/templates/dnd5e/parts/main/lairActs.hbs"}}
{{/if}}
+{{! Regional Effects }}
+ {{#if (and flags.show-region-actions info.hasRegion)}}
+ {{#> "modules/monsterblock/templates/dnd5e/collapsibleSection.hbs" title="MOBLOKS5E.RegionHeading" section="region"}}
+ {{> "modules/monsterblock/templates/dnd5e/parts/featureBlock.hbs" item=features.region.items.[0]}}
+ {{/"modules/monsterblock/templates/dnd5e/collapsibleSection.hbs"}}
+ {{/if}}
+
{{! Loot Items }}
{{#if info.hasLoot}}
{{#> "modules/monsterblock/templates/dnd5e/collapsibleSection.hbs" title="DND5E.Inventory" section="inventory"}}
diff --git a/templates/dnd5e/parts/featureBlock.hbs b/templates/dnd5e/parts/featureBlock.hbs
index 3eea6c4..464a3d4 100644
--- a/templates/dnd5e/parts/featureBlock.hbs
+++ b/templates/dnd5e/parts/featureBlock.hbs
@@ -5,7 +5,7 @@
{{/if}}
- {{#unless lairactions}}
+ {{#unless item.is.noName}}
{{~item.name~}}
diff --git a/templates/dnd5e/switches.hbs b/templates/dnd5e/switches.hbs
index f15ebf7..e2e75f5 100644
--- a/templates/dnd5e/switches.hbs
+++ b/templates/dnd5e/switches.hbs
@@ -45,6 +45,9 @@
{{#if info.hasLair}}
{{> "modules/monsterblock/templates/dnd5e/parts/switch.hbs" control="show-lair-actions"}}
{{/if}}
+ {{#if info.hasRegion}}
+ {{> "modules/monsterblock/templates/dnd5e/parts/switch.hbs" control="show-region-actions"}}
+ {{/if}}
{{> "modules/monsterblock/templates/dnd5e/parts/switch.hbs" control="show-bio"}}
{{> "modules/monsterblock/templates/dnd5e/parts/trigger.hbs"
control="resetDefaults"