mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
feat(damageThresholds): PCs use armor base + current level
This commit is contained in:
parent
504e2ca0f2
commit
2313c4a18c
3 changed files with 24 additions and 42 deletions
|
|
@ -5,6 +5,22 @@ import DhpLevelup from '../levelup.mjs';
|
||||||
import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs';
|
import AncestrySelectionDialog from '../ancestrySelectionDialog.mjs';
|
||||||
import DaggerheartSheet from './daggerheart-sheet.mjs';
|
import DaggerheartSheet from './daggerheart-sheet.mjs';
|
||||||
|
|
||||||
|
function computeDamageThresholds(armor, currentLevel) {
|
||||||
|
if (!armor) {
|
||||||
|
return {
|
||||||
|
major: currentLevel,
|
||||||
|
severe: currentLevel * 2
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const {
|
||||||
|
baseThresholds: { major = 0, severe = 0 }
|
||||||
|
} = armor.system;
|
||||||
|
return {
|
||||||
|
major: major + currentLevel,
|
||||||
|
severe: severe + currentLevel
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const { ActorSheetV2 } = foundry.applications.sheets;
|
const { ActorSheetV2 } = foundry.applications.sheets;
|
||||||
export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
constructor(options = {}) {
|
constructor(options = {}) {
|
||||||
|
|
@ -286,6 +302,11 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) {
|
||||||
context.inventory = Array(1).fill(Array(5).fill([]));
|
context.inventory = Array(1).fill(Array(5).fill([]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.document.damageThresholds = computeDamageThresholds(
|
||||||
|
context.source.items.find(x => x.type === 'armor'),
|
||||||
|
context.source.system.levelData.currentLevel
|
||||||
|
);
|
||||||
|
|
||||||
context.classFeatures = (
|
context.classFeatures = (
|
||||||
this.multiclassFeatureSetSelected
|
this.multiclassFeatureSetSelected
|
||||||
? this.document.system.multiclassFeatures
|
? this.document.system.multiclassFeatures
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,6 @@ const levelUpTier = () => ({
|
||||||
experiences: new MappingField(new fields.ArrayField(new fields.StringField({}))),
|
experiences: new MappingField(new fields.ArrayField(new fields.StringField({}))),
|
||||||
proficiency: new MappingField(new fields.BooleanField()),
|
proficiency: new MappingField(new fields.BooleanField()),
|
||||||
armorOrEvasionSlot: new MappingField(new fields.StringField({})),
|
armorOrEvasionSlot: new MappingField(new fields.StringField({})),
|
||||||
majorDamageThreshold2: new MappingField(new fields.BooleanField()),
|
|
||||||
severeDamageThreshold2: new MappingField(new fields.BooleanField()),
|
|
||||||
severeDamageThreshold3: new MappingField(new fields.BooleanField()),
|
|
||||||
severeDamageThreshold4: new MappingField(new fields.BooleanField()),
|
|
||||||
subclass: new MappingField(
|
subclass: new MappingField(
|
||||||
new fields.SchemaField({
|
new fields.SchemaField({
|
||||||
multiclass: new fields.BooleanField(),
|
multiclass: new fields.BooleanField(),
|
||||||
|
|
@ -92,11 +88,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||||
min: new fields.NumberField({ initial: 1, integer: true }),
|
min: new fields.NumberField({ initial: 1, integer: true }),
|
||||||
max: new fields.NumberField({ initial: 6, integer: true })
|
max: new fields.NumberField({ initial: 6, integer: true })
|
||||||
}),
|
}),
|
||||||
damageThresholds: new fields.SchemaField({
|
|
||||||
minor: new fields.NumberField({ initial: 0, integer: true }),
|
|
||||||
major: new fields.NumberField({ initial: 0, integer: true }),
|
|
||||||
severe: new fields.NumberField({ initial: 0, integer: true })
|
|
||||||
}),
|
|
||||||
evasion: new fields.NumberField({ initial: 0, integer: true }),
|
evasion: new fields.NumberField({ initial: 0, integer: true }),
|
||||||
// armor: new fields.SchemaField({
|
// armor: new fields.SchemaField({
|
||||||
// value: new fields.NumberField({ initial: 0, integer: true }),
|
// value: new fields.NumberField({ initial: 0, integer: true }),
|
||||||
|
|
@ -389,7 +380,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||||
|
|
||||||
this.evasion = this.class?.system?.evasion ?? 0;
|
this.evasion = this.class?.system?.evasion ?? 0;
|
||||||
// this.armor.value = this.activeArmor?.baseScore ?? 0;
|
// this.armor.value = this.activeArmor?.baseScore ?? 0;
|
||||||
this.damageThresholds = this.class?.system?.damageThresholds ?? { minor: 0, major: 0, severe: 0 };
|
|
||||||
|
|
||||||
this.applyLevels();
|
this.applyLevels();
|
||||||
this.applyEffects();
|
this.applyEffects();
|
||||||
|
|
@ -400,10 +390,7 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||||
stressBonus = 0,
|
stressBonus = 0,
|
||||||
proficiencyBonus = 0,
|
proficiencyBonus = 0,
|
||||||
evasionBonus = 0,
|
evasionBonus = 0,
|
||||||
armorBonus = 0,
|
armorBonus = 0;
|
||||||
minorThresholdBonus = 0,
|
|
||||||
majorThresholdBonus = 0,
|
|
||||||
severeThresholdBonus = 0;
|
|
||||||
let experienceBonuses = {};
|
let experienceBonuses = {};
|
||||||
let advancementFirst = null,
|
let advancementFirst = null,
|
||||||
advancementSecond = null;
|
advancementSecond = null;
|
||||||
|
|
@ -439,11 +426,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||||
armorBonus += Object.keys(tierData.armorOrEvasionSlot).filter(
|
armorBonus += Object.keys(tierData.armorOrEvasionSlot).filter(
|
||||||
x => tierData.armorOrEvasionSlot[x] === 'armor'
|
x => tierData.armorOrEvasionSlot[x] === 'armor'
|
||||||
).length;
|
).length;
|
||||||
|
|
||||||
majorThresholdBonus += Object.keys(tierData.majorDamageThreshold2).length * 2;
|
|
||||||
severeThresholdBonus += Object.keys(tierData.severeDamageThreshold2).length * 2;
|
|
||||||
severeThresholdBonus += Object.keys(tierData.severeDamageThreshold3).length * 3;
|
|
||||||
severeThresholdBonus += Object.keys(tierData.severeDamageThreshold4).length * 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -456,9 +438,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||||
max: this.armor ? this.armor.system.marks.max + armorBonus : 0,
|
max: this.armor ? this.armor.system.marks.max + armorBonus : 0,
|
||||||
value: this.armor ? this.armor.system.marks.value : 0
|
value: this.armor ? this.armor.system.marks.value : 0
|
||||||
};
|
};
|
||||||
this.damageThresholds.minor += minorThresholdBonus;
|
|
||||||
this.damageThresholds.major += majorThresholdBonus;
|
|
||||||
this.damageThresholds.severe += severeThresholdBonus;
|
|
||||||
|
|
||||||
this.experiences = this.experiences.map(x => ({ ...x, value: x.value + (experienceBonuses[x.id] ?? 0) }));
|
this.experiences = this.experiences.map(x => ({ ...x, value: x.value + (experienceBonuses[x.id] ?? 0) }));
|
||||||
|
|
||||||
|
|
@ -495,20 +474,6 @@ export default class DhpPC extends foundry.abstract.TypeDataModel {
|
||||||
this.domainData.maxLoadout = Math.min(this.domainData.maxLoadout + 1, 5);
|
this.domainData.maxLoadout = Math.min(this.domainData.maxLoadout + 1, 5);
|
||||||
this.domainData.maxCards += 1;
|
this.domainData.maxCards += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (tier) {
|
|
||||||
case 'tier1':
|
|
||||||
this.damageThresholds.severe += 2;
|
|
||||||
break;
|
|
||||||
case 'tier2':
|
|
||||||
this.damageThresholds.major += 1;
|
|
||||||
this.damageThresholds.severe += 3;
|
|
||||||
break;
|
|
||||||
case 'tier3':
|
|
||||||
this.damageThresholds.major += 2;
|
|
||||||
this.damageThresholds.severe += 4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,12 @@
|
||||||
<legend class="legend">{{localize "DAGGERHEART.Sheets.PC.Health.Title"}}</legend>
|
<legend class="legend">{{localize "DAGGERHEART.Sheets.PC.Health.Title"}}</legend>
|
||||||
|
|
||||||
<div class="threshold-container">
|
<div class="threshold-container">
|
||||||
<div class="threshold-box">
|
|
||||||
{{document.system.damageThresholds.minor}}
|
|
||||||
</div>
|
|
||||||
<div class="threshold-spacer">
|
<div class="threshold-spacer">
|
||||||
<i class="fa-solid fa-caret-left"></i>
|
|
||||||
<div class="health-category">{{localize "DAGGERHEART.Sheets.PC.Health.Minor"}}</div>
|
<div class="health-category">{{localize "DAGGERHEART.Sheets.PC.Health.Minor"}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="threshold-box">
|
<div class="threshold-box">
|
||||||
{{document.system.damageThresholds.major}}
|
{{document.damageThresholds.major}}
|
||||||
</div>
|
</div>
|
||||||
<div class="threshold-spacer">
|
<div class="threshold-spacer">
|
||||||
<i class="fa-solid fa-caret-left"></i>
|
<i class="fa-solid fa-caret-left"></i>
|
||||||
|
|
@ -19,7 +15,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="threshold-box">
|
<div class="threshold-box">
|
||||||
{{document.system.damageThresholds.severe}}
|
{{document.damageThresholds.severe}}
|
||||||
</div>
|
</div>
|
||||||
<div class="threshold-spacer">
|
<div class="threshold-spacer">
|
||||||
<i class="fa-solid fa-caret-left"></i>
|
<i class="fa-solid fa-caret-left"></i>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue