First adaptation pass
This commit is contained in:
+381
-196
@@ -13,34 +13,49 @@
|
|||||||
},
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"armorType": {
|
"armorType": {
|
||||||
"label": "Category"
|
"label": "Armor Type"
|
||||||
},
|
},
|
||||||
"cost": {
|
"cost": {
|
||||||
"label": "Cost"
|
"label": "Cost"
|
||||||
},
|
},
|
||||||
"damageReduction": {
|
"damageReduction": {
|
||||||
"label": "Damage reduction"
|
"label": "Damage Reduction"
|
||||||
},
|
},
|
||||||
"defense": {
|
"defense": {
|
||||||
"label": "Defense"
|
"label": "Armor Class (AC)"
|
||||||
|
},
|
||||||
|
"mrr": {
|
||||||
|
"label": "Maximum Reduction Rating (MRR)"
|
||||||
|
},
|
||||||
|
"passive": {
|
||||||
|
"label": "Armor Passive"
|
||||||
|
},
|
||||||
|
"passiveDescription": {
|
||||||
|
"label": "Passive Description"
|
||||||
|
},
|
||||||
|
"augment": {
|
||||||
|
"label": "Armor Augment"
|
||||||
|
},
|
||||||
|
"augmentDescription": {
|
||||||
|
"label": "Augment Description"
|
||||||
},
|
},
|
||||||
"encLoad": {
|
"encLoad": {
|
||||||
"label": "Load"
|
"label": "Encumbrance Load"
|
||||||
},
|
},
|
||||||
"equipped": {
|
"equipped": {
|
||||||
"label": "Equipped?"
|
"label": "Equipped?"
|
||||||
},
|
},
|
||||||
"hp": {
|
"hp": {
|
||||||
"label": "HP"
|
"label": "Armor HP"
|
||||||
},
|
},
|
||||||
"isHelmet": {
|
"isHelmet": {
|
||||||
"label": "Is Helmet?"
|
"label": "Is Helmet?"
|
||||||
},
|
},
|
||||||
"maximumMovement": {
|
"maximumMovement": {
|
||||||
"label": "Maximum movement"
|
"label": "Movement Penalty"
|
||||||
},
|
},
|
||||||
"money": {
|
"money": {
|
||||||
"label": "Money unit"
|
"label": "Currency"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -421,27 +436,240 @@
|
|||||||
"monster-damage": "Monster damage",
|
"monster-damage": "Monster damage",
|
||||||
"monster-defense": "Monster defense",
|
"monster-defense": "Monster defense",
|
||||||
"weapons": "Weapons",
|
"weapons": "Weapons",
|
||||||
"wis": "WIS"
|
"wis": "WIS",
|
||||||
|
"subAttributes": "Sub-Attributes",
|
||||||
|
"prowess": "Prowess",
|
||||||
|
"vigor": "Vigor",
|
||||||
|
"competence": "Competence",
|
||||||
|
"authority": "Authority",
|
||||||
|
"presence": "Presence",
|
||||||
|
"stamina": "Stamina",
|
||||||
|
"wit": "Wit",
|
||||||
|
"grace": "Grace",
|
||||||
|
"tenacity": "Tenacity",
|
||||||
|
"willpower": "Willpower",
|
||||||
|
"resilience": "Resilience",
|
||||||
|
"cunning": "Cunning",
|
||||||
|
"guile": "Guile",
|
||||||
|
"sovereignty": "Sovereignty",
|
||||||
|
"coreSkill": "Core Skill",
|
||||||
|
"isCoreSkill": "Is Core Skill?",
|
||||||
|
"coreSkillType": "Core Skill Type",
|
||||||
|
"attributeBonusChoice": "Attribute Bonus (+2)",
|
||||||
|
"selectAttribute": "Select Attribute",
|
||||||
|
"modifier": "Modifier",
|
||||||
|
"basicChecks": "Basic Checks",
|
||||||
|
"advancedChecks": "Advanced Checks",
|
||||||
|
"enabled": "Enabled",
|
||||||
|
"disabled": "Disabled",
|
||||||
|
"coreSkillClass": "Core Skill Class",
|
||||||
|
"yourCoreSkill": "Your Core Skill",
|
||||||
|
"availableCoreSkills": "Available Core Skills",
|
||||||
|
"attributeChoices": "Attribute Choices",
|
||||||
|
"customSkills": "Custom Skills",
|
||||||
|
"advancedChecksEnabled": "Advanced Checks Enabled",
|
||||||
|
"chooseSkill": "Choose a Core Skill",
|
||||||
|
"armorType": "Armor Type",
|
||||||
|
"armorClass": "Armor Class (AC)",
|
||||||
|
"mrr": "Maximum Reduction Rating (MRR)",
|
||||||
|
"movementPenalty": "Movement Penalty",
|
||||||
|
"armorHP": "Armor Hit Points",
|
||||||
|
"encumbranceLoad": "Encumbrance Load",
|
||||||
|
"isHelmet": "Is Helmet?",
|
||||||
|
"equipped": "Equipped?",
|
||||||
|
"armorPassive": "Armor Passive",
|
||||||
|
"passiveName": "Passive Name",
|
||||||
|
"passiveDescription": "Passive Description",
|
||||||
|
"armorAugment": "Armor Augment",
|
||||||
|
"augmentName": "Augment Name",
|
||||||
|
"augmentDescription": "Augment Description",
|
||||||
|
"cost": "Cost",
|
||||||
|
"currency": "Currency",
|
||||||
|
"weaponType": "Weapon Type",
|
||||||
|
"weaponGroup": "Weapon Group",
|
||||||
|
"apc": "Action Point Cost (APC)",
|
||||||
|
"damageType": "Damage Type",
|
||||||
|
"piercing": "Piercing (P)",
|
||||||
|
"bludgeoning": "Bludgeoning (B)",
|
||||||
|
"slashing": "Slashing (S)",
|
||||||
|
"isProjectile": "Is Projectile?",
|
||||||
|
"range": "Range",
|
||||||
|
"reloadAPC": "Reload APC",
|
||||||
|
"bonuses": "Bonuses",
|
||||||
|
"groupPassive": "Weapon Group Passive",
|
||||||
|
"groupPassiveName": "Group Passive Name",
|
||||||
|
"weaponPassive": "Weapon Passive",
|
||||||
|
"weaponManeuver": "Weapon Maneuver",
|
||||||
|
"maneuverName": "Maneuver Name",
|
||||||
|
"maneuverDescription": "Maneuver Description",
|
||||||
|
"weaponAugment": "Weapon Augment",
|
||||||
|
"shieldType": "Shield Type",
|
||||||
|
"blockAPC": "Block APC",
|
||||||
|
"shieldRating": "Shield Rating (SR)",
|
||||||
|
"defenseBonus": "Defense Bonus",
|
||||||
|
"blockAugment": "Block Augment",
|
||||||
|
"blockAugmentName": "Block Augment Name",
|
||||||
|
"blockAugmentDescription": "Block Augment Description",
|
||||||
|
"shieldAugment": "Shield Augment",
|
||||||
|
"manaCost": "Mana Cost",
|
||||||
|
"manaUpkeep": "Mana Upkeep",
|
||||||
|
"prismColor": "Prism Color",
|
||||||
|
"colorEffect": "Color Effect",
|
||||||
|
"spellAscension": "Spell Ascension",
|
||||||
|
"canAscend": "Can Ascend?",
|
||||||
|
"ascensionEffect": "Ascension Effect",
|
||||||
|
"components": "Components",
|
||||||
|
"verbal": "Verbal",
|
||||||
|
"somatic": "Somatic",
|
||||||
|
"material": "Material",
|
||||||
|
"catalyst": "Catalyst",
|
||||||
|
"religious": "Religious",
|
||||||
|
"materialComponent": "Material Component",
|
||||||
|
"catalystDetails": "Catalyst Details",
|
||||||
|
"memorized": "Memorized?",
|
||||||
|
"castingTime": "Casting Time",
|
||||||
|
"areaAffected": "Area Affected",
|
||||||
|
"savingThrow": "Saving Throw",
|
||||||
|
"keywords": "Keywords",
|
||||||
|
"miracleType": "Miracle Type",
|
||||||
|
"faithCost": "Faith Cost",
|
||||||
|
"divineFavor": "Divine Favor",
|
||||||
|
"miracleAugment": "Miracle Augment",
|
||||||
|
"prayerTime": "Prayer Time"
|
||||||
|
},
|
||||||
|
"CoreSkill": {
|
||||||
|
"acrobatics": "Acrobatics",
|
||||||
|
"animalHandling": "Animal Handling",
|
||||||
|
"arcana": "Arcana",
|
||||||
|
"athletics": "Athletics",
|
||||||
|
"deception": "Deception",
|
||||||
|
"history": "History",
|
||||||
|
"insight": "Insight",
|
||||||
|
"intimidation": "Intimidation",
|
||||||
|
"investigation": "Investigation",
|
||||||
|
"medicine": "Medicine",
|
||||||
|
"nature": "Nature",
|
||||||
|
"perception": "Perception",
|
||||||
|
"performance": "Performance",
|
||||||
|
"persuasion": "Persuasion",
|
||||||
|
"religion": "Religion",
|
||||||
|
"sleightOfHand": "Sleight of Hand",
|
||||||
|
"stealth": "Stealth",
|
||||||
|
"survival": "Survival"
|
||||||
|
},
|
||||||
|
"SubAttribute": {
|
||||||
|
"prowess": "Prowess",
|
||||||
|
"vigor": "Vigor",
|
||||||
|
"competence": "Competence",
|
||||||
|
"authority": "Authority",
|
||||||
|
"presence": "Presence",
|
||||||
|
"stamina": "Stamina",
|
||||||
|
"wit": "Wit",
|
||||||
|
"grace": "Grace",
|
||||||
|
"tenacity": "Tenacity",
|
||||||
|
"willpower": "Willpower",
|
||||||
|
"resilience": "Resilience",
|
||||||
|
"cunning": "Cunning",
|
||||||
|
"guile": "Guile",
|
||||||
|
"sovereignty": "Sovereignty",
|
||||||
|
"prowessDesc": "Physical power and combat capability (STR+DEX)",
|
||||||
|
"vigorDesc": "Endurance and physical resilience (STR+CON)",
|
||||||
|
"competenceDesc": "Practical application of knowledge (STR+INT)",
|
||||||
|
"authorityDesc": "Command and leadership presence (STR+WIS)",
|
||||||
|
"presenceDesc": "Physical charisma and intimidation (STR+CHA)",
|
||||||
|
"staminaDesc": "Athletic endurance (DEX+CON)",
|
||||||
|
"initiativeDesc": "Reaction speed and alertness (DEX+INT)",
|
||||||
|
"witDesc": "Mental agility and cleverness (DEX+WIS)",
|
||||||
|
"graceDesc": "Social finesse and charm (DEX+CHA)",
|
||||||
|
"tenacityDesc": "Mental and physical toughness (CON+INT)",
|
||||||
|
"willpowerDesc": "Inner strength and determination (CON+WIS)",
|
||||||
|
"resilienceDesc": "Ability to endure hardship (CON+CHA)",
|
||||||
|
"cunningDesc": "Strategic thinking (INT+WIS)",
|
||||||
|
"guileDesc": "Deceptive intellect (INT+CHA)",
|
||||||
|
"sovereigntyDesc": "Diplomatic wisdom and influence (WIS+CHA)"
|
||||||
|
},
|
||||||
|
"ArmorType": {
|
||||||
|
"light": "Light Armor",
|
||||||
|
"medium": "Medium Armor",
|
||||||
|
"heavy": "Heavy Armor"
|
||||||
|
},
|
||||||
|
"WeaponGroup": {
|
||||||
|
"longsword": "Longsword",
|
||||||
|
"warhammer": "Warhammer",
|
||||||
|
"battleaxe": "Battleaxe",
|
||||||
|
"dagger": "Dagger",
|
||||||
|
"crossbow": "Crossbow",
|
||||||
|
"longbow": "Longbow"
|
||||||
|
},
|
||||||
|
"WeaponGroupPassive": {
|
||||||
|
"longsword": "Turning Edge: +1 AC when wielding longsword",
|
||||||
|
"warhammer": "Puncturing Blows: Ignore 2 points of armor",
|
||||||
|
"battleaxe": "Shield Eater: Break shields on critical hits",
|
||||||
|
"dagger": "Balancing Stance: Can use DEX for attack/damage",
|
||||||
|
"crossbow": "Boltlock: Advantage on first shot if not moved",
|
||||||
|
"longbow": "Volley Fire: Can shoot twice with disadvantage"
|
||||||
|
},
|
||||||
|
"ShieldType": {
|
||||||
|
"buckler": "Buckler (1d4, 1 APC)",
|
||||||
|
"light": "Light Shield (1d8, 2 APC)",
|
||||||
|
"heavy": "Heavy Shield (1d12, 3 APC)",
|
||||||
|
"tower": "Tower Shield (3d6, 4 APC)"
|
||||||
|
},
|
||||||
|
"SpellColor": {
|
||||||
|
"indigo": "Indigo",
|
||||||
|
"blue": "Blue",
|
||||||
|
"green": "Green",
|
||||||
|
"yellow": "Yellow",
|
||||||
|
"orange": "Orange",
|
||||||
|
"red": "Red",
|
||||||
|
"violet": "Violet"
|
||||||
|
},
|
||||||
|
"Hint": {
|
||||||
|
"isCoreSkill": "Check this if this is your character's chosen Core Skill",
|
||||||
|
"attributeBonus": "Choose which attribute receives the +2 bonus",
|
||||||
|
"advancedChecks": "Only Core Skills allow advanced checks",
|
||||||
|
"spellAscension": "Spell Ascension increases mana cost and APC by +1 per level",
|
||||||
|
"groupPassive": "Passive ability from weapon group (auto-filled)"
|
||||||
|
},
|
||||||
|
"Tooltip": {
|
||||||
|
"coreSkill": "Your character's chosen Core Skill provides +5 to basic checks and access to advanced checks",
|
||||||
|
"coreSkills": "List of all 18 available Core Skills in Prism RPG",
|
||||||
|
"advancedChecks": "Advanced checks are only available for your Core Skill",
|
||||||
|
"addEquipment": "New equipment",
|
||||||
|
"addSpell": "New spells",
|
||||||
|
"skill": "Skills list"
|
||||||
|
},
|
||||||
|
"Message": {
|
||||||
|
"selectCoreSkill": "You must select a Core Skill for your character. Each character chooses one Core Skill at creation."
|
||||||
},
|
},
|
||||||
"Miracle": {
|
"Miracle": {
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"miracleType": {
|
"miracleType": {
|
||||||
"label": "Miracle Type"
|
"label": "Miracle Type"
|
||||||
},
|
},
|
||||||
"attackRoll": {
|
"apc": {
|
||||||
"label": "Attack roll"
|
"label": "APC (Action Point Cost)"
|
||||||
},
|
},
|
||||||
"powerRoll": {
|
"faithCost": {
|
||||||
"label": "Power roll"
|
"label": "Faith Cost"
|
||||||
|
},
|
||||||
|
"divineFavor": {
|
||||||
|
"label": "Divine Favor"
|
||||||
|
},
|
||||||
|
"augment": {
|
||||||
|
"label": "Miracle Augment"
|
||||||
|
},
|
||||||
|
"augmentDescription": {
|
||||||
|
"label": "Augment Description"
|
||||||
},
|
},
|
||||||
"materialComponent": {
|
"materialComponent": {
|
||||||
"label": "Material component"
|
"label": "Material Component"
|
||||||
},
|
},
|
||||||
"catalyst": {
|
"catalyst": {
|
||||||
"label": "Catalyst"
|
"label": "Catalyst"
|
||||||
},
|
},
|
||||||
"areaAffected": {
|
"areaAffected": {
|
||||||
"label": "Area affected"
|
"label": "Area Affected"
|
||||||
},
|
},
|
||||||
"components": {
|
"components": {
|
||||||
"catalyst": {
|
"catalyst": {
|
||||||
@@ -473,10 +701,10 @@
|
|||||||
"label": "Range"
|
"label": "Range"
|
||||||
},
|
},
|
||||||
"prayerTime": {
|
"prayerTime": {
|
||||||
"label": "Prayer time"
|
"label": "Prayer Time"
|
||||||
},
|
},
|
||||||
"savingThrow": {
|
"savingThrow": {
|
||||||
"label": "Saving throw"
|
"label": "Saving Throw"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -530,71 +758,48 @@
|
|||||||
"fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie."
|
"fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie."
|
||||||
},
|
},
|
||||||
"Shield": {
|
"Shield": {
|
||||||
|
"Type": {
|
||||||
|
"buckler": "Buckler",
|
||||||
|
"light": "Light Shield",
|
||||||
|
"heavy": "Heavy Shield",
|
||||||
|
"tower": "Tower Shield"
|
||||||
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"autodestruction": {
|
"shieldType": {
|
||||||
"bashing": {
|
"label": "Shield Type"
|
||||||
"label": "Bashing"
|
|
||||||
},
|
},
|
||||||
"piercing": {
|
"apc": {
|
||||||
"label": "Piercing"
|
"label": "Block APC"
|
||||||
},
|
},
|
||||||
"slashing": {
|
"sr": {
|
||||||
"label": "Slashing"
|
"label": "Shield Rating (SR)"
|
||||||
}
|
},
|
||||||
|
"blockAugment": {
|
||||||
|
"label": "Block Augment"
|
||||||
|
},
|
||||||
|
"blockAugmentDescription": {
|
||||||
|
"label": "Block Augment Description"
|
||||||
|
},
|
||||||
|
"augment": {
|
||||||
|
"label": "Shield Augment"
|
||||||
|
},
|
||||||
|
"augmentDescription": {
|
||||||
|
"label": "Augment Description"
|
||||||
},
|
},
|
||||||
"cost": {
|
"cost": {
|
||||||
"label": "Cost"
|
"label": "Cost"
|
||||||
},
|
},
|
||||||
"crouching": {
|
|
||||||
"max": {
|
|
||||||
"label": "Max"
|
|
||||||
},
|
|
||||||
"min": {
|
|
||||||
"label": "Min"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"damagereduction": {
|
|
||||||
"label": "Damage reduction"
|
|
||||||
},
|
|
||||||
"defense": {
|
"defense": {
|
||||||
"label": "Defense"
|
"label": "Defense Bonus"
|
||||||
},
|
|
||||||
"destruction": {
|
|
||||||
"bashing": {
|
|
||||||
"label": "Bashing"
|
|
||||||
},
|
|
||||||
"piercing": {
|
|
||||||
"label": "Piercing"
|
|
||||||
},
|
|
||||||
"slashing": {
|
|
||||||
"label": "Slashing"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"encLoad": {
|
"encLoad": {
|
||||||
"label": "Load"
|
"label": "Encumbrance Load"
|
||||||
},
|
},
|
||||||
"equipped": {
|
"equipped": {
|
||||||
"label": "Equipped"
|
"label": "Equipped"
|
||||||
},
|
},
|
||||||
"hascover": {
|
|
||||||
"label": "Provides cover"
|
|
||||||
},
|
|
||||||
"hp": {
|
|
||||||
"label": "HP"
|
|
||||||
},
|
|
||||||
"money": {
|
"money": {
|
||||||
"label": "Money unit"
|
"label": "Currency"
|
||||||
},
|
|
||||||
"movementreduction": {
|
|
||||||
"label": "Movement reduction"
|
|
||||||
},
|
|
||||||
"standing": {
|
|
||||||
"max": {
|
|
||||||
"label": "Max"
|
|
||||||
},
|
|
||||||
"min": {
|
|
||||||
"label": "Min"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -607,70 +812,72 @@
|
|||||||
"weapon": "Weapon"
|
"weapon": "Weapon"
|
||||||
},
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"base": {
|
"coreSkill": {
|
||||||
"label": "Base"
|
"label": "Core Skill Type"
|
||||||
},
|
},
|
||||||
"bonus": {
|
"isCoreSkill": {
|
||||||
"label": "Bonus"
|
"label": "Is Character's Core Skill?"
|
||||||
},
|
},
|
||||||
"category": {
|
"attributeBonus": {
|
||||||
"label": "Category"
|
"label": "Attribute Bonus (+2)"
|
||||||
},
|
},
|
||||||
"cost": {
|
"modifier": {
|
||||||
"label": "Cost"
|
"label": "Skill Modifier"
|
||||||
},
|
},
|
||||||
"classesCost": {
|
"canAdvancedCheck": {
|
||||||
"fighter": {
|
"label": "Can Perform Advanced Checks"
|
||||||
"label": "Fighter Cost"
|
|
||||||
},
|
},
|
||||||
"rogue": {
|
"coreSkillClass": {
|
||||||
"label": "Rogue Cost"
|
"label": "Core Skill Class"
|
||||||
},
|
},
|
||||||
"ranger": {
|
"notes": {
|
||||||
"label": "Ranger Cost"
|
"label": "Notes"
|
||||||
},
|
|
||||||
"magicuser": {
|
|
||||||
"label": "Magic User Cost"
|
|
||||||
},
|
|
||||||
"cleric": {
|
|
||||||
"label": "Cleric Cost"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"label": "Description"
|
"label": "Description"
|
||||||
},
|
|
||||||
"weaponBonus": {
|
|
||||||
"attack": {
|
|
||||||
"label": "Attack Bonus"
|
|
||||||
},
|
|
||||||
"damage": {
|
|
||||||
"label": "Damage Bonus"
|
|
||||||
},
|
|
||||||
"defense": {
|
|
||||||
"label": "Defense Bonus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weaponClass": {
|
|
||||||
"label": "Class"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Spell": {
|
"Spell": {
|
||||||
|
"Color": {
|
||||||
|
"indigo": "Indigo",
|
||||||
|
"blue": "Blue",
|
||||||
|
"green": "Green",
|
||||||
|
"yellow": "Yellow",
|
||||||
|
"orange": "Orange",
|
||||||
|
"red": "Red",
|
||||||
|
"violet": "Violet"
|
||||||
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"criticalType": {
|
"manaCost": {
|
||||||
"label": "Crit. Type"
|
"label": "Mana Cost"
|
||||||
},
|
},
|
||||||
"attackRoll": {
|
"manaUpkeep": {
|
||||||
"label": "Attack roll"
|
"label": "Mana Upkeep"
|
||||||
},
|
},
|
||||||
"powerRoll": {
|
"apc": {
|
||||||
"label": "Power roll"
|
"label": "APC (Action Point Cost)"
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"label": "Prism Color"
|
||||||
|
},
|
||||||
|
"colorEffect": {
|
||||||
|
"label": "Color Effect"
|
||||||
|
},
|
||||||
|
"canAscend": {
|
||||||
|
"label": "Can Use Spell Ascension?"
|
||||||
|
},
|
||||||
|
"ascensionEffect": {
|
||||||
|
"label": "Ascension Effect"
|
||||||
|
},
|
||||||
|
"keywords": {
|
||||||
|
"label": "Keywords"
|
||||||
},
|
},
|
||||||
"areaAffected": {
|
"areaAffected": {
|
||||||
"label": "Area affected"
|
"label": "Area Affected"
|
||||||
},
|
},
|
||||||
"castingTime": {
|
"castingTime": {
|
||||||
"label": "Casting time"
|
"label": "Casting Time"
|
||||||
},
|
},
|
||||||
"components": {
|
"components": {
|
||||||
"material": {
|
"material": {
|
||||||
@@ -698,20 +905,17 @@
|
|||||||
"duration": {
|
"duration": {
|
||||||
"label": "Duration"
|
"label": "Duration"
|
||||||
},
|
},
|
||||||
"extraAetherPoints": {
|
|
||||||
"label": "Extra aether points"
|
|
||||||
},
|
|
||||||
"level": {
|
"level": {
|
||||||
"label": "Level"
|
"label": "Level"
|
||||||
},
|
},
|
||||||
"savingThrow": {
|
"savingThrow": {
|
||||||
"label": "Saving throw"
|
"label": "Saving Throw"
|
||||||
},
|
},
|
||||||
"spellRange": {
|
"spellRange": {
|
||||||
"label": "Range"
|
"label": "Range"
|
||||||
},
|
},
|
||||||
"materialComponent": {
|
"materialComponent": {
|
||||||
"label": "Material component"
|
"label": "Material Component"
|
||||||
},
|
},
|
||||||
"catalyst": {
|
"catalyst": {
|
||||||
"label": "Catalyst"
|
"label": "Catalyst"
|
||||||
@@ -719,11 +923,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ToggleSheet": "Toggle mode",
|
"ToggleSheet": "Toggle mode",
|
||||||
"Tooltip": {
|
|
||||||
"addEquipment": "New equipment",
|
|
||||||
"addSpell": "New spells",
|
|
||||||
"skill": "Skills list"
|
|
||||||
},
|
|
||||||
"Vulnerability": {
|
"Vulnerability": {
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"cost": {
|
"cost": {
|
||||||
@@ -739,27 +938,41 @@
|
|||||||
},
|
},
|
||||||
"Warning": {},
|
"Warning": {},
|
||||||
"Weapon": {
|
"Weapon": {
|
||||||
|
"Type": {
|
||||||
|
"light": "Light Weapon",
|
||||||
|
"oneHanded": "One-Handed Weapon",
|
||||||
|
"heavy": "Heavy Weapon",
|
||||||
|
"projectile": "Projectile Weapon"
|
||||||
|
},
|
||||||
|
"Group": {
|
||||||
|
"longsword": "Longsword",
|
||||||
|
"warhammer": "Warhammer",
|
||||||
|
"battleaxe": "Battleaxe",
|
||||||
|
"dagger": "Dagger",
|
||||||
|
"crossbow": "Crossbow",
|
||||||
|
"longbow": "Longbow"
|
||||||
|
},
|
||||||
|
"DamageType": {
|
||||||
|
"piercing": "Piercing",
|
||||||
|
"bludgeoning": "Bludgeoning",
|
||||||
|
"slashing": "Slashing"
|
||||||
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"isAgile": {
|
"weaponType": {
|
||||||
"label": "Is Agile?"
|
"label": "Weapon Type"
|
||||||
},
|
},
|
||||||
"combatProgressionDice": {
|
"weaponGroup": {
|
||||||
"label": "Combat progression dice"
|
"label": "Weapon Group"
|
||||||
},
|
},
|
||||||
"cost": {
|
"apc": {
|
||||||
"label": "Cost"
|
"label": "APC (Action Point Cost)"
|
||||||
},
|
},
|
||||||
"damage": {
|
"damage": {
|
||||||
"damageM": {
|
"label": "Damage"
|
||||||
"label": "Medium"
|
|
||||||
},
|
|
||||||
"damageS": {
|
|
||||||
"label": "Small"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"damageType": {
|
"damageType": {
|
||||||
"typeB": {
|
"typeB": {
|
||||||
"label": "Bashing"
|
"label": "Bludgeoning"
|
||||||
},
|
},
|
||||||
"typeP": {
|
"typeP": {
|
||||||
"label": "Piercing"
|
"label": "Piercing"
|
||||||
@@ -768,40 +981,53 @@
|
|||||||
"label": "Slashing"
|
"label": "Slashing"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defense": {
|
"groupPassive": {
|
||||||
"label": "Defense"
|
"label": "Group Passive"
|
||||||
},
|
},
|
||||||
"defenseMax": {
|
"passive": {
|
||||||
"label": "Defense max"
|
"label": "Weapon Passive"
|
||||||
|
},
|
||||||
|
"passiveDescription": {
|
||||||
|
"label": "Passive Description"
|
||||||
|
},
|
||||||
|
"maneuver": {
|
||||||
|
"label": "Weapon Maneuver"
|
||||||
|
},
|
||||||
|
"maneuverDescription": {
|
||||||
|
"label": "Maneuver Description"
|
||||||
|
},
|
||||||
|
"augment": {
|
||||||
|
"label": "Weapon Augment"
|
||||||
|
},
|
||||||
|
"augmentDescription": {
|
||||||
|
"label": "Augment Description"
|
||||||
|
},
|
||||||
|
"isProjectile": {
|
||||||
|
"label": "Is Projectile?"
|
||||||
|
},
|
||||||
|
"range": {
|
||||||
|
"label": "Range"
|
||||||
|
},
|
||||||
|
"reloadAPC": {
|
||||||
|
"label": "Reload APC"
|
||||||
|
},
|
||||||
|
"cost": {
|
||||||
|
"label": "Cost"
|
||||||
},
|
},
|
||||||
"encLoad": {
|
"encLoad": {
|
||||||
"label": "Load"
|
"label": "Encumbrance Load"
|
||||||
},
|
},
|
||||||
"equipped": {
|
"equipped": {
|
||||||
"label": "Equipped"
|
"label": "Equipped"
|
||||||
},
|
},
|
||||||
"hands": {
|
"hands": {
|
||||||
"label": "Hands"
|
"label": "Hands Required"
|
||||||
},
|
},
|
||||||
"money": {
|
"money": {
|
||||||
"label": "Money unit"
|
"label": "Currency"
|
||||||
},
|
|
||||||
"secondsToAttack": {
|
|
||||||
"label": "Seconds to attack"
|
|
||||||
},
|
|
||||||
"speed": {
|
|
||||||
"carefulAim": {
|
|
||||||
"label": "Careful aim"
|
|
||||||
},
|
|
||||||
"focusedAim": {
|
|
||||||
"label": "Focused aim"
|
|
||||||
},
|
|
||||||
"simpleAim": {
|
|
||||||
"label": "Simple aim"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"applyStrengthDamageBonus": {
|
"applyStrengthDamageBonus": {
|
||||||
"label": "Apply strength damage bonus"
|
"label": "Apply Strength Damage Bonus"
|
||||||
},
|
},
|
||||||
"bonuses": {
|
"bonuses": {
|
||||||
"attackBonus": {
|
"attackBonus": {
|
||||||
@@ -813,48 +1039,7 @@
|
|||||||
"defenseBonus": {
|
"defenseBonus": {
|
||||||
"label": "Defense Bonus"
|
"label": "Defense Bonus"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"weaponRange": {
|
|
||||||
"extreme": {
|
|
||||||
"label": "Extreme"
|
|
||||||
},
|
|
||||||
"long": {
|
|
||||||
"label": "Long"
|
|
||||||
},
|
|
||||||
"medium": {
|
|
||||||
"label": "Medium"
|
|
||||||
},
|
|
||||||
"outOfSkill": {
|
|
||||||
"label": "Out of skill"
|
|
||||||
},
|
|
||||||
"pointBlank": {
|
|
||||||
"label": "Point blank"
|
|
||||||
},
|
|
||||||
"short": {
|
|
||||||
"label": "Short"
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"weaponType": {
|
|
||||||
"label": "Type"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"WeaponClass": {
|
|
||||||
"axe": "Axe",
|
|
||||||
"bow": "Bow",
|
|
||||||
"flail": "Flail",
|
|
||||||
"hammer": "Hammer",
|
|
||||||
"longblade": "Long blade",
|
|
||||||
"mace": "Mace",
|
|
||||||
"mediumblade": "Medium blade",
|
|
||||||
"polearm": "Polearm",
|
|
||||||
"shortblade": "Short blade",
|
|
||||||
"sling": "Sling",
|
|
||||||
"thrown": "Thrown",
|
|
||||||
"unarmed": "Unarmed"
|
|
||||||
},
|
|
||||||
"WeaponType": {
|
|
||||||
"melee": "Melee",
|
|
||||||
"ranged": "Ranged"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+41
-1
@@ -1,5 +1,45 @@
|
|||||||
export const TYPE = Object.freeze({
|
export const TYPE = Object.freeze({
|
||||||
light: { id: "light", label: "PRISMRPG.Armor.Category.light" },
|
light: { id: "light", label: "PRISMRPG.Armor.Category.light" },
|
||||||
medium: { id: "medium", label: "PRISMRPG.Armor.Category.medium" },
|
medium: { id: "medium", label: "PRISMRPG.Armor.Category.medium" },
|
||||||
heavy: { id: "medium", label: "PRISMRPG.Armor.Category.heavy" }
|
heavy: { id: "heavy", label: "PRISMRPG.Armor.Category.heavy" }
|
||||||
|
})
|
||||||
|
|
||||||
|
// Base AC values for armor proficiency levels
|
||||||
|
export const BASE_AC = Object.freeze({
|
||||||
|
light: 12, // +Prowess, Competence, or Grace
|
||||||
|
medium: 14, // +Authority, Cunning, or Resilience
|
||||||
|
heavy: 16 // +Presence, Tenacity, or Willpower
|
||||||
|
})
|
||||||
|
|
||||||
|
// AC bonus sub-attributes for each armor type
|
||||||
|
export const AC_BONUS_ATTRIBUTES = Object.freeze({
|
||||||
|
light: ["prowess", "competence", "grace"],
|
||||||
|
medium: ["authority", "cunning", "resilience"],
|
||||||
|
heavy: ["presence", "tenacity", "willpower"]
|
||||||
|
})
|
||||||
|
|
||||||
|
// Withstand action APC cost for each armor type
|
||||||
|
export const WITHSTAND_APC = Object.freeze({
|
||||||
|
light: 1,
|
||||||
|
medium: 2,
|
||||||
|
heavy: 3
|
||||||
|
})
|
||||||
|
|
||||||
|
// Armor set composition requirements
|
||||||
|
export const SET_REQUIREMENTS = Object.freeze({
|
||||||
|
light: {
|
||||||
|
light: 2,
|
||||||
|
medium: 0,
|
||||||
|
heavy: 0
|
||||||
|
},
|
||||||
|
medium: {
|
||||||
|
light: 3,
|
||||||
|
medium: 1,
|
||||||
|
heavy: 0
|
||||||
|
},
|
||||||
|
heavy: {
|
||||||
|
light: 3,
|
||||||
|
medium: 2,
|
||||||
|
heavy: 1
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+101
-15
@@ -1,15 +1,7 @@
|
|||||||
export const CHARACTERISTICS = Object.freeze({
|
export const CHARACTERISTICS = Object.freeze({
|
||||||
str: {
|
str: {
|
||||||
id: "str",
|
id: "str",
|
||||||
label: "PRISMRPG.Label.str"
|
label: "PRISMRPG.Character.str.label"
|
||||||
},
|
|
||||||
int: {
|
|
||||||
id: "int",
|
|
||||||
label: "PRISMRPG.Character.int.label"
|
|
||||||
},
|
|
||||||
wis: {
|
|
||||||
id: "wis",
|
|
||||||
label: "PRISMRPG.Character.wis.label"
|
|
||||||
},
|
},
|
||||||
dex: {
|
dex: {
|
||||||
id: "dex",
|
id: "dex",
|
||||||
@@ -19,18 +11,112 @@ export const CHARACTERISTICS = Object.freeze({
|
|||||||
id: "con",
|
id: "con",
|
||||||
label: "PRISMRPG.Character.con.label"
|
label: "PRISMRPG.Character.con.label"
|
||||||
},
|
},
|
||||||
|
int: {
|
||||||
|
id: "int",
|
||||||
|
label: "PRISMRPG.Character.int.label"
|
||||||
|
},
|
||||||
|
wis: {
|
||||||
|
id: "wis",
|
||||||
|
label: "PRISMRPG.Character.wis.label"
|
||||||
|
},
|
||||||
cha: {
|
cha: {
|
||||||
id: "cha",
|
id: "cha",
|
||||||
label: "PRISMRPG.Character.cha.label"
|
label: "PRISMRPG.Character.cha.label"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Sub-Attributes derived from combinations of two main attributes
|
||||||
|
export const SUB_ATTRIBUTES = Object.freeze({
|
||||||
|
prowess: {
|
||||||
|
id: "prowess",
|
||||||
|
label: "PRISMRPG.Character.prowess.label",
|
||||||
|
parents: ["str", "dex"],
|
||||||
|
description: "PRISMRPG.Character.prowess.description"
|
||||||
},
|
},
|
||||||
luc: {
|
vigor: {
|
||||||
id: "luc",
|
id: "vigor",
|
||||||
label: "PRISMRPG.Character.luc.label"
|
label: "PRISMRPG.Character.vigor.label",
|
||||||
|
parents: ["str", "con"],
|
||||||
|
description: "PRISMRPG.Character.vigor.description"
|
||||||
},
|
},
|
||||||
app: {
|
competence: {
|
||||||
id: "app",
|
id: "competence",
|
||||||
label: "PRISMRPG.Character.app.label"
|
label: "PRISMRPG.Character.competence.label",
|
||||||
|
parents: ["str", "int"],
|
||||||
|
description: "PRISMRPG.Character.competence.description"
|
||||||
},
|
},
|
||||||
|
authority: {
|
||||||
|
id: "authority",
|
||||||
|
label: "PRISMRPG.Character.authority.label",
|
||||||
|
parents: ["str", "wis"],
|
||||||
|
description: "PRISMRPG.Character.authority.description"
|
||||||
|
},
|
||||||
|
presence: {
|
||||||
|
id: "presence",
|
||||||
|
label: "PRISMRPG.Character.presence.label",
|
||||||
|
parents: ["str", "cha"],
|
||||||
|
description: "PRISMRPG.Character.presence.description"
|
||||||
|
},
|
||||||
|
stamina: {
|
||||||
|
id: "stamina",
|
||||||
|
label: "PRISMRPG.Character.stamina.label",
|
||||||
|
parents: ["dex", "con"],
|
||||||
|
description: "PRISMRPG.Character.stamina.description"
|
||||||
|
},
|
||||||
|
initiative: {
|
||||||
|
id: "initiative",
|
||||||
|
label: "PRISMRPG.Character.initiative.label",
|
||||||
|
parents: ["dex", "int"],
|
||||||
|
description: "PRISMRPG.Character.initiative.description"
|
||||||
|
},
|
||||||
|
wit: {
|
||||||
|
id: "wit",
|
||||||
|
label: "PRISMRPG.Character.wit.label",
|
||||||
|
parents: ["dex", "wis"],
|
||||||
|
description: "PRISMRPG.Character.wit.description"
|
||||||
|
},
|
||||||
|
grace: {
|
||||||
|
id: "grace",
|
||||||
|
label: "PRISMRPG.Character.grace.label",
|
||||||
|
parents: ["dex", "cha"],
|
||||||
|
description: "PRISMRPG.Character.grace.description"
|
||||||
|
},
|
||||||
|
tenacity: {
|
||||||
|
id: "tenacity",
|
||||||
|
label: "PRISMRPG.Character.tenacity.label",
|
||||||
|
parents: ["con", "int"],
|
||||||
|
description: "PRISMRPG.Character.tenacity.description"
|
||||||
|
},
|
||||||
|
willpower: {
|
||||||
|
id: "willpower",
|
||||||
|
label: "PRISMRPG.Character.willpower.label",
|
||||||
|
parents: ["con", "wis"],
|
||||||
|
description: "PRISMRPG.Character.willpower.description"
|
||||||
|
},
|
||||||
|
resilience: {
|
||||||
|
id: "resilience",
|
||||||
|
label: "PRISMRPG.Character.resilience.label",
|
||||||
|
parents: ["con", "cha"],
|
||||||
|
description: "PRISMRPG.Character.resilience.description"
|
||||||
|
},
|
||||||
|
cunning: {
|
||||||
|
id: "cunning",
|
||||||
|
label: "PRISMRPG.Character.cunning.label",
|
||||||
|
parents: ["int", "wis"],
|
||||||
|
description: "PRISMRPG.Character.cunning.description"
|
||||||
|
},
|
||||||
|
guile: {
|
||||||
|
id: "guile",
|
||||||
|
label: "PRISMRPG.Character.guile.label",
|
||||||
|
parents: ["int", "cha"],
|
||||||
|
description: "PRISMRPG.Character.guile.description"
|
||||||
|
},
|
||||||
|
sovereignty: {
|
||||||
|
id: "sovereignty",
|
||||||
|
label: "PRISMRPG.Character.sovereignty.label",
|
||||||
|
parents: ["wis", "cha"],
|
||||||
|
description: "PRISMRPG.Character.sovereignty.description"
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export const CHALLENGES = Object.freeze({
|
export const CHALLENGES = Object.freeze({
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
* Shield types based on Prism RPG rules
|
||||||
|
* Shields prevent damage equal to their Shield Rating (SR)
|
||||||
|
* Each shield has a Block APC and a Block Augment passive ability
|
||||||
|
*/
|
||||||
|
export const TYPE = Object.freeze({
|
||||||
|
buckler: {
|
||||||
|
id: "buckler",
|
||||||
|
label: "PRISMRPG.Shield.Type.buckler",
|
||||||
|
apc: 1,
|
||||||
|
sr: "1d4",
|
||||||
|
blockAugment: "PRISMRPG.Shield.BlockAugment.buckler",
|
||||||
|
blockAugmentDescription: "PRISMRPG.Shield.BlockAugmentDescription.buckler"
|
||||||
|
},
|
||||||
|
light: {
|
||||||
|
id: "light",
|
||||||
|
label: "PRISMRPG.Shield.Type.light",
|
||||||
|
apc: 2,
|
||||||
|
sr: "1d8",
|
||||||
|
blockAugment: "PRISMRPG.Shield.BlockAugment.light",
|
||||||
|
blockAugmentDescription: "PRISMRPG.Shield.BlockAugmentDescription.light"
|
||||||
|
},
|
||||||
|
heavy: {
|
||||||
|
id: "heavy",
|
||||||
|
label: "PRISMRPG.Shield.Type.heavy",
|
||||||
|
apc: 3,
|
||||||
|
sr: "1d12",
|
||||||
|
blockAugment: "PRISMRPG.Shield.BlockAugment.heavy",
|
||||||
|
blockAugmentDescription: "PRISMRPG.Shield.BlockAugmentDescription.heavy"
|
||||||
|
},
|
||||||
|
tower: {
|
||||||
|
id: "tower",
|
||||||
|
label: "PRISMRPG.Shield.Type.tower",
|
||||||
|
apc: 4,
|
||||||
|
sr: "3d6",
|
||||||
|
blockAugment: "PRISMRPG.Shield.BlockAugment.tower",
|
||||||
|
blockAugmentDescription: "PRISMRPG.Shield.BlockAugmentDescription.tower"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Block augment descriptions for reference
|
||||||
|
* These are activated when using the Block action with the shield
|
||||||
|
*/
|
||||||
|
export const BLOCK_AUGMENTS = Object.freeze({
|
||||||
|
buckler: "If the character should successfully block damage with this shield, the character reduces the cost of the next Parry action by an amount equal to their Prowess.",
|
||||||
|
light: "If the character would successfully block damage with this shield, the character may move an amount equal to their movement rating.",
|
||||||
|
heavy: "If the character would successfully block damage with this shield, they reduce the APC of the next attack they make by an amount equal to their Vigor or Prowess.",
|
||||||
|
tower: "If the character would successfully block damage with this shield, for 1 round they are considered cover for themselves and allies that are adjacent to them."
|
||||||
|
});
|
||||||
@@ -1,3 +1,115 @@
|
|||||||
|
/**
|
||||||
|
* Core Skills in Prism RPG
|
||||||
|
* Characters choose 1 Core Skill which gives:
|
||||||
|
* - +5 bonus to basic skill checks
|
||||||
|
* - Access to advanced skill checks
|
||||||
|
* - Access to a Core Skill Class (based on archetype)
|
||||||
|
* - +2 to one of 3 associated attributes
|
||||||
|
*/
|
||||||
|
export const CORE_SKILLS = Object.freeze({
|
||||||
|
acrobatics: {
|
||||||
|
id: "acrobatics",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.acrobatics",
|
||||||
|
attributeChoices: ["dex", "wis", "con"]
|
||||||
|
},
|
||||||
|
animalHandling: {
|
||||||
|
id: "animalHandling",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.animalHandling",
|
||||||
|
attributeChoices: ["str", "con", "dex"]
|
||||||
|
},
|
||||||
|
arcana: {
|
||||||
|
id: "arcana",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.arcana",
|
||||||
|
attributeChoices: ["str", "int", "wis"]
|
||||||
|
},
|
||||||
|
athletics: {
|
||||||
|
id: "athletics",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.athletics",
|
||||||
|
attributeChoices: ["str", "dex", "con"]
|
||||||
|
},
|
||||||
|
deception: {
|
||||||
|
id: "deception",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.deception",
|
||||||
|
attributeChoices: ["int", "wis", "cha"]
|
||||||
|
},
|
||||||
|
history: {
|
||||||
|
id: "history",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.history",
|
||||||
|
attributeChoices: ["str", "wis", "con"]
|
||||||
|
},
|
||||||
|
insight: {
|
||||||
|
id: "insight",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.insight",
|
||||||
|
attributeChoices: ["int", "cha", "wis"]
|
||||||
|
},
|
||||||
|
intimidate: {
|
||||||
|
id: "intimidate",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.intimidate",
|
||||||
|
attributeChoices: ["str", "cha", "wis"]
|
||||||
|
},
|
||||||
|
investigation: {
|
||||||
|
id: "investigation",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.investigation",
|
||||||
|
attributeChoices: ["int", "wis", "con"]
|
||||||
|
},
|
||||||
|
medicine: {
|
||||||
|
id: "medicine",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.medicine",
|
||||||
|
attributeChoices: ["con", "wis", "int"]
|
||||||
|
},
|
||||||
|
nature: {
|
||||||
|
id: "nature",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.nature",
|
||||||
|
attributeChoices: ["str", "wis", "int"]
|
||||||
|
},
|
||||||
|
perception: {
|
||||||
|
id: "perception",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.perception",
|
||||||
|
attributeChoices: ["dex", "wis", "cha"]
|
||||||
|
},
|
||||||
|
performance: {
|
||||||
|
id: "performance",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.performance",
|
||||||
|
attributeChoices: ["str", "cha", "wis"]
|
||||||
|
},
|
||||||
|
persuasion: {
|
||||||
|
id: "persuasion",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.persuasion",
|
||||||
|
attributeChoices: ["cha", "dex", "int"]
|
||||||
|
},
|
||||||
|
religion: {
|
||||||
|
id: "religion",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.religion",
|
||||||
|
attributeChoices: ["str", "wis", "cha"]
|
||||||
|
},
|
||||||
|
sleightOfHand: {
|
||||||
|
id: "sleightOfHand",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.sleightOfHand",
|
||||||
|
attributeChoices: ["dex", "wis", "int"]
|
||||||
|
},
|
||||||
|
stealth: {
|
||||||
|
id: "stealth",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.stealth",
|
||||||
|
attributeChoices: ["int", "dex", "cha"]
|
||||||
|
},
|
||||||
|
survival: {
|
||||||
|
id: "survival",
|
||||||
|
label: "PRISMRPG.Skill.CoreSkill.survival",
|
||||||
|
attributeChoices: ["int", "con", "cha"]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core Skill bonus values
|
||||||
|
*/
|
||||||
|
export const CORE_SKILL_BONUS = Object.freeze({
|
||||||
|
basic: 5, // +5 to basic skill checks
|
||||||
|
attributeBonus: 2 // +2 to chosen attribute
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy skill categories (may be deprecated)
|
||||||
|
*/
|
||||||
export const CATEGORY = Object.freeze({
|
export const CATEGORY = Object.freeze({
|
||||||
layperson: {
|
layperson: {
|
||||||
id: "layperson",
|
id: "layperson",
|
||||||
|
|||||||
@@ -1,3 +1,48 @@
|
|||||||
|
/**
|
||||||
|
* Spell colors from the Prism
|
||||||
|
* Each color gives a different effect to spells
|
||||||
|
*/
|
||||||
|
export const COLORS = Object.freeze({
|
||||||
|
indigo: {
|
||||||
|
id: "indigo",
|
||||||
|
label: "PRISMRPG.Spell.Color.indigo",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.indigo"
|
||||||
|
},
|
||||||
|
blue: {
|
||||||
|
id: "blue",
|
||||||
|
label: "PRISMRPG.Spell.Color.blue",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.blue"
|
||||||
|
},
|
||||||
|
green: {
|
||||||
|
id: "green",
|
||||||
|
label: "PRISMRPG.Spell.Color.green",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.green"
|
||||||
|
},
|
||||||
|
yellow: {
|
||||||
|
id: "yellow",
|
||||||
|
label: "PRISMRPG.Spell.Color.yellow",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.yellow"
|
||||||
|
},
|
||||||
|
orange: {
|
||||||
|
id: "orange",
|
||||||
|
label: "PRISMRPG.Spell.Color.orange",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.orange"
|
||||||
|
},
|
||||||
|
red: {
|
||||||
|
id: "red",
|
||||||
|
label: "PRISMRPG.Spell.Color.red",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.red"
|
||||||
|
},
|
||||||
|
violet: {
|
||||||
|
id: "violet",
|
||||||
|
label: "PRISMRPG.Spell.Color.violet",
|
||||||
|
description: "PRISMRPG.Spell.ColorEffect.violet"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spell ranges (legacy - to be replaced with Prism system)
|
||||||
|
*/
|
||||||
export const RANGE = Object.freeze({
|
export const RANGE = Object.freeze({
|
||||||
na: {
|
na: {
|
||||||
id: "na",
|
id: "na",
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import * as CHARACTER from "./character.mjs"
|
import * as CHARACTER from "./character.mjs"
|
||||||
import * as WEAPON from "./weapon.mjs"
|
import * as WEAPON from "./weapon.mjs"
|
||||||
import * as ARMOR from "./armor.mjs"
|
import * as ARMOR from "./armor.mjs"
|
||||||
|
import * as SHIELD from "./shield.mjs"
|
||||||
import * as SPELL from "./spell.mjs"
|
import * as SPELL from "./spell.mjs"
|
||||||
import * as SKILL from "./skill.mjs"
|
import * as SKILL from "./skill.mjs"
|
||||||
import * as EQUIPMENT from "./equipment.mjs"
|
import * as EQUIPMENT from "./equipment.mjs"
|
||||||
@@ -285,6 +286,7 @@ export const ASCII = `
|
|||||||
export const SYSTEM = {
|
export const SYSTEM = {
|
||||||
id: SYSTEM_ID,
|
id: SYSTEM_ID,
|
||||||
CHARACTERISTICS: CHARACTER.CHARACTERISTICS,
|
CHARACTERISTICS: CHARACTER.CHARACTERISTICS,
|
||||||
|
SUB_ATTRIBUTES: CHARACTER.SUB_ATTRIBUTES,
|
||||||
CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES,
|
CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES,
|
||||||
CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR,
|
CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR,
|
||||||
MONSTER_CHARACTERISTICS: MONSTER.MONSTER_CHARACTERISTICS,
|
MONSTER_CHARACTERISTICS: MONSTER.MONSTER_CHARACTERISTICS,
|
||||||
@@ -293,10 +295,21 @@ export const SYSTEM = {
|
|||||||
SAVES: CHARACTER.SAVES,
|
SAVES: CHARACTER.SAVES,
|
||||||
CHALLENGES: CHARACTER.CHALLENGES,
|
CHALLENGES: CHARACTER.CHALLENGES,
|
||||||
SKILL_CATEGORY: SKILL.CATEGORY,
|
SKILL_CATEGORY: SKILL.CATEGORY,
|
||||||
|
CORE_SKILLS: SKILL.CORE_SKILLS,
|
||||||
|
CORE_SKILL_BONUS: SKILL.CORE_SKILL_BONUS,
|
||||||
ARMOR_TYPE: ARMOR.TYPE,
|
ARMOR_TYPE: ARMOR.TYPE,
|
||||||
|
ARMOR_BASE_AC: ARMOR.BASE_AC,
|
||||||
|
ARMOR_AC_BONUS_ATTRIBUTES: ARMOR.AC_BONUS_ATTRIBUTES,
|
||||||
|
ARMOR_WITHSTAND_APC: ARMOR.WITHSTAND_APC,
|
||||||
|
ARMOR_SET_REQUIREMENTS: ARMOR.SET_REQUIREMENTS,
|
||||||
|
SHIELD_TYPE: SHIELD.TYPE,
|
||||||
|
SHIELD_BLOCK_AUGMENTS: SHIELD.BLOCK_AUGMENTS,
|
||||||
EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY,
|
EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY,
|
||||||
SPELL_RANGE: SPELL.RANGE,
|
SPELL_RANGE: SPELL.RANGE,
|
||||||
WEAPON_TYPE: WEAPON.WEAPON_TYPE,
|
SPELL_COLORS: SPELL.COLORS,
|
||||||
|
WEAPON_TYPE: WEAPON.TYPE,
|
||||||
|
WEAPON_GROUP: WEAPON.WEAPON_GROUP,
|
||||||
|
WEAPON_DAMAGE_TYPE: WEAPON.DAMAGE_TYPE,
|
||||||
WEAPON_CLASS: WEAPON.WEAPON_CLASS,
|
WEAPON_CLASS: WEAPON.WEAPON_CLASS,
|
||||||
COMBAT_PROGRESSION_DICE: DICE_VALUES,
|
COMBAT_PROGRESSION_DICE: DICE_VALUES,
|
||||||
SHIELD_DEFENSE_DICE: DEFENSE_DICE_VALUES,
|
SHIELD_DEFENSE_DICE: DEFENSE_DICE_VALUES,
|
||||||
|
|||||||
+102
-2
@@ -1,4 +1,105 @@
|
|||||||
|
/**
|
||||||
|
* Weapon types based on Prism RPG rules
|
||||||
|
* APC determines weapon class: Light (1 APC), One-Handed (2 APC), Heavy (3 APC)
|
||||||
|
*/
|
||||||
|
export const TYPE = Object.freeze({
|
||||||
|
light: {
|
||||||
|
id: "light",
|
||||||
|
label: "PRISMRPG.Weapon.Type.light",
|
||||||
|
apc: 1,
|
||||||
|
hands: 1
|
||||||
|
},
|
||||||
|
oneHanded: {
|
||||||
|
id: "oneHanded",
|
||||||
|
label: "PRISMRPG.Weapon.Type.oneHanded",
|
||||||
|
apc: 2,
|
||||||
|
hands: 1
|
||||||
|
},
|
||||||
|
heavy: {
|
||||||
|
id: "heavy",
|
||||||
|
label: "PRISMRPG.Weapon.Type.heavy",
|
||||||
|
apc: 3,
|
||||||
|
hands: 2
|
||||||
|
},
|
||||||
|
projectile: {
|
||||||
|
id: "projectile",
|
||||||
|
label: "PRISMRPG.Weapon.Type.projectile",
|
||||||
|
apc: 0, // Variable based on specific weapon
|
||||||
|
hands: 2
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Weapon groups and their associated passives
|
||||||
|
* Each weapon belongs to a group and possesses its passive while wielded
|
||||||
|
*/
|
||||||
|
export const WEAPON_GROUP = Object.freeze({
|
||||||
|
longsword: {
|
||||||
|
id: "longsword",
|
||||||
|
label: "PRISMRPG.Weapon.WeaponGroup.longsword",
|
||||||
|
passive: "turningEdge",
|
||||||
|
passiveLabel: "PRISMRPG.Weapon.Passive.turningEdge",
|
||||||
|
passiveDescription: "PRISMRPG.Weapon.PassiveDescription.turningEdge"
|
||||||
|
},
|
||||||
|
warhammer: {
|
||||||
|
id: "warhammer",
|
||||||
|
label: "PRISMRPG.Weapon.WeaponGroup.warhammer",
|
||||||
|
passive: "puncturingBlows",
|
||||||
|
passiveLabel: "PRISMRPG.Weapon.Passive.puncturingBlows",
|
||||||
|
passiveDescription: "PRISMRPG.Weapon.PassiveDescription.puncturingBlows"
|
||||||
|
},
|
||||||
|
battleaxe: {
|
||||||
|
id: "battleaxe",
|
||||||
|
label: "PRISMRPG.Weapon.WeaponGroup.battleaxe",
|
||||||
|
passive: "shieldEater",
|
||||||
|
passiveLabel: "PRISMRPG.Weapon.Passive.shieldEater",
|
||||||
|
passiveDescription: "PRISMRPG.Weapon.PassiveDescription.shieldEater"
|
||||||
|
},
|
||||||
|
dagger: {
|
||||||
|
id: "dagger",
|
||||||
|
label: "PRISMRPG.Weapon.WeaponGroup.dagger",
|
||||||
|
passive: "balancingStance",
|
||||||
|
passiveLabel: "PRISMRPG.Weapon.Passive.balancingStance",
|
||||||
|
passiveDescription: "PRISMRPG.Weapon.PassiveDescription.balancingStance"
|
||||||
|
},
|
||||||
|
crossbow: {
|
||||||
|
id: "crossbow",
|
||||||
|
label: "PRISMRPG.Weapon.WeaponGroup.crossbow",
|
||||||
|
passive: "boltlock",
|
||||||
|
passiveLabel: "PRISMRPG.Weapon.Passive.boltlock",
|
||||||
|
passiveDescription: "PRISMRPG.Weapon.PassiveDescription.boltlock"
|
||||||
|
},
|
||||||
|
longbow: {
|
||||||
|
id: "longbow",
|
||||||
|
label: "PRISMRPG.Weapon.WeaponGroup.longbow",
|
||||||
|
passive: "volleyFire",
|
||||||
|
passiveLabel: "PRISMRPG.Weapon.Passive.volleyFire",
|
||||||
|
passiveDescription: "PRISMRPG.Weapon.PassiveDescription.volleyFire"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage types for weapons
|
||||||
|
*/
|
||||||
|
export const DAMAGE_TYPE = Object.freeze({
|
||||||
|
piercing: {
|
||||||
|
id: "piercing",
|
||||||
|
label: "PRISMRPG.Weapon.DamageType.piercing",
|
||||||
|
abbreviation: "P"
|
||||||
|
},
|
||||||
|
bludgeoning: {
|
||||||
|
id: "bludgeoning",
|
||||||
|
label: "PRISMRPG.Weapon.DamageType.bludgeoning",
|
||||||
|
abbreviation: "B"
|
||||||
|
},
|
||||||
|
slashing: {
|
||||||
|
id: "slashing",
|
||||||
|
label: "PRISMRPG.Weapon.DamageType.slashing",
|
||||||
|
abbreviation: "S"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Legacy exports for backward compatibility (to be removed later)
|
||||||
export const WEAPON_TYPE = {
|
export const WEAPON_TYPE = {
|
||||||
"melee": "PRISMRPG.Weapon.WeaponType.melee",
|
"melee": "PRISMRPG.Weapon.WeaponType.melee",
|
||||||
"ranged": "PRISMRPG.Weapon.WeaponType.ranged"
|
"ranged": "PRISMRPG.Weapon.WeaponType.ranged"
|
||||||
@@ -16,7 +117,7 @@ export const WEAPON_CLASS = {
|
|||||||
"sling": "PRISMRPG.Weapon.WeaponClass.sling",
|
"sling": "PRISMRPG.Weapon.WeaponClass.sling",
|
||||||
"thrown": "PRISMRPG.Weapon.WeaponClass.thrown",
|
"thrown": "PRISMRPG.Weapon.WeaponClass.thrown",
|
||||||
"polearm": "PRISMRPG.Weapon.WeaponClass.polearm",
|
"polearm": "PRISMRPG.Weapon.WeaponClass.polearm",
|
||||||
"unarmed" : "PRISMRPG.Weapon.WeaponClass.unarmed"
|
"unarmed": "PRISMRPG.Weapon.WeaponClass.unarmed"
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WEAPON_CATEGORIES = {
|
export const WEAPON_CATEGORIES = {
|
||||||
@@ -32,4 +133,3 @@ export const WEAPON_CATEGORIES = {
|
|||||||
"thrown": ["axe", "hammer", "mace", "flail", "bow", "sling", "polearm"],
|
"thrown": ["axe", "hammer", "mace", "flail", "bow", "sling", "polearm"],
|
||||||
"polearm": ["axe", "hammer", "mace", "flail", "bow", "sling", "thrown"]
|
"polearm": ["axe", "hammer", "mace", "flail", "bow", "sling", "thrown"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-1
@@ -7,8 +7,21 @@ export default class PrismRPGArmor extends foundry.abstract.TypeDataModel {
|
|||||||
|
|
||||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||||
schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE })
|
schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE })
|
||||||
|
|
||||||
|
// MRR - Movement Rating Reduction (reduced by Vigor sub-attribute)
|
||||||
|
schema.mrr = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0, label: "Movement Rating Reduction" })
|
||||||
|
|
||||||
|
// Armor Passive - the passive ability of this armor piece
|
||||||
|
schema.passive = new fields.StringField({ required: false, initial: "", label: "Armor Passive" })
|
||||||
|
schema.passiveDescription = new fields.HTMLField({ required: false, textSearch: true, label: "Passive Description" })
|
||||||
|
|
||||||
|
// Armor Augment - the Withstand action effect (requires augment from class feature)
|
||||||
|
schema.augment = new fields.StringField({ required: false, initial: "", label: "Armor Augment" })
|
||||||
|
schema.augmentDescription = new fields.HTMLField({ required: false, textSearch: true, label: "Augment Description" })
|
||||||
|
|
||||||
|
// Legacy fields for compatibility
|
||||||
schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 })
|
schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 })
|
||||||
schema.maximumMovement = new fields.StringField({ ...requiredInteger, required: true, initial: "" })
|
schema.maximumMovement = new fields.StringField({ required: false, initial: "" })
|
||||||
schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||||
schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
schema.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||||
|
|
||||||
|
|||||||
@@ -168,6 +168,21 @@ export default class PrismRPGCharacter extends foundry.abstract.TypeDataModel {
|
|||||||
}, {}),
|
}, {}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Core Skill system (Prism RPG)
|
||||||
|
schema.coreSkill = new fields.SchemaField({
|
||||||
|
skill: new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
choices: Object.keys(SYSTEM.CORE_SKILLS || {}),
|
||||||
|
label: "Selected Core Skill"
|
||||||
|
}),
|
||||||
|
attributeChoice: new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Attribute Choice for +2 Bonus"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
return schema
|
return schema
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+108
-17
@@ -1,4 +1,5 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
|
|
||||||
export default class PrismRPGMiracle extends foundry.abstract.TypeDataModel {
|
export default class PrismRPGMiracle extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
@@ -11,30 +12,120 @@ export default class PrismRPGMiracle extends foundry.abstract.TypeDataModel {
|
|||||||
initial: "",
|
initial: "",
|
||||||
textSearch: true,
|
textSearch: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Miracle level (1-7+)
|
||||||
schema.level = new fields.NumberField({
|
schema.level = new fields.NumberField({
|
||||||
...requiredInteger,
|
...requiredInteger,
|
||||||
initial: 1,
|
initial: 1,
|
||||||
min: 1,
|
min: 1,
|
||||||
max: 25,
|
max: 25,
|
||||||
})
|
})
|
||||||
schema.components = new fields.SchemaField({
|
|
||||||
verbal: new fields.BooleanField(),
|
|
||||||
somatic: new fields.BooleanField(),
|
|
||||||
material: new fields.BooleanField(),
|
|
||||||
catalyst: new fields.BooleanField(),
|
|
||||||
religious: new fields.BooleanField()
|
|
||||||
})
|
|
||||||
schema.prayerTime = new fields.StringField({ required: true, initial: "" })
|
|
||||||
schema.miracleRange = new fields.StringField({ required: true, initial: "" })
|
|
||||||
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: "" })
|
|
||||||
schema.miracleType = new fields.StringField({ required: true, initial: "combat", choices: SYSTEM.MIRACLE_TYPES })
|
|
||||||
|
|
||||||
schema.attackRoll = new fields.StringField({ required: true, initial: "" })
|
// Miracle type
|
||||||
schema.powerRoll = new fields.StringField({ required: true, initial: "" })
|
schema.miracleType = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "combat",
|
||||||
|
choices: SYSTEM.MIRACLE_TYPES
|
||||||
|
})
|
||||||
|
|
||||||
|
// APC to pray
|
||||||
|
schema.apc = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 1,
|
||||||
|
min: 0,
|
||||||
|
label: "Action Point Cost"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Faith cost (if applicable in Prism RPG)
|
||||||
|
schema.faithCost = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
min: 0,
|
||||||
|
label: "Faith Cost"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Divine favor required
|
||||||
|
schema.divineFavor = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Divine Favor"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Components (Miracles have 'religious' component)
|
||||||
|
schema.components = new fields.SchemaField({
|
||||||
|
verbal: new fields.BooleanField({ initial: false }),
|
||||||
|
somatic: new fields.BooleanField({ initial: false }),
|
||||||
|
material: new fields.BooleanField({ initial: false }),
|
||||||
|
catalyst: new fields.BooleanField({ initial: false }),
|
||||||
|
religious: new fields.BooleanField({ initial: true })
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.materialComponent = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.catalyst = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Prayer parameters
|
||||||
|
schema.prayerTime = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "1 action"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.miracleRange = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "Touch"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.areaAffected = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "Single target"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.duration = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "Instantaneous"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.savingThrow = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Attack and power
|
||||||
|
schema.attackRoll = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.powerRoll = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Keywords
|
||||||
|
schema.keywords = new fields.ArrayField(
|
||||||
|
new fields.StringField()
|
||||||
|
)
|
||||||
|
|
||||||
|
// Miracle augment (if applicable)
|
||||||
|
schema.augment = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Miracle Augment"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.augmentDescription = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Augment Description"
|
||||||
|
})
|
||||||
|
|
||||||
return schema
|
return schema
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
|
|
||||||
export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
|
export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
@@ -6,14 +7,81 @@ export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
|
|||||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||||
|
|
||||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||||
schema.defense = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.SHIELD_DEFENSE_DICE})
|
|
||||||
schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
// Prism RPG shield properties
|
||||||
schema.hascover = new fields.BooleanField({ required: true, initial: false })
|
schema.shieldType = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "buckler",
|
||||||
|
choices: Object.keys(SYSTEM.SHIELD_TYPE || {})
|
||||||
|
})
|
||||||
|
|
||||||
|
// APC (Action Point Cost) for Block action
|
||||||
|
schema.apc = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 1,
|
||||||
|
min: 1,
|
||||||
|
max: 4,
|
||||||
|
label: "Block APC"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Shield Rating (SR) - damage prevention dice (e.g., "1d4", "1d8", "1d12", "3d6")
|
||||||
|
schema.sr = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "1d4",
|
||||||
|
label: "Shield Rating (SR)"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Block Augment - passive ability when using Block action
|
||||||
|
schema.blockAugment = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Block Augment"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.blockAugmentDescription = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Block Augment Description"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Augment effects (for equipment progression)
|
||||||
|
schema.augment = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Shield Augment"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.augmentDescription = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Augment Description"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Legacy properties (kept for backward compatibility)
|
||||||
|
schema.defense = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "d4",
|
||||||
|
choices: SYSTEM.SHIELD_DEFENSE_DICE
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.movementreduction = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
min: 0
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.hascover = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: false
|
||||||
|
})
|
||||||
|
|
||||||
schema.standing = new fields.SchemaField({
|
schema.standing = new fields.SchemaField({
|
||||||
min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||||
max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||||
})
|
})
|
||||||
|
|
||||||
schema.crouching = new fields.SchemaField({
|
schema.crouching = new fields.SchemaField({
|
||||||
min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||||
max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||||
@@ -24,6 +92,7 @@ export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
|
|||||||
slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||||
piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||||
})
|
})
|
||||||
|
|
||||||
schema.autodestruction = new fields.SchemaField({
|
schema.autodestruction = new fields.SchemaField({
|
||||||
bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||||
slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||||
@@ -40,5 +109,4 @@ export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
|
|||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static LOCALIZATION_PREFIXES = ["PRISMRPG.Shield"]
|
static LOCALIZATION_PREFIXES = ["PRISMRPG.Shield"]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+104
-84
@@ -1,29 +1,75 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
import { CATEGORY } from "../config/skill.mjs"
|
|
||||||
|
/**
|
||||||
|
* Core Skill data model for Prism RPG
|
||||||
|
*
|
||||||
|
* Core Skills are skills in which the character is particularly proficient.
|
||||||
|
* - Basic skill checks: +5 modifier
|
||||||
|
* - Advanced skill checks: Only accessible with Core Skill
|
||||||
|
* - Core Skill Class: Gives access to a class based on archetype
|
||||||
|
* - Attribute Bonus: +2 to one of 3 associated attributes
|
||||||
|
*/
|
||||||
export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
const schema = {}
|
const schema = {}
|
||||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||||
|
|
||||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
schema.description = new fields.HTMLField({
|
||||||
schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY })
|
required: true,
|
||||||
schema.base = new fields.StringField({ required: true, initial: "WIS" })
|
textSearch: true,
|
||||||
schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
schema.classesCost = new fields.SchemaField(
|
// Core Skill type (from the 18 available Core Skills)
|
||||||
Object.values(SYSTEM.CHAR_CLASSES_DEFINES).reduce((obj, pcClass) => {
|
schema.coreSkill = new fields.StringField({
|
||||||
obj[pcClass.id] = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
required: true,
|
||||||
return obj
|
initial: "acrobatics",
|
||||||
}, {}),
|
choices: Object.keys(SYSTEM.CORE_SKILLS || {}),
|
||||||
)
|
label: "Core Skill"
|
||||||
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
})
|
||||||
|
|
||||||
schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS })
|
// Is this the character's chosen Core Skill?
|
||||||
schema.weaponBonus = new fields.SchemaField({
|
schema.isCoreSkill = new fields.BooleanField({
|
||||||
attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
required: true,
|
||||||
defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
initial: false,
|
||||||
damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
label: "Is Core Skill"
|
||||||
|
})
|
||||||
|
|
||||||
|
// If Core Skill, which attribute receives the +2 bonus?
|
||||||
|
schema.attributeBonus = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Attribute Bonus"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Skill modifier (includes Core Skill bonus if applicable)
|
||||||
|
schema.modifier = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
label: "Skill Modifier"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Can perform advanced checks
|
||||||
|
schema.canAdvancedCheck = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: false,
|
||||||
|
label: "Can Perform Advanced Checks"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Associated Core Skill Class (if any)
|
||||||
|
schema.coreSkillClass = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Core Skill Class"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Notes/Custom description
|
||||||
|
schema.notes = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Notes"
|
||||||
})
|
})
|
||||||
|
|
||||||
return schema
|
return schema
|
||||||
@@ -32,83 +78,57 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
|||||||
/** @override */
|
/** @override */
|
||||||
static LOCALIZATION_PREFIXES = ["PRISMRPG.Skill"]
|
static LOCALIZATION_PREFIXES = ["PRISMRPG.Skill"]
|
||||||
|
|
||||||
get skillCategory() {
|
/**
|
||||||
return game.i18n.localize(CATEGORY[this.category].label)
|
* Get the Core Skill definition from SYSTEM
|
||||||
|
*/
|
||||||
|
get coreSkillDefinition() {
|
||||||
|
return SYSTEM.CORE_SKILLS?.[this.coreSkill] || null
|
||||||
}
|
}
|
||||||
|
|
||||||
validate(options) {
|
/**
|
||||||
let isError = super.validate(options)
|
* Get the localized Core Skill name
|
||||||
let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage
|
*/
|
||||||
if (bonus > Math.floor(this._source.skillTotal / 10)) {
|
get coreSkillLabel() {
|
||||||
ui.notifications.error(game.i18n.localize("PRISMRPG.Skill.error.weaponBonus"))
|
const definition = this.coreSkillDefinition
|
||||||
isError = true
|
return definition ? game.i18n.localize(definition.label) : this.coreSkill
|
||||||
}
|
|
||||||
return isError
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the available attribute choices for this Core Skill
|
||||||
|
*/
|
||||||
|
get attributeChoices() {
|
||||||
|
const definition = this.coreSkillDefinition
|
||||||
|
return definition?.attributeChoices || []
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare derived data
|
||||||
|
*/
|
||||||
prepareDerivedData() {
|
prepareDerivedData() {
|
||||||
super.prepareDerivedData();
|
super.prepareDerivedData()
|
||||||
this.skillTotal = this.computeBase();
|
|
||||||
if (this.category === "weapon") {
|
// If this is the character's Core Skill, apply bonuses
|
||||||
this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage;
|
if (this.isCoreSkill) {
|
||||||
if (Number(this.skillTotal)) {
|
this.modifier = SYSTEM.CORE_SKILL_BONUS?.basic || 5
|
||||||
this.availableBonus = Math.max(Math.floor(this.skillTotal / 10) - 1, 0)
|
this.canAdvancedCheck = true
|
||||||
} else {
|
} else {
|
||||||
this.availableBonus = "N/A"
|
this.modifier = 0
|
||||||
}
|
this.canAdvancedCheck = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
computeBase() {
|
/**
|
||||||
let actor = this.parent?.actor;
|
* Calculate skill check bonus
|
||||||
if (!actor) {
|
* @param {string} attributeKey The attribute to use (str, dex, con, int, wis, cha)
|
||||||
return `${this.base} + ${String(this.bonus)}`;
|
* @returns {number} Total skill check bonus
|
||||||
}
|
*/
|
||||||
|
getSkillCheckBonus(attributeKey) {
|
||||||
|
let actor = this.parent?.actor
|
||||||
|
if (!actor) return this.modifier
|
||||||
|
|
||||||
if (this.base === "N/A" || this.base === "None") {
|
const attribute = actor.system.characteristics?.[attributeKey]
|
||||||
return this.bonus
|
const attributeMod = attribute?.mod || 0
|
||||||
}
|
|
||||||
|
|
||||||
// Split the base value per stat : WIS,DEX,STR,INT,CHA (example)
|
return attributeMod + this.modifier
|
||||||
let base = this.base;
|
|
||||||
// Fix errors in the base value
|
|
||||||
base.replace("CHARISMA", "CHA");
|
|
||||||
|
|
||||||
if (base.match(/OR/)) {
|
|
||||||
let baseSplit = base.split("OR");
|
|
||||||
let baseSplitLength = baseSplit.length;
|
|
||||||
if (baseSplitLength > 0) {
|
|
||||||
// Select the max stat value from the parent actor
|
|
||||||
let maxStat = 0;
|
|
||||||
for (let i = 0; i < baseSplitLength; i++) {
|
|
||||||
const stat = baseSplit[i].trim();
|
|
||||||
const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0;
|
|
||||||
if (statValue > maxStat) {
|
|
||||||
maxStat = statValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return maxStat + this.bonus
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (base.match(/\+/)) {
|
|
||||||
// Split with + calculate the total
|
|
||||||
let baseSplit = base.split("+");
|
|
||||||
let baseSplitLength = baseSplit.length;
|
|
||||||
if (baseSplitLength > 0) {
|
|
||||||
let total = 0;
|
|
||||||
for (let i = 0; i < baseSplitLength; i++) {
|
|
||||||
const stat = baseSplit[i].trim();
|
|
||||||
const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0;
|
|
||||||
total += statValue;
|
|
||||||
}
|
|
||||||
return total + this.bonus
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Single stat
|
|
||||||
const statValue = actor.system.characteristics[base.trim().toLowerCase()]?.value || 0;
|
|
||||||
return statValue + this.bonus
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return `${this.base} + ${String(this.bonus)}`;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+140
-19
@@ -1,4 +1,5 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
|
|
||||||
export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
@@ -11,6 +12,8 @@ export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
|||||||
initial: "",
|
initial: "",
|
||||||
textSearch: true,
|
textSearch: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Spell level (1-7+)
|
||||||
schema.level = new fields.NumberField({
|
schema.level = new fields.NumberField({
|
||||||
...requiredInteger,
|
...requiredInteger,
|
||||||
initial: 1,
|
initial: 1,
|
||||||
@@ -18,27 +21,145 @@ export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
|||||||
max: 25,
|
max: 25,
|
||||||
})
|
})
|
||||||
|
|
||||||
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
// Mana cost - base cost of the spell
|
||||||
schema.memorized = new fields.BooleanField({ required: true, initial: false })
|
schema.manaCost = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
schema.components = new fields.SchemaField({
|
required: true,
|
||||||
verbal: new fields.BooleanField(),
|
initial: 1,
|
||||||
somatic: new fields.BooleanField(),
|
min: 0,
|
||||||
catalyst: new fields.BooleanField(),
|
label: "Mana Cost"
|
||||||
material: new fields.BooleanField(),
|
|
||||||
})
|
})
|
||||||
schema.castingTime = new fields.StringField({ required: true, initial: "" })
|
|
||||||
schema.spellRange = new fields.StringField({ required: true, initial: "" })
|
|
||||||
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.extraAetherPoints = new fields.StringField({ required: true, initial: "" })
|
|
||||||
schema.materialComponent = new fields.StringField({ required: true, initial: "" })
|
|
||||||
schema.catalyst = new fields.StringField({ required: true, initial: "" })
|
|
||||||
schema.criticalType = new fields.StringField({ required: true, initial: "electric", choices : SYSTEM.SPELL_CRITICAL })
|
|
||||||
|
|
||||||
schema.attackRoll = new fields.StringField({ required: true, initial: "" })
|
// Mana upkeep cost (for sustained spells)
|
||||||
schema.powerRoll = new fields.StringField({ required: true, initial: "" })
|
schema.manaUpkeep = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
min: 0,
|
||||||
|
label: "Mana Upkeep"
|
||||||
|
})
|
||||||
|
|
||||||
|
// APC to cast
|
||||||
|
schema.apc = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 1,
|
||||||
|
min: 0,
|
||||||
|
label: "Action Point Cost"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Color/Hue of the spell (from the Prism)
|
||||||
|
schema.color = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "violet",
|
||||||
|
choices: Object.keys(SYSTEM.SPELL_COLORS || {}),
|
||||||
|
label: "Spell Color"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Color effect description
|
||||||
|
schema.colorEffect = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Color Effect"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Spell Ascension - can be upcast
|
||||||
|
schema.canAscend = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: true,
|
||||||
|
label: "Can Ascend"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.ascensionEffect = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: "",
|
||||||
|
label: "Ascension Effect"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Memorized (prepared)
|
||||||
|
schema.memorized = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: false
|
||||||
|
})
|
||||||
|
|
||||||
|
// Components
|
||||||
|
schema.components = new fields.SchemaField({
|
||||||
|
verbal: new fields.BooleanField({ initial: false }),
|
||||||
|
somatic: new fields.BooleanField({ initial: false }),
|
||||||
|
catalyst: new fields.BooleanField({ initial: false }),
|
||||||
|
material: new fields.BooleanField({ initial: false }),
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.materialComponent = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.catalyst = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Casting parameters
|
||||||
|
schema.castingTime = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "1 action"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.spellRange = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "30ft"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.areaAffected = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "Single target"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.duration = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "Instantaneous"
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.savingThrow = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Attack and damage
|
||||||
|
schema.attackRoll = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.powerRoll = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Keywords
|
||||||
|
schema.keywords = new fields.ArrayField(
|
||||||
|
new fields.StringField()
|
||||||
|
)
|
||||||
|
|
||||||
|
// Legacy fields
|
||||||
|
schema.cost = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
min: 0
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.extraAetherPoints = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.criticalType = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "electric",
|
||||||
|
choices: SYSTEM.SPELL_CRITICAL
|
||||||
|
})
|
||||||
|
|
||||||
return schema
|
return schema
|
||||||
}
|
}
|
||||||
|
|||||||
+124
-37
@@ -1,47 +1,139 @@
|
|||||||
import { SYSTEM } from "../config/system.mjs"
|
import { SYSTEM } from "../config/system.mjs"
|
||||||
|
|
||||||
export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
export default class PrismRPGWeapon extends foundry.abstract.TypeDataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
const schema = {}
|
const schema = {}
|
||||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||||
|
|
||||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||||
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE })
|
|
||||||
schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS })
|
|
||||||
|
|
||||||
|
// Prism RPG weapon properties
|
||||||
|
schema.weaponType = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "light",
|
||||||
|
choices: Object.keys(SYSTEM.WEAPON_TYPE || {})
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.weaponGroup = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "longsword",
|
||||||
|
choices: Object.keys(SYSTEM.WEAPON_GROUP || {})
|
||||||
|
})
|
||||||
|
|
||||||
|
// APC (Action Point Cost) - determined by weapon type
|
||||||
|
schema.apc = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 1,
|
||||||
|
min: 0,
|
||||||
|
max: 3
|
||||||
|
})
|
||||||
|
|
||||||
|
// Damage dice (e.g., "1d8", "2d6", "1d12")
|
||||||
|
schema.damage = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "1d8"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Damage type(s)
|
||||||
schema.damageType = new fields.SchemaField({
|
schema.damageType = new fields.SchemaField({
|
||||||
typeP: new fields.BooleanField(),
|
piercing: new fields.BooleanField({ initial: false }),
|
||||||
typeB: new fields.BooleanField(),
|
bludgeoning: new fields.BooleanField({ initial: false }),
|
||||||
typeS: new fields.BooleanField()
|
slashing: new fields.BooleanField({ initial: false })
|
||||||
})
|
|
||||||
schema.damage = new fields.SchemaField({
|
|
||||||
damageS: new fields.StringField({required: true, initial: ""}),
|
|
||||||
damageM: new fields.StringField({required: true, initial: ""})
|
|
||||||
})
|
|
||||||
schema.applyStrengthDamageBonus = new fields.BooleanField({ required: true, initial: true })
|
|
||||||
|
|
||||||
schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} })
|
|
||||||
schema.isAgile = new fields.BooleanField({ required: true, initial: false })
|
|
||||||
|
|
||||||
schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
|
||||||
schema.secondsToAttack = new fields.StringField({required: true, initial: ""})
|
|
||||||
schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.COMBAT_PROGRESSION_DICE})
|
|
||||||
|
|
||||||
schema.speed = new fields.SchemaField({
|
|
||||||
simpleAim: new fields.StringField({required: true, initial: ""}),
|
|
||||||
carefulAim: new fields.StringField({required: true, initial: ""}),
|
|
||||||
focusedAim: new fields.StringField({required: true, initial: ""})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
// Group passive (inherited from weapon group)
|
||||||
schema.weaponRange = new fields.SchemaField({
|
schema.groupPassive = new fields.StringField({
|
||||||
pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
required: true,
|
||||||
short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
initial: ""
|
||||||
medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
})
|
||||||
long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
|
||||||
extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
schema.groupPassiveDescription = new fields.HTMLField({
|
||||||
outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Weapon-specific passive ability
|
||||||
|
schema.passive = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.passiveDescription = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Maneuver(s) available with this weapon
|
||||||
|
schema.maneuver = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.maneuverDescription = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Augment effects (for equipment progression)
|
||||||
|
schema.augment = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.augmentDescription = new fields.HTMLField({
|
||||||
|
required: true,
|
||||||
|
initial: ""
|
||||||
|
})
|
||||||
|
|
||||||
|
// Projectile-specific properties
|
||||||
|
schema.isProjectile = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: false
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.range = new fields.SchemaField({
|
||||||
|
short: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||||
|
medium: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||||
|
long: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.reloadAPC = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
initial: 0,
|
||||||
|
min: 0
|
||||||
|
})
|
||||||
|
|
||||||
|
// Legacy properties (kept for backward compatibility)
|
||||||
|
schema.hands = new fields.StringField({
|
||||||
|
required: true,
|
||||||
|
initial: "1",
|
||||||
|
choices: { "1": "1", "2": "2" }
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.isAgile = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: false
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.applyStrengthDamageBonus = new fields.BooleanField({
|
||||||
|
required: true,
|
||||||
|
initial: true
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.defenseMax = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
min: 0
|
||||||
|
})
|
||||||
|
|
||||||
|
schema.defense = new fields.NumberField({
|
||||||
|
...requiredInteger,
|
||||||
|
required: true,
|
||||||
|
initial: 0,
|
||||||
|
min: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
schema.bonuses = new fields.SchemaField({
|
schema.bonuses = new fields.SchemaField({
|
||||||
@@ -60,9 +152,4 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
|||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static LOCALIZATION_PREFIXES = ["PRISMRPG.Weapon"]
|
static LOCALIZATION_PREFIXES = ["PRISMRPG.Weapon"]
|
||||||
|
|
||||||
get weaponCategory() {
|
|
||||||
return game.i18n.localize(CATEGORY[this.weaponType].label)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+855
-23
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -8,7 +8,7 @@ npm install bare-events
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
``` js
|
```js
|
||||||
const EventEmitter = require('bare-events')
|
const EventEmitter = require('bare-events')
|
||||||
|
|
||||||
const e = new EventEmitter()
|
const e = new EventEmitter()
|
||||||
|
|||||||
+83
-60
@@ -1,24 +1,24 @@
|
|||||||
const errors = require('./lib/errors')
|
const errors = require('./lib/errors')
|
||||||
|
|
||||||
class EventListener {
|
class EventListener {
|
||||||
constructor () {
|
constructor() {
|
||||||
this.list = []
|
this.list = []
|
||||||
this.count = 0
|
this.count = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
append (ctx, name, fn, once) {
|
append(ctx, name, fn, once) {
|
||||||
this.count++
|
this.count++
|
||||||
ctx.emit('newListener', name, fn) // Emit BEFORE adding
|
ctx.emit('newListener', name, fn) // Emit BEFORE adding
|
||||||
this.list.push([fn, once])
|
this.list.push([fn, once])
|
||||||
}
|
}
|
||||||
|
|
||||||
prepend (ctx, name, fn, once) {
|
prepend(ctx, name, fn, once) {
|
||||||
this.count++
|
this.count++
|
||||||
ctx.emit('newListener', name, fn) // Emit BEFORE adding
|
ctx.emit('newListener', name, fn) // Emit BEFORE adding
|
||||||
this.list.unshift([fn, once])
|
this.list.unshift([fn, once])
|
||||||
}
|
}
|
||||||
|
|
||||||
remove (ctx, name, fn) {
|
remove(ctx, name, fn) {
|
||||||
for (let i = 0, n = this.list.length; i < n; i++) {
|
for (let i = 0, n = this.list.length; i < n; i++) {
|
||||||
const l = this.list[i]
|
const l = this.list[i]
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ class EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
removeAll (ctx, name) {
|
removeAll(ctx, name) {
|
||||||
const list = [...this.list]
|
const list = [...this.list]
|
||||||
this.list = []
|
this.list = []
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ class EventListener {
|
|||||||
this.count -= list.length
|
this.count -= list.length
|
||||||
}
|
}
|
||||||
|
|
||||||
emit (ctx, name, ...args) {
|
emit(ctx, name, ...args) {
|
||||||
const list = [...this.list]
|
const list = [...this.list]
|
||||||
|
|
||||||
for (let i = 0, n = list.length; i < n; i++) {
|
for (let i = 0, n = list.length; i < n; i++) {
|
||||||
@@ -56,32 +56,35 @@ class EventListener {
|
|||||||
|
|
||||||
if (l[1] === true) this.remove(ctx, name, l[0])
|
if (l[1] === true) this.remove(ctx, name, l[0])
|
||||||
|
|
||||||
l[0].call(ctx, ...args)
|
Reflect.apply(l[0], ctx, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
return list.length > 0
|
return list.length > 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function appendListener (ctx, name, fn, once) {
|
function appendListener(ctx, name, fn, once) {
|
||||||
|
if (ctx._events === undefined) ctx._events = Object.create(null)
|
||||||
const e = ctx._events[name] || (ctx._events[name] = new EventListener())
|
const e = ctx._events[name] || (ctx._events[name] = new EventListener())
|
||||||
e.append(ctx, name, fn, once)
|
e.append(ctx, name, fn, once)
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
function prependListener (ctx, name, fn, once) {
|
function prependListener(ctx, name, fn, once) {
|
||||||
|
if (ctx._events === undefined) ctx._events = Object.create(null)
|
||||||
const e = ctx._events[name] || (ctx._events[name] = new EventListener())
|
const e = ctx._events[name] || (ctx._events[name] = new EventListener())
|
||||||
e.prepend(ctx, name, fn, once)
|
e.prepend(ctx, name, fn, once)
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeListener (ctx, name, fn) {
|
function removeListener(ctx, name, fn) {
|
||||||
|
if (ctx._events === undefined) return ctx
|
||||||
const e = ctx._events[name]
|
const e = ctx._events[name]
|
||||||
if (e !== undefined) e.remove(ctx, name, fn)
|
if (e !== undefined) e.remove(ctx, name, fn)
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
function throwUnhandledError (...args) {
|
function throwUnhandledError(...args) {
|
||||||
let err
|
let err
|
||||||
|
|
||||||
if (args.length > 0) err = args[0]
|
if (args.length > 0) err = args[0]
|
||||||
@@ -92,69 +95,77 @@ function throwUnhandledError (...args) {
|
|||||||
Error.captureStackTrace(err, exports.prototype.emit)
|
Error.captureStackTrace(err, exports.prototype.emit)
|
||||||
}
|
}
|
||||||
|
|
||||||
queueMicrotask(() => { throw err })
|
queueMicrotask(() => {
|
||||||
|
throw err
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = exports = class EventEmitter {
|
module.exports = exports = class EventEmitter {
|
||||||
constructor () {
|
constructor() {
|
||||||
this._events = Object.create(null)
|
this._events = Object.create(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
addListener (name, fn) {
|
addListener(name, fn) {
|
||||||
return appendListener(this, name, fn, false)
|
return appendListener(this, name, fn, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
addOnceListener (name, fn) {
|
addOnceListener(name, fn) {
|
||||||
return appendListener(this, name, fn, true)
|
return appendListener(this, name, fn, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
prependListener (name, fn) {
|
prependListener(name, fn) {
|
||||||
return prependListener(this, name, fn, false)
|
return prependListener(this, name, fn, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
prependOnceListener (name, fn) {
|
prependOnceListener(name, fn) {
|
||||||
return prependListener(this, name, fn, true)
|
return prependListener(this, name, fn, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
removeListener (name, fn) {
|
removeListener(name, fn) {
|
||||||
return removeListener(this, name, fn)
|
return removeListener(this, name, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
on (name, fn) {
|
on(name, fn) {
|
||||||
return appendListener(this, name, fn, false)
|
return appendListener(this, name, fn, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
once (name, fn) {
|
once(name, fn) {
|
||||||
return appendListener(this, name, fn, true)
|
return appendListener(this, name, fn, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
off (name, fn) {
|
off(name, fn) {
|
||||||
return removeListener(this, name, fn)
|
return removeListener(this, name, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
emit (name, ...args) {
|
emit(name, ...args) {
|
||||||
if (name === 'error' && this._events.error === undefined) throwUnhandledError(...args)
|
if (name === 'error' && this._events !== undefined && this._events.error === undefined) {
|
||||||
|
throwUnhandledError(...args)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._events === undefined) return false
|
||||||
const e = this._events[name]
|
const e = this._events[name]
|
||||||
return e === undefined ? false : e.emit(this, name, ...args)
|
return e === undefined ? false : e.emit(this, name, ...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
listeners (name) {
|
listeners(name) {
|
||||||
|
if (this._events === undefined) return []
|
||||||
const e = this._events[name]
|
const e = this._events[name]
|
||||||
return e === undefined ? [] : [...e.list]
|
return e === undefined ? [] : [...e.list]
|
||||||
}
|
}
|
||||||
|
|
||||||
listenerCount (name) {
|
listenerCount(name) {
|
||||||
|
if (this._events === undefined) return 0
|
||||||
const e = this._events[name]
|
const e = this._events[name]
|
||||||
return e === undefined ? 0 : e.list.length
|
return e === undefined ? 0 : e.list.length
|
||||||
}
|
}
|
||||||
|
|
||||||
getMaxListeners () {
|
getMaxListeners() {
|
||||||
return EventEmitter.defaultMaxListeners
|
return EventEmitter.defaultMaxListeners
|
||||||
}
|
}
|
||||||
|
|
||||||
setMaxListeners (n) {}
|
setMaxListeners(n) {}
|
||||||
|
|
||||||
removeAllListeners (name) {
|
removeAllListeners(name) {
|
||||||
if (arguments.length === 0) {
|
if (arguments.length === 0) {
|
||||||
for (const key of Reflect.ownKeys(this._events)) {
|
for (const key of Reflect.ownKeys(this._events)) {
|
||||||
if (key === 'removeListener') continue
|
if (key === 'removeListener') continue
|
||||||
@@ -175,10 +186,8 @@ exports.errors = errors
|
|||||||
|
|
||||||
exports.defaultMaxListeners = 10
|
exports.defaultMaxListeners = 10
|
||||||
|
|
||||||
exports.on = function on (emitter, name, opts = {}) {
|
exports.on = function on(emitter, name, opts = {}) {
|
||||||
const {
|
const { signal } = opts
|
||||||
signal
|
|
||||||
} = opts
|
|
||||||
|
|
||||||
if (signal && signal.aborted) {
|
if (signal && signal.aborted) {
|
||||||
throw errors.OPERATION_ABORTED(signal.reason)
|
throw errors.OPERATION_ABORTED(signal.reason)
|
||||||
@@ -197,7 +206,7 @@ exports.on = function on (emitter, name, opts = {}) {
|
|||||||
if (signal) signal.addEventListener('abort', onabort)
|
if (signal) signal.addEventListener('abort', onabort)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
next () {
|
next() {
|
||||||
if (events.length) {
|
if (events.length) {
|
||||||
return Promise.resolve({ value: events.shift(), done: false })
|
return Promise.resolve({ value: events.shift(), done: false })
|
||||||
}
|
}
|
||||||
@@ -212,25 +221,23 @@ exports.on = function on (emitter, name, opts = {}) {
|
|||||||
|
|
||||||
if (done) return onclose()
|
if (done) return onclose()
|
||||||
|
|
||||||
return new Promise((resolve, reject) =>
|
return new Promise((resolve, reject) => promises.push({ resolve, reject }))
|
||||||
promises.push({ resolve, reject })
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
return () {
|
return() {
|
||||||
return onclose()
|
return onclose()
|
||||||
},
|
},
|
||||||
|
|
||||||
throw (err) {
|
throw(err) {
|
||||||
return onerror(err)
|
return onerror(err)
|
||||||
},
|
},
|
||||||
|
|
||||||
[Symbol.asyncIterator] () {
|
[Symbol.asyncIterator]() {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onevent (...args) {
|
function onevent(...args) {
|
||||||
if (promises.length) {
|
if (promises.length) {
|
||||||
promises.shift().resolve({ value: args, done: false })
|
promises.shift().resolve({ value: args, done: false })
|
||||||
} else {
|
} else {
|
||||||
@@ -238,7 +245,7 @@ exports.on = function on (emitter, name, opts = {}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onerror (err) {
|
function onerror(err) {
|
||||||
if (promises.length) {
|
if (promises.length) {
|
||||||
promises.shift().reject(err)
|
promises.shift().reject(err)
|
||||||
} else {
|
} else {
|
||||||
@@ -248,11 +255,11 @@ exports.on = function on (emitter, name, opts = {}) {
|
|||||||
return Promise.resolve({ done: true })
|
return Promise.resolve({ done: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
function onabort () {
|
function onabort() {
|
||||||
onerror(errors.OPERATION_ABORTED(signal.reason))
|
onerror(errors.OPERATION_ABORTED(signal.reason))
|
||||||
}
|
}
|
||||||
|
|
||||||
function onclose () {
|
function onclose() {
|
||||||
emitter.off(name, onevent)
|
emitter.off(name, onevent)
|
||||||
|
|
||||||
if (name !== 'error') emitter.off('error', onerror)
|
if (name !== 'error') emitter.off('error', onerror)
|
||||||
@@ -267,10 +274,8 @@ exports.on = function on (emitter, name, opts = {}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.once = function once (emitter, name, opts = {}) {
|
exports.once = function once(emitter, name, opts = {}) {
|
||||||
const {
|
const { signal } = opts
|
||||||
signal
|
|
||||||
} = opts
|
|
||||||
|
|
||||||
if (signal && signal.aborted) {
|
if (signal && signal.aborted) {
|
||||||
throw errors.OPERATION_ABORTED(signal.reason)
|
throw errors.OPERATION_ABORTED(signal.reason)
|
||||||
@@ -289,13 +294,13 @@ exports.once = function once (emitter, name, opts = {}) {
|
|||||||
resolve(args)
|
resolve(args)
|
||||||
})
|
})
|
||||||
|
|
||||||
function onerror (err) {
|
function onerror(err) {
|
||||||
emitter.off('error', onerror)
|
emitter.off('error', onerror)
|
||||||
|
|
||||||
reject(err)
|
reject(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
function onabort () {
|
function onabort() {
|
||||||
signal.removeEventListener('abort', onabort)
|
signal.removeEventListener('abort', onabort)
|
||||||
|
|
||||||
onerror(errors.OPERATION_ABORTED(signal.reason))
|
onerror(errors.OPERATION_ABORTED(signal.reason))
|
||||||
@@ -303,26 +308,25 @@ exports.once = function once (emitter, name, opts = {}) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.forward = function forward (from, to, names, opts = {}) {
|
exports.forward = function forward(from, to, names, opts = {}) {
|
||||||
if (typeof names === 'string') names = [names]
|
if (typeof names === 'string') names = [names]
|
||||||
|
|
||||||
const {
|
const { emit = to.emit.bind(to) } = opts
|
||||||
emit = to.emit.bind(to)
|
|
||||||
} = opts
|
|
||||||
|
|
||||||
const listeners = names.map((name) => function onevent (...args) {
|
const listeners = names.map(
|
||||||
|
(name) =>
|
||||||
|
function onevent(...args) {
|
||||||
emit(name, ...args)
|
emit(name, ...args)
|
||||||
})
|
}
|
||||||
|
)
|
||||||
|
|
||||||
to
|
to.on('newListener', (name) => {
|
||||||
.on('newListener', (name) => {
|
|
||||||
const i = names.indexOf(name)
|
const i = names.indexOf(name)
|
||||||
|
|
||||||
if (i !== -1 && to.listenerCount(name) === 0) {
|
if (i !== -1 && to.listenerCount(name) === 0) {
|
||||||
from.on(name, listeners[i])
|
from.on(name, listeners[i])
|
||||||
}
|
}
|
||||||
})
|
}).on('removeListener', (name) => {
|
||||||
.on('removeListener', (name) => {
|
|
||||||
const i = names.indexOf(name)
|
const i = names.indexOf(name)
|
||||||
|
|
||||||
if (i !== -1 && to.listenerCount(name) === 0) {
|
if (i !== -1 && to.listenerCount(name) === 0) {
|
||||||
@@ -331,6 +335,25 @@ exports.forward = function forward (from, to, names, opts = {}) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.listenerCount = function listenerCount (emitter, name) {
|
exports.listenerCount = function listenerCount(emitter, name) {
|
||||||
return emitter.listenerCount(name)
|
return emitter.listenerCount(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.getMaxListeners = function getMaxListeners(emitter) {
|
||||||
|
if (typeof emitter.getMaxListeners === 'function') {
|
||||||
|
return emitter.getMaxListeners()
|
||||||
|
}
|
||||||
|
|
||||||
|
return exports.defaultMaxListeners
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.setMaxListeners = function setMaxListeners(n, ...emitters) {
|
||||||
|
if (emitters.length === 0) exports.defaultMaxListeners = n
|
||||||
|
else {
|
||||||
|
for (const emitter of emitters) {
|
||||||
|
if (typeof emitter.setMaxListeners === 'function') {
|
||||||
|
emitter.setMaxListeners(n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+10
-6
@@ -1,5 +1,5 @@
|
|||||||
module.exports = class EventEmitterError extends Error {
|
module.exports = class EventEmitterError extends Error {
|
||||||
constructor (msg, code, fn = EventEmitterError, opts) {
|
constructor(msg, code, fn = EventEmitterError, opts) {
|
||||||
super(`${code}: ${msg}`, opts)
|
super(`${code}: ${msg}`, opts)
|
||||||
this.code = code
|
this.code = code
|
||||||
|
|
||||||
@@ -8,15 +8,19 @@ module.exports = class EventEmitterError extends Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get name () {
|
get name() {
|
||||||
return 'EventEmitterError'
|
return 'EventEmitterError'
|
||||||
}
|
}
|
||||||
|
|
||||||
static OPERATION_ABORTED (cause, msg = 'Operation aborted') {
|
static OPERATION_ABORTED(cause, msg = 'Operation aborted') {
|
||||||
return new EventEmitterError(msg, 'OPERATION_ABORTED', EventEmitterError.OPERATION_ABORTED, { cause })
|
return new EventEmitterError(msg, 'OPERATION_ABORTED', EventEmitterError.OPERATION_ABORTED, {
|
||||||
|
cause
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
static UNHANDLED_ERROR (cause, msg = 'Unhandled error') {
|
static UNHANDLED_ERROR(cause, msg = 'Unhandled error') {
|
||||||
return new EventEmitterError(msg, 'UNHANDLED_ERROR', EventEmitterError.UNHANDLED_ERROR, { cause })
|
return new EventEmitterError(msg, 'UNHANDLED_ERROR', EventEmitterError.UNHANDLED_ERROR, {
|
||||||
|
cause
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-4
@@ -1,21 +1,37 @@
|
|||||||
{
|
{
|
||||||
"name": "bare-events",
|
"name": "bare-events",
|
||||||
"version": "2.5.0",
|
"version": "2.8.1",
|
||||||
"description": "Event emitters for JavaScript",
|
"description": "Event emitters for JavaScript",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./index.js",
|
|
||||||
"./package": "./package.json",
|
"./package": "./package.json",
|
||||||
|
".": {
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"default": "./index.js"
|
||||||
|
},
|
||||||
|
"./global": {
|
||||||
|
"types": "./global.d.ts",
|
||||||
|
"default": "./global.js"
|
||||||
|
},
|
||||||
|
"./web": {
|
||||||
|
"types": "./web.d.ts",
|
||||||
|
"default": "./web.js"
|
||||||
|
},
|
||||||
"./errors": "./lib/errors.js"
|
"./errors": "./lib/errors.js"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"index.js",
|
"index.js",
|
||||||
|
"index.d.ts",
|
||||||
|
"global.js",
|
||||||
|
"global.d.ts",
|
||||||
|
"web.js",
|
||||||
|
"web.d.ts",
|
||||||
"lib"
|
"lib"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "npm run lint && npm run test:bare && npm run test:node",
|
"test": "npm run lint && npm run test:bare && npm run test:node",
|
||||||
"test:bare": "bare test.js",
|
"test:bare": "bare test.js",
|
||||||
"test:node": "node test.js",
|
"test:node": "node test.js",
|
||||||
"lint": "standard"
|
"lint": "prettier . --check"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -28,7 +44,18 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/holepunchto/bare-events#readme",
|
"homepage": "https://github.com/holepunchto/bare-events#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"bare-abort-controller": "^1.0.0",
|
||||||
"brittle": "^3.3.2",
|
"brittle": "^3.3.2",
|
||||||
"standard": "^17.0.0"
|
"prettier": "^3.4.2",
|
||||||
|
"prettier-config-holepunch": "^2.0.0",
|
||||||
|
"uncaughts": "^1.1.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bare-abort-controller": "*"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bare-abort-controller": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-3
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "debug",
|
"name": "debug",
|
||||||
"version": "4.3.7",
|
"version": "4.4.3",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git://github.com/debug-js/debug.git"
|
"url": "git://github.com/debug-js/debug.git"
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "xo",
|
"lint": "xo",
|
||||||
"test": "npm run test:node && npm run test:browser && npm run lint",
|
"test": "npm run test:node && npm run test:browser && npm run lint",
|
||||||
"test:node": "istanbul cover _mocha -- test.js test.node.js",
|
"test:node": "mocha test.js test.node.js",
|
||||||
"test:browser": "karma start --single-run",
|
"test:browser": "karma start --single-run",
|
||||||
"test:coverage": "cat ./coverage/lcov.info | coveralls"
|
"test:coverage": "cat ./coverage/lcov.info | coveralls"
|
||||||
},
|
},
|
||||||
@@ -37,7 +37,6 @@
|
|||||||
"brfs": "^2.0.1",
|
"brfs": "^2.0.1",
|
||||||
"browserify": "^16.2.3",
|
"browserify": "^16.2.3",
|
||||||
"coveralls": "^3.0.2",
|
"coveralls": "^3.0.2",
|
||||||
"istanbul": "^0.4.5",
|
|
||||||
"karma": "^3.1.4",
|
"karma": "^3.1.4",
|
||||||
"karma-browserify": "^6.0.0",
|
"karma-browserify": "^6.0.0",
|
||||||
"karma-chrome-launcher": "^2.2.0",
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
@@ -56,5 +55,10 @@
|
|||||||
"browser": "./src/browser.js",
|
"browser": "./src/browser.js",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.0"
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"xo": {
|
||||||
|
"rules": {
|
||||||
|
"import/extensions": "off"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -129,6 +129,7 @@ function useColors() {
|
|||||||
|
|
||||||
// Is webkit? http://stackoverflow.com/a/16459606/376773
|
// Is webkit? http://stackoverflow.com/a/16459606/376773
|
||||||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
||||||
|
// eslint-disable-next-line no-return-assign
|
||||||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
||||||
// Is firebug? http://stackoverflow.com/a/398120/376773
|
// Is firebug? http://stackoverflow.com/a/398120/376773
|
||||||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||||||
@@ -218,7 +219,7 @@ function save(namespaces) {
|
|||||||
function load() {
|
function load() {
|
||||||
let r;
|
let r;
|
||||||
try {
|
try {
|
||||||
r = exports.storage.getItem('debug');
|
r = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Swallow
|
// Swallow
|
||||||
// XXX (@Qix-) should we be logging these?
|
// XXX (@Qix-) should we be logging these?
|
||||||
|
|||||||
+58
-40
@@ -166,26 +166,64 @@ function setup(env) {
|
|||||||
createDebug.names = [];
|
createDebug.names = [];
|
||||||
createDebug.skips = [];
|
createDebug.skips = [];
|
||||||
|
|
||||||
let i;
|
const split = (typeof namespaces === 'string' ? namespaces : '')
|
||||||
const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
.trim()
|
||||||
const len = split.length;
|
.replace(/\s+/g, ',')
|
||||||
|
.split(',')
|
||||||
|
.filter(Boolean);
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (const ns of split) {
|
||||||
if (!split[i]) {
|
if (ns[0] === '-') {
|
||||||
// ignore empty strings
|
createDebug.skips.push(ns.slice(1));
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespaces = split[i].replace(/\*/g, '.*?');
|
|
||||||
|
|
||||||
if (namespaces[0] === '-') {
|
|
||||||
createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));
|
|
||||||
} else {
|
} else {
|
||||||
createDebug.names.push(new RegExp('^' + namespaces + '$'));
|
createDebug.names.push(ns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the given string matches a namespace template, honoring
|
||||||
|
* asterisks as wildcards.
|
||||||
|
*
|
||||||
|
* @param {String} search
|
||||||
|
* @param {String} template
|
||||||
|
* @return {Boolean}
|
||||||
|
*/
|
||||||
|
function matchesTemplate(search, template) {
|
||||||
|
let searchIndex = 0;
|
||||||
|
let templateIndex = 0;
|
||||||
|
let starIndex = -1;
|
||||||
|
let matchIndex = 0;
|
||||||
|
|
||||||
|
while (searchIndex < search.length) {
|
||||||
|
if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {
|
||||||
|
// Match character or proceed with wildcard
|
||||||
|
if (template[templateIndex] === '*') {
|
||||||
|
starIndex = templateIndex;
|
||||||
|
matchIndex = searchIndex;
|
||||||
|
templateIndex++; // Skip the '*'
|
||||||
|
} else {
|
||||||
|
searchIndex++;
|
||||||
|
templateIndex++;
|
||||||
|
}
|
||||||
|
} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition
|
||||||
|
// Backtrack to the last '*' and try to match more characters
|
||||||
|
templateIndex = starIndex + 1;
|
||||||
|
matchIndex++;
|
||||||
|
searchIndex = matchIndex;
|
||||||
|
} else {
|
||||||
|
return false; // No match
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle trailing '*' in template
|
||||||
|
while (templateIndex < template.length && template[templateIndex] === '*') {
|
||||||
|
templateIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return templateIndex === template.length;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable debug output.
|
* Disable debug output.
|
||||||
*
|
*
|
||||||
@@ -194,8 +232,8 @@ function setup(env) {
|
|||||||
*/
|
*/
|
||||||
function disable() {
|
function disable() {
|
||||||
const namespaces = [
|
const namespaces = [
|
||||||
...createDebug.names.map(toNamespace),
|
...createDebug.names,
|
||||||
...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
|
...createDebug.skips.map(namespace => '-' + namespace)
|
||||||
].join(',');
|
].join(',');
|
||||||
createDebug.enable('');
|
createDebug.enable('');
|
||||||
return namespaces;
|
return namespaces;
|
||||||
@@ -209,21 +247,14 @@ function setup(env) {
|
|||||||
* @api public
|
* @api public
|
||||||
*/
|
*/
|
||||||
function enabled(name) {
|
function enabled(name) {
|
||||||
if (name[name.length - 1] === '*') {
|
for (const skip of createDebug.skips) {
|
||||||
return true;
|
if (matchesTemplate(name, skip)) {
|
||||||
}
|
|
||||||
|
|
||||||
let i;
|
|
||||||
let len;
|
|
||||||
|
|
||||||
for (i = 0, len = createDebug.skips.length; i < len; i++) {
|
|
||||||
if (createDebug.skips[i].test(name)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0, len = createDebug.names.length; i < len; i++) {
|
for (const ns of createDebug.names) {
|
||||||
if (createDebug.names[i].test(name)) {
|
if (matchesTemplate(name, ns)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -231,19 +262,6 @@ function setup(env) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert regexp to namespace
|
|
||||||
*
|
|
||||||
* @param {RegExp} regxep
|
|
||||||
* @return {String} namespace
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
function toNamespace(regexp) {
|
|
||||||
return regexp.toString()
|
|
||||||
.substring(2, regexp.toString().length - 2)
|
|
||||||
.replace(/\.\*\?$/, '*');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Coerce `val`.
|
* Coerce `val`.
|
||||||
*
|
*
|
||||||
|
|||||||
-24
@@ -1,24 +0,0 @@
|
|||||||
name: Build Status
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [14.x]
|
|
||||||
os: [ubuntu-16.04, macos-latest, windows-latest]
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
- run: npm install
|
|
||||||
- run: npm test
|
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2021 Mathias Buus
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
# queue-tick
|
|
||||||
|
|
||||||
Next tick shim that prefers process.nextTick over queueMicrotask for compat
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install queue-tick
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
``` js
|
|
||||||
const queueTick = require('queue-tick')
|
|
||||||
|
|
||||||
// in Node it uses process.nextTick, in browsers it uses queueMicrotask
|
|
||||||
queueTick(() => console.log('laters'))
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "queue-tick",
|
|
||||||
"version": "1.0.1",
|
|
||||||
"description": "Next tick shim that prefers process.nextTick over queueMicrotask for compat",
|
|
||||||
"main": "./process-next-tick.js",
|
|
||||||
"browser": "./queue-microtask.js",
|
|
||||||
"dependencies": {},
|
|
||||||
"devDependencies": {
|
|
||||||
"standard": "^16.0.3",
|
|
||||||
"tape": "^5.3.1"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "standard && tape test.js"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/mafintosh/queue-tick.git"
|
|
||||||
},
|
|
||||||
"author": "Mathias Buus (@mafintosh)",
|
|
||||||
"license": "MIT",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/mafintosh/queue-tick/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/mafintosh/queue-tick"
|
|
||||||
}
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
module.exports = (typeof process !== 'undefined' && typeof process.nextTick === 'function')
|
|
||||||
? process.nextTick.bind(process)
|
|
||||||
: require('./queue-microtask')
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
module.exports = typeof queueMicrotask === 'function' ? queueMicrotask : (fn) => Promise.resolve().then(fn)
|
|
||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
const tape = require('tape')
|
|
||||||
const queueTick = require('./')
|
|
||||||
const js = require('./queue-microtask')
|
|
||||||
|
|
||||||
tape('basic', function (t) {
|
|
||||||
t.plan(2)
|
|
||||||
|
|
||||||
queueTick(() => t.pass('tick'))
|
|
||||||
js(() => t.pass('tock'))
|
|
||||||
})
|
|
||||||
+14
-4
@@ -100,7 +100,7 @@ Options:
|
|||||||
-i --increment [<level>]
|
-i --increment [<level>]
|
||||||
Increment a version by the specified level. Level can
|
Increment a version by the specified level. Level can
|
||||||
be one of: major, minor, patch, premajor, preminor,
|
be one of: major, minor, patch, premajor, preminor,
|
||||||
prepatch, or prerelease. Default level is 'patch'.
|
prepatch, prerelease, or release. Default level is 'patch'.
|
||||||
Only one version may be specified.
|
Only one version may be specified.
|
||||||
|
|
||||||
--preid <identifier>
|
--preid <identifier>
|
||||||
@@ -141,6 +141,8 @@ A "version" is described by the `v2.0.0` specification found at
|
|||||||
<https://semver.org/>.
|
<https://semver.org/>.
|
||||||
|
|
||||||
A leading `"="` or `"v"` character is stripped off and ignored.
|
A leading `"="` or `"v"` character is stripped off and ignored.
|
||||||
|
Support for stripping a leading "v" is kept for compatibility with `v1.0.0` of the SemVer
|
||||||
|
specification but should not be used anymore.
|
||||||
|
|
||||||
## Ranges
|
## Ranges
|
||||||
|
|
||||||
@@ -237,6 +239,13 @@ $ semver 1.2.4-beta.0 -i prerelease
|
|||||||
1.2.4-beta.1
|
1.2.4-beta.1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To get out of the prerelease phase, use the `release` option:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ semver 1.2.4-beta.1 -i release
|
||||||
|
1.2.4
|
||||||
|
```
|
||||||
|
|
||||||
#### Prerelease Identifier Base
|
#### Prerelease Identifier Base
|
||||||
|
|
||||||
The method `.inc` takes an optional parameter 'identifierBase' string
|
The method `.inc` takes an optional parameter 'identifierBase' string
|
||||||
@@ -415,10 +424,10 @@ Strict-mode Comparators and Ranges will be strict about the SemVer
|
|||||||
strings that they parse.
|
strings that they parse.
|
||||||
|
|
||||||
* `valid(v)`: Return the parsed version, or null if it's not valid.
|
* `valid(v)`: Return the parsed version, or null if it's not valid.
|
||||||
* `inc(v, release, options, identifier, identifierBase)`:
|
* `inc(v, releaseType, options, identifier, identifierBase)`:
|
||||||
Return the version incremented by the release
|
Return the version incremented by the release
|
||||||
type (`major`, `premajor`, `minor`, `preminor`, `patch`,
|
type (`major`, `premajor`, `minor`, `preminor`, `patch`,
|
||||||
`prepatch`, or `prerelease`), or null if it's not valid
|
`prepatch`, `prerelease`, or `release`), or null if it's not valid
|
||||||
* `premajor` in one call will bump the version up to the next major
|
* `premajor` in one call will bump the version up to the next major
|
||||||
version and down to a prerelease of that major version.
|
version and down to a prerelease of that major version.
|
||||||
`preminor`, and `prepatch` work the same way.
|
`preminor`, and `prepatch` work the same way.
|
||||||
@@ -426,6 +435,7 @@ strings that they parse.
|
|||||||
same as `prepatch`. It increments the patch version and then makes a
|
same as `prepatch`. It increments the patch version and then makes a
|
||||||
prerelease. If the input version is already a prerelease it simply
|
prerelease. If the input version is already a prerelease it simply
|
||||||
increments it.
|
increments it.
|
||||||
|
* `release` will remove any prerelease part of the version.
|
||||||
* `identifier` can be used to prefix `premajor`, `preminor`,
|
* `identifier` can be used to prefix `premajor`, `preminor`,
|
||||||
`prepatch`, or `prerelease` version increments. `identifierBase`
|
`prepatch`, or `prerelease` version increments. `identifierBase`
|
||||||
is the base to be used for the `prerelease` identifier.
|
is the base to be used for the `prerelease` identifier.
|
||||||
@@ -477,7 +487,7 @@ strings that they parse.
|
|||||||
|
|
||||||
### Ranges
|
### Ranges
|
||||||
|
|
||||||
* `validRange(range)`: Return the valid range or null if it's not valid
|
* `validRange(range)`: Return the valid range or null if it's not valid.
|
||||||
* `satisfies(version, range)`: Return true if the version satisfies the
|
* `satisfies(version, range)`: Return true if the version satisfies the
|
||||||
range.
|
range.
|
||||||
* `maxSatisfying(versions, range)`: Return the highest version in the list
|
* `maxSatisfying(versions, range)`: Return the highest version in the list
|
||||||
|
|||||||
+4
-1
@@ -3,6 +3,8 @@
|
|||||||
// Exits successfully and prints matching version(s) if
|
// Exits successfully and prints matching version(s) if
|
||||||
// any supplied version is valid and passes all tests.
|
// any supplied version is valid and passes all tests.
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
const argv = process.argv.slice(2)
|
const argv = process.argv.slice(2)
|
||||||
|
|
||||||
let versions = []
|
let versions = []
|
||||||
@@ -61,6 +63,7 @@ const main = () => {
|
|||||||
switch (argv[0]) {
|
switch (argv[0]) {
|
||||||
case 'major': case 'minor': case 'patch': case 'prerelease':
|
case 'major': case 'minor': case 'patch': case 'prerelease':
|
||||||
case 'premajor': case 'preminor': case 'prepatch':
|
case 'premajor': case 'preminor': case 'prepatch':
|
||||||
|
case 'release':
|
||||||
inc = argv.shift()
|
inc = argv.shift()
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
@@ -149,7 +152,7 @@ Options:
|
|||||||
-i --increment [<level>]
|
-i --increment [<level>]
|
||||||
Increment a version by the specified level. Level can
|
Increment a version by the specified level. Level can
|
||||||
be one of: major, minor, patch, premajor, preminor,
|
be one of: major, minor, patch, premajor, preminor,
|
||||||
prepatch, or prerelease. Default level is 'patch'.
|
prepatch, prerelease, or release. Default level is 'patch'.
|
||||||
Only one version may be specified.
|
Only one version may be specified.
|
||||||
|
|
||||||
--preid <identifier>
|
--preid <identifier>
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const ANY = Symbol('SemVer ANY')
|
const ANY = Symbol('SemVer ANY')
|
||||||
// hoisted class for cyclic dependency
|
// hoisted class for cyclic dependency
|
||||||
class Comparator {
|
class Comparator {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
SemVer: require('./semver.js'),
|
SemVer: require('./semver.js'),
|
||||||
Range: require('./range.js'),
|
Range: require('./range.js'),
|
||||||
|
|||||||
+3
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SPACE_CHARACTERS = /\s+/g
|
const SPACE_CHARACTERS = /\s+/g
|
||||||
|
|
||||||
// hoisted class for cyclic dependency
|
// hoisted class for cyclic dependency
|
||||||
@@ -253,6 +255,7 @@ const isSatisfiable = (comparators, options) => {
|
|||||||
// already replaced the hyphen ranges
|
// already replaced the hyphen ranges
|
||||||
// turn into a set of JUST comparators.
|
// turn into a set of JUST comparators.
|
||||||
const parseComparator = (comp, options) => {
|
const parseComparator = (comp, options) => {
|
||||||
|
comp = comp.replace(re[t.BUILD], '')
|
||||||
debug('comp', comp, options)
|
debug('comp', comp, options)
|
||||||
comp = replaceCarets(comp, options)
|
comp = replaceCarets(comp, options)
|
||||||
debug('caret', comp)
|
debug('caret', comp)
|
||||||
|
|||||||
+40
-9
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const debug = require('../internal/debug')
|
const debug = require('../internal/debug')
|
||||||
const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')
|
const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')
|
||||||
const { safeRe: re, t } = require('../internal/re')
|
const { safeRe: re, t } = require('../internal/re')
|
||||||
@@ -109,11 +111,25 @@ class SemVer {
|
|||||||
other = new SemVer(other, this.options)
|
other = new SemVer(other, this.options)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
if (this.major < other.major) {
|
||||||
compareIdentifiers(this.major, other.major) ||
|
return -1
|
||||||
compareIdentifiers(this.minor, other.minor) ||
|
}
|
||||||
compareIdentifiers(this.patch, other.patch)
|
if (this.major > other.major) {
|
||||||
)
|
return 1
|
||||||
|
}
|
||||||
|
if (this.minor < other.minor) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if (this.minor > other.minor) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
if (this.patch < other.patch) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if (this.patch > other.patch) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
comparePre (other) {
|
comparePre (other) {
|
||||||
@@ -176,6 +192,19 @@ class SemVer {
|
|||||||
// preminor will bump the version up to the next minor release, and immediately
|
// preminor will bump the version up to the next minor release, and immediately
|
||||||
// down to pre-release. premajor and prepatch work the same way.
|
// down to pre-release. premajor and prepatch work the same way.
|
||||||
inc (release, identifier, identifierBase) {
|
inc (release, identifier, identifierBase) {
|
||||||
|
if (release.startsWith('pre')) {
|
||||||
|
if (!identifier && identifierBase === false) {
|
||||||
|
throw new Error('invalid increment argument: identifier is empty')
|
||||||
|
}
|
||||||
|
// Avoid an invalid semver results
|
||||||
|
if (identifier) {
|
||||||
|
const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])
|
||||||
|
if (!match || match[1] !== identifier) {
|
||||||
|
throw new Error(`invalid identifier: ${identifier}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (release) {
|
switch (release) {
|
||||||
case 'premajor':
|
case 'premajor':
|
||||||
this.prerelease.length = 0
|
this.prerelease.length = 0
|
||||||
@@ -206,6 +235,12 @@ class SemVer {
|
|||||||
}
|
}
|
||||||
this.inc('pre', identifier, identifierBase)
|
this.inc('pre', identifier, identifierBase)
|
||||||
break
|
break
|
||||||
|
case 'release':
|
||||||
|
if (this.prerelease.length === 0) {
|
||||||
|
throw new Error(`version ${this.raw} is not a prerelease`)
|
||||||
|
}
|
||||||
|
this.prerelease.length = 0
|
||||||
|
break
|
||||||
|
|
||||||
case 'major':
|
case 'major':
|
||||||
// If this is a pre-major version, bump up to the same major version.
|
// If this is a pre-major version, bump up to the same major version.
|
||||||
@@ -249,10 +284,6 @@ class SemVer {
|
|||||||
case 'pre': {
|
case 'pre': {
|
||||||
const base = Number(identifierBase) ? 1 : 0
|
const base = Number(identifierBase) ? 1 : 0
|
||||||
|
|
||||||
if (!identifier && identifierBase === false) {
|
|
||||||
throw new Error('invalid increment argument: identifier is empty')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.prerelease.length === 0) {
|
if (this.prerelease.length === 0) {
|
||||||
this.prerelease = [base]
|
this.prerelease = [base]
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const parse = require('./parse')
|
const parse = require('./parse')
|
||||||
const clean = (version, options) => {
|
const clean = (version, options) => {
|
||||||
const s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
const s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const eq = require('./eq')
|
const eq = require('./eq')
|
||||||
const neq = require('./neq')
|
const neq = require('./neq')
|
||||||
const gt = require('./gt')
|
const gt = require('./gt')
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const parse = require('./parse')
|
const parse = require('./parse')
|
||||||
const { safeRe: re, t } = require('../internal/re')
|
const { safeRe: re, t } = require('../internal/re')
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const compareBuild = (a, b, loose) => {
|
const compareBuild = (a, b, loose) => {
|
||||||
const versionA = new SemVer(a, loose)
|
const versionA = new SemVer(a, loose)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const compareLoose = (a, b) => compare(a, b, true)
|
const compareLoose = (a, b) => compare(a, b, true)
|
||||||
module.exports = compareLoose
|
module.exports = compareLoose
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const compare = (a, b, loose) =>
|
const compare = (a, b, loose) =>
|
||||||
new SemVer(a, loose).compare(new SemVer(b, loose))
|
new SemVer(a, loose).compare(new SemVer(b, loose))
|
||||||
|
|||||||
+7
-12
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const parse = require('./parse.js')
|
const parse = require('./parse.js')
|
||||||
|
|
||||||
const diff = (version1, version2) => {
|
const diff = (version1, version2) => {
|
||||||
@@ -27,20 +29,13 @@ const diff = (version1, version2) => {
|
|||||||
return 'major'
|
return 'major'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise it can be determined by checking the high version
|
// If the main part has no difference
|
||||||
|
if (lowVersion.compareMain(highVersion) === 0) {
|
||||||
if (highVersion.patch) {
|
if (lowVersion.minor && !lowVersion.patch) {
|
||||||
// anything higher than a patch bump would result in the wrong version
|
|
||||||
return 'patch'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (highVersion.minor) {
|
|
||||||
// anything higher than a minor bump would result in the wrong version
|
|
||||||
return 'minor'
|
return 'minor'
|
||||||
}
|
}
|
||||||
|
return 'patch'
|
||||||
// bumping major/minor/patch all have same result
|
}
|
||||||
return 'major'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the `pre` prefix if we are going to a prerelease version
|
// add the `pre` prefix if we are going to a prerelease version
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const eq = (a, b, loose) => compare(a, b, loose) === 0
|
const eq = (a, b, loose) => compare(a, b, loose) === 0
|
||||||
module.exports = eq
|
module.exports = eq
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const gt = (a, b, loose) => compare(a, b, loose) > 0
|
const gt = (a, b, loose) => compare(a, b, loose) > 0
|
||||||
module.exports = gt
|
module.exports = gt
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const gte = (a, b, loose) => compare(a, b, loose) >= 0
|
const gte = (a, b, loose) => compare(a, b, loose) >= 0
|
||||||
module.exports = gte
|
module.exports = gte
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
|
|
||||||
const inc = (version, release, options, identifier, identifierBase) => {
|
const inc = (version, release, options, identifier, identifierBase) => {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const lt = (a, b, loose) => compare(a, b, loose) < 0
|
const lt = (a, b, loose) => compare(a, b, loose) < 0
|
||||||
module.exports = lt
|
module.exports = lt
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const lte = (a, b, loose) => compare(a, b, loose) <= 0
|
const lte = (a, b, loose) => compare(a, b, loose) <= 0
|
||||||
module.exports = lte
|
module.exports = lte
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const major = (a, loose) => new SemVer(a, loose).major
|
const major = (a, loose) => new SemVer(a, loose).major
|
||||||
module.exports = major
|
module.exports = major
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const minor = (a, loose) => new SemVer(a, loose).minor
|
const minor = (a, loose) => new SemVer(a, loose).minor
|
||||||
module.exports = minor
|
module.exports = minor
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const neq = (a, b, loose) => compare(a, b, loose) !== 0
|
const neq = (a, b, loose) => compare(a, b, loose) !== 0
|
||||||
module.exports = neq
|
module.exports = neq
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const parse = (version, options, throwErrors = false) => {
|
const parse = (version, options, throwErrors = false) => {
|
||||||
if (version instanceof SemVer) {
|
if (version instanceof SemVer) {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const patch = (a, loose) => new SemVer(a, loose).patch
|
const patch = (a, loose) => new SemVer(a, loose).patch
|
||||||
module.exports = patch
|
module.exports = patch
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const parse = require('./parse')
|
const parse = require('./parse')
|
||||||
const prerelease = (version, options) => {
|
const prerelease = (version, options) => {
|
||||||
const parsed = parse(version, options)
|
const parsed = parse(version, options)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compare = require('./compare')
|
const compare = require('./compare')
|
||||||
const rcompare = (a, b, loose) => compare(b, a, loose)
|
const rcompare = (a, b, loose) => compare(b, a, loose)
|
||||||
module.exports = rcompare
|
module.exports = rcompare
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compareBuild = require('./compare-build')
|
const compareBuild = require('./compare-build')
|
||||||
const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
|
const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
|
||||||
module.exports = rsort
|
module.exports = rsort
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
const satisfies = (version, range, options) => {
|
const satisfies = (version, range, options) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const compareBuild = require('./compare-build')
|
const compareBuild = require('./compare-build')
|
||||||
const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
|
const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
|
||||||
module.exports = sort
|
module.exports = sort
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const parse = require('./parse')
|
const parse = require('./parse')
|
||||||
const valid = (version, options) => {
|
const valid = (version, options) => {
|
||||||
const v = parse(version, options)
|
const v = parse(version, options)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
// just pre-load all the stuff that index.js lazily exports
|
// just pre-load all the stuff that index.js lazily exports
|
||||||
const internalRe = require('./internal/re')
|
const internalRe = require('./internal/re')
|
||||||
const constants = require('./internal/constants')
|
const constants = require('./internal/constants')
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
// Note: this is the semver.org version of the spec that it implements
|
// Note: this is the semver.org version of the spec that it implements
|
||||||
// Not necessarily the package version of this code.
|
// Not necessarily the package version of this code.
|
||||||
const SEMVER_SPEC_VERSION = '2.0.0'
|
const SEMVER_SPEC_VERSION = '2.0.0'
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const debug = (
|
const debug = (
|
||||||
typeof process === 'object' &&
|
typeof process === 'object' &&
|
||||||
process.env &&
|
process.env &&
|
||||||
|
|||||||
+6
@@ -1,5 +1,11 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const numeric = /^[0-9]+$/
|
const numeric = /^[0-9]+$/
|
||||||
const compareIdentifiers = (a, b) => {
|
const compareIdentifiers = (a, b) => {
|
||||||
|
if (typeof a === 'number' && typeof b === 'number') {
|
||||||
|
return a === b ? 0 : a < b ? -1 : 1
|
||||||
|
}
|
||||||
|
|
||||||
const anum = numeric.test(a)
|
const anum = numeric.test(a)
|
||||||
const bnum = numeric.test(b)
|
const bnum = numeric.test(b)
|
||||||
|
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
class LRUCache {
|
class LRUCache {
|
||||||
constructor () {
|
constructor () {
|
||||||
this.max = 1000
|
this.max = 1000
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
// parse out just the options we care about
|
// parse out just the options we care about
|
||||||
const looseOption = Object.freeze({ loose: true })
|
const looseOption = Object.freeze({ loose: true })
|
||||||
const emptyOpts = Object.freeze({ })
|
const emptyOpts = Object.freeze({ })
|
||||||
|
|||||||
+10
-4
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const {
|
const {
|
||||||
MAX_SAFE_COMPONENT_LENGTH,
|
MAX_SAFE_COMPONENT_LENGTH,
|
||||||
MAX_SAFE_BUILD_LENGTH,
|
MAX_SAFE_BUILD_LENGTH,
|
||||||
@@ -10,6 +12,7 @@ exports = module.exports = {}
|
|||||||
const re = exports.re = []
|
const re = exports.re = []
|
||||||
const safeRe = exports.safeRe = []
|
const safeRe = exports.safeRe = []
|
||||||
const src = exports.src = []
|
const src = exports.src = []
|
||||||
|
const safeSrc = exports.safeSrc = []
|
||||||
const t = exports.t = {}
|
const t = exports.t = {}
|
||||||
let R = 0
|
let R = 0
|
||||||
|
|
||||||
@@ -42,6 +45,7 @@ const createToken = (name, value, isGlobal) => {
|
|||||||
debug(name, index, value)
|
debug(name, index, value)
|
||||||
t[name] = index
|
t[name] = index
|
||||||
src[index] = value
|
src[index] = value
|
||||||
|
safeSrc[index] = safe
|
||||||
re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
|
re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
|
||||||
safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)
|
safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)
|
||||||
}
|
}
|
||||||
@@ -74,12 +78,14 @@ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
|
|||||||
|
|
||||||
// ## Pre-release Version Identifier
|
// ## Pre-release Version Identifier
|
||||||
// A numeric identifier, or a non-numeric identifier.
|
// A numeric identifier, or a non-numeric identifier.
|
||||||
|
// Non-numberic identifiers include numberic identifiers but can be longer.
|
||||||
|
// Therefore non-numberic identifiers must go first.
|
||||||
|
|
||||||
createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
|
createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]
|
||||||
}|${src[t.NONNUMERICIDENTIFIER]})`)
|
}|${src[t.NUMERICIDENTIFIER]})`)
|
||||||
|
|
||||||
createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
|
createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]
|
||||||
}|${src[t.NONNUMERICIDENTIFIER]})`)
|
}|${src[t.NUMERICIDENTIFIERLOOSE]})`)
|
||||||
|
|
||||||
// ## Pre-release Version
|
// ## Pre-release Version
|
||||||
// Hyphen, followed by one or more dot-separated pre-release version
|
// Hyphen, followed by one or more dot-separated pre-release version
|
||||||
|
|||||||
+8
-7
@@ -1,20 +1,21 @@
|
|||||||
{
|
{
|
||||||
"name": "semver",
|
"name": "semver",
|
||||||
"version": "7.6.3",
|
"version": "7.7.3",
|
||||||
"description": "The semantic version parser used by npm.",
|
"description": "The semantic version parser used by npm.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "tap",
|
"test": "tap",
|
||||||
"snap": "tap",
|
"snap": "tap",
|
||||||
"lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
|
"lint": "npm run eslint",
|
||||||
"postlint": "template-oss-check",
|
"postlint": "template-oss-check",
|
||||||
"lintfix": "npm run lint -- --fix",
|
"lintfix": "npm run eslint -- --fix",
|
||||||
"posttest": "npm run lint",
|
"posttest": "npm run lint",
|
||||||
"template-oss-apply": "template-oss-apply --force"
|
"template-oss-apply": "template-oss-apply --force",
|
||||||
|
"eslint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@npmcli/eslint-config": "^4.0.0",
|
"@npmcli/eslint-config": "^5.0.0",
|
||||||
"@npmcli/template-oss": "4.22.0",
|
"@npmcli/template-oss": "4.25.1",
|
||||||
"benchmark": "^2.1.4",
|
"benchmark": "^2.1.4",
|
||||||
"tap": "^16.0.0"
|
"tap": "^16.0.0"
|
||||||
},
|
},
|
||||||
@@ -51,7 +52,7 @@
|
|||||||
"author": "GitHub Inc.",
|
"author": "GitHub Inc.",
|
||||||
"templateOSS": {
|
"templateOSS": {
|
||||||
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
|
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
|
||||||
"version": "4.22.0",
|
"version": "4.25.1",
|
||||||
"engines": ">=10",
|
"engines": ">=10",
|
||||||
"distPaths": [
|
"distPaths": [
|
||||||
"classes/",
|
"classes/",
|
||||||
|
|||||||
+2
@@ -1,2 +1,4 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
// XXX remove in v8 or beyond
|
// XXX remove in v8 or beyond
|
||||||
module.exports = require('./index.js')
|
module.exports = require('./index.js')
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
// Determine if version is greater than all the versions possible in the range.
|
// Determine if version is greater than all the versions possible in the range.
|
||||||
const outside = require('./outside')
|
const outside = require('./outside')
|
||||||
const gtr = (version, range, options) => outside(version, range, '>', options)
|
const gtr = (version, range, options) => outside(version, range, '>', options)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
const intersects = (r1, r2, options) => {
|
const intersects = (r1, r2, options) => {
|
||||||
r1 = new Range(r1, options)
|
r1 = new Range(r1, options)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const outside = require('./outside')
|
const outside = require('./outside')
|
||||||
// Determine if version is less than all the versions possible in the range
|
// Determine if version is less than all the versions possible in the range
|
||||||
const ltr = (version, range, options) => outside(version, range, '<', options)
|
const ltr = (version, range, options) => outside(version, range, '<', options)
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
|
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
const minSatisfying = (versions, range, options) => {
|
const minSatisfying = (versions, range, options) => {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
const gt = require('../functions/gt')
|
const gt = require('../functions/gt')
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const SemVer = require('../classes/semver')
|
const SemVer = require('../classes/semver')
|
||||||
const Comparator = require('../classes/comparator')
|
const Comparator = require('../classes/comparator')
|
||||||
const { ANY } = Comparator
|
const { ANY } = Comparator
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
// given a set of versions and a range, create a "simplified" range
|
// given a set of versions and a range, create a "simplified" range
|
||||||
// that includes the same versions that the original range does
|
// that includes the same versions that the original range does
|
||||||
// If the original range is shorter than the simplified one, return that.
|
// If the original range is shorter than the simplified one, return that.
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const Range = require('../classes/range.js')
|
const Range = require('../classes/range.js')
|
||||||
const Comparator = require('../classes/comparator.js')
|
const Comparator = require('../classes/comparator.js')
|
||||||
const { ANY } = Comparator
|
const { ANY } = Comparator
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
|
|
||||||
// Mostly just for testing and legacy API reasons
|
// Mostly just for testing and legacy API reasons
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
const Range = require('../classes/range')
|
const Range = require('../classes/range')
|
||||||
const validRange = (range, options) => {
|
const validRange = (range, options) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
+20
-6
@@ -1,11 +1,13 @@
|
|||||||
const { EventEmitter } = require('events')
|
const { EventEmitter } = require('events-universal')
|
||||||
const STREAM_DESTROYED = new Error('Stream was destroyed')
|
const STREAM_DESTROYED = new Error('Stream was destroyed')
|
||||||
const PREMATURE_CLOSE = new Error('Premature close')
|
const PREMATURE_CLOSE = new Error('Premature close')
|
||||||
|
|
||||||
const queueTick = require('queue-tick')
|
|
||||||
const FIFO = require('fast-fifo')
|
const FIFO = require('fast-fifo')
|
||||||
const TextDecoder = require('text-decoder')
|
const TextDecoder = require('text-decoder')
|
||||||
|
|
||||||
|
// if we do a future major, expect queue microtask to be there always, for now a bit defensive
|
||||||
|
const qmt = typeof queueMicrotask === 'undefined' ? fn => global.process.nextTick(fn) : queueMicrotask
|
||||||
|
|
||||||
/* eslint-disable no-multi-spaces */
|
/* eslint-disable no-multi-spaces */
|
||||||
|
|
||||||
// 29 bits used total (4 from shared, 14 from read, and 11 from write)
|
// 29 bits used total (4 from shared, 14 from read, and 11 from write)
|
||||||
@@ -98,6 +100,7 @@ const READ_READABLE_STATUS = OPEN_STATUS | READ_EMIT_READABLE | READ_QUEUED | RE
|
|||||||
const SHOULD_NOT_READ = OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD
|
const SHOULD_NOT_READ = OPEN_STATUS | READ_ACTIVE | READ_ENDING | READ_DONE | READ_NEEDS_PUSH | READ_READ_AHEAD
|
||||||
const READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE
|
const READ_BACKPRESSURE_STATUS = DESTROY_STATUS | READ_ENDING | READ_DONE
|
||||||
const READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY
|
const READ_UPDATE_SYNC_STATUS = READ_UPDATING | OPEN_STATUS | READ_NEXT_TICK | READ_PRIMARY
|
||||||
|
const READ_NEXT_TICK_OR_OPENING = READ_NEXT_TICK | OPENING
|
||||||
|
|
||||||
// Combined write state
|
// Combined write state
|
||||||
const WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE
|
const WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE
|
||||||
@@ -232,7 +235,7 @@ class WritableState {
|
|||||||
updateNextTick () {
|
updateNextTick () {
|
||||||
if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return
|
if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return
|
||||||
this.stream._duplexState |= WRITE_NEXT_TICK
|
this.stream._duplexState |= WRITE_NEXT_TICK
|
||||||
if ((this.stream._duplexState & WRITE_UPDATING) === 0) queueTick(this.afterUpdateNextTick)
|
if ((this.stream._duplexState & WRITE_UPDATING) === 0) qmt(this.afterUpdateNextTick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -417,10 +420,16 @@ class ReadableState {
|
|||||||
else this.updateNextTick()
|
else this.updateNextTick()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateNextTickIfOpen () {
|
||||||
|
if ((this.stream._duplexState & READ_NEXT_TICK_OR_OPENING) !== 0) return
|
||||||
|
this.stream._duplexState |= READ_NEXT_TICK
|
||||||
|
if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)
|
||||||
|
}
|
||||||
|
|
||||||
updateNextTick () {
|
updateNextTick () {
|
||||||
if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return
|
if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return
|
||||||
this.stream._duplexState |= READ_NEXT_TICK
|
this.stream._duplexState |= READ_NEXT_TICK
|
||||||
if ((this.stream._duplexState & READ_UPDATING) === 0) queueTick(this.afterUpdateNextTick)
|
if ((this.stream._duplexState & READ_UPDATING) === 0) qmt(this.afterUpdateNextTick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -728,12 +737,12 @@ class Readable extends Stream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
push (data) {
|
push (data) {
|
||||||
this._readableState.updateNextTick()
|
this._readableState.updateNextTickIfOpen()
|
||||||
return this._readableState.push(data)
|
return this._readableState.push(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
unshift (data) {
|
unshift (data) {
|
||||||
this._readableState.updateNextTick()
|
this._readableState.updateNextTickIfOpen()
|
||||||
return this._readableState.unshift(data)
|
return this._readableState.unshift(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1134,6 +1143,10 @@ function isReadStreamx (stream) {
|
|||||||
return isStreamx(stream) && stream.readable
|
return isStreamx(stream) && stream.readable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isDisturbed (stream) {
|
||||||
|
return (stream._duplexState & OPENING) !== OPENING || (stream._duplexState & ACTIVE_OR_TICKING) !== 0
|
||||||
|
}
|
||||||
|
|
||||||
function isTypedArray (data) {
|
function isTypedArray (data) {
|
||||||
return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'
|
return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'
|
||||||
}
|
}
|
||||||
@@ -1159,6 +1172,7 @@ module.exports = {
|
|||||||
isStreamx,
|
isStreamx,
|
||||||
isEnded,
|
isEnded,
|
||||||
isFinished,
|
isFinished,
|
||||||
|
isDisturbed,
|
||||||
getStreamError,
|
getStreamError,
|
||||||
Stream,
|
Stream,
|
||||||
Writable,
|
Writable,
|
||||||
|
|||||||
+4
-12
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "streamx",
|
"name": "streamx",
|
||||||
"version": "2.20.2",
|
"version": "2.23.0",
|
||||||
"description": "An iteration of the Node.js core streams with a series of improvements",
|
"description": "An iteration of the Node.js core streams with a series of improvements",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"events-universal": "^1.0.0",
|
||||||
"fast-fifo": "^1.3.2",
|
"fast-fifo": "^1.3.2",
|
||||||
"queue-tick": "^1.0.1",
|
|
||||||
"text-decoder": "^1.1.0"
|
"text-decoder": "^1.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -14,20 +14,12 @@
|
|||||||
"end-of-stream": "^1.4.4",
|
"end-of-stream": "^1.4.4",
|
||||||
"standard": "^17.0.0"
|
"standard": "^17.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
|
||||||
"bare-events": "^2.2.0"
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"index.js"
|
"index.js"
|
||||||
],
|
],
|
||||||
"imports": {
|
|
||||||
"events": {
|
|
||||||
"bare": "bare-events",
|
|
||||||
"default": "events"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "standard && brittle test/*.js"
|
"test": "standard && node test/all.js",
|
||||||
|
"test:bare": "standard && bare test/all.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
Generated
+1420
-43
File diff suppressed because it is too large
Load Diff
+3
-1
@@ -12,7 +12,9 @@
|
|||||||
"eslint-plugin-prettier": "^5.2.1",
|
"eslint-plugin-prettier": "^5.2.1",
|
||||||
"globals": "^15.9.0",
|
"globals": "^15.9.0",
|
||||||
"less": "^4.1.3",
|
"less": "^4.1.3",
|
||||||
"prettier": "^3.3.3"
|
"prettier": "^3.3.3",
|
||||||
|
"puppeteer": "^24.29.0",
|
||||||
|
"turndown": "^7.2.2"
|
||||||
},
|
},
|
||||||
"author": "LeRatierBretonnien",
|
"author": "LeRatierBretonnien",
|
||||||
"license": "MITs",
|
"license": "MITs",
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Prism - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Prism - Living World of Verum"><meta property="og:description" content="Prism - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Armor - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Armor.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Armor - Living World of Verum"><meta property="og:description" content="Armor - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Bestiary - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Bestiary.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Bestiary - Living World of Verum"><meta property="og:description" content="Bestiary - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Character Creation - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Character%20Creation.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Character Creation - Living World of Verum"><meta property="og:description" content="Character Creation - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Combat - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Combat.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Combat - Living World of Verum"><meta property="og:description" content="Combat - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Equipment - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Equipment.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Equipment - Living World of Verum"><meta property="og:description" content="Equipment - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Magic - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Magic.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Magic - Living World of Verum"><meta property="og:description" content="Magic - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Miracles - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Miracles.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Miracles - Living World of Verum"><meta property="og:description" content="Miracles - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Monsters - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Monsters.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Monsters - Living World of Verum"><meta property="og:description" content="Monsters - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Rules - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Rules.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Rules - Living World of Verum"><meta property="og:description" content="Rules - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Spells - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Spells.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Spells - Living World of Verum"><meta property="og:description" content="Spells - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><style class="preload">html,body{margin:0;height:100%}body.theme-light{background-color:#fff;color:#222}body.theme-dark{background-color:#1e1e1e;color:#dadada}.preload{padding:20px;white-space:pre-wrap;overflow-wrap:break-word}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><base href="https://publish.obsidian.md"><script defer="defer" src="/app.js?78c771386e6858fb0754"></script><link rel="preload" href="/app.css?78c771386e6858fb0754" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="/app.css?78c771386e6858fb0754"></noscript><title>Weapons - Living World of Verum</title><link rel="preload" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/publish.css"></noscript><link rel="icon" type="image/x-icon" sizes="32x32" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-32x32.png"><link rel="icon" type="image/x-icon" sizes="128x128" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-128x128.png"><link rel="icon" type="image/x-icon" sizes="152x152" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-152x152.png"><link rel="icon" type="image/x-icon" sizes="167x167" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-167x167.png"><link rel="icon" type="image/x-icon" sizes="180x180" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-180x180.png"><link rel="icon" type="image/x-icon" sizes="192x192" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-192x192.png"><link rel="icon" type="image/x-icon" sizes="196x196" href="https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Images/Misc/Favicon/favicon-196x196.png"><script type="text/javascript">
|
||||||
|
window.siteInfo={"uid":"e1f3ad20aef4c3bead5bc366246b3900","host":"publish-01.obsidian.md","status":"active","slug":null,"redirect":1,"customurl":"corvanis.wiki"};
|
||||||
|
(function(){
|
||||||
|
let f = u=>u&&fetch(u,{credentials: "include"});
|
||||||
|
window.preloadOptions=f("https://publish-01.obsidian.md/options/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadCache=f("https://publish-01.obsidian.md/cache/e1f3ad20aef4c3bead5bc366246b3900");
|
||||||
|
window.preloadPage=f("https://publish-01.obsidian.md/access/e1f3ad20aef4c3bead5bc366246b3900/Prism%20(Testing)/Prism/Weapons.md");
|
||||||
|
})();
|
||||||
|
</script><meta name="description" content="Weapons - Living World of Verum"><meta property="og:description" content="Weapons - Living World of Verum"></head><body class="theme-dark"><div class="preload" style="text-align:center"><svg style="width:50px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path style="transform-origin:50px 50px;animation:1s linear infinite rotate" fill="currentColor" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"/></svg></div><script type="text/javascript">(function(){let t=localStorage.getItem('site-theme'),cl=document.body.classList;if(t&&t!=='dark') {cl.remove('theme-dark');cl.add('theme-'+t)}})();</script></body></html>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/Prism+(Testing)/Prism
|
||||||
@@ -0,0 +1,500 @@
|
|||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Prism+Attributes
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Authority
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Competence
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Cunning
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Grace
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Guile
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Initiative
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Presence
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Prowess
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Resilience
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Sovereignty
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Stamina
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Tenacity
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Vigor
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Willpower
|
||||||
|
/Prism+(Testing)/Ability+Scores+and+Sub-Attributes/Sub-Attributes/Wit
|
||||||
|
/Prism+(Testing)/Armory/Armor/Armor
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Armor+Augments/Best+There+Is
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Armor+Augments/Knock+Aside
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Armor+Augments/Leverage
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Armor+Augments/Pinnacle+of+Steel
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Armor+Augments/Shatter+the+Line
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Armor+Augments/Unstoppable
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Banded
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Heavy+Armor
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Plate
|
||||||
|
/Prism+(Testing)/Armory/Armor/Heavy+Armor/Splint
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Brutal+Momentum
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Chained+Chest
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Combat+Roll
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Critical+Protection
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Flexible+Defense
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Flowing+Robes
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Follow-Up
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Hunker+Down
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Piercing+Protection
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Protect+Your+Neck
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Punishing+Response
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Slashing+Protection
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Steel+Sleeve
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armor+Augments/Swirling+Sleeves
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Armored+Robe
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Chainshirt
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Gambeson
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Gorget
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Light+Armor
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Manica
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Studded+Leather
|
||||||
|
/Prism+(Testing)/Armory/Armor/Light+Armor/Supple+Leather
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Angled+Metal
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Bandit+Shuffle
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Bestial+Fury
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Bludgeoning+Protection
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Camouflaged+Pattern
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Drake+Bane
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Dutiful+Momentum
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Focused+Defense
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Hero's+Valor
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Nooks+and+Crannies
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Soldier's+Fortune
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Superior+Piercing+Protection
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Superior+Slashing+Protection
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Armor+Augments/Versatile+Defense
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Breastplate
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Brigadine
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Chainmail
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Hide
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Lamellar
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Medium+Armor
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Ringmail
|
||||||
|
/Prism+(Testing)/Armory/Armor/Medium+Armor/Scalemail
|
||||||
|
/Prism+(Testing)/Armory/Armory
|
||||||
|
/Prism+(Testing)/Armory/Shields/Buckler
|
||||||
|
/Prism+(Testing)/Armory/Shields/Heavy+Shield
|
||||||
|
/Prism+(Testing)/Armory/Shields/Light+Shield
|
||||||
|
/Prism+(Testing)/Armory/Shields/Shields
|
||||||
|
/Prism+(Testing)/Armory/Shields/Tower+Shield
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Battleaxe
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Greataxe
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Hand+Axe
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Warpick
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Weapon+Augments/Cleaving+Strike
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Weapon+Augments/Deep+Bites
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Weapon+Augments/Helmpiercer
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Weapon+Augments/Shield+Eater
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Battleaxe/Weapon+Augments/Tearing+Tooth
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Crossbow/Crossbow
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Crossbow/Weapon+Augments/Boltlock
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Crossbow/Weapon+Augments/Piercing+Shot
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Dagger
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Dart
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Sickle
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Weapon+Augments/Backstab
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Weapon+Augments/Balancing+Stance
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Weapon+Augments/Harvester
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Dagger/Weapon+Augments/Unseen+Strike
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longbow/Longbow
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longbow/Weapon+Augments/Desperate+Parry
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longbow/Weapon+Augments/Volley+Fire
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Bastard+Sword
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Greatsword
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Longsword
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Rapier
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Twin-Blade
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Weapon+Augments/Half-Hand
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Weapon+Augments/Impaling+Strike
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Weapon+Augments/Mordhau
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Weapon+Augments/Spin+to+Win
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Weapon+Augments/Tower+of+Steel
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Longsword/Weapon+Augments/Turning+Edge
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Flail
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Light+Hammer
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Maul
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Morningstar
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Warhammer
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Weapon+Augments/Adaptive+Attack
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Weapon+Augments/Apprehend
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Weapon+Augments/Concussive+Blow
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Weapon+Augments/Joint+Crash
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Weapon+Augments/Overwhelming+Blow
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Warhammer/Weapon+Augments/Puncturing+Blows
|
||||||
|
/Prism+(Testing)/Armory/Weapons/Weapons
|
||||||
|
/Prism+(Testing)/Character+Paths/Character+Paths
|
||||||
|
/Prism+(Testing)/Classes/Adventurer
|
||||||
|
/Prism+(Testing)/Classes/Archetype
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Agnostic
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Agnostic/Blaspheme
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Agnostic/Chains+of+Mortality
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Agnostic/Deny
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Agnostic/Rigorous+Debate
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Agnostic/Vowbreaker
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Guild+Merchant/Crushing+Debt
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Guild+Merchant/Dealmaker
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Guild+Merchant/Dividends
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Guild+Merchant/Golden+Rule
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Guild+Merchant/Market+Day
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Guild+Merchant/Social+Acumen
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Leymage/Mana+Burst
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Leymage/River+of+Mana
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Leymage/Soulfire
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Mercenary/Alchemical+Edge
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Mercenary/Combat+Alchemist
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Mercenary/Confident+Preparation
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Mercenary/Iron+Stomach
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Class+Features/Mercenary/Well+Supplied
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Guild+Merchant
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Leymage
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Corvanis/Mercenary
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Cathe+Voss
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Cathe+Voss/Dogmatic+Dominion
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Cathe+Voss/Vow+of+Death
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Solitaire/All-In
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Solitaire/Ashen+Vanguard
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Solitaire/Eldar's+Edge
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Solitaire/Macabre+Assault
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Solitaire/Taunt
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Spire+Ael/Ael+Parry
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Spire+Ael/Kaska+Blade
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Class+Features/Spire+Voss/Spire+Ascendant
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Solitaire
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Spire+Ael
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Eldasharkai/Spire+Voss
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Daoist/Mantras
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Daoist/Mantric+Seal
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Daoist/Spirit+Palm
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Samurai/Perfect+Strike
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Samurai/Toukon
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Shinobi/Infiltrate
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Shinobi/Miracle+Pill
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Shinobi/Shadow+Counter
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Shinobi/Shinobi+Tools
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Sohei/Aspect+of+Glies
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Sohei/Corrective+Word
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Sohei/Purification+Ceremony
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Sohei/Spirit's+Wrath
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Class+Features/Sohei/Vow+of+Spirits
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Daoist
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Samurai
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Shinobi
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Glies/Sohei
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Kalkatesh/Arcanist
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Kalkatesh/Nos+Fiend
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Kalkatesh/Scion
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Kalkatesh/Steam+Lord
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Chord+Keeper
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Chord+Keeper/Cutting+Chords
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Chord+Keeper/Dramatic+Pause
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Chord+Keeper/Tempo+Shift
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Chord+Keeper/The+Best+Medicine
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Composer/Social+Acumen
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Composer/Sour+Note
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Composer/Symphony+of+Spells
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Composer/The+Zone
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Chord+of+War
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Clarion+Call
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Glory
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Herald+of+War
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Inspire
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Rouse+the+Troops
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Herald/Shining+Banner
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Soul+Singer/Creation's+Chorus
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Soul+Singer/Gospel
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Class+Features/Soul+Singer/Life+Crash
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Composer
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Herald
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Ryne/Soul+Singer
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Aesir
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Berserker
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Aesir/Asgardian+Steel
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Aesir/Biifrost+Surge
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Aesir/Runic+Blessing
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Aesir/Valhalla+Calling
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Aesir/Wrath+of+Yggdrasil
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Berserker/Jotun+Grip
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Berserker/Might+of+Thor
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Berserker/Taunt
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Berserker/Wrath+of+Sigrun
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Raider/Jarl+Ascendant
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Raider/Overwhelming+Flank
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Raider/Pillaging+Frenzy
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Vanir/Doom+Sight
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Vanir/Norn+Blood
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Class+Features/Vanir/Tenet+of+Sovereignty
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Raider
|
||||||
|
/Prism+(Testing)/Classes/Continental+Classes/Whyxxstar/Vanir
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Cabalist
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Cabalist/Death-Knell
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Cleric/Holy+Wave
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Cleric/Inscription
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Cleric/Vow+of+Life
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Druid/Totemic+Mastery
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Druid/Totemic+Power
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Inquisitor/Combat+Acumen
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Inquisitor/Tenet+of+Punishment
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Inquisitor/Thieves+Tools
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Warden/Iron+Channel
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Warden/Seal+of+the+Warden
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Warden/Taunt
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Class+Features/Warden/Unbreakable+Faith
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Cleric
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Druid
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Inquisitor
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Purifier
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Faith/Warden
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Archon
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Archon/Mana+Regalia
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Archon/Regalia's+Majesty
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Archon/Spell+Reservoir
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Enscriber/Dissertation
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Enscriber/Ink+Veld
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Enscriber/Iron+Parchment
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Enscriber/Lore+Acumen+(Enscriber)
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Enscriber/Rune+Mage
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Invoker/Aetheric+Combination
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Invoker/Augment+Mastery
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Invoker/Shifting+Echoes
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Sorcerer/Saturated+Channel
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Sorcerer/Summon+Mana+Well
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Warlock/Disrupt+Mana
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Warlock/Spell+Feast
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Warlock/Woe+Weaver
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Wizard/Lore+Acumen+(Wizard)
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Wizard/Spell+Mastery
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Wizard/Spell+Matrix
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Wizard/Spell+Specialist
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Class+Features/Wizard/Spellbook
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Enscriber
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Invoker
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Sorcerer
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Warlock
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Mana/Wizard
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Assassin
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Bard
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Assassin/Combat+Acumen
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Assassin/Ruthless+Momentum
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Bard/Counter+Song
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Bard/Lifting+Melody
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Bard/Troubadour's+Gambit
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Drifter/Common+Sense
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Drifter/Drifter's+Luck
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Drifter/Traveler's+Trick
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Marksman/Farsight
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Marksman/Mark+of+Death
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Marksman/Mark+of+Effort
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Marksman/Mark+of+Inevitability
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Marksman/Mark+of+Precision
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Saboteur/Alchemist
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Saboteur/Prepare+to+Breach!
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Stalker/Quietus+(Stalker)
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Stalker/Shadows+Unbound
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Class+Features/Stalker/Stalk+Prey
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Drifter
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Marksman
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Saboteur
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Wanderer/Stalker
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Gladiator/Are+You+Not+Entertained
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Gladiator/Battle+Boast
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Gladiator/Emperor's+Gambit
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Gladiator/Roar+of+the+Crowd
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Gladiator/Taunt
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Dragonsbane
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Guard
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Honor's+Demand
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Lord's+Grace
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Oath+of+Courage
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Shatter+Morale
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Knight/Valor's+Advance
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Paragon/Intimidating+Prowess
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Paragon/On+the+Edge
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Paragon/Riposte
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Paragon/Showdown
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Reaver/Reaver's+Cleave
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Reaver/Victory+Rush
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Soldier/Combat+Acumen+(Soldier)
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Soldier/Death+March
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Soldier/Formation
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Soldier/Hold+Fast!
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Banner+Wave
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/By+Example
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Commander
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Give+Them+Nothing!
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Glory
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Inspire
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Into+the+Breach!
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Take+From+Them%2C+EVERYTHING!
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Class+Features/Warlord/Wrapped+in+Glory
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Gladiator
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Knight
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Paragon
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Reaver
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Soldier
|
||||||
|
/Prism+(Testing)/Classes/Core+Classes/Warrior/Warlord
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Belltender+(Acrobatics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Burdened+(Athletics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Holy+Hand+(Medicine)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Hymnal+(Performance)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Monastic+(Nature)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Pavitara+(Animal+Handling)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Faith/Theurge+(Arcana)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Mana/Familiar+Master+(Animal+Handling)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Mana/Immolator+(Athletics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Mana/Mystic+(Arcana)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Mana/Shadow+Mage+(Stealth)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Mana/Spell+Thief+(Sleight+of+Hand)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Mana/Spellwind+(Acrobatics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Wanderer/Acrobat+(Acrobatics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Wanderer/Collector+(Arcana)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Wanderer/Courier+(Athletics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Wanderer/Delver+(History)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Wanderer/Infiltrator+(Stealth)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Wanderer/Pack+Hunter+(Animal+Handling)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Ancestral+Warrior+(History)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Athlete+(Athletics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Cavalier+(Animal+Handling)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Dancer+(Acrobatics)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Eldritch+Knight+(Arcana)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Strategist+(Insight)
|
||||||
|
/Prism+(Testing)/Classes/Core+Skill+Classes/Warrior/Tactician+(Deception)
|
||||||
|
/Prism+(Testing)/Classes/Prism+Classes
|
||||||
|
/Prism+(Testing)/Classes/Vagabond
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Assist
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Attack
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Avoid
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Block
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Channel
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Move
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Parry
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Prism+Core+Actions
|
||||||
|
/Prism+(Testing)/Core+Features/Core+Actions/Withstand
|
||||||
|
/Prism+(Testing)/Core+Features/Prism+Core+Skill
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Affliction
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Alkalized
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Bleed
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Blind
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Deaf
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Diseased
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Distracted
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Exhaustion
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Frightened
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Marked
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Mute
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Paralyzed
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Petrified
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Poison
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Prone
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Rage
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Sealed
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Staggered
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Stunned
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Taunt
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Unconscious
|
||||||
|
/Prism+(Testing)/Keywords/Afflictions/Mundane/Wounded
|
||||||
|
/Prism+(Testing)/Keywords/Augments/Armor+Augment
|
||||||
|
/Prism+(Testing)/Keywords/Augments/Shield+Augment
|
||||||
|
/Prism+(Testing)/Keywords/Augments/Spell+Augment
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Affect
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Afflict
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Compounding
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Consumed
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Courage
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Cowardice
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Dash
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Depower
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Drain
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Economy
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Empower
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Exposed
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Fading
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Imbue
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Immunity
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Immutable
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Resistance
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Slow
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Stackable
|
||||||
|
/Prism+(Testing)/Keywords/Auxiliary+Effects/Vulnerable
|
||||||
|
/Prism+(Testing)/Keywords/Imbuements/Magic/Mana+Drain
|
||||||
|
/Prism+(Testing)/Keywords/Keywords
|
||||||
|
/Prism+(Testing)/Keywords/Movement+Rating
|
||||||
|
/Prism+(Testing)/Keywords/Movement+Rating+Reduction
|
||||||
|
/Prism+(Testing)/Keywords/Shield+Rating
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Action+Point+Cost
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Bestow
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Life
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Mana
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Mana+Point+Cost
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Spirit
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Strategy
|
||||||
|
/Prism+(Testing)/Keywords/Targeted+Entity/Tactics
|
||||||
|
/Prism+(Testing)/Keywords/Typing+Effects/Attack+of+Opportunity
|
||||||
|
/Prism+(Testing)/Keywords/Typing+Effects/Magic
|
||||||
|
/Prism+(Testing)/Keywords/Typing+Effects/Mundane
|
||||||
|
/Prism+(Testing)/Keywords/Typing+Effects/Reaction
|
||||||
|
/Prism+(Testing)/Keywords/Typing+Effects/Stance
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Aelenclast+Prologue+Parties
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Blood+And+Blossoms/Blood+And+Blossoms
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Blood+And+Blossoms/Florida+Steve
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Blood+And+Blossoms/Jiyu+Fuujin
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Blood+And+Blossoms/Kenji+Akatsuki+no+Ken
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Blood+And+Blossoms/Rikkar+Sharpshanks
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Blood+And+Blossoms/Rina+Kuroshio
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Claws+And+Chaos/Ace
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Claws+And+Chaos/Claws+and+Chaos
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Claws+And+Chaos/John+D.+Walker
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Claws+And+Chaos/Marvin+the+Magnificent
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Claws+And+Chaos/Yankash
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Perdition+And+Permission/Perdition+and+Permission
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Perdition+And+Permission/Petra
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Perdition+And+Permission/Rovain+Tka
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Perdition+And+Permission/Sharp
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Serpents+And+Sincerity/Alex+Flowky
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Serpents+And+Sincerity/D%C3%B3lgr
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Serpents+And+Sincerity/Ronder+Vandrish
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Serpents+And+Sincerity/Serpents+and+Sincerity
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Sound+And+Silence/Fantastico
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Sound+And+Silence/Renard+Kawasu
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Sound+And+Silence/Seraph+Wistleblow
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Sound+And+Silence/Sound+And+Silence
|
||||||
|
/Prism+(Testing)/Parties/Aelenclast+Prologue+Parties/Prologue+Parties/Sound+And+Silence/Sunny
|
||||||
|
/Prism+(Testing)/Prism
|
||||||
|
/Prism+(Testing)/Prism+Character+Creation
|
||||||
|
/Prism+(Testing)/Prism+Character+Creation+Contest
|
||||||
|
/Prism+(Testing)/Races/Abyssborn
|
||||||
|
/Prism+(Testing)/Races/Dragonborn
|
||||||
|
/Prism+(Testing)/Races/Dwarf
|
||||||
|
/Prism+(Testing)/Races/Elf
|
||||||
|
/Prism+(Testing)/Races/Gnome
|
||||||
|
/Prism+(Testing)/Races/Halfling
|
||||||
|
/Prism+(Testing)/Races/Human
|
||||||
|
/Prism+(Testing)/Races/Planetouched
|
||||||
|
/Prism+(Testing)/Races/Prism+Races
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Abyssborn/Blessing+of+the+Deep
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Abyssborn/Inking+Wounds
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Dragonborn/Dragonskin
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Dragonborn/Flamebreath
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Dwarf/Dark+Sun's+Blessing
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Dwarf/Heart+of+Stone
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Dwarf/Pragmatic+Clans
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Dwarf/Surefooted
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Elf/Eldar+Grace
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Elf/Eldar+Superiority
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Elf/Empire+Reborn
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Gnome/Been+There%2C+Done+That
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Gnome/Daydream
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Gnome/Dreamwalker
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Halfling/Restorative+Melody
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Halfling/Rugged+Humors
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Halfling/Second+Breakfast
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Halfling/Wispblood
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Arcane+Aptitude
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Calloused+Hands
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Fearless
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Horsemaster
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Indomitable+Spirit
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Jungle+and+Sky
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Human/Riverkissed
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Planetouched/Anchored+Spirit
|
||||||
|
/Prism+(Testing)/Races/Racial+Features/Planetouched/Spirit+Form
|
||||||
|
/Prism+(Testing)/Spells/Color+(Hue)
|
||||||
|
/Prism+(Testing)/Spells/Prism+Spellcasting
|
||||||
|
/Prism+(Testing)/Spells/Prism+Spells
|
||||||
File diff suppressed because it is too large
Load Diff
+108
-11
@@ -1,22 +1,119 @@
|
|||||||
<section>
|
<section>
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
|
<img
|
||||||
|
class="item-img"
|
||||||
|
src="{{item.img}}"
|
||||||
|
data-edit="img"
|
||||||
|
data-action="editImage"
|
||||||
|
data-tooltip="{{item.name}}"
|
||||||
|
/>
|
||||||
{{formInput fields.name value=source.name}}
|
{{formInput fields.name value=source.name}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{formField systemFields.armorType value=system.armorType localize=true}}
|
{{! Armor Type (Light/Medium/Heavy) }}
|
||||||
{{formField systemFields.defense value=system.defense}}
|
{{formField
|
||||||
{{formField systemFields.maximumMovement value=system.maximumMovement}}
|
systemFields.armorType
|
||||||
{{formField systemFields.hp value=system.hp}}
|
value=system.armorType
|
||||||
{{formField systemFields.damageReduction value=system.damageReduction}}
|
localize=true
|
||||||
{{formField systemFields.encLoad value=system.encLoad}}
|
label="PRISMRPG.Label.armorType"
|
||||||
|
}}
|
||||||
|
|
||||||
{{formField systemFields.isHelmet value=system.isHelmet}}
|
{{! Armor Class (AC) }}
|
||||||
{{formField systemFields.equipped value=system.equipped}}
|
{{formField
|
||||||
|
systemFields.defense
|
||||||
|
value=system.defense
|
||||||
|
label="PRISMRPG.Label.armorClass"
|
||||||
|
}}
|
||||||
|
|
||||||
{{formField systemFields.cost value=system.cost}}
|
{{! Maximum Reduction Rating (MRR) }}
|
||||||
{{formField systemFields.money value=system.money localize=true}}
|
{{formField systemFields.mrr value=system.mrr label="PRISMRPG.Label.mrr"}}
|
||||||
|
|
||||||
|
{{! Movement Penalty }}
|
||||||
|
{{formField
|
||||||
|
systemFields.maximumMovement
|
||||||
|
value=system.maximumMovement
|
||||||
|
label="PRISMRPG.Label.movementPenalty"
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{! Armor Hit Points }}
|
||||||
|
{{formField systemFields.hp value=system.hp label="PRISMRPG.Label.armorHP"}}
|
||||||
|
|
||||||
|
{{! Damage Reduction }}
|
||||||
|
{{formField
|
||||||
|
systemFields.damageReduction
|
||||||
|
value=system.damageReduction
|
||||||
|
label="PRISMRPG.Label.damageReduction"
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{! Encumbrance Load }}
|
||||||
|
{{formField
|
||||||
|
systemFields.encLoad
|
||||||
|
value=system.encLoad
|
||||||
|
label="PRISMRPG.Label.encumbranceLoad"
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{! Equipment Status }}
|
||||||
|
{{formField
|
||||||
|
systemFields.isHelmet
|
||||||
|
value=system.isHelmet
|
||||||
|
label="PRISMRPG.Label.isHelmet"
|
||||||
|
}}
|
||||||
|
{{formField
|
||||||
|
systemFields.equipped
|
||||||
|
value=system.equipped
|
||||||
|
label="PRISMRPG.Label.equipped"
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{! Prism RPG: Armor Passive }}
|
||||||
|
<fieldset class="armor-passive">
|
||||||
|
<legend>{{localize "PRISMRPG.Label.armorPassive"}}</legend>
|
||||||
|
{{formField
|
||||||
|
systemFields.passive
|
||||||
|
value=system.passive
|
||||||
|
label="PRISMRPG.Label.passiveName"
|
||||||
|
}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>{{localize "PRISMRPG.Label.passiveDescription"}}</label>
|
||||||
|
{{formInput
|
||||||
|
systemFields.passiveDescription
|
||||||
|
enriched=enrichedPassiveDescription
|
||||||
|
value=system.passiveDescription
|
||||||
|
name="system.passiveDescription"
|
||||||
|
toggled=true
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
{{! Prism RPG: Armor Augment }}
|
||||||
|
<fieldset class="armor-augment">
|
||||||
|
<legend>{{localize "PRISMRPG.Label.armorAugment"}}</legend>
|
||||||
|
{{formField
|
||||||
|
systemFields.augment
|
||||||
|
value=system.augment
|
||||||
|
label="PRISMRPG.Label.augmentName"
|
||||||
|
}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>{{localize "PRISMRPG.Label.augmentDescription"}}</label>
|
||||||
|
{{formInput
|
||||||
|
systemFields.augmentDescription
|
||||||
|
enriched=enrichedAugmentDescription
|
||||||
|
value=system.augmentDescription
|
||||||
|
name="system.augmentDescription"
|
||||||
|
toggled=true
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
{{! Cost }}
|
||||||
|
{{formField systemFields.cost value=system.cost label="PRISMRPG.Label.cost"}}
|
||||||
|
{{formField
|
||||||
|
systemFields.money
|
||||||
|
value=system.money
|
||||||
|
localize=true
|
||||||
|
label="PRISMRPG.Label.currency"
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{! Description }}
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{localize "PRISMRPG.Label.description"}}</legend>
|
<legend>{{localize "PRISMRPG.Label.description"}}</legend>
|
||||||
{{formInput
|
{{formInput
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user