forked from GitHub-Mirrors/foundry-sw5e
Partial update to entity.js
pushing a partial code section for feedback so far
This commit is contained in:
parent
4b7aac7fd5
commit
6b239d5d6b
1 changed files with 53 additions and 23 deletions
|
@ -364,11 +364,16 @@ export default class Actor5e extends Actor {
|
||||||
const powers = actorData.data.powers;
|
const powers = actorData.data.powers;
|
||||||
const isNPC = actorData.type === 'npc';
|
const isNPC = actorData.type === 'npc';
|
||||||
|
|
||||||
// Translate the list of classes into power-casting progression
|
// Translate the list of classes into force and tech power-casting progression
|
||||||
const progression = {
|
const forceProgression = {
|
||||||
total: 0,
|
classes: 0,
|
||||||
slot: 0,
|
levels: 0,
|
||||||
pact: 0
|
multi: 0
|
||||||
|
};
|
||||||
|
const techProgression = {
|
||||||
|
classes: 0,
|
||||||
|
levels: 0,
|
||||||
|
multi: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
// Keep track of the last seen caster in case we're in a single-caster situation.
|
// Keep track of the last seen caster in case we're in a single-caster situation.
|
||||||
|
@ -383,30 +388,55 @@ export default class Actor5e extends Actor {
|
||||||
const prog = d.powercasting;
|
const prog = d.powercasting;
|
||||||
|
|
||||||
// Accumulate levels
|
// Accumulate levels
|
||||||
if ( prog !== "pact" ) {
|
caster = cls;
|
||||||
caster = cls;
|
|
||||||
progression.total++;
|
|
||||||
}
|
|
||||||
switch (prog) {
|
switch (prog) {
|
||||||
case 'third': progression.slot += Math.floor(levels / 3); break;
|
case 'consular':
|
||||||
case 'half': progression.slot += Math.floor(levels / 2); break;
|
forceProgression.levels += levels;
|
||||||
case 'full': progression.slot += levels; break;
|
forceProgression.multi += (SW5E.powerMaxLevel['consular'][levels-1]/9)*levels;
|
||||||
case 'artificer': progression.slot += Math.ceil(levels / 2); break;
|
forceProgression.classes++;
|
||||||
case 'pact': progression.pact += levels; break;
|
break;
|
||||||
|
case 'engineer':
|
||||||
|
techProgression.levels += levels;
|
||||||
|
techProgression.multi += (SW5E.powerMaxLevel['engineer'][levels-1]/9)*levels;
|
||||||
|
techProgression.classes++;
|
||||||
|
break;
|
||||||
|
case 'guardian':
|
||||||
|
forceProgression.levels += levels;
|
||||||
|
forceProgression.multi += (SW5E.powerMaxLevel['guardian'][levels-1]/9)*levels;
|
||||||
|
forceProgression.classes++;
|
||||||
|
break;
|
||||||
|
case 'scout':
|
||||||
|
techProgression.levels += levels;
|
||||||
|
techProgression.multi += (SW5E.powerMaxLevel['scout'][levels-1]/9)*levels;
|
||||||
|
techProgression.classes++;
|
||||||
|
break;
|
||||||
|
case 'sentinel':
|
||||||
|
forceProgression.levels += levels;
|
||||||
|
forceProgression.multi += (SW5E.powerMaxLevel['sentinel'][levels-1]/9)*levels;
|
||||||
|
forceProgression.classes++;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXCEPTION: single-classed non-full progression rounds up, rather than down
|
// EXCEPTION: multi-classed progression uses multi rounded down rather than levels
|
||||||
const isSingleClass = (progression.total === 1) && (progression.slot > 0);
|
if (!isNPC && forceProgression.classes > 1) {
|
||||||
if (!isNPC && isSingleClass && ['half', 'third'].includes(caster.data.powercasting) ) {
|
forceProgression.levels = Math.floor(forceProgression.multi);
|
||||||
const denom = caster.data.powercasting === 'third' ? 3 : 2;
|
}
|
||||||
progression.slot = Math.ceil(caster.data.levels / denom);
|
if (!isNPC && techProgression.classes > 1) {
|
||||||
|
techProgression.levels = Math.floor(techProgression.multi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXCEPTION: NPC with an explicit power-caster level
|
// EXCEPTION: NPC with an explicit power-caster level
|
||||||
if (isNPC && actorData.data.details.powerLevel) {
|
if (isNPC && actorData.data.details.powerForceLevel) {
|
||||||
progression.slot = actorData.data.details.powerLevel;
|
forceProgression.levels = actorData.data.details.powerForceLevel;
|
||||||
}
|
}
|
||||||
|
if (isNPC && actorData.data.details.powerTechLevel) {
|
||||||
|
techProgression.levels = actorData.data.details.powerTechLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: STOPPED HERE, PICKUP WHERE YOU LEFT OFF
|
||||||
|
|
||||||
|
|
||||||
// Look up the number of slots per level from the progression table
|
// Look up the number of slots per level from the progression table
|
||||||
const levels = Math.clamped(progression.slot, 0, 20);
|
const levels = Math.clamped(progression.slot, 0, 20);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue