From 7283f5f15b75cea8a99849a4daa3ed52991e01ae Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Wed, 14 Jan 2026 14:16:31 +0100 Subject: [PATCH] Update skill sheet --- lang/en.json | 2 + module/config/system.mjs | 32 +++++--- module/documents/actor.mjs | 17 +++- module/documents/roll.mjs | 51 +++++++++--- module/models/_module.mjs | 2 - module/models/armor.mjs | 25 ++++++ module/models/miracle.mjs | 124 ------------------------------ module/models/shield.mjs | 25 ++++++ module/models/skill.mjs | 53 +++++++------ module/models/vulnerability.mjs | 17 ---- module/models/weapon.mjs | 25 ++++++ prism-rpg.mjs | 8 +- templates/character-biography.hbs | 61 +-------------- templates/character-miracles.hbs | 52 ------------- templates/chat-message.hbs | 18 ++++- templates/roll-dialog-v2.hbs | 23 ++++++ templates/roll-dialog.hbs | 22 +++++- templates/skill.hbs | 40 +++++----- 18 files changed, 266 insertions(+), 331 deletions(-) delete mode 100644 module/models/miracle.mjs delete mode 100644 module/models/vulnerability.mjs delete mode 100644 templates/character-miracles.hbs diff --git a/lang/en.json b/lang/en.json index c72c16e..914195d 100644 --- a/lang/en.json +++ b/lang/en.json @@ -516,6 +516,8 @@ "skills": "Skills", "sub-attribute": "Sub-Attribute", "subattributes": "Sub-Attributes", + "subAttribute1": "Sub-Attribute 1", + "subAttribute2": "Sub-Attribute 2", "spells": "Spells", "str": "STR", "titleChallenge": "Challenge", diff --git a/module/config/system.mjs b/module/config/system.mjs index 2428016..88f8d0e 100644 --- a/module/config/system.mjs +++ b/module/config/system.mjs @@ -261,15 +261,29 @@ export const CHOICE_MODIFIERS = { } export const ASCII = ` -······················································································································ -: : -:@@@ @@@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@ @@@@@@@@ @@@@@@ @@@ @@@ @@@@@@@ @@@@@@ @@@@@@ @@@ @@@ : -:@@! @@! @!! @@! @@@ @@! @@@ @@! @@! @@! @@@ @@!@!@@@ @!! @@! @@@ !@@ @@! !@@ : -:@!! @!!!:! @!! @!@!@!@! @!@!@!@! @!! @!!!:! @!@!@!@! @!@@!!@! @!! @!@!@!@! !@@!! !@!@! : -:!!: !!: !!: !!: !!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!: !!! !:! !!: : -:: ::.: : : :: :: : : : : : : : : ::.: : : : : : :: : : : : : ::.: : .: : -: : -······················································································································ + + +┌─────────────────────────────────────────────────────┐ +│8888888b. 8888888b. 8888888 .d8888b. 888b d888│ +│888 Y88b 888 Y88b 888 d88P Y88b 8888b d8888│ +│888 888 888 888 888 Y88b. 88888b.d88888│ +│888 d88P 888 d88P 888 "Y888b. 888Y88888P888│ +│8888888P" 8888888P" 888 "Y88b. 888 Y888P 888│ +│888 888 T88b 888 "888 888 Y8P 888│ +│888 888 T88b 888 Y88b d88P 888 " 888│ +│888 888 T88b 8888888 "Y8888P" 888 888│ +│ │ +│ │ +│ │ +│8888888b. 8888888b. .d8888b. │ +│888 Y88b 888 Y88b d88P Y88b │ +│888 888 888 888 888 888 │ +│888 d88P 888 d88P 888 │ +│8888888P" 8888888P" 888 88888 │ +│888 T88b 888 888 888 │ +│888 T88b 888 Y88b d88P │ +│888 T88b 888 "Y8888P88 │ +└─────────────────────────────────────────────────────┘ ` /** diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index 17744fb..56dadca 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -119,18 +119,27 @@ export default class PrismRPGActor extends Actor { rollTarget = this.items.find((i) => i.type === "miracle" && i.id === rollKey) rollTarget.rollKey = rollKey break - case "skill": + case "skill": { rollTarget = this.items.find((i) => i.type === "skill" && i.id === rollKey) rollTarget.rollKey = rollKey if (rollTarget.system.category === "weapon") { ui.notifications.warn(game.i18n.localize("PRISMRPG.Notifications.rollFromWeapon")) return } - // Get the primary attribute for D&D 5e style rolls - const attrKey = rollTarget.system.primaryAttribute || "dex" - rollTarget.characteristicValue = this.system.characteristics[attrKey].value + // Get the two sub-attributes for this skill + const subAttr1 = rollTarget.system.subAttribute1 || "prowess" + const subAttr2 = rollTarget.system.subAttribute2 || "initiative" + + // Store both sub-attribute values for the dialog to choose from + rollTarget.subAttribute1 = subAttr1 + rollTarget.subAttribute2 = subAttr2 + rollTarget.subAttribute1Value = this.system.subAttributes?.[subAttr1]?.value || 0 + rollTarget.subAttribute2Value = this.system.subAttributes?.[subAttr2]?.value || 0 + rollTarget.subAttribute1Label = game.i18n.localize(SYSTEM.SUB_ATTRIBUTES?.[subAttr1]?.label || subAttr1) + rollTarget.subAttribute2Label = game.i18n.localize(SYSTEM.SUB_ATTRIBUTES?.[subAttr2]?.label || subAttr2) rollTarget.proficiencyBonus = rollTarget.system.modifier break + } case "spell-attack": case "spell-power": case "spell-cast": diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index 9663b24..87e9e95 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -127,11 +127,10 @@ export default class PrismRPGRoll extends Roll { case "skill": options.rollName = options.rollTarget.name - // D&D 5e style: ability modifier + proficiency bonus - const skillCharValue = options.rollTarget.characteristicValue - const skillAbilityMod = this.getAbilityModifier(skillCharValue) + // D&D 5e style: sub-attribute modifier + proficiency bonus + // Default to first sub-attribute, will be recalculated if player chooses different one const proficiency = options.rollTarget.proficiencyBonus || 0 - options.rollTarget.value = skillAbilityMod + proficiency + options.rollTarget.value = options.rollTarget.subAttribute1Value + proficiency break case "weapon-attack": @@ -158,7 +157,7 @@ export default class PrismRPGRoll extends Roll { const chaMod = this.getAbilityModifier(actor.system.characteristics.cha.value) const bestMentalMod = Math.max(intMod, wisMod, chaMod) options.rollTarget.value = bestMentalMod - + // Store which characteristic is being used if (bestMentalMod === intMod) { options.rollTarget.mentalCharacteristic = "INT" @@ -284,7 +283,8 @@ export default class PrismRPGRoll extends Roll { attackerAimChoices, hasTarget: options.hasTarget, modifier: "+0", - advantage: "none" + advantage: "none", + config: SYSTEM } const content = await foundry.applications.handlebars.renderTemplate( @@ -342,6 +342,15 @@ export default class PrismRPGRoll extends Roll { } } + // Recalculate bonus if player chose different sub-attribute for skill + if (rollContext.skillSubAttribute && options.rollType === "skill") { + const chosenSubAttrValue = rollContext.skillSubAttribute === options.rollTarget.subAttribute1 ? + options.rollTarget.subAttribute1Value : + options.rollTarget.subAttribute2Value + const proficiencyBonus = options.rollTarget.proficiencyBonus || 0 + bonus = chosenSubAttrValue + proficiencyBonus + } + let extraModifier = rollContext.modifier === "" ? 0 : Number.parseInt(rollContext.modifier, 10) totalModifier = bonus + extraModifier @@ -388,12 +397,27 @@ export default class PrismRPGRoll extends Roll { totalManaCost = options.rollTarget.system.manaCost + upcastLevel totalAPC = options.rollTarget.system.apc + upcastLevel manaUpkeep = options.rollTarget.system.manaUpkeep - + // Get mental characteristic info from rollTarget mentalCharacteristic = options.rollTarget.mentalCharacteristic mentalCharValue = options.rollTarget.mentalCharValue } + // Store skill sub-attribute information + let skillSubAttribute = null + let skillSubAttributeLabel = null + let skillSubAttributeValue = null + if (options.rollType === "skill" && rollContext.skillSubAttribute) { + skillSubAttribute = rollContext.skillSubAttribute + const subAttrConfig = SYSTEM.SUB_ATTRIBUTES?.[skillSubAttribute] + if (subAttrConfig) { + skillSubAttributeLabel = game.i18n.localize(subAttrConfig.label) + } + skillSubAttributeValue = rollContext.skillSubAttribute === options.rollTarget.subAttribute1 ? + options.rollTarget.subAttribute1Value : + options.rollTarget.subAttribute2Value + } + const rollData = { type: options.rollType, rollType: options.rollType, @@ -411,6 +435,9 @@ export default class PrismRPGRoll extends Roll { manaUpkeep, mentalCharacteristic, mentalCharValue, + skillSubAttribute, + skillSubAttributeLabel, + skillSubAttributeValue, ...rollContext, } @@ -420,7 +447,7 @@ export default class PrismRPGRoll extends Roll { if (options.rollType === "spell-cast" && totalManaCost > 0) { const actor = game.actors.get(options.actorId) const currentMana = actor.system.manaPoints.value - + // Check if enough mana if (currentMana < totalManaCost) { ui.notifications.error( @@ -428,12 +455,12 @@ export default class PrismRPGRoll extends Roll { ) return null } - + // Spend mana - await actor.update({ - "system.manaPoints.value": currentMana - totalManaCost + await actor.update({ + "system.manaPoints.value": currentMana - totalManaCost }) - + ui.notifications.info( `Spent ${totalManaCost} Mana (${currentMana} → ${currentMana - totalManaCost})` ) diff --git a/module/models/_module.mjs b/module/models/_module.mjs index eacbb11..9985de9 100644 --- a/module/models/_module.mjs +++ b/module/models/_module.mjs @@ -6,9 +6,7 @@ export { default as PrismRPGSkill } from "./skill.mjs" export { default as PrismRPGArmor } from "./armor.mjs" export { default as PrismRPGShield } from "./shield.mjs" export { default as PrismRPGRacialAbility } from "./racial-ability.mjs" -export { default as PrismRPGVulnerability } from "./vulnerability.mjs" export { default as PrismRPGEquipment } from "./equipment.mjs" -export { default as PrismRPGMiracle } from "./miracle.mjs" export { default as PrismRPGRace } from "./race.mjs" export { default as PrismRPGClass } from "./class.mjs" export { default as PrismRPGCharacterPath } from "./character-path.mjs" \ No newline at end of file diff --git a/module/models/armor.mjs b/module/models/armor.mjs index 4e1053d..5d4caea 100644 --- a/module/models/armor.mjs +++ b/module/models/armor.mjs @@ -32,4 +32,29 @@ export default class PrismRPGArmor extends foundry.abstract.TypeDataModel { /** @override */ static LOCALIZATION_PREFIXES = ["PRISMRPG.Armor"] + static migrateData(data) { + // Migrate old money types to new ones + if (data?.money) { + const moneyMigration = { + "tinbit": "coppercoin", + "copper": "coppercoin", + "silver": "silvercoin", + "gold": "goldcoin", + "platinum": "note" + } + + if (moneyMigration[data.money]) { + data.money = moneyMigration[data.money] + } + + // If still invalid, default to coppercoin + if (!SYSTEM.MONEY[data.money]) { + console.warn(`Prism RPG | Migrate armor: Invalid money type "${data.money}", defaulting to coppercoin`) + data.money = "coppercoin" + } + } + + return super.migrateData(data) + } + } diff --git a/module/models/miracle.mjs b/module/models/miracle.mjs deleted file mode 100644 index 1eacb46..0000000 --- a/module/models/miracle.mjs +++ /dev/null @@ -1,124 +0,0 @@ -import { SYSTEM } from "../config/system.mjs" - -export default class PrismRPGMiracle extends foundry.abstract.TypeDataModel { - static defineSchema() { - const fields = foundry.data.fields - const requiredInteger = { required: true, nullable: false, integer: true } - const schema = {} - - schema.description = new fields.HTMLField({ - required: false, - blank: true, - initial: "", - textSearch: true, - }) - - // Miracle level (1-7+) - schema.level = new fields.NumberField({ - ...requiredInteger, - initial: 1, - min: 1, - max: 25, - }) - - // Miracle type - schema.miracleType = new fields.StringField({ - required: true, - initial: "combat", - choices: SYSTEM.MIRACLE_TYPES - }) - - // APC to pray - schema.apc = new fields.NumberField({ - ...requiredInteger, - required: true, - initial: 1, - min: 0, - label: "Action Point Cost" - }) - - // Faith cost (if applicable in Prism RPG) - schema.faithCost = new fields.NumberField({ - ...requiredInteger, - required: true, - initial: 0, - min: 0, - label: "Faith Cost" - }) - - // Divine favor required - schema.divineFavor = new fields.StringField({ - required: true, - initial: "", - label: "Divine Favor" - }) - - // Components (Miracles have 'religious' component) - schema.components = new fields.SchemaField({ - verbal: new fields.BooleanField({ initial: false }), - somatic: new fields.BooleanField({ initial: false }), - material: new fields.BooleanField({ initial: false }), - catalyst: new fields.BooleanField({ initial: false }), - religious: new fields.BooleanField({ initial: true }) - }) - - schema.materialComponent = new fields.StringField({ - required: true, - initial: "" - }) - - schema.catalyst = new fields.StringField({ - required: true, - initial: "" - }) - - // Prayer parameters - schema.prayerTime = new fields.StringField({ - required: true, - initial: "1 action" - }) - - schema.miracleRange = new fields.StringField({ - required: true, - initial: "Touch" - }) - - schema.areaAffected = new fields.StringField({ - required: true, - initial: "Single target" - }) - - schema.duration = new fields.StringField({ - required: true, - initial: "Instantaneous" - }) - - schema.savingThrow = new fields.StringField({ - required: true, - initial: "" - }) - - // Keywords - schema.keywords = new fields.ArrayField( - new fields.StringField() - ) - - // Miracle augment (if applicable) - schema.augment = new fields.StringField({ - required: true, - initial: "", - label: "Miracle Augment" - }) - - schema.augmentDescription = new fields.HTMLField({ - required: true, - initial: "", - label: "Augment Description" - }) - - return schema - } - - /** @override */ - static LOCALIZATION_PREFIXES = ["PRISMRPG.Miracle"] -} diff --git a/module/models/shield.mjs b/module/models/shield.mjs index 4e42267..f388c62 100644 --- a/module/models/shield.mjs +++ b/module/models/shield.mjs @@ -69,4 +69,29 @@ export default class PrismRPGShield extends foundry.abstract.TypeDataModel { /** @override */ static LOCALIZATION_PREFIXES = ["PRISMRPG.Shield"] + + static migrateData(data) { + // Migrate old money types to new ones + if (data?.money) { + const moneyMigration = { + "tinbit": "coppercoin", + "copper": "coppercoin", + "silver": "silvercoin", + "gold": "goldcoin", + "platinum": "note" + } + + if (moneyMigration[data.money]) { + data.money = moneyMigration[data.money] + } + + // If still invalid, default to coppercoin + if (!SYSTEM.MONEY[data.money]) { + console.warn(`Prism RPG | Migrate shield: Invalid money type "${data.money}", defaulting to coppercoin`) + data.money = "coppercoin" + } + } + + return super.migrateData(data) + } } diff --git a/module/models/skill.mjs b/module/models/skill.mjs index 1a14123..1cd2250 100644 --- a/module/models/skill.mjs +++ b/module/models/skill.mjs @@ -1,4 +1,5 @@ import { CORE_SKILLS_CHOICES, CORE_SKILL_BONUS, CORE_SKILLS } from "../config/skill.mjs" +import { SUB_ATTRIBUTES } from "../config/character.mjs" /** * Core Skill data model for Prism RPG @@ -21,14 +22,6 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel { initial: "" }) - // Core Skill type (from the 18 available Core Skills) - schema.coreSkill = new fields.StringField({ - required: true, - initial: "acrobatics", - choices: CORE_SKILLS_CHOICES, - label: "Core Skill" - }) - // Is this the character's chosen Core Skill? schema.isCoreSkill = new fields.BooleanField({ required: true, @@ -36,18 +29,18 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel { label: "Is Core Skill" }) - // Primary attribute for this skill (str, dex, con, int, wis, cha) - schema.primaryAttribute = new fields.StringField({ + // First sub-attribute for this skill + schema.subAttribute1 = new fields.StringField({ required: true, - initial: "dex", - label: "Primary Attribute" + initial: "prowess", + label: "Sub-Attribute 1" }) - // If Core Skill, which attribute receives the +2 bonus? - schema.attributeBonus = new fields.StringField({ + // Second sub-attribute for this skill + schema.subAttribute2 = new fields.StringField({ required: true, - initial: "", - label: "Attribute Bonus" + initial: "initiative", + label: "Sub-Attribute 2" }) // Skill modifier (includes Core Skill bonus if applicable) @@ -114,9 +107,9 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel { prepareDerivedData() { super.prepareDerivedData() - // D&D 5e style: Core Skill gives +2 proficiency bonus + // Core Skill gives +5 proficiency bonus if (this.isCoreSkill) { - this.modifier = 2 + this.modifier = 5 this.canAdvancedCheck = true } else { this.modifier = 0 @@ -126,16 +119,30 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel { /** * Calculate skill check bonus - * @param {string} attributeKey The attribute to use (str, dex, con, int, wis, cha) + * @param {string} subAttributeKey The sub-attribute to use (prowess, vigor, etc.) * @returns {number} Total skill check bonus */ - getSkillCheckBonus(attributeKey) { + getSkillCheckBonus(subAttributeKey) { let actor = this.parent?.actor if (!actor) return this.modifier - const attribute = actor.system.characteristics?.[attributeKey] - const attributeMod = attribute?.mod || 0 + const subAttribute = actor.system.subAttributes?.[subAttributeKey] + const subAttributeMod = subAttribute?.value || 0 - return attributeMod + this.modifier + return subAttributeMod + this.modifier + } + + /** + * Get the available sub-attribute choices for this skill + */ + get subAttributeChoices() { + const choices = {} + if (this.subAttribute1) { + choices[this.subAttribute1] = SUB_ATTRIBUTES[this.subAttribute1]?.label || this.subAttribute1 + } + if (this.subAttribute2) { + choices[this.subAttribute2] = SUB_ATTRIBUTES[this.subAttribute2]?.label || this.subAttribute2 + } + return choices } } diff --git a/module/models/vulnerability.mjs b/module/models/vulnerability.mjs deleted file mode 100644 index 539f7d0..0000000 --- a/module/models/vulnerability.mjs +++ /dev/null @@ -1,17 +0,0 @@ -export default class PrismRPGVulnerability extends foundry.abstract.TypeDataModel { - static defineSchema() { - const fields = foundry.data.fields - const requiredInteger = { required: true, nullable: false, integer: true } - const schema = {} - - schema.description = new fields.HTMLField({ required: true, textSearch: true }) - schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) - schema.gainedPoints = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) - - return schema - } - - /** @override */ - static LOCALIZATION_PREFIXES = ["PRISMRPG.Vulnerability"] - -} diff --git a/module/models/weapon.mjs b/module/models/weapon.mjs index ad9df6f..51dc5c1 100644 --- a/module/models/weapon.mjs +++ b/module/models/weapon.mjs @@ -133,4 +133,29 @@ export default class PrismRPGWeapon extends foundry.abstract.TypeDataModel { /** @override */ static LOCALIZATION_PREFIXES = ["PRISMRPG.Weapon"] + + static migrateData(data) { + // Migrate old money types to new ones + if (data?.money) { + const moneyMigration = { + "tinbit": "coppercoin", + "copper": "coppercoin", + "silver": "silvercoin", + "gold": "goldcoin", + "platinum": "note" + } + + if (moneyMigration[data.money]) { + data.money = moneyMigration[data.money] + } + + // If still invalid, default to coppercoin + if (!SYSTEM.MONEY[data.money]) { + console.warn(`Prism RPG | Migrate weapon: Invalid money type "${data.money}", defaulting to coppercoin`) + data.money = "coppercoin" + } + } + + return super.migrateData(data) + } } diff --git a/prism-rpg.mjs b/prism-rpg.mjs index 73436f6..29d56cb 100644 --- a/prism-rpg.mjs +++ b/prism-rpg.mjs @@ -53,9 +53,7 @@ Hooks.once("init", function () { armor: models.PrismRPGArmor, shield: models.PrismRPGShield, spell: models.PrismRPGSpell, - // Vulnerability: models.PrismRPGVulnerability, // Disabled - Legacy from Lethal Fantasy equipment: models.PrismRPGEquipment, - // Miracle: models.PrismRPGMiracle // Disabled - Legacy from Lethal Fantasy, PRISM uses Divine class features instead race: models.PrismRPGRace, class: models.PrismRPGClass, "character-path": models.PrismRPGCharacterPath, @@ -69,7 +67,6 @@ Hooks.once("init", function () { foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ActorSheet) foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGSkillSheet, { types: ["skill"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGRacialAbilitySheet, { types: ["racial-ability"], makeDefault: true }) - // Foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGVulnerabilitySheet, { types: ["vulnerability"], makeDefault: true }) // Disabled - Legacy from Lethal Fantasy foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGWeaponSheet, { types: ["weapon"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGSpellSheet, { types: ["spell"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGArmorSheet, { types: ["armor"], makeDefault: true }) @@ -78,7 +75,6 @@ Hooks.once("init", function () { foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGRaceSheet, { types: ["race"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGClassSheet, { types: ["class"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGCharacterPathSheet, { types: ["character-path"], makeDefault: true }) - // Foundry.documents.collections.Items.registerSheet("prismRPG", applications.PrismRPGMiracleSheet, { types: ["miracle"], makeDefault: true }) // Disabled - Legacy from Lethal Fantasy // Other Document Configuration CONFIG.ChatMessage.documentClass = documents.PrismRPGChatMessage @@ -133,9 +129,11 @@ function preLocalizeConfig() { for (const choice of choicesToLocalize) { if (CONFIG.PRISMRPG[choice]) { + const localized = {} for (const [key, label] of Object.entries(CONFIG.PRISMRPG[choice])) { - CONFIG.PRISMRPG[choice][key] = game.i18n.localize(label) + localized[key] = game.i18n.localize(label) } + CONFIG.PRISMRPG[choice] = localized } } } diff --git a/templates/character-biography.hbs b/templates/character-biography.hbs index 6a46fab..672eacf 100644 --- a/templates/character-biography.hbs +++ b/templates/character-biography.hbs @@ -8,13 +8,7 @@
{{localize "PRISMRPG.Label.biodata"}}
-
- Class - {{formInput - systemFields.biodata.fields.class - value=system.biodata.class - }} -
+ {{!-- Class and Mortal fields removed - don't exist in DataModel --}}
Level {{formInput @@ -22,13 +16,6 @@ value=system.biodata.level }}
-
- Mortal - {{formInput - systemFields.biodata.fields.mortal - value=system.biodata.mortal - }} -
Age {{formInput systemFields.biodata.fields.age value=system.biodata.age}} @@ -82,51 +69,7 @@ value=system.biodata.magicUser }}
- -
- Save bonus (1/5levels) - {{formInput - systemFields.modifiers.fields.saveModifier - value=system.modifiers.saveModifier - disabled=true - }} -
- - {{#if system.biodata.magicUser}} -
- Spell bonus (1/5levels) - {{formInput - systemFields.modifiers.fields.levelSpellModifier - value=system.modifiers.levelSpellModifier - disabled=true - }} -
- {{/if}} - {{#if system.biodata.clericUser}} -
- Miracle bonus (1/5levels) - {{formInput - systemFields.modifiers.fields.levelMiracleModifier - value=system.modifiers.levelMiracleModifier - disabled=true - }} -
- {{/if}} - -
- Last HD roll - {{formInput - systemFields.biodata.fields.hpPerLevel - value=system.biodata.hpPerLevel - disabled=true - }} -
+ {{!-- Cleric User, modifiers, and hpPerLevel fields removed - don't exist in DataModel --}}
diff --git a/templates/character-miracles.hbs b/templates/character-miracles.hbs deleted file mode 100644 index 342f547..0000000 --- a/templates/character-miracles.hbs +++ /dev/null @@ -1,52 +0,0 @@ -
-
- -
- {{localize "PRISMRPG.Label.manaPoints"}} -
-
- Current - {{formField systemFields.manaPoints.fields.value value=system.manaPoints.value localize=true}} - - - - Max - {{formField systemFields.manaPoints.fields.max value=system.manaPoints.max localize=true - disabled=isPlayMode}} -
-
-
- -
- {{localize "PRISMRPG.Label.miracles"}}{{#if isEditMode}}{{/if}} -
- {{#each miracles as |item|}} -
- -
- {{item.name}} -
- - - - - - - - - -
- - -
-
- {{/each}} -
-
-
- -
\ No newline at end of file diff --git a/templates/chat-message.hbs b/templates/chat-message.hbs index cc74082..b6eab60 100644 --- a/templates/chat-message.hbs +++ b/templates/chat-message.hbs @@ -111,6 +111,22 @@ {{/if}} + {{#if (eq rollType "skill")}} + {{#if rollData.skillSubAttributeLabel}} +
+
+ Skill Check +
+
+
+ + {{rollData.skillSubAttributeLabel}} (+{{rollData.skillSubAttributeValue}}) +
+
+
+ {{/if}} + {{/if}} + {{#if rollData.letItFly}}
Let It Fly!
{{/if}} @@ -180,7 +196,7 @@ {{/if}} {{/if}} - + {{#if isResource}}
{{#if isPrivate}} diff --git a/templates/roll-dialog-v2.hbs b/templates/roll-dialog-v2.hbs index aaddc3d..5906470 100644 --- a/templates/roll-dialog-v2.hbs +++ b/templates/roll-dialog-v2.hbs @@ -149,6 +149,29 @@ {{/if}} {{/if}} + {{! Skill Options }} + {{#if (eq rollType "skill")}} +
+
+ + Skill Options +
+ + {{! Choose which sub-attribute to use }} +
+ + +
+
+ {{/if}} + {{! Advantage/Disadvantage }} {{#if hasAdvantage}}
diff --git a/templates/roll-dialog.hbs b/templates/roll-dialog.hbs index f470147..5d68040 100644 --- a/templates/roll-dialog.hbs +++ b/templates/roll-dialog.hbs @@ -89,7 +89,7 @@ {{! Spell-specific options }}
Spell Options - +
Casting with: {{rollTarget.mentalCharacteristic}} ({{rollTarget.mentalCharValue}}, +{{rollTarget.value}})
Base Cost: {{rollTarget.system.manaCost}} Mana, {{rollTarget.system.apc}} APC @@ -117,6 +117,26 @@ {{/if}} {{/if}} + {{! Skill Options }} + {{#if (eq rollType "skill")}} +
+ Skill Options + + {{! Choose which sub-attribute to use }} +
+ + +
+
+ {{/if}} + {{#if hasAdvantage}}
{{localize "PRISMRPG.Roll.advantageDisadvantage"}} diff --git a/templates/skill.hbs b/templates/skill.hbs index f8be526..0f201cd 100644 --- a/templates/skill.hbs +++ b/templates/skill.hbs @@ -11,35 +11,31 @@

{{localize "PRISMRPG.Hint.isCoreSkill"}}

- {{!-- Primary Attribute for Skill Checks --}} + {{!-- First Sub-Attribute for Skill Checks --}}
- - + {{#each config.SUB_ATTRIBUTES}} + {{/each}} -

Primary attribute used for skill checks (D&D 5e style: ability modifier + proficiency)

+

First sub-attribute used for skill checks

- {{#if system.isCoreSkill}} - {{!-- Attribute Bonus Selection --}} -
- - -

{{localize "PRISMRPG.Hint.attributeBonus"}}

-
- - {{/if}} + {{!-- Second Sub-Attribute for Skill Checks --}} +
+ + +

Second sub-attribute used for skill checks

+
{{!-- Notes --}}