Various enhancements + fixes

This commit is contained in:
2025-01-09 20:21:02 +01:00
parent b3a7f7380b
commit 3dcfc30fb6
38 changed files with 732 additions and 603 deletions

View File

@@ -490,6 +490,16 @@ i.lethalfantasy {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.lethalfantasy .tab.character-weapons .combat-details {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
}
.lethalfantasy .tab.character-weapons .combat-details .combat-detail {
display: flex;
align-items: center;
gap: 10px;
}
.lethalfantasy .tab.character-weapons .weapons {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -576,32 +586,43 @@ i.lethalfantasy {
.lethalfantasy .tab.character-spells .spells .spell .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-spells .miracles {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.lethalfantasy .tab.character-spells .miracles .miracle {
display: flex;
align-items: center;
gap: 10px;
}
.lethalfantasy .tab.character-spells .miracles .miracle .item-img {
width: 32px;
height: 32px;
}
.lethalfantasy .tab.character-spells .miracles .miracle .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-spells .appris {
font-weight: bold;
}
.lethalfantasy .tab.character-spells prose-mirror.inactive {
min-height: 40px;
}
.lethalfantasy .tab.character-spells prose-mirror.active {
min-height: 150px;
}
.lethalfantasy .tab.character-miracles {
display: grid;
grid-template-columns: 1fr;
}
.lethalfantasy .tab.character-miracles legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.lethalfantasy .tab.character-miracles .miracles {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.lethalfantasy .tab.character-miracles .miracles .miracle {
display: flex;
align-items: center;
gap: 10px;
}
.lethalfantasy .tab.character-miracles .miracles .miracle .item-img {
width: 32px;
height: 32px;
}
.lethalfantasy .tab.character-miracles .miracles .miracle .name {
min-width: 12rem;
}
.lethalfantasy .tab.character-miracles prose-mirror.inactive {
min-height: 40px;
}
.lethalfantasy .tab.character-miracles prose-mirror.active {
min-height: 150px;
}
.lethalfantasy .opponent-content {
font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1);

File diff suppressed because it is too large Load Diff

View File

@@ -35,6 +35,9 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
spells: {
template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs",
},
miracles: {
template: "systems/fvtt-lethal-fantasy/templates/character-miracles.hbs",
},
biography: {
template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs",
},
@@ -58,7 +61,9 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
if (this.actor.system.biodata.magicUser) {
tabs.spells = { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }
}
if (this.actor.system.biodata.clericUser) {
tabs.miracles = { id: "miracles", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-hands-praying", label: "LETHALFANTASY.Label.miracles" }
}
for (const v of Object.values(tabs)) {
v.active = this.tabGroups[v.group] === v.id
v.cssClass = v.active ? "active" : ""
@@ -71,14 +76,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.tooltipsCaracteristiques = {
}
context.tooltipsRessources = {
}
context.rollType = {
}
return context
}
@@ -100,9 +97,13 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
case "spells":
context.tab = context.tabs.spells
context.spells = doc.itemTypes.spell
context.miracles = doc.itemTypes.miracle
context.hasSpells = context.spells.length > 0
break
case "miracles":
context.tab = context.tabs.miracles
context.miracles = doc.itemTypes.miracle
context.hasMiracles = context.miracles.length > 0
break
case "weapons":
context.tab = context.tabs.weapons
context.weapons = doc.itemTypes.weapon

View File

@@ -282,6 +282,7 @@ export default class LethalFantasyRoll extends Roll {
titleFormula = `${dice}E`
}
// Specific pain case
if (options.rollType === "save" && options.rollTarget.rollKey === "pain") {
baseFormula = options.rollTarget.rollDice
titleFormula = `${dice}`
@@ -289,6 +290,11 @@ export default class LethalFantasyRoll extends Roll {
fullModifier = 0
}
// Specific pain/poison/contagion case
if (options.rollType === "save" && options.rollTarget.rollKey.includes(["pain", "poison", "contagion"])) {
hasD30 = false
}
maxValue = Number(baseFormula.match(/\d+$/)[0]) // Update the max value agains
const rollData = {

View File

@@ -55,11 +55,20 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
obj[save.id] = challengeField(save.label)
return obj
}, {}),
)
const woundFieldSchema = {
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
duration: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
description: new fields.StringField({ initial: "", required: false, nullable: true }),
}
schema.hp = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
painDamage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
wounds: new fields.ArrayField(new fields.SchemaField(woundFieldSchema ) ),
})
schema.perception = new fields.SchemaField({
@@ -92,6 +101,7 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
eyes: new fields.StringField({ required: true, nullable: false, initial: "" }),
hair: new fields.StringField({ required: true, nullable: false, initial: "" }),
magicUser: new fields.BooleanField({ initial: false }),
clericUser: new fields.BooleanField({ initial: false }),
})
schema.modifiers = new fields.SchemaField({
@@ -114,6 +124,7 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod
attackModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
defenseModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
damageModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
armorHitPoints: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
})
const moneyField = (label) => {

View File

@@ -29,7 +29,9 @@ export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel
schema.areaAffected = new fields.StringField({ required: true, initial: "" })
schema.duration = new fields.StringField({ required: true, initial: "" })
schema.savingThrow = new fields.StringField({ required: true, initial: "" })
schema.materialComponent = new fields.StringField({ required: true, initial: "" })
schema.catalyst = new fields.StringField({ required: true, initial: "" })
return schema
}

View File

@@ -30,6 +30,7 @@ export default class LethalFantasySpell extends foundry.abstract.TypeDataModel {
schema.duration = new fields.StringField({ required: true, initial: "" })
schema.savingThrow = new fields.StringField({ required: true, initial: "" })
schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" })
schema.materialComponent = new fields.StringField({ required: true, initial: "" })
return schema
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/lf-gifts/MANIFEST-000086 LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/lf-skills/MANIFEST-000090 LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -396,7 +396,18 @@
padding-left: 5px;
}
}
.combat-details {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
.combat-detail {
display: flex;
align-items: center;
gap: 10px;
}
}
.weapons {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -488,6 +499,25 @@
}
}
prose-mirror.inactive {
min-height: 40px;
}
prose-mirror.active {
min-height: 150px;
}
}
.tab.character-miracles {
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.miracles {
display: grid;
grid-template-columns: repeat(3, 1fr);
@@ -506,9 +536,6 @@
}
}
.appris {
font-weight: bold;
}
prose-mirror.inactive {
min-height: 40px;
}

View File

@@ -35,10 +35,22 @@
<span class="name">Hair</span>
{{formInput systemFields.biodata.fields.hair value=system.biodata.hair }}
</div>
<div class="biodata-elem">
<span class="name">Dev. Points (Total)</span>
{{formInput systemFields.developmentPoints.fields.total value=system.developmentPoints.total }}
</div>
<div class="biodata-elem">
<span class="name">Dev. Points (Rem.)</span>
{{formInput systemFields.developmentPoints.fields.remaining value=system.developmentPoints.remaining }}
</div>
<div class="biodata-elem">
<span class="name">Magic User</span>
{{formInput systemFields.biodata.fields.magicUser value=system.biodata.magicUser }}
</div>
<div class="biodata-elem">
<span class="name">Cleric User</span>
{{formInput systemFields.biodata.fields.clericUser value=system.biodata.clericUser }}
</div>
<div class="biodata-elem">
<span class="name">Save bonus (1/5levels)</span>
{{formInput systemFields.modifiers.fields.saveModifier value=system.modifiers.saveModifier disabled=true}}
@@ -49,6 +61,8 @@
<span class="name">Spell bonus (1/5levels)</span>
{{formInput systemFields.modifiers.fields.levelSpellModifier value=system.modifiers.levelSpellModifier disabled=true}}
</div>
{{/if}}
{{#if system.biodata.clericUser}}
<div class="biodata-elem">
<span class="name">Miracle bonus (1/5levels)</span>
{{formInput systemFields.modifiers.fields.levelMiracleModifier value=system.modifiers.levelMiracleModifier disabled=true}}

View File

@@ -0,0 +1,28 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.miracles"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addMiracle"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createMiracle"></i></a>{{/if}}</legend>
<div class="miracles">
{{#each miracles as |item|}}
<div class="miracle" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" >
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" >
<a class="rollable" data-roll-type="miracle" data-roll-key="{{item.id}}">
<i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{item.name}}
</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</section>

View File

@@ -25,29 +25,4 @@
</div>
</fieldset>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.miracles"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addMiracle"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createMiracle"></i></a>{{/if}}</legend>
<div class="miracles">
{{#each miracles as |item|}}
<div class="miracle" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" >
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" >
<a class="rollable" data-roll-type="miracle" data-roll-key="{{item.id}}">
<i class="lf-roll-small fa-solid fa-dice-d20"></i>
{{item.name}}
</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</section>

View File

@@ -1,6 +1,15 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<button class="action" data-action="rangedAttackDefense">{{localize "LETHALFANTASY.Label.rangedAttackDefense"}}</button>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend>
<div class="combat-details">
<div class="combat-detail">
<button class="action" data-action="rangedAttackDefense">{{localize
"LETHALFANTASY.Label.rangedAttackDefense"}}</button>
{{formField systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true}}
</div>
</div>
</fieldset>
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.weapons"}}</legend>
@@ -12,24 +21,28 @@
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
{{/if}}
<div class="name">
{{item.name}}
{{item.name}}
</div>
<div class="attack-icons">
<a class="rollable" data-roll-type="weapon-attack" data-roll-key="{{item.id}}" data-tooltip="Roll Attack">
<a class="rollable" data-roll-type="weapon-attack" data-roll-key="{{item.id}}" data-tooltip="Roll Attack">
<i class="lf-roll-small fa-solid fa-swords" data-roll-type="weapon-attack" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-defense" data-roll-key="{{item.id}}" data-tooltip="Roll Defense">
<i class="fa-solid fa-shield-halved" data-roll-type="weapon-defense" data-roll-key="{{item.id}}"></i>
<a class="rollable" data-roll-type="weapon-defense" data-roll-key="{{item.id}}" data-tooltip="Roll Defense">
<i class="fa-solid fa-shield-halved" data-roll-type="weapon-defense" data-roll-key="{{item.id}}"></i>
</a>
<a class="rollable" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}" data-tooltip="Roll Damage (Small)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}"></i>S
<a class="rollable" data-roll-type="weapon-damage-small" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Small)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-small"
data-roll-key="{{item.id}}"></i>S
</a>
<a class="rollable" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}" data-tooltip="Roll Damage (Medium)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}"></i>M
<a class="rollable" data-roll-type="weapon-damage-medium" data-roll-key="{{item.id}}"
data-tooltip="Roll Damage (Medium)">
<i class="fa-regular fa-face-head-bandage" data-roll-type="weapon-damage-medium"
data-roll-key="{{item.id}}"></i>M
</a>
</div>

View File

@@ -20,6 +20,10 @@
{{formField systemFields.areaAffected value=system.areaAffected}}
{{formField systemFields.duration value=system.duration}}
{{formField systemFields.savingThrow value=system.savingThrow}}
{{formField systemFields.materialComponent value=system.materialComponent}}
{{formField systemFields.catalyst value=system.catalyst}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>

View File

@@ -21,6 +21,8 @@
{{formField systemFields.savingThrow value=system.savingThrow}}
{{formField systemFields.extraAetherPoints value=system.extraAetherPoints}}
{{formField systemFields.materialComponent value=system.materialComponent}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}