import {ClassFeatures} from "./classFeatures.js"; // Namespace SW5e Configuration Values export const SW5E = {}; // ASCII Artwork SW5E.ASCII = ` ___________ ___________ / _____/ \\ / \\ ____/ ____ \\_____ \\\\ \\/\\/ /____ \\_/ __ \\ / \\\\ // \\ ___/ \\______ / \\__/\\ //______ /\\__ > \\/ \\/ \\/ \\/ `; /** * The set of Ability Scores used within the system * @type {Object} */ SW5E.abilities = { str: "SW5E.AbilityStr", dex: "SW5E.AbilityDex", con: "SW5E.AbilityCon", int: "SW5E.AbilityInt", wis: "SW5E.AbilityWis", cha: "SW5E.AbilityCha" }; SW5E.abilityAbbreviations = { str: "SW5E.AbilityStrAbbr", dex: "SW5E.AbilityDexAbbr", con: "SW5E.AbilityConAbbr", int: "SW5E.AbilityIntAbbr", wis: "SW5E.AbilityWisAbbr", cha: "SW5E.AbilityChaAbbr" }; /* -------------------------------------------- */ /** * Character alignment options * @type {Object} */ SW5E.alignments = { ll: "SW5E.AlignmentLL", nl: "SW5E.AlignmentNL", cl: "SW5E.AlignmentCL", lb: "SW5E.AlignmentLB", bn: "SW5E.AlignmentBN", cb: "SW5E.AlignmentCB", ld: "SW5E.AlignmentLD", nd: "SW5E.AlignmentND", cd: "SW5E.AlignmentCD" }; /* -------------------------------------------- */ /** * An enumeration of item attunement types * @enum {number} */ SW5E.attunementTypes = { NONE: 0, REQUIRED: 1, ATTUNED: 2 }; /** * An enumeration of item attunement states * @type {{"0": string, "1": string, "2": string}} */ SW5E.attunements = { 0: "SW5E.AttunementNone", 1: "SW5E.AttunementRequired", 2: "SW5E.AttunementAttuned" }; /* -------------------------------------------- */ SW5E.weaponProficiencies = { sim: "SW5E.WeaponSimpleProficiency", mar: "SW5E.WeaponMartialProficiency" }; SW5E.toolProficiencies = { armor: "SW5E.ToolArmormech", arms: "SW5E.ToolArmstech", arti: "SW5E.ToolArtificer", art: "SW5E.ToolArtist", astro: "SW5E.ToolAstrotech", bio: "SW5E.ToolBiotech", con: "SW5E.ToolConstructor", cyb: "SW5E.ToolCybertech", jew: "SW5E.ToolJeweler", sur: "SW5E.ToolSurveyor", syn: "SW5E.ToolSynthweaver", tin: "SW5E.ToolTinker", ant: "SW5E.ToolAntitoxkit", arc: "SW5E.ToolArchaeologistKit", aud: "SW5E.ToolAudiotechKit", bioa: "SW5E.ToolBioanalysisKit", brew: "SW5E.ToolBrewerKit", chef: "SW5E.ToolChefKit", demo: "SW5E.ToolDemolitionKit", disg: "SW5E.ToolDisguiseKit", forg: "SW5E.ToolForgeryKit", mech: "SW5E.ToolMechanicKit", game: "SW5E.ToolGamingSet", poi: "SW5E.ToolPoisonKit", scav: "SW5E.ToolScavengingKit", secur: "SW5E.ToolSecurityKit", slic: "SW5E.ToolSlicerKit", spice: "SW5E.ToolSpiceKit", music: "SW5E.ToolMusicalInstrument", vehicle: "SW5E.ToolVehicle" }; /* -------------------------------------------- */ /** * This Object defines the various lengths of time which can occur in SW5e * @type {Object} */ SW5E.timePeriods = { inst: "SW5E.TimeInst", turn: "SW5E.TimeTurn", round: "SW5E.TimeRound", minute: "SW5E.TimeMinute", hour: "SW5E.TimeHour", day: "SW5E.TimeDay", month: "SW5E.TimeMonth", year: "SW5E.TimeYear", perm: "SW5E.TimePerm", spec: "SW5E.Special" }; /* -------------------------------------------- */ /** * This describes the ways that an ability can be activated * @type {Object} */ SW5E.abilityActivationTypes = { none: "SW5E.None", action: "SW5E.Action", bonus: "SW5E.BonusAction", reaction: "SW5E.Reaction", minute: SW5E.timePeriods.minute, hour: SW5E.timePeriods.hour, day: SW5E.timePeriods.day, special: SW5E.timePeriods.spec, legendary: "SW5E.LegAct", lair: "SW5E.LairAct", crew: "SW5E.VehicleCrewAction" }; /* -------------------------------------------- */ SW5E.abilityConsumptionTypes = { ammo: "SW5E.ConsumeAmmunition", attribute: "SW5E.ConsumeAttribute", material: "SW5E.ConsumeMaterial", charges: "SW5E.ConsumeCharges" }; /* -------------------------------------------- */ // Creature Sizes SW5E.actorSizes = { tiny: "SW5E.SizeTiny", sm: "SW5E.SizeSmall", med: "SW5E.SizeMedium", lg: "SW5E.SizeLarge", huge: "SW5E.SizeHuge", grg: "SW5E.SizeGargantuan" }; SW5E.tokenSizes = { tiny: 1, sm: 1, med: 1, lg: 2, huge: 3, grg: 4 }; /* -------------------------------------------- */ /** * Classification types for item action types * @type {Object} */ SW5E.itemActionTypes = { mwak: "SW5E.ActionMWAK", rwak: "SW5E.ActionRWAK", mpak: "SW5E.ActionMPAK", rpak: "SW5E.ActionRPAK", save: "SW5E.ActionSave", heal: "SW5E.ActionHeal", abil: "SW5E.ActionAbil", util: "SW5E.ActionUtil", other: "SW5E.ActionOther" }; /* -------------------------------------------- */ SW5E.itemCapacityTypes = { items: "SW5E.ItemContainerCapacityItems", weight: "SW5E.ItemContainerCapacityWeight" }; /* -------------------------------------------- */ /** * Enumerate the lengths of time over which an item can have limited use ability * @type {Object} */ SW5E.limitedUsePeriods = { sr: "SW5E.ShortRest", lr: "SW5E.LongRest", day: "SW5E.Day", charges: "SW5E.Charges" }; /* -------------------------------------------- */ /** * The set of equipment types for armor, clothing, and other objects which can ber worn by the character * @type {Object} */ SW5E.equipmentTypes = { light: "SW5E.EquipmentLight", medium: "SW5E.EquipmentMedium", heavy: "SW5E.EquipmentHeavy", bonus: "SW5E.EquipmentBonus", natural: "SW5E.EquipmentNatural", shield: "SW5E.EquipmentShield", clothing: "SW5E.EquipmentClothing", trinket: "SW5E.EquipmentTrinket", vehicle: "SW5E.EquipmentVehicle" }; /* -------------------------------------------- */ /** * The set of Armor Proficiencies which a character may have * @type {Object} */ SW5E.armorProficiencies = { lgt: SW5E.equipmentTypes.light, med: SW5E.equipmentTypes.medium, hvy: SW5E.equipmentTypes.heavy, shl: "SW5E.EquipmentShieldProficiency" }; /* -------------------------------------------- */ /** * Enumerate the valid consumable types which are recognized by the system * @type {Object} */ SW5E.consumableTypes = { adrenal: "SW5E.ConsumableAdrenal", poison: "SW5E.ConsumablePoison", explosive: "SW5E.ConsumableExplosive", food: "SW5E.ConsumableFood", medpac: "SW5E.ConsumableMedpac", technology: "SW5E.ConsumableTechnology", ammo: "SW5E.ConsumableAmmunition", trinket: "SW5E.ConsumableTrinket", force: "SW5E.ConsumableForce", tech: "SW5E.ConsumableTech" }; /* -------------------------------------------- */ /** * The valid currency denominations supported by the 5e system * @type {Object} */ SW5E.currencies = { CR: "SW5E.CurrencyCR" }; /* -------------------------------------------- */ // Damage Types SW5E.damageTypes = { acid: "SW5E.DamageAcid", cold: "SW5E.DamageCold", energy: "SW5E.DamageEnergy", fire: "SW5E.DamageFire", force: "SW5E.DamageForce", ion: "SW5E.DamageIon", kinetic: "SW5E.DamageKinetic", lightning: "SW5E.DamageLightning", necrotic: "SW5E.DamageNecrotic", poison: "SW5E.DamagePoison", psychic: "SW5E.DamagePsychic", sonic: "SW5E.DamageSonic" }; // Damage Resistance Types SW5E.damageResistanceTypes = duplicate(SW5E.damageTypes); /* -------------------------------------------- */ // armor Types SW5E.armorPropertiesTypes = { Absorptive: "SW5E.ArmorProperAbsorptive", Agile: "SW5E.ArmorProperAgile", Anchor: "SW5E.ArmorProperAnchor", Avoidant: "SW5E.ArmorProperAvoidant", Barbed: "SW5E.ArmorProperBarbed", Bulky: "SW5E.ArmorProperBulky", Charging: "SW5E.ArmorProperCharging", Concealing: "SW5E.ArmorProperConcealing", Cumbersome: "SW5E.ArmorProperCumbersome", Gauntleted: "SW5E.ArmorProperGauntleted", Imbalanced: "SW5E.ArmorProperImbalanced", Impermeable: "SW5E.ArmorProperImpermeable", Insulated: "SW5E.ArmorProperInsulated", Interlocking: "SW5E.ArmorProperInterlocking", Lambent: "SW5E.ArmorProperLambent", Lightweight: "SW5E.ArmorProperLightweight", Magnetic: "SW5E.ArmorProperMagnetic", Obscured: "SW5E.ArmorProperObscured", Obtrusive: "SW5E.ArmorProperObtrusive", Powered: "SW5E.ArmorProperPowered", Reactive: "SW5E.ArmorProperReactive", Regulated: "SW5E.ArmorProperRegulated", Reinforced: "SW5E.ArmorProperReinforced", Responsive: "SW5E.ArmorProperResponsive", Rigid: "SW5E.ArmorProperRigid", Silent: "SW5E.ArmorProperSilent", Spiked: "SW5E.ArmorProperSpiked", Strength: "SW5E.ArmorProperStrength", Steadfast: "SW5E.ArmorProperSteadfast", Versatile: "SW5E.ArmorProperVersatile" }; /** * The valid units of measure for movement distances in the game system. * By default this uses the imperial units of feet and miles. * @type {Object} */ SW5E.movementTypes = { burrow: "SW5E.MovementBurrow", climb: "SW5E.MovementClimb", fly: "SW5E.MovementFly", swim: "SW5E.MovementSwim", walk: "SW5E.MovementWalk" }; /** * The valid units of measure for movement distances in the game system. * By default this uses the imperial units of feet and miles. * @type {Object} */ SW5E.movementUnits = { ft: "SW5E.DistFt", mi: "SW5E.DistMi" }; /** * The valid units of measure for the range of an action or effect. * This object automatically includes the movement units from SW5E.movementUnits * @type {Object} */ SW5E.distanceUnits = { none: "SW5E.None", self: "SW5E.DistSelf", touch: "SW5E.DistTouch", spec: "SW5E.Special", any: "SW5E.DistAny" }; for (let [k, v] of Object.entries(SW5E.movementUnits)) { SW5E.distanceUnits[k] = v; } /* -------------------------------------------- */ /** * Configure aspects of encumbrance calculation so that it could be configured by modules * @type {Object} */ SW5E.encumbrance = { currencyPerWeight: 50, strMultiplier: 15, vehicleWeightMultiplier: 2000 // 2000 lbs in a ton }; /* -------------------------------------------- */ /** * This Object defines the types of single or area targets which can be applied in SW5e * @type {Object} */ SW5E.targetTypes = { none: "SW5E.None", self: "SW5E.TargetSelf", creature: "SW5E.TargetCreature", droid: "SW5E.TargetDroid", ally: "SW5E.TargetAlly", enemy: "SW5E.TargetEnemy", object: "SW5E.TargetObject", space: "SW5E.TargetSpace", radius: "SW5E.TargetRadius", sphere: "SW5E.TargetSphere", cylinder: "SW5E.TargetCylinder", cone: "SW5E.TargetCone", square: "SW5E.TargetSquare", cube: "SW5E.TargetCube", line: "SW5E.TargetLine", wall: "SW5E.TargetWall", weapon: "SW5E.TargetWeapon" }; /* -------------------------------------------- */ /** * Map the subset of target types which produce a template area of effect * The keys are SW5E target types and the values are MeasuredTemplate shape types * @type {Object} */ SW5E.areaTargetTypes = { cone: "cone", cube: "rect", cylinder: "circle", line: "ray", radius: "circle", sphere: "circle", square: "rect", wall: "ray" }; /* -------------------------------------------- */ // Healing Types SW5E.healingTypes = { healing: "SW5E.Healing", temphp: "SW5E.HealingTemp" }; /* -------------------------------------------- */ /** * Enumerate the denominations of hit dice which can apply to classes in the SW5E system * @type {Array.} */ SW5E.hitDieTypes = ["d4", "d6", "d8", "d10", "d12", "d20"]; /* -------------------------------------------- */ /** * The set of possible sensory perception types which an Actor may have * @type {object} */ SW5E.senses = { blindsight: "SW5E.SenseBlindsight", darkvision: "SW5E.SenseDarkvision", tremorsense: "SW5E.SenseTremorsense", truesight: "SW5E.SenseTruesight" }; /* -------------------------------------------- */ /** * The set of skill which can be trained in SW5e * @type {Object} */ SW5E.skills = { acr: "SW5E.SkillAcr", ani: "SW5E.SkillAni", ath: "SW5E.SkillAth", dec: "SW5E.SkillDec", ins: "SW5E.SkillIns", itm: "SW5E.SkillItm", inv: "SW5E.SkillInv", lor: "SW5E.SkillLor", med: "SW5E.SkillMed", nat: "SW5E.SkillNat", prc: "SW5E.SkillPrc", prf: "SW5E.SkillPrf", per: "SW5E.SkillPer", pil: "SW5E.SkillPil", slt: "SW5E.SkillSlt", ste: "SW5E.SkillSte", sur: "SW5E.SkillSur", tec: "SW5E.SkillTec" }; /* -------------------------------------------- */ SW5E.powerPreparationModes = { prepared: "SW5E.PowerPrepPrepared", always: "SW5E.PowerPrepAlways", atwill: "SW5E.PowerPrepAtWill", innate: "SW5E.PowerPrepInnate" }; SW5E.powerUpcastModes = ["always", "prepared"]; /** * The available choices for power progression for a character class * @type {Object} */ SW5E.powerProgression = { none: "SW5E.PowerNone", consular: "SW5E.PowerProgCns", engineer: "SW5E.PowerProgEng", guardian: "SW5E.PowerProgGrd", scout: "SW5E.PowerProgSct", sentinel: "SW5E.PowerProgSnt" }; /** * The max number of known powers available to each class per level */ SW5E.powersKnown = { none: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], consular: [9, 11, 13, 15, 17, 19, 21, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 39, 40], engineer: [6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], guardian: [5, 7, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30], scout: [0, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], sentinel: [7, 9, 11, 13, 15, 17, 18, 19, 21, 22, 24, 25, 26, 28, 29, 30, 32, 33, 34, 35] }; /** * The max number of powers cast for each power level per long rest */ SW5E.powerLimit = { none: [0, 0, 0, 0, 0, 0, 0, 0, 0], consular: [1000, 1000, 1000, 1000, 1000, 1, 1, 1, 1], engineer: [1000, 1000, 1000, 1000, 1000, 1, 1, 1, 1], guardian: [1000, 1000, 1000, 1000, 1, 0, 0, 0, 0], scout: [1000, 1000, 1000, 1, 1, 0, 0, 0, 0], sentinel: [1000, 1000, 1000, 1000, 1, 1, 1, 0, 0], innate: [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000], dual: [1000, 1000, 1000, 1000, 1000, 1, 1, 1, 1] }; /** * The max level of a known/overpowered power available to each class per level */ SW5E.powerMaxLevel = { none: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], consular: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9], engineer: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9], guardian: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5], scout: [0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5], sentinel: [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7], multi: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9], innate: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9], dual: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9] }; /** * The number of base force/tech points available to each class per level */ SW5E.powerPoints = { none: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], consular: [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80], engineer: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40], guardian: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40], scout: [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], sentinel: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60] }; /* -------------------------------------------- */ /** * The available choices for how power damage scaling may be computed * @type {Object} */ SW5E.powerScalingModes = { none: "SW5E.PowerNone", atwill: "SW5E.PowerAtWill", level: "SW5E.PowerLevel" }; /* -------------------------------------------- */ /** * Define the set of types which a weapon item can take * @type {Object} */ SW5E.weaponTypes = { simpleVW: "SW5E.WeaponSimpleVW", simpleB: "SW5E.WeaponSimpleB", simpleLW: "SW5E.WeaponSimpleLW", martialVW: "SW5E.WeaponMartialVW", martialB: "SW5E.WeaponMartialB", martialLW: "SW5E.WeaponMartialLW", natural: "SW5E.WeaponNatural", improv: "SW5E.WeaponImprov", ammo: "SW5E.WeaponAmmo", siege: "SW5E.WeaponSiege" }; /* -------------------------------------------- */ /** * Define the set of weapon property flags which can exist on a weapon * @type {Object} */ SW5E.weaponProperties = { amm: "SW5E.WeaponPropertiesAmm", aut: "SW5E.WeaponPropertiesAut", bur: "SW5E.WeaponPropertiesBur", def: "SW5E.WeaponPropertiesDef", dex: "SW5E.WeaponPropertiesDex", dir: "SW5E.WeaponPropertiesDir", drm: "SW5E.WeaponPropertiesDrm", dgd: "SW5E.WeaponPropertiesDgd", dis: "SW5E.WeaponPropertiesDis", dpt: "SW5E.WeaponPropertiesDpt", dou: "SW5E.WeaponPropertiesDou", fin: "SW5E.WeaponPropertiesFin", fix: "SW5E.WeaponPropertiesFix", foc: "SW5E.WeaponPropertiesFoc", hvy: "SW5E.WeaponPropertiesHvy", hid: "SW5E.WeaponPropertiesHid", ken: "SW5E.WeaponPropertiesKen", lgt: "SW5E.WeaponPropertiesLgt", lum: "SW5E.WeaponPropertiesLum", mig: "SW5E.WeaponPropertiesMig", pic: "SW5E.WeaponPropertiesPic", rap: "SW5E.WeaponPropertiesRap", rch: "SW5E.WeaponPropertiesRch", rel: "SW5E.WeaponPropertiesRel", ret: "SW5E.WeaponPropertiesRet", shk: "SW5E.WeaponPropertiesShk", sil: "SW5E.WeaponPropertiesSil", spc: "SW5E.WeaponPropertiesSpc", str: "SW5E.WeaponPropertiesStr", thr: "SW5E.WeaponPropertiesThr", two: "SW5E.WeaponPropertiesTwo", ver: "SW5E.WeaponPropertiesVer", vic: "SW5E.WeaponPropertiesVic" }; // Power Components SW5E.powerComponents = { V: "SW5E.ComponentVerbal", S: "SW5E.ComponentSomatic", M: "SW5E.ComponentMaterial" }; // Power Schools SW5E.powerSchools = { lgt: "SW5E.SchoolLgt", uni: "SW5E.SchoolUni", drk: "SW5E.SchoolDrk", tec: "SW5E.SchoolTec", enh: "SW5E.SchoolEnh" }; // Power Levels SW5E.powerLevels = { 0: "SW5E.PowerLevel0", 1: "SW5E.PowerLevel1", 2: "SW5E.PowerLevel2", 3: "SW5E.PowerLevel3", 4: "SW5E.PowerLevel4", 5: "SW5E.PowerLevel5", 6: "SW5E.PowerLevel6", 7: "SW5E.PowerLevel7", 8: "SW5E.PowerLevel8", 9: "SW5E.PowerLevel9" }; // Polymorph options. SW5E.polymorphSettings = { keepPhysical: "SW5E.PolymorphKeepPhysical", keepMental: "SW5E.PolymorphKeepMental", keepSaves: "SW5E.PolymorphKeepSaves", keepSkills: "SW5E.PolymorphKeepSkills", mergeSaves: "SW5E.PolymorphMergeSaves", mergeSkills: "SW5E.PolymorphMergeSkills", keepClass: "SW5E.PolymorphKeepClass", keepFeats: "SW5E.PolymorphKeepFeats", keepPowers: "SW5E.PolymorphKeepPowers", keepItems: "SW5E.PolymorphKeepItems", keepBio: "SW5E.PolymorphKeepBio", keepVision: "SW5E.PolymorphKeepVision" }; /* -------------------------------------------- */ /** * Skill, ability, and tool proficiency levels * Each level provides a proficiency multiplier * @type {Object} */ SW5E.proficiencyLevels = { 0: "SW5E.NotProficient", 1: "SW5E.Proficient", 0.5: "SW5E.HalfProficient", 2: "SW5E.Expertise" }; /* -------------------------------------------- */ /** * The amount of cover provided by an object. * In cases where multiple pieces of cover are * in play, we take the highest value. */ SW5E.cover = { 0: "SW5E.None", 0.5: "SW5E.CoverHalf", 0.75: "SW5E.CoverThreeQuarters", 1: "SW5E.CoverTotal" }; /* -------------------------------------------- */ // Condition Types SW5E.conditionTypes = { blinded: "SW5E.ConBlinded", charmed: "SW5E.ConCharmed", deafened: "SW5E.ConDeafened", diseased: "SW5E.ConDiseased", exhaustion: "SW5E.ConExhaustion", frightened: "SW5E.ConFrightened", grappled: "SW5E.ConGrappled", incapacitated: "SW5E.ConIncapacitated", invisible: "SW5E.ConInvisible", paralyzed: "SW5E.ConParalyzed", petrified: "SW5E.ConPetrified", poisoned: "SW5E.ConPoisoned", prone: "SW5E.ConProne", restrained: "SW5E.ConRestrained", shocked: "SW5E.ConShocked", slowed: "SW5E.ConSlowed", stunned: "SW5E.ConStunned", unconscious: "SW5E.ConUnconscious" }; // Languages SW5E.languages = { abyssin: "SW5E.LanguagesAbyssin", aleena: "SW5E.LanguagesAleena", antarian: "SW5E.LanguagesAntarian", anzellan: "SW5E.LanguagesAnzellan", aqualish: "SW5E.LanguagesAqualish", arconese: "SW5E.LanguagesArconese", ardennian: "SW5E.LanguagesArdennian", arkanian: "SW5E.LanguagesArkanian", balosur: "SW5E.LanguagesBalosur", barabel: "SW5E.LanguagesBarabel", basic: "SW5E.LanguagesBasic", besalisk: "SW5E.LanguagesBesalisk", binary: "SW5E.LanguagesBinary", bith: "SW5E.LanguagesBith", bocce: "SW5E.LanguagesBocce", bothese: "SW5E.LanguagesBothese", catharese: "SW5E.LanguagesCatharese", cerean: "SW5E.LanguagesCerean", "chadra-fan": "SW5E.LanguagesChadra-Fan", chagri: "SW5E.LanguagesChagri", cheunh: "SW5E.LanguagesCheunh", chevin: "SW5E.LanguagesChevin", chironan: "SW5E.LanguagesChironan", clawdite: "SW5E.LanguagesClawdite", codruese: "SW5E.LanguagesCodruese", colicoid: "SW5E.LanguagesColicoid", dashadi: "SW5E.LanguagesDashadi", defel: "SW5E.LanguagesDefel", devaronese: "SW5E.LanguagesDevaronese", dosh: "SW5E.LanguagesDosh", draethos: "SW5E.LanguagesDraethos", durese: "SW5E.LanguagesDurese", dug: "SW5E.LanguagesDug", ewokese: "SW5E.LanguagesEwokese", falleen: "SW5E.LanguagesFalleen", felucianese: "SW5E.LanguagesFelucianese", gamorrese: "SW5E.LanguagesGamorrese", gand: "SW5E.LanguagesGand", geonosian: "SW5E.LanguagesGeonosian", givin: "SW5E.LanguagesGivin", gran: "SW5E.LanguagesGran", gungan: "SW5E.LanguagesGungan", hapan: "SW5E.LanguagesHapan", harchese: "SW5E.LanguagesHarchese", herglese: "SW5E.LanguagesHerglese", honoghran: "SW5E.LanguagesHonoghran", huttese: "SW5E.LanguagesHuttese", iktotchese: "SW5E.LanguagesIktotchese", ithorese: "SW5E.LanguagesIthorese", jawaese: "SW5E.LanguagesJawaese", kaleesh: "SW5E.LanguagesKaleesh", kaminoan: "SW5E.LanguagesKaminoan", karkaran: "SW5E.LanguagesKarkaran", keldor: "SW5E.LanguagesKelDor", kharan: "SW5E.LanguagesKharan", killik: "SW5E.LanguagesKillik", klatooinian: "SW5E.LanguagesKlatooinian", kubazian: "SW5E.LanguagesKubazian", kushiban: "SW5E.LanguagesKushiban", kyuzo: "SW5E.LanguagesKyuzo", lannik: "SW5E.LanguagesLannik", lasat: "SW5E.LanguagesLasat", lowickese: "SW5E.LanguagesLowickese", lurmese: "SW5E.LanguagesLurmese", mandoa: "SW5E.LanguagesMandoa", miralukese: "SW5E.LanguagesMiralukese", mirialan: "SW5E.LanguagesMirialan", moncal: "SW5E.LanguagesMonCal", mustafarian: "SW5E.LanguagesMustafarian", muun: "SW5E.LanguagesMuun", nautila: "SW5E.LanguagesNautila", ortolan: "SW5E.LanguagesOrtolan", pakpak: "SW5E.LanguagesPakPak", pyke: "SW5E.LanguagesPyke", quarrenese: "SW5E.LanguagesQuarrenese", rakata: "SW5E.LanguagesRakata", rattataki: "SW5E.LanguagesRattataki", rishii: "SW5E.LanguagesRishii", rodese: "SW5E.LanguagesRodese", ryn: "SW5E.LanguagesRyn", selkatha: "SW5E.LanguagesSelkatha", semblan: "SW5E.LanguagesSemblan", shistavanen: "SW5E.LanguagesShistavanen", shyriiwook: "SW5E.LanguagesShyriiwook", sith: "SW5E.LanguagesSith", squibbian: "SW5E.LanguagesSquibbian", sriluurian: "SW5E.LanguagesSriluurian", "ssi-ruuvi": "SW5E.LanguagesSsi-ruuvi", sullustese: "SW5E.LanguagesSullustese", talzzi: "SW5E.LanguagesTalzzi", tarasinese: "SW5E.LanguagesTarasinese", thisspiasian: "SW5E.LanguagesThisspiasian", togorese: "SW5E.LanguagesTogorese", togruti: "SW5E.LanguagesTogruti", toydarian: "SW5E.LanguagesToydarian", tusken: "SW5E.LanguagesTusken", "twi'leki": "SW5E.LanguagesTwileki", ugnaught: "SW5E.LanguagesUgnaught", umbaran: "SW5E.LanguagesUmbaran", utapese: "SW5E.LanguagesUtapese", verpine: "SW5E.LanguagesVerpine", vong: "SW5E.LanguagesVong", voss: "SW5E.LanguagesVoss", yevethan: "SW5E.LanguagesYevethan", zabraki: "SW5E.LanguagesZabraki", zygerrian: "SW5E.LanguagesZygerrian" }; // Character Level XP Requirements SW5E.CHARACTER_EXP_LEVELS = [ 0, 300, 900, 2700, 6500, 14000, 23000, 34000, 48000, 64000, 85000, 100000, 120000, 140000, 165000, 195000, 225000, 265000, 305000, 355000 ]; // Challenge Rating XP Levels SW5E.CR_EXP_LEVELS = [ 10, 200, 450, 700, 1100, 1800, 2300, 2900, 3900, 5000, 5900, 7200, 8400, 10000, 11500, 13000, 15000, 18000, 20000, 22000, 25000, 33000, 41000, 50000, 62000, 75000, 90000, 105000, 120000, 135000, 155000 ]; // Character Features Per Class And Level SW5E.classFeatures = ClassFeatures; // Configure Optional Character Flags SW5E.characterFlags = { adaptiveResilience: { name: "SW5E.FlagsAdaptiveResilience", hint: "SW5E.FlagsAdaptiveResilienceHint", section: "SW5E.SpeciesTraits", type: Boolean }, aggressive: { name: "SW5E.FlagsAggressive", hint: "SW5E.FlagsAggressiveHint", section: "SW5E.SpeciesTraits", type: Boolean }, amphibious: { name: "SW5E.FlagsAmphibious", hint: "SW5E.FlagsAmphibiousHint", section: "SW5E.SpeciesTraits", type: Boolean }, armorIntegration: { name: "SW5E.FlagsArmorIntegration", hint: "SW5E.FlagsArmorIntegrationHint", section: "SW5E.SpeciesTraits", type: Boolean }, businessSavvy: { name: "SW5E.FlagsBusinessSavvy", hint: "SW5E.FlagsBusinessSavvyHint", section: "SW5E.SpeciesTraits", type: Boolean }, cannibalize: { name: "SW5E.FlagsCannibalize", hint: "SW5E.FlagsCannibalizeHint", section: "SW5E.SpeciesTraits", type: Boolean }, closedMind: { name: "SW5E.FlagsClosedMind", hint: "SW5E.FlagsClosedMindHint", section: "SW5E.SpeciesTraits", type: Boolean }, crudeWeaponSpecialists: { name: "SW5E.FlagsCrudeWeaponSpecialists", hint: "SW5E.FlagsCrudeWeaponSpecialistsHint", section: "SW5E.SpeciesTraits", type: Boolean }, defiant: { name: "SW5E.FlagsDefiant", hint: "SW5E.FlagsDefiantHint", section: "SW5E.SpeciesTraits", type: Boolean }, detailOriented: { name: "SW5E.FlagsDetailOriented", hint: "SW5E.FlagsDetailOrientedHint", section: "SW5E.SpeciesTraits", type: Boolean }, enthrallingPheromones: { name: "SW5E.FlagsEnthrallingPheromones", hint: "SW5E.FlagsEnthrallingPheromonesHint", section: "SW5E.SpeciesTraits", type: Boolean }, extraArms: { name: "SW5E.FlagsExtraArms", hint: "SW5E.FlagsExtraArmsHint", section: "SW5E.SpeciesTraits", type: Boolean }, forceContention: { name: "SW5E.FlagsForceContention", hint: "SW5E.FlagsForceContentionHint", section: "SW5E.SpeciesTraits", type: Boolean }, forceInsensitive: { name: "SW5E.FlagsForceInsensitive", hint: "SW5E.FlagsForceInsensitiveHint", section: "SW5E.SpeciesTraits", type: Boolean }, foreignBiology: { name: "SW5E.FlagsForeignBiology", hint: "SW5E.FlagsForeignBiologyHint", section: "SW5E.SpeciesTraits", type: Boolean }, furyOfTheSmall: { name: "SW5E.FlagsFuryOfTheSmall", hint: "SW5E.FlagsFuryOfTheSmallHint", section: "SW5E.SpeciesTraits", type: Boolean }, grovelCowerAndBeg: { name: "SW5E.FlagsGrovelCowerAndBeg", hint: "SW5E.FlagsGrovelCowerAndBegHint", section: "SW5E.SpeciesTraits", type: Boolean }, inscrutable: { name: "SW5E.FlagsInscrutable", hint: "SW5E.FlagsInscrutableHint", section: "SW5E.SpeciesTraits", type: Boolean }, keenSenses: { name: "SW5E.FlagsKeenSenses", hint: "SW5E.FlagsKeenSensesHint", section: "SW5E.SpeciesTraits", type: Boolean }, longlimbed: { name: "SW5E.FlagsLongLimbed", hint: "SW5E.FlagsLongLimbedHint", section: "SW5E.SpeciesTraits", type: Boolean }, maintenanceMode: { name: "SW5E.FlagsMaintenanceMode", hint: "SW5E.FlagsMaintenanceModeHint", section: "SW5E.SpeciesTraits", type: Boolean }, maskOfTheWild: { name: "SW5E.FlagsMaskOfTheWild", hint: "SW5E.FlagsMaskOfTheWildHint", section: "SW5E.SpeciesTraits", type: Boolean }, multipleHearts: { name: "SW5E.FlagsMultipleHearts", hint: "SW5E.FlagsMultipleHeartsHint", section: "SW5E.SpeciesTraits", type: Boolean }, naturallyStealthy: { name: "SW5E.FlagsNaturallyStealthy", hint: "SW5E.FlagsNaturallyStealthyHint", section: "SW5E.SpeciesTraits", type: Boolean }, nimbleAgility: { name: "SW5E.FlagsNimbleAgility", hint: "SW5E.FlagsNimbleAgilityHint", section: "SW5E.SpeciesTraits", type: Boolean }, nimbleEscape: { name: "SW5E.FlagsNimbleEscape", hint: "SW5E.FlagsNimbleEscapeHint", section: "SW5E.SpeciesTraits", type: Boolean }, nimbleness: { name: "SW5E.FlagsNimbleness", hint: "SW5E.FlagsNimblenessHint", section: "SW5E.SpeciesTraits", type: Boolean }, pintsized: { name: "SW5E.FlagsPintsized", hint: "SW5E.FlagsPintsizedHint", section: "SW5E.SpeciesTraits", type: Boolean }, powerfulBuild: { name: "SW5E.FlagsPowerfulBuild", hint: "SW5E.FlagsPowerfulBuildHint", section: "SW5E.SpeciesTraits", type: Boolean }, precognition: { name: "SW5E.FlagsPrecognition", hint: "SW5E.FlagsPrecognitionHint", section: "SW5E.SpeciesTraits", type: Boolean }, programmer: { name: "SW5E.FlagsProgrammer", hint: "SW5E.FlagsProgrammerHint", section: "SW5E.SpeciesTraits", type: Boolean }, puny: { name: "SW5E.FlagsPuny", hint: "SW5E.FlagsPunyHint", section: "SW5E.SpeciesTraits", type: Boolean }, rapidReconstruction: { name: "SW5E.FlagsRapidReconstruction", hint: "SW5E.FlagsRapidReconstructionHint", section: "SW5E.SpeciesTraits", type: Boolean }, rapidlyRegenerative: { name: "SW5E.FlagsRapidlyRegenerative", hint: "SW5E.FlagsRapidlyRegenerativeHint", section: "SW5E.SpeciesTraits", type: Boolean }, regenerative: { name: "SW5E.FlagsRegenerative", hint: "SW5E.FlagsRegenerativeHint", section: "SW5E.SpeciesTraits", type: Boolean }, savageAttacks: { name: "SW5E.FlagsSavageAttacks", hint: "SW5E.FlagsSavageAttacksHint", section: "SW5E.SpeciesTraits", type: Boolean }, shapechanger: { name: "SW5E.FlagsShapechanger", hint: "SW5E.FlagsShapechangerHint", section: "SW5E.SpeciesTraits", type: Boolean }, strongLegged: { name: "SW5E.FlagsStrongLegged", hint: "SW5E.FlagsStrongLeggedHint", section: "SW5E.SpeciesTraits", type: Boolean }, sunlightSensitivity: { name: "SW5E.FlagsSunlightSensitivity", hint: "SW5E.FlagsSunlightSensitivityHint", section: "SW5E.SpeciesTraits", type: Boolean }, surpriseAttack: { name: "SW5E.FlagsSurpriseAttack", hint: "SW5E.FlagsSurpriseAttackHint", section: "SW5E.SpeciesTraits", type: Boolean }, techImpaired: { name: "SW5E.FlagsTechImpaired", hint: "SW5E.FlagsTechImpairedHint", section: "SW5E.SpeciesTraits", type: Boolean }, techResistance: { name: "SW5E.FlagsTechResistance", hint: "SW5E.FlagsTechResistanceHint", section: "SW5E.SpeciesTraits", type: Boolean }, tinker: { name: "SW5E.FlagsTinker", hint: "SW5E.FlagsTinkerHint", section: "SW5E.SpeciesTraits", type: Boolean }, toughness: { name: "SW5E.FlagsToughness", hint: "SW5E.FlagsToughnessHint", section: "SW5E.SpeciesTraits", type: Boolean }, trance: { name: "SW5E.FlagsTrance", hint: "SW5E.FlagsTranceHint", section: "SW5E.SpeciesTraits", type: Boolean }, unarmedCombatant: { name: "SW5E.FlagsUnarmedCombatant", hint: "SW5E.FlagsUnarmedCombatantHint", section: "SW5E.SpeciesTraits", type: Boolean }, undersized: { name: "SW5E.FlagsUndersized", hint: "SW5E.FlagsUndersizedHint", section: "SW5E.SpeciesTraits", type: Boolean }, unsettlingVisage: { name: "SW5E.FlagsUnsettlingVisage", hint: "SW5E.FlagsUnsettlingVisageHint", section: "SW5E.SpeciesTraits", type: Boolean }, initiativeAdv: { name: "SW5E.FlagsInitiativeAdv", hint: "SW5E.FlagsInitiativeAdvHint", section: "SW5E.Features", type: Boolean }, initiativeAlert: { name: "SW5E.FlagsAlert", hint: "SW5E.FlagsAlertHint", section: "SW5E.Features", type: Boolean }, jackOfAllTrades: { name: "SW5E.FlagsJOAT", hint: "SW5E.FlagsJOATHint", section: "SW5E.Features", type: Boolean }, observantFeat: { name: "SW5E.FlagsObservant", hint: "SW5E.FlagsObservantHint", skills: ["prc", "inv"], section: "SW5E.Features", type: Boolean }, reliableTalent: { name: "SW5E.FlagsReliableTalent", hint: "SW5E.FlagsReliableTalentHint", section: "SW5E.Features", type: Boolean }, remarkableAthlete: { name: "SW5E.FlagsRemarkableAthlete", hint: "SW5E.FlagsRemarkableAthleteHint", abilities: ["str", "dex", "con"], section: "SW5E.Features", type: Boolean }, weaponCriticalThreshold: { name: "SW5E.FlagsWeaponCritThreshold", hint: "SW5E.FlagsWeaponCritThresholdHint", section: "SW5E.Features", type: Number, placeholder: 20 }, powerCriticalThreshold: { name: "SW5E.FlagsPowerCritThreshold", hint: "SW5E.FlagsPowerCritThresholdHint", section: "SW5E.Features", type: Number, placeholder: 20 }, meleeCriticalDamageDice: { name: "SW5E.FlagsMeleeCriticalDice", hint: "SW5E.FlagsMeleeCriticalDiceHint", section: "SW5E.Features", type: Number, placeholder: 0 } }; // Configure allowed status flags SW5E.allowedActorFlags = ["isPolymorphed", "originalActor", "dataVersion"].concat(Object.keys(SW5E.characterFlags));