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 = { blp: "SW5E.WeaponBlasterPistolProficiency", chk: "SW5E.WeaponChakramProficiency", dbb: "SW5E.WeaponDoubleBladeProficiency", dbs: "SW5E.WeaponDoubleSaberProficiency", dsh: "SW5E.WeaponDoubleShotoProficiency", dsw: "SW5E.WeaponDoubleSwordProficiency", hid: "SW5E.WeaponHiddenBladeProficiency", imp: "SW5E.WeaponImprovisedProficiency", lfl: "SW5E.WeaponLightFoilProficiency", lrg: "SW5E.WeaponLightRingProficiency", mar: "SW5E.WeaponMartialProficiency", mrb: "SW5E.WeaponMartialBlasterProficiency", mlw: "SW5E.WeaponMartialLightweaponProficiency", mvb: "SW5E.WeaponMartialVibroweaponProficiency", ntl: "SW5E.WeaponNaturalProficiency", swh: "SW5E.WeaponSaberWhipProficiency", sim: "SW5E.WeaponSimpleProficiency", smb: "SW5E.WeaponSimpleBlasterProficiency", slw: "SW5E.WeaponSimpleLightweaponProficiency", svb: "SW5E.WeaponSimpleVibroweaponProficiency", tch: "SW5E.WeaponTechbladeProficiency", vbr: "SW5E.WeaponVibrorapierProficiency", vbw: "SW5E.WeaponVibrowhipProficiency" }; /** * A map of weapon item proficiency to actor item proficiency * Used when a new player owned item is created * @type {Object} */ SW5E.weaponProficienciesMap = { natural: true, simpleVW: "sim", simpleB: "sim", simpleLW: "sim", martialVW: "mar", martialB: "mar", martialLW: "mar" }; // TODO: Check to see if this can be used // It's not actually been used anywhere in DND5e 1.3.2 // Note name mapped to ID in compendium /** * The basic weapon types in 5e. This enables specific weapon proficiencies or * starting equipment provided by classes and backgrounds. * * @enum {string} SW5E.weaponIds = { "battleaxe": "I0WocDSuNpGJayPb", "blowgun": "wNWK6yJMHG9ANqQV", "club": "nfIRTECQIG81CvM4", "dagger": "0E565kQUBmndJ1a2", "dart": "3rCO8MTIdPGSW6IJ", "flail": "UrH3sMdnUDckIHJ6", "glaive": "rOG1OM2ihgPjOvFW", "greataxe": "1Lxk6kmoRhG8qQ0u", "greatclub": "QRCsxkCwWNwswL9o", "greatsword": "xMkP8BmFzElcsMaR", "halberd": "DMejWAc8r8YvDPP1", "handaxe": "eO7Fbv5WBk5zvGOc", "handcrossbow": "qaSro7kFhxD6INbZ", "heavycrossbow": "RmP0mYRn2J7K26rX", "javelin": "DWLMnODrnHn8IbAG", "lance": "RnuxdHUAIgxccVwj", "lightcrossbow": "ddWvQRLmnnIS0eLF", "lighthammer": "XVK6TOL4sGItssAE", "longbow": "3cymOVja8jXbzrdT", "longsword": "10ZP2Bu3vnCuYMIB", "mace": "Ajyq6nGwF7FtLhDQ", "maul": "DizirD7eqjh8n95A", "morningstar": "dX8AxCh9o0A9CkT3", "net": "aEiM49V8vWpWw7rU", "pike": "tC0kcqZT9HHAO0PD", "quarterstaff": "g2dWN7PQiMRYWzyk", "rapier": "Tobce1hexTnDk4sV", "scimitar": "fbC0Mg1a73wdFbqO", "shortsword": "osLzOwQdPtrK3rQH", "sickle": "i4NeNZ30ycwPDHMx", "spear": "OG4nBBydvmfWYXIk", "shortbow": "GJv6WkD7D2J6rP6M", "sling": "3gynWO9sN4OLGMWD", "trident": "F65ANO66ckP8FDMa", "warpick": "2YdfjN1PIIrSHZii", "warhammer": "F0Df164Xv1gWcYt0", "whip": "QKTyxoO0YDnAsbYe" }; */ /* -------------------------------------------- */ 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" }; // TODO: Same as weapon IDs // Also unused, and SW5E.toolProficiencies is already pretty verbose anyway /** * The basic tool types in 5e. This enables specific tool proficiencies or * starting equipment provided by classes and backgrounds. * * @enum {string} SW5E.toolIds = { "alchemist": "SztwZhbhZeCqyAes", "bagpipes": "yxHi57T5mmVt0oDr", "brewer": "Y9S75go1hLMXUD48", "calligrapher": "jhjo20QoiD5exf09", "card": "YwlHI3BVJapz4a3E", "carpenter": "8NS6MSOdXtUqD7Ib", "cartographer": "fC0lFK8P4RuhpfaU", "cobbler": "hM84pZnpCqKfi8XH", "cook": "Gflnp29aEv5Lc1ZM", "dice": "iBuTM09KD9IoM5L8", "disg": "IBhDAr7WkhWPYLVn", "drum": "69Dpr25pf4BjkHKb", "dulcimer": "NtdDkjmpdIMiX7I2", "flute": "eJOrPcAz9EcquyRQ", "forg": "cG3m4YlHfbQlLEOx", "glassblower": "rTbVrNcwApnuTz5E", "herb": "i89okN7GFTWHsvPy", "horn": "aa9KuBy4dst7WIW9", "jeweler": "YfBwELTgPFHmQdHh", "leatherworker": "PUMfwyVUbtyxgYbD", "lute": "qBydtUUIkv520DT7", "lyre": "EwG1EtmbgR3bM68U", "mason": "skUih6tBvcBbORzA", "navg": "YHCmjsiXxZ9UdUhU", "painter": "ccm5xlWhx74d6lsK", "panflute": "G5m5gYIx9VAUWC3J", "pois": "il2GNi8C0DvGLL9P", "potter": "hJS8yEVkqgJjwfWa", "shawm": "G3cqbejJpfB91VhP", "smith": "KndVe2insuctjIaj", "thief": "woWZ1sO5IUVGzo58", "tinker": "0d08g1i5WXnNrCNA", "viol": "baoe3U5BfMMMxhCU", "weaver": "ap9prThUB2y9lDyj", "woodcarver": "xKErqkLo4ASYr5EP", }; */ /* -------------------------------------------- */ /** * 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.LegendaryActionLabel", lair: "SW5E.LairActionLabel", 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 }; /** * Colors used to visualize temporary and temporary maximum HP in token health bars * @enum {number} */ SW5E.tokenHPColors = { temp: 0x66ccff, tempmax: 0x440066, negmax: 0x550000 }; /* -------------------------------------------- */ /** * Creature types * @type {Object} */ SW5E.creatureTypes = { aberration: "SW5E.CreatureAberration", beast: "SW5E.CreatureBeast", construct: "SW5E.CreatureConstruct", droid: "SW5E.CreatureDroid", force: "SW5E.CreatureForceEntity", humanoid: "SW5E.CreatureHumanoid", plant: "SW5E.CreaturePlant", undead: "SW5E.CreatureUndead" }; /* -------------------------------------------- */ /** * 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", recharge: "SW5E.Recharge", refitting: "SW5E.Refitting" }; /* -------------------------------------------- */ /** * The set of equipment types for armor, clothing, and other objects which can be worn by the character * @type {Object} */ SW5E.equipmentTypes = { light: "SW5E.EquipmentLight", medium: "SW5E.EquipmentMedium", heavy: "SW5E.EquipmentHeavy", hyper: "SW5E.EquipmentHyperdrive", bonus: "SW5E.EquipmentBonus", natural: "SW5E.EquipmentNatural", powerc: "SW5E.EquipmentPowerCoupling", reactor: "SW5E.EquipmentReactor", shield: "SW5E.EquipmentShield", clothing: "SW5E.EquipmentClothing", trinket: "SW5E.EquipmentTrinket", ssarmor: "SW5E.EquipmentStarshipArmor", ssshield: "SW5E.EquipmentStarshipShield", 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" }; /** * A map of armor item proficiency to actor item proficiency * Used when a new player owned item is created * @type {Object} */ SW5E.armorProficienciesMap = { natural: true, clothing: true, light: "lgt", medium: "med", heavy: "hvy", shield: "shl" }; /* -------------------------------------------- */ /** * 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 = foundry.utils.deepClone(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", crawl: "SW5E.MovementCrawl", fly: "SW5E.MovementFly", roll: "SW5E.MovementRoll", space: "SW5E.MovementSpace", swim: "SW5E.MovementSwim", turn: "SW5E.MovementTurn", 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", starship: "SW5E.TargetStarship", 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 {string[]} */ SW5E.hitDieTypes = ["d4", "d6", "d8", "d10", "d12", "d20"]; /* -------------------------------------------- */ /** * Enumerate the denominations of power dice which can apply to starships in the SW5E system * @enum {string} */ SW5E.powerDieTypes = [1, "d4", "d6", "d8", "d10", "d12"]; /* -------------------------------------------- */ /** * Enumerate the base stat and feature settings for starships based on size. * @type {Array.} */ SW5E.baseStarshipSettings = { tiny: { changes: [ {key: "data.abilities.dex.value", value: 4, mode: 2, priority: 20}, {key: "data.abilities.dex.proficient", value: 1, mode: 4, priority: 20}, {key: "data.abilities.con.value", value: -4, mode: 2, priority: 20}, {key: "data.abilities.int.proficient", value: 1, mode: 4, priority: 20} ], attributes: { crewcap: null, hd: "1d4", hp: {value: 4, max: 4, temp: 4, tempmax: 4}, hsm: 1, sd: "1d4", mods: {open: 10, max: 10}, suites: {open: 0, max: 0}, movement: {fly: 300, turn: 300} } }, sm: { changes: [ {key: "data.abilities.dex.value", value: 2, mode: 2, priority: 20}, {key: "data.abilities.dex.proficient", value: 1, mode: 4, priority: 20}, {key: "data.abilities.con.value", value: -2, mode: 2, priority: 20}, {key: "data.abilities.str.proficient", value: 1, mode: 4, priority: 20} ], attributes: { crewcap: 1, hd: "3d6", hp: {value: 6, max: 6, temp: 6, tempmax: 6}, hsm: 2, sd: "3d6", mods: {open: 20, max: 20}, suites: {open: -1, max: -1}, movement: {fly: 300, turn: 250} } }, med: { attributes: { crewcap: 1, hd: "5d8", hp: {value: 8, max: 8, temp: 8, tempmax: 8}, hsm: 3, sd: "5d8", mods: {open: 30, max: 30}, suites: {open: 3, max: 3}, movement: {fly: 300, turn: 200} } }, lg: { changes: [ {key: "data.abilities.dex.value", value: -2, mode: 2, priority: 20}, {key: "data.abilities.wis.proficient", value: 1, mode: 4, priority: 20}, {key: "data.abilities.con.value", value: 2, mode: 2, priority: 20} ], attributes: { crewcap: 200, hd: "7d10", hp: {value: 10, max: 10, temp: 10, tempmax: 10}, hsm: 4, sd: "7d10", mods: {open: 50, max: 50}, suites: {open: 3, max: 3}, movement: {fly: 300, turn: 150} } }, huge: { changes: [ {key: "data.abilities.dex.value", value: -4, mode: 2, priority: 20}, {key: "data.abilities.wis.proficient", value: 1, mode: 4, priority: 20}, {key: "data.abilities.con.value", value: 4, mode: 2, priority: 20} ], attributes: { crewcap: 4000, hd: "9d12", hp: {value: 12, max: 12, temp: 12, tempmax: 12}, hsm: 2, sd: "9d12", mods: {open: 60, max: 60}, suites: {open: 6, max: 6}, movement: {fly: 300, turn: 100} } }, grg: { changes: [ {key: "data.abilities.dex.value", value: -6, mode: 2, priority: 20}, {key: "data.abilities.wis.proficient", value: 1, mode: 4, priority: 20}, {key: "data.abilities.con.value", value: 6, mode: 2, priority: 20} ], attributes: { crewcap: 80000, hd: "11d20", hp: {value: 20, max: 20, temp: 20, tempmax: 20}, hsm: 3, sd: "11d20", mods: {open: 70, max: 70}, suites: {open: 10, max: 10}, movement: {fly: 300, turn: 50} } } }; /* -------------------------------------------- */ /** * The set of starship roles which can be selected in SW5e * @type {Object} */ SW5E.starshipRolestiny = {}; SW5E.starshipRolessm = { bmbr: "SW5E.StarshipBomber", intc: "SW5E.StarshipInterceptor", scout: "SW5E.StarshipScout", scrm: "SW5E.StarshipScrambler", shtl: "SW5E.StarshipShuttle", strf: "SW5E.StarshipStrikeFighter" }; SW5E.starshipRolesmed = { cour: "SW5E.StarshipCourier", frtr: "SW5E.StarshipFreighter", gnbt: "SW5E.StarshipGunboat", msbt: "SW5E.StarshipMissileBoat", nvgt: "SW5E.StarshipNavigator", yacht: "SW5E.StarshipYacht" }; SW5E.starshipRoleslg = { ambd: "SW5E.StarshipAmbassador", corv: "SW5E.StarshipCorvette", crui: "SW5E.StarshipCruiser", expl: "SW5E.StarshipExplorer", pics: "SW5E.StarshipPicketShip", shtd: "SW5E.StarshipShipsTender" }; SW5E.starshipRoleshuge = { btls: "SW5E.StarshipBattleship", carr: "SW5E.StarshipCarrier", colo: "SW5E.StarshipColonizer", cmds: "SW5E.StarshipCommandShip", intd: "SW5E.StarshipInterdictor", jugg: "SW5E.StarshipJuggernaut" }; SW5E.starshipRolesgrg = { blks: "SW5E.StarshipBlockadeShip", flgs: "SW5E.StarshipFlagship", inct: "SW5E.StarshipIndustrialCenter", mbmt: "SW5E.StarshipMobileMetropolis", rsrc: "SW5E.StarshipResearcher", wars: "SW5E.StarshipWarship" }; /* -------------------------------------------- */ /** * The set of starship role bonuses to starships which can be selected in SW5e * @type {Object} */ SW5E.starshipRoleBonuses = { bmbr: {changes: [{key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20}]}, intc: {changes: [{key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20}]}, scout: {changes: [{key: "data.abilities.int.value", value: 1, mode: 2, priority: 20}]}, scrm: {changes: [{key: "data.abilities.cha.value", value: 1, mode: 2, priority: 20}]}, shtl: {changes: [{key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}]}, strf: {changes: [{key: "data.abilities.str.value", value: 1, mode: 2, priority: 20}]}, cour: {changes: [{key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20}]}, frtr: {changes: [{key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}]}, gnbt: {changes: [{key: "data.abilities.str.value", value: 1, mode: 2, priority: 20}]}, msbt: {changes: [{key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20}]}, nvgt: {changes: [{key: "data.abilities.int.value", value: 1, mode: 2, priority: 20}]}, yacht: {changes: [{key: "data.abilities.cha.value", value: 1, mode: 2, priority: 20}]}, ambd: { changes: [ {key: "data.abilities.cha.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.con.value", value: 1, mode: 2, priority: 20} ] }, corv: { changes: [ {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20} ] }, crui: { changes: [ {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, expl: { changes: [ {key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.int.value", value: 1, mode: 2, priority: 20} ] }, pics: { changes: [ {key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20} ] }, shtd: { changes: [ {key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, btls: { changes: [ {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, carr: { changes: [ {key: "data.abilities.cha.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.int.value", value: 1, mode: 2, priority: 20} ] }, colo: { changes: [ {key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.int.value", value: 1, mode: 2, priority: 20} ] }, cmds: { changes: [ {key: "data.abilities.cha.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20} ] }, intd: { changes: [ {key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, jugg: { changes: [ {key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, blks: { changes: [ {key: "data.abilities.dex.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, flgs: { changes: [ {key: "data.abilities.cha.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20} ] }, inct: { changes: [ {key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] }, mbmt: { changes: [ {key: "data.abilities.con.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20} ] }, rsrc: { changes: [ {key: "data.abilities.int.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20} ] }, wars: { changes: [ {key: "data.abilities.wis.value", value: 1, mode: 2, priority: 20}, {key: "data.abilities.str.value", value: 1, mode: 2, priority: 20} ] } }; /* -------------------------------------------- */ /** * The set of possible sensory perception types which an Actor may have * @enum {string} */ 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" }; /* -------------------------------------------- */ /** * The set of starship skills which can be trained in SW5e * @type {Object} */ SW5E.starshipSkills = { ast: "SW5E.StarshipSkillAst", bst: "SW5E.StarshipSkillBst", dat: "SW5E.StarshipSkillDat", hid: "SW5E.StarshipSkillHid", imp: "SW5E.StarshipSkillImp", int: "SW5E.StarshipSkillInt", man: "SW5E.StarshipSkillMan", men: "SW5E.StarshipSkillMen", pat: "SW5E.StarshipSkillPat", prb: "SW5E.StarshipSkillPrb", ram: "SW5E.StarshipSkillRam", reg: "SW5E.StarshipSkillReg", scn: "SW5E.StarshipSkillScn", swn: "SW5E.StarshipSkillSwn" }; /* -------------------------------------------- */ 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 = { "ammo": "SW5E.WeaponAmmo", "improv": "SW5E.WeaponImprov", "martialVW": "SW5E.WeaponMartialVW", "martialB": "SW5E.WeaponMartialB", "martialLW": "SW5E.WeaponMartialLW", "natural": "SW5E.WeaponNatural", "siege": "SW5E.WeaponSiege", "simpleVW": "SW5E.WeaponSimpleVW", "simpleB": "SW5E.WeaponSimpleB", "simpleLW": "SW5E.WeaponSimpleLW", "primary (starship)": "SW5E.WeaponPrimarySW", "secondary (starship)": "SW5E.WeaponSecondarySW", "tertiary (starship)": "SW5E.WeaponTertiarySW", "quaternary (starship)": "SW5E.WeaponQuaternarySW" }; /* -------------------------------------------- */ /** * 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", con: "SW5E.WeaponPropertiesCon", def: "SW5E.WeaponPropertiesDef", dex: "SW5E.WeaponPropertiesDex", dir: "SW5E.WeaponPropertiesDir", drm: "SW5E.WeaponPropertiesDrm", dgd: "SW5E.WeaponPropertiesDgd", dis: "SW5E.WeaponPropertiesDis", dpt: "SW5E.WeaponPropertiesDpt", dou: "SW5E.WeaponPropertiesDou", exp: "SW5E.WeaponPropertiesExp", fin: "SW5E.WeaponPropertiesFin", fix: "SW5E.WeaponPropertiesFix", foc: "SW5E.WeaponPropertiesFoc", hvy: "SW5E.WeaponPropertiesHvy", hid: "SW5E.WeaponPropertiesHid", hom: "SW5E.WeaponPropertiesHom", ion: "SW5E.WeaponPropertiesIon", ken: "SW5E.WeaponPropertiesKen", lgt: "SW5E.WeaponPropertiesLgt", lum: "SW5E.WeaponPropertiesLum", mlt: "SW5E.WeaponPropertiesMlt", mig: "SW5E.WeaponPropertiesMig", ovr: "SW5E.WeaponPropertiesOvr", pic: "SW5E.WeaponPropertiesPic", pow: "SW5E.WeaponPropertiesPow", rap: "SW5E.WeaponPropertiesRap", rch: "SW5E.WeaponPropertiesRch", rel: "SW5E.WeaponPropertiesRel", ret: "SW5E.WeaponPropertiesRet", sat: "SW5E.WeaponPropertiesSat", shk: "SW5E.WeaponPropertiesShk", sil: "SW5E.WeaponPropertiesSil", spc: "SW5E.WeaponPropertiesSpc", str: "SW5E.WeaponPropertiesStr", thr: "SW5E.WeaponPropertiesThr", two: "SW5E.WeaponPropertiesTwo", ver: "SW5E.WeaponPropertiesVer", vic: "SW5E.WeaponPropertiesVic", zon: "SW5E.WeaponPropertiesZon" }; /* -------------------------------------------- */ /** * Define the set of starship weapon size flags which can exist on a weapon * @type {Object} */ SW5E.weaponSizes = { tiny: "SW5E.SizeTiny", sm: "SW5E.SizeSmall", med: "SW5E.SizeMedium", lg: "SW5E.SizeLarge", huge: "SW5E.SizeHuge", grg: "SW5E.SizeGargantuan" }; // 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" }; // TODO: This is used for spell scrolls, it maps the level to the compendium ID of the item the spell would be bound to // We could use this with, say, holocrons to produce scrolls /* // Power Scroll Compendium UUIDs SW5E.powerScrollIds = { 0: "rQ6sO7HDWzqMhSI3", 1: "9GSfMg0VOA2b4uFN", 2: "XdDp6CKh9qEvPTuS", 3: "hqVKZie7x9w3Kqds", 4: "DM7hzgL836ZyUFB1", 5: "wa1VF8TXHmkrrR35", 6: "tI3rWx4bxefNCexS", 7: "mtyw4NS1s7j2EJaD", 8: "aOrinPg7yuDZEuWr", 9: "O4YbkJkLlnsgUszZ" }; */ /** * Compendium packs used for localized items. * @enum {string} */ SW5E.sourcePacks = { ITEMS: "sw5e.items" }; // 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));