First adaptation pass
This commit is contained in:
+385
-200
@@ -13,34 +13,49 @@
|
||||
},
|
||||
"FIELDS": {
|
||||
"armorType": {
|
||||
"label": "Category"
|
||||
"label": "Armor Type"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
},
|
||||
"damageReduction": {
|
||||
"label": "Damage reduction"
|
||||
"label": "Damage Reduction"
|
||||
},
|
||||
"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": {
|
||||
"label": "Load"
|
||||
"label": "Encumbrance Load"
|
||||
},
|
||||
"equipped": {
|
||||
"label": "Equipped?"
|
||||
},
|
||||
"hp": {
|
||||
"label": "HP"
|
||||
"label": "Armor HP"
|
||||
},
|
||||
"isHelmet": {
|
||||
"label": "Is Helmet?"
|
||||
},
|
||||
"maximumMovement": {
|
||||
"label": "Maximum movement"
|
||||
"label": "Movement Penalty"
|
||||
},
|
||||
"money": {
|
||||
"label": "Money unit"
|
||||
"label": "Currency"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -421,27 +436,240 @@
|
||||
"monster-damage": "Monster damage",
|
||||
"monster-defense": "Monster defense",
|
||||
"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": {
|
||||
"FIELDS": {
|
||||
"miracleType": {
|
||||
"label": "Miracle Type"
|
||||
},
|
||||
"attackRoll": {
|
||||
"label": "Attack roll"
|
||||
"apc": {
|
||||
"label": "APC (Action Point Cost)"
|
||||
},
|
||||
"powerRoll": {
|
||||
"label": "Power roll"
|
||||
"faithCost": {
|
||||
"label": "Faith Cost"
|
||||
},
|
||||
"divineFavor": {
|
||||
"label": "Divine Favor"
|
||||
},
|
||||
"augment": {
|
||||
"label": "Miracle Augment"
|
||||
},
|
||||
"augmentDescription": {
|
||||
"label": "Augment Description"
|
||||
},
|
||||
"materialComponent": {
|
||||
"label": "Material component"
|
||||
"label": "Material Component"
|
||||
},
|
||||
"catalyst": {
|
||||
"label": "Catalyst"
|
||||
},
|
||||
"areaAffected": {
|
||||
"label": "Area affected"
|
||||
"label": "Area Affected"
|
||||
},
|
||||
"components": {
|
||||
"catalyst": {
|
||||
@@ -473,10 +701,10 @@
|
||||
"label": "Range"
|
||||
},
|
||||
"prayerTime": {
|
||||
"label": "Prayer time"
|
||||
"label": "Prayer Time"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"Shield": {
|
||||
"Type": {
|
||||
"buckler": "Buckler",
|
||||
"light": "Light Shield",
|
||||
"heavy": "Heavy Shield",
|
||||
"tower": "Tower Shield"
|
||||
},
|
||||
"FIELDS": {
|
||||
"autodestruction": {
|
||||
"bashing": {
|
||||
"label": "Bashing"
|
||||
},
|
||||
"piercing": {
|
||||
"label": "Piercing"
|
||||
},
|
||||
"slashing": {
|
||||
"label": "Slashing"
|
||||
}
|
||||
"shieldType": {
|
||||
"label": "Shield Type"
|
||||
},
|
||||
"apc": {
|
||||
"label": "Block APC"
|
||||
},
|
||||
"sr": {
|
||||
"label": "Shield Rating (SR)"
|
||||
},
|
||||
"blockAugment": {
|
||||
"label": "Block Augment"
|
||||
},
|
||||
"blockAugmentDescription": {
|
||||
"label": "Block Augment Description"
|
||||
},
|
||||
"augment": {
|
||||
"label": "Shield Augment"
|
||||
},
|
||||
"augmentDescription": {
|
||||
"label": "Augment Description"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
},
|
||||
"crouching": {
|
||||
"max": {
|
||||
"label": "Max"
|
||||
},
|
||||
"min": {
|
||||
"label": "Min"
|
||||
}
|
||||
},
|
||||
"damagereduction": {
|
||||
"label": "Damage reduction"
|
||||
},
|
||||
"defense": {
|
||||
"label": "Defense"
|
||||
},
|
||||
"destruction": {
|
||||
"bashing": {
|
||||
"label": "Bashing"
|
||||
},
|
||||
"piercing": {
|
||||
"label": "Piercing"
|
||||
},
|
||||
"slashing": {
|
||||
"label": "Slashing"
|
||||
}
|
||||
"label": "Defense Bonus"
|
||||
},
|
||||
"encLoad": {
|
||||
"label": "Load"
|
||||
"label": "Encumbrance Load"
|
||||
},
|
||||
"equipped": {
|
||||
"label": "Equipped"
|
||||
},
|
||||
"hascover": {
|
||||
"label": "Provides cover"
|
||||
},
|
||||
"hp": {
|
||||
"label": "HP"
|
||||
},
|
||||
"money": {
|
||||
"label": "Money unit"
|
||||
},
|
||||
"movementreduction": {
|
||||
"label": "Movement reduction"
|
||||
},
|
||||
"standing": {
|
||||
"max": {
|
||||
"label": "Max"
|
||||
},
|
||||
"min": {
|
||||
"label": "Min"
|
||||
}
|
||||
"label": "Currency"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -607,70 +812,72 @@
|
||||
"weapon": "Weapon"
|
||||
},
|
||||
"FIELDS": {
|
||||
"base": {
|
||||
"label": "Base"
|
||||
"coreSkill": {
|
||||
"label": "Core Skill Type"
|
||||
},
|
||||
"bonus": {
|
||||
"label": "Bonus"
|
||||
"isCoreSkill": {
|
||||
"label": "Is Character's Core Skill?"
|
||||
},
|
||||
"category": {
|
||||
"label": "Category"
|
||||
"attributeBonus": {
|
||||
"label": "Attribute Bonus (+2)"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
"modifier": {
|
||||
"label": "Skill Modifier"
|
||||
},
|
||||
"classesCost": {
|
||||
"fighter": {
|
||||
"label": "Fighter Cost"
|
||||
},
|
||||
"rogue": {
|
||||
"label": "Rogue Cost"
|
||||
},
|
||||
"ranger": {
|
||||
"label": "Ranger Cost"
|
||||
},
|
||||
"magicuser": {
|
||||
"label": "Magic User Cost"
|
||||
},
|
||||
"cleric": {
|
||||
"label": "Cleric Cost"
|
||||
}
|
||||
"canAdvancedCheck": {
|
||||
"label": "Can Perform Advanced Checks"
|
||||
},
|
||||
"coreSkillClass": {
|
||||
"label": "Core Skill Class"
|
||||
},
|
||||
"notes": {
|
||||
"label": "Notes"
|
||||
},
|
||||
"description": {
|
||||
"label": "Description"
|
||||
},
|
||||
"weaponBonus": {
|
||||
"attack": {
|
||||
"label": "Attack Bonus"
|
||||
},
|
||||
"damage": {
|
||||
"label": "Damage Bonus"
|
||||
},
|
||||
"defense": {
|
||||
"label": "Defense Bonus"
|
||||
}
|
||||
},
|
||||
"weaponClass": {
|
||||
"label": "Class"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Spell": {
|
||||
"Color": {
|
||||
"indigo": "Indigo",
|
||||
"blue": "Blue",
|
||||
"green": "Green",
|
||||
"yellow": "Yellow",
|
||||
"orange": "Orange",
|
||||
"red": "Red",
|
||||
"violet": "Violet"
|
||||
},
|
||||
"FIELDS": {
|
||||
"criticalType": {
|
||||
"label": "Crit. Type"
|
||||
"manaCost": {
|
||||
"label": "Mana Cost"
|
||||
},
|
||||
"attackRoll": {
|
||||
"label": "Attack roll"
|
||||
"manaUpkeep": {
|
||||
"label": "Mana Upkeep"
|
||||
},
|
||||
"powerRoll": {
|
||||
"label": "Power roll"
|
||||
"apc": {
|
||||
"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": {
|
||||
"label": "Area affected"
|
||||
"label": "Area Affected"
|
||||
},
|
||||
"castingTime": {
|
||||
"label": "Casting time"
|
||||
"label": "Casting Time"
|
||||
},
|
||||
"components": {
|
||||
"material": {
|
||||
@@ -698,20 +905,17 @@
|
||||
"duration": {
|
||||
"label": "Duration"
|
||||
},
|
||||
"extraAetherPoints": {
|
||||
"label": "Extra aether points"
|
||||
},
|
||||
"level": {
|
||||
"label": "Level"
|
||||
},
|
||||
"savingThrow": {
|
||||
"label": "Saving throw"
|
||||
"label": "Saving Throw"
|
||||
},
|
||||
"spellRange": {
|
||||
"label": "Range"
|
||||
},
|
||||
"materialComponent": {
|
||||
"label": "Material component"
|
||||
"label": "Material Component"
|
||||
},
|
||||
"catalyst": {
|
||||
"label": "Catalyst"
|
||||
@@ -719,11 +923,6 @@
|
||||
}
|
||||
},
|
||||
"ToggleSheet": "Toggle mode",
|
||||
"Tooltip": {
|
||||
"addEquipment": "New equipment",
|
||||
"addSpell": "New spells",
|
||||
"skill": "Skills list"
|
||||
},
|
||||
"Vulnerability": {
|
||||
"FIELDS": {
|
||||
"cost": {
|
||||
@@ -739,27 +938,41 @@
|
||||
},
|
||||
"Warning": {},
|
||||
"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": {
|
||||
"isAgile": {
|
||||
"label": "Is Agile?"
|
||||
"weaponType": {
|
||||
"label": "Weapon Type"
|
||||
},
|
||||
"combatProgressionDice": {
|
||||
"label": "Combat progression dice"
|
||||
"weaponGroup": {
|
||||
"label": "Weapon Group"
|
||||
},
|
||||
"cost": {
|
||||
"label": "Cost"
|
||||
"apc": {
|
||||
"label": "APC (Action Point Cost)"
|
||||
},
|
||||
"damage": {
|
||||
"damageM": {
|
||||
"label": "Medium"
|
||||
},
|
||||
"damageS": {
|
||||
"label": "Small"
|
||||
}
|
||||
"label": "Damage"
|
||||
},
|
||||
"damageType": {
|
||||
"typeB": {
|
||||
"label": "Bashing"
|
||||
"label": "Bludgeoning"
|
||||
},
|
||||
"typeP": {
|
||||
"label": "Piercing"
|
||||
@@ -768,40 +981,53 @@
|
||||
"label": "Slashing"
|
||||
}
|
||||
},
|
||||
"defense": {
|
||||
"label": "Defense"
|
||||
"groupPassive": {
|
||||
"label": "Group Passive"
|
||||
},
|
||||
"defenseMax": {
|
||||
"label": "Defense max"
|
||||
"passive": {
|
||||
"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": {
|
||||
"label": "Load"
|
||||
"label": "Encumbrance Load"
|
||||
},
|
||||
"equipped": {
|
||||
"label": "Equipped"
|
||||
},
|
||||
"hands": {
|
||||
"label": "Hands"
|
||||
"label": "Hands Required"
|
||||
},
|
||||
"money": {
|
||||
"label": "Money unit"
|
||||
},
|
||||
"secondsToAttack": {
|
||||
"label": "Seconds to attack"
|
||||
},
|
||||
"speed": {
|
||||
"carefulAim": {
|
||||
"label": "Careful aim"
|
||||
},
|
||||
"focusedAim": {
|
||||
"label": "Focused aim"
|
||||
},
|
||||
"simpleAim": {
|
||||
"label": "Simple aim"
|
||||
}
|
||||
"label": "Currency"
|
||||
},
|
||||
"applyStrengthDamageBonus": {
|
||||
"label": "Apply strength damage bonus"
|
||||
"label": "Apply Strength Damage Bonus"
|
||||
},
|
||||
"bonuses": {
|
||||
"attackBonus": {
|
||||
@@ -813,48 +1039,7 @@
|
||||
"defenseBonus": {
|
||||
"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({
|
||||
light: { id: "light", label: "PRISMRPG.Armor.Category.light" },
|
||||
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({
|
||||
str: {
|
||||
id: "str",
|
||||
label: "PRISMRPG.Label.str"
|
||||
},
|
||||
int: {
|
||||
id: "int",
|
||||
label: "PRISMRPG.Character.int.label"
|
||||
},
|
||||
wis: {
|
||||
id: "wis",
|
||||
label: "PRISMRPG.Character.wis.label"
|
||||
label: "PRISMRPG.Character.str.label"
|
||||
},
|
||||
dex: {
|
||||
id: "dex",
|
||||
@@ -19,18 +11,112 @@ export const CHARACTERISTICS = Object.freeze({
|
||||
id: "con",
|
||||
label: "PRISMRPG.Character.con.label"
|
||||
},
|
||||
int: {
|
||||
id: "int",
|
||||
label: "PRISMRPG.Character.int.label"
|
||||
},
|
||||
wis: {
|
||||
id: "wis",
|
||||
label: "PRISMRPG.Character.wis.label"
|
||||
},
|
||||
cha: {
|
||||
id: "cha",
|
||||
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: {
|
||||
id: "luc",
|
||||
label: "PRISMRPG.Character.luc.label"
|
||||
vigor: {
|
||||
id: "vigor",
|
||||
label: "PRISMRPG.Character.vigor.label",
|
||||
parents: ["str", "con"],
|
||||
description: "PRISMRPG.Character.vigor.description"
|
||||
},
|
||||
app: {
|
||||
id: "app",
|
||||
label: "PRISMRPG.Character.app.label"
|
||||
competence: {
|
||||
id: "competence",
|
||||
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({
|
||||
|
||||
@@ -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({
|
||||
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({
|
||||
na: {
|
||||
id: "na",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import * as CHARACTER from "./character.mjs"
|
||||
import * as WEAPON from "./weapon.mjs"
|
||||
import * as ARMOR from "./armor.mjs"
|
||||
import * as SHIELD from "./shield.mjs"
|
||||
import * as SPELL from "./spell.mjs"
|
||||
import * as SKILL from "./skill.mjs"
|
||||
import * as EQUIPMENT from "./equipment.mjs"
|
||||
@@ -285,6 +286,7 @@ export const ASCII = `
|
||||
export const SYSTEM = {
|
||||
id: SYSTEM_ID,
|
||||
CHARACTERISTICS: CHARACTER.CHARACTERISTICS,
|
||||
SUB_ATTRIBUTES: CHARACTER.SUB_ATTRIBUTES,
|
||||
CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES,
|
||||
CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR,
|
||||
MONSTER_CHARACTERISTICS: MONSTER.MONSTER_CHARACTERISTICS,
|
||||
@@ -293,10 +295,21 @@ export const SYSTEM = {
|
||||
SAVES: CHARACTER.SAVES,
|
||||
CHALLENGES: CHARACTER.CHALLENGES,
|
||||
SKILL_CATEGORY: SKILL.CATEGORY,
|
||||
CORE_SKILLS: SKILL.CORE_SKILLS,
|
||||
CORE_SKILL_BONUS: SKILL.CORE_SKILL_BONUS,
|
||||
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,
|
||||
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,
|
||||
COMBAT_PROGRESSION_DICE: 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 = {
|
||||
"melee": "PRISMRPG.Weapon.WeaponType.melee",
|
||||
"ranged": "PRISMRPG.Weapon.WeaponType.ranged"
|
||||
@@ -16,7 +117,7 @@ export const WEAPON_CLASS = {
|
||||
"sling": "PRISMRPG.Weapon.WeaponClass.sling",
|
||||
"thrown": "PRISMRPG.Weapon.WeaponClass.thrown",
|
||||
"polearm": "PRISMRPG.Weapon.WeaponClass.polearm",
|
||||
"unarmed" : "PRISMRPG.Weapon.WeaponClass.unarmed"
|
||||
"unarmed": "PRISMRPG.Weapon.WeaponClass.unarmed"
|
||||
}
|
||||
|
||||
export const WEAPON_CATEGORIES = {
|
||||
@@ -32,4 +133,3 @@ export const WEAPON_CATEGORIES = {
|
||||
"thrown": ["axe", "hammer", "mace", "flail", "bow", "sling", "polearm"],
|
||||
"polearm": ["axe", "hammer", "mace", "flail", "bow", "sling", "thrown"]
|
||||
}
|
||||
|
||||
|
||||
+15
-2
@@ -7,8 +7,21 @@ export default class PrismRPGArmor extends foundry.abstract.TypeDataModel {
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
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.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.damageReduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
|
||||
@@ -18,7 +31,7 @@ export default class PrismRPGArmor extends foundry.abstract.TypeDataModel {
|
||||
|
||||
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||
schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY })
|
||||
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+108
-17
@@ -1,4 +1,5 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
|
||||
export default class PrismRPGMiracle extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
@@ -11,30 +12,120 @@ export default class PrismRPGMiracle extends foundry.abstract.TypeDataModel {
|
||||
initial: "",
|
||||
textSearch: true,
|
||||
})
|
||||
|
||||
// Miracle level (1-7+)
|
||||
schema.level = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
initial: 1,
|
||||
min: 1,
|
||||
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: "" })
|
||||
schema.powerRoll = new fields.StringField({ required: true, initial: "" })
|
||||
// Miracle type
|
||||
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
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
|
||||
export default class PrismRPGShield extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
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 }
|
||||
|
||||
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 })
|
||||
schema.hascover = new fields.BooleanField({ required: true, initial: false })
|
||||
|
||||
// Prism RPG shield properties
|
||||
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({
|
||||
min: 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({
|
||||
min: 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 }),
|
||||
piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
})
|
||||
|
||||
schema.autodestruction = new fields.SchemaField({
|
||||
bashing: 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 */
|
||||
static LOCALIZATION_PREFIXES = ["PRISMRPG.Shield"]
|
||||
|
||||
}
|
||||
|
||||
+106
-86
@@ -1,29 +1,75 @@
|
||||
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 {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const schema = {}
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.category = new fields.StringField({ required: true, initial: "layperson", choices: SYSTEM.SKILL_CATEGORY })
|
||||
schema.base = new fields.StringField({ required: true, initial: "WIS" })
|
||||
schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
|
||||
schema.classesCost = new fields.SchemaField(
|
||||
Object.values(SYSTEM.CHAR_CLASSES_DEFINES).reduce((obj, pcClass) => {
|
||||
obj[pcClass.id] = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
return obj
|
||||
}, {}),
|
||||
)
|
||||
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
schema.description = new fields.HTMLField({
|
||||
required: true,
|
||||
textSearch: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS })
|
||||
schema.weaponBonus = new fields.SchemaField({
|
||||
attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
// Core Skill type (from the 18 available Core Skills)
|
||||
schema.coreSkill = new fields.StringField({
|
||||
required: true,
|
||||
initial: "acrobatics",
|
||||
choices: Object.keys(SYSTEM.CORE_SKILLS || {}),
|
||||
label: "Core Skill"
|
||||
})
|
||||
|
||||
// Is this the character's chosen Core Skill?
|
||||
schema.isCoreSkill = new fields.BooleanField({
|
||||
required: true,
|
||||
initial: false,
|
||||
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
|
||||
@@ -32,83 +78,57 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
||||
/** @override */
|
||||
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)
|
||||
let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage
|
||||
if (bonus > Math.floor(this._source.skillTotal / 10)) {
|
||||
ui.notifications.error(game.i18n.localize("PRISMRPG.Skill.error.weaponBonus"))
|
||||
isError = true
|
||||
}
|
||||
return isError
|
||||
/**
|
||||
* Get the localized Core Skill name
|
||||
*/
|
||||
get coreSkillLabel() {
|
||||
const definition = this.coreSkillDefinition
|
||||
return definition ? game.i18n.localize(definition.label) : this.coreSkill
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the available attribute choices for this Core Skill
|
||||
*/
|
||||
get attributeChoices() {
|
||||
const definition = this.coreSkillDefinition
|
||||
return definition?.attributeChoices || []
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare derived data
|
||||
*/
|
||||
prepareDerivedData() {
|
||||
super.prepareDerivedData();
|
||||
this.skillTotal = this.computeBase();
|
||||
if (this.category === "weapon") {
|
||||
this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage;
|
||||
if (Number(this.skillTotal)) {
|
||||
this.availableBonus = Math.max(Math.floor(this.skillTotal / 10) - 1, 0)
|
||||
} else {
|
||||
this.availableBonus = "N/A"
|
||||
}
|
||||
super.prepareDerivedData()
|
||||
|
||||
// If this is the character's Core Skill, apply bonuses
|
||||
if (this.isCoreSkill) {
|
||||
this.modifier = SYSTEM.CORE_SKILL_BONUS?.basic || 5
|
||||
this.canAdvancedCheck = true
|
||||
} else {
|
||||
this.modifier = 0
|
||||
this.canAdvancedCheck = false
|
||||
}
|
||||
}
|
||||
|
||||
computeBase() {
|
||||
let actor = this.parent?.actor;
|
||||
if (!actor) {
|
||||
return `${this.base} + ${String(this.bonus)}`;
|
||||
}
|
||||
/**
|
||||
* Calculate skill check bonus
|
||||
* @param {string} attributeKey The attribute to use (str, dex, con, int, wis, cha)
|
||||
* @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") {
|
||||
return this.bonus
|
||||
}
|
||||
const attribute = actor.system.characteristics?.[attributeKey]
|
||||
const attributeMod = attribute?.mod || 0
|
||||
|
||||
// Split the base value per stat : WIS,DEX,STR,INT,CHA (example)
|
||||
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)}`;
|
||||
return attributeMod + this.modifier
|
||||
}
|
||||
}
|
||||
|
||||
+141
-20
@@ -1,4 +1,5 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
|
||||
export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
@@ -11,6 +12,8 @@ export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
||||
initial: "",
|
||||
textSearch: true,
|
||||
})
|
||||
|
||||
// Spell level (1-7+)
|
||||
schema.level = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
initial: 1,
|
||||
@@ -18,28 +21,146 @@ export default class PrismRPGSpell extends foundry.abstract.TypeDataModel {
|
||||
max: 25,
|
||||
})
|
||||
|
||||
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
schema.memorized = new fields.BooleanField({ required: true, initial: false })
|
||||
|
||||
schema.components = new fields.SchemaField({
|
||||
verbal: new fields.BooleanField(),
|
||||
somatic: new fields.BooleanField(),
|
||||
catalyst: new fields.BooleanField(),
|
||||
material: new fields.BooleanField(),
|
||||
// Mana cost - base cost of the spell
|
||||
schema.manaCost = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
required: true,
|
||||
initial: 1,
|
||||
min: 0,
|
||||
label: "Mana Cost"
|
||||
})
|
||||
|
||||
// Mana upkeep cost (for sustained spells)
|
||||
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
|
||||
})
|
||||
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: "" })
|
||||
schema.powerRoll = new fields.StringField({ required: true, initial: "" })
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
|
||||
+124
-37
@@ -1,47 +1,139 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
|
||||
export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
||||
export default class PrismRPGWeapon extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const schema = {}
|
||||
const requiredInteger = { required: true, nullable: false, integer: 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({
|
||||
typeP: new fields.BooleanField(),
|
||||
typeB: new fields.BooleanField(),
|
||||
typeS: new fields.BooleanField()
|
||||
})
|
||||
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: ""})
|
||||
piercing: new fields.BooleanField({ initial: false }),
|
||||
bludgeoning: new fields.BooleanField({ initial: false }),
|
||||
slashing: new fields.BooleanField({ initial: false })
|
||||
})
|
||||
|
||||
schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
schema.weaponRange = new fields.SchemaField({
|
||||
pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
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 }),
|
||||
outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
// Group passive (inherited from weapon group)
|
||||
schema.groupPassive = new fields.StringField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
schema.groupPassiveDescription = new fields.HTMLField({
|
||||
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({
|
||||
@@ -60,9 +152,4 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["PRISMRPG.Weapon"]
|
||||
|
||||
get weaponCategory() {
|
||||
return game.i18n.localize(CATEGORY[this.weaponType].label)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+856
-24
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -8,7 +8,7 @@ npm install bare-events
|
||||
|
||||
## Usage
|
||||
|
||||
``` js
|
||||
```js
|
||||
const EventEmitter = require('bare-events')
|
||||
|
||||
const e = new EventEmitter()
|
||||
|
||||
+95
-72
@@ -1,24 +1,24 @@
|
||||
const errors = require('./lib/errors')
|
||||
|
||||
class EventListener {
|
||||
constructor () {
|
||||
constructor() {
|
||||
this.list = []
|
||||
this.count = 0
|
||||
}
|
||||
|
||||
append (ctx, name, fn, once) {
|
||||
append(ctx, name, fn, once) {
|
||||
this.count++
|
||||
ctx.emit('newListener', name, fn) // Emit BEFORE adding
|
||||
this.list.push([fn, once])
|
||||
}
|
||||
|
||||
prepend (ctx, name, fn, once) {
|
||||
prepend(ctx, name, fn, once) {
|
||||
this.count++
|
||||
ctx.emit('newListener', name, fn) // Emit BEFORE adding
|
||||
this.list.unshift([fn, once])
|
||||
}
|
||||
|
||||
remove (ctx, name, fn) {
|
||||
remove(ctx, name, fn) {
|
||||
for (let i = 0, n = this.list.length; i < n; i++) {
|
||||
const l = this.list[i]
|
||||
|
||||
@@ -35,7 +35,7 @@ class EventListener {
|
||||
}
|
||||
}
|
||||
|
||||
removeAll (ctx, name) {
|
||||
removeAll(ctx, name) {
|
||||
const list = [...this.list]
|
||||
this.list = []
|
||||
|
||||
@@ -48,7 +48,7 @@ class EventListener {
|
||||
this.count -= list.length
|
||||
}
|
||||
|
||||
emit (ctx, name, ...args) {
|
||||
emit(ctx, name, ...args) {
|
||||
const list = [...this.list]
|
||||
|
||||
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])
|
||||
|
||||
l[0].call(ctx, ...args)
|
||||
Reflect.apply(l[0], ctx, args)
|
||||
}
|
||||
|
||||
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())
|
||||
e.append(ctx, name, fn, once)
|
||||
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())
|
||||
e.prepend(ctx, name, fn, once)
|
||||
return ctx
|
||||
}
|
||||
|
||||
function removeListener (ctx, name, fn) {
|
||||
function removeListener(ctx, name, fn) {
|
||||
if (ctx._events === undefined) return ctx
|
||||
const e = ctx._events[name]
|
||||
if (e !== undefined) e.remove(ctx, name, fn)
|
||||
return ctx
|
||||
}
|
||||
|
||||
function throwUnhandledError (...args) {
|
||||
function throwUnhandledError(...args) {
|
||||
let err
|
||||
|
||||
if (args.length > 0) err = args[0]
|
||||
@@ -92,69 +95,77 @@ function throwUnhandledError (...args) {
|
||||
Error.captureStackTrace(err, exports.prototype.emit)
|
||||
}
|
||||
|
||||
queueMicrotask(() => { throw err })
|
||||
queueMicrotask(() => {
|
||||
throw err
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = exports = class EventEmitter {
|
||||
constructor () {
|
||||
constructor() {
|
||||
this._events = Object.create(null)
|
||||
}
|
||||
|
||||
addListener (name, fn) {
|
||||
addListener(name, fn) {
|
||||
return appendListener(this, name, fn, false)
|
||||
}
|
||||
|
||||
addOnceListener (name, fn) {
|
||||
addOnceListener(name, fn) {
|
||||
return appendListener(this, name, fn, true)
|
||||
}
|
||||
|
||||
prependListener (name, fn) {
|
||||
prependListener(name, fn) {
|
||||
return prependListener(this, name, fn, false)
|
||||
}
|
||||
|
||||
prependOnceListener (name, fn) {
|
||||
prependOnceListener(name, fn) {
|
||||
return prependListener(this, name, fn, true)
|
||||
}
|
||||
|
||||
removeListener (name, fn) {
|
||||
removeListener(name, fn) {
|
||||
return removeListener(this, name, fn)
|
||||
}
|
||||
|
||||
on (name, fn) {
|
||||
on(name, fn) {
|
||||
return appendListener(this, name, fn, false)
|
||||
}
|
||||
|
||||
once (name, fn) {
|
||||
once(name, fn) {
|
||||
return appendListener(this, name, fn, true)
|
||||
}
|
||||
|
||||
off (name, fn) {
|
||||
off(name, fn) {
|
||||
return removeListener(this, name, fn)
|
||||
}
|
||||
|
||||
emit (name, ...args) {
|
||||
if (name === 'error' && this._events.error === undefined) throwUnhandledError(...args)
|
||||
emit(name, ...args) {
|
||||
if (name === 'error' && this._events !== undefined && this._events.error === undefined) {
|
||||
throwUnhandledError(...args)
|
||||
}
|
||||
|
||||
if (this._events === undefined) return false
|
||||
const e = this._events[name]
|
||||
return e === undefined ? false : e.emit(this, name, ...args)
|
||||
}
|
||||
|
||||
listeners (name) {
|
||||
listeners(name) {
|
||||
if (this._events === undefined) return []
|
||||
const e = this._events[name]
|
||||
return e === undefined ? [] : [...e.list]
|
||||
}
|
||||
|
||||
listenerCount (name) {
|
||||
listenerCount(name) {
|
||||
if (this._events === undefined) return 0
|
||||
const e = this._events[name]
|
||||
return e === undefined ? 0 : e.list.length
|
||||
}
|
||||
|
||||
getMaxListeners () {
|
||||
getMaxListeners() {
|
||||
return EventEmitter.defaultMaxListeners
|
||||
}
|
||||
|
||||
setMaxListeners (n) {}
|
||||
setMaxListeners(n) {}
|
||||
|
||||
removeAllListeners (name) {
|
||||
removeAllListeners(name) {
|
||||
if (arguments.length === 0) {
|
||||
for (const key of Reflect.ownKeys(this._events)) {
|
||||
if (key === 'removeListener') continue
|
||||
@@ -175,10 +186,8 @@ exports.errors = errors
|
||||
|
||||
exports.defaultMaxListeners = 10
|
||||
|
||||
exports.on = function on (emitter, name, opts = {}) {
|
||||
const {
|
||||
signal
|
||||
} = opts
|
||||
exports.on = function on(emitter, name, opts = {}) {
|
||||
const { signal } = opts
|
||||
|
||||
if (signal && signal.aborted) {
|
||||
throw errors.OPERATION_ABORTED(signal.reason)
|
||||
@@ -197,7 +206,7 @@ exports.on = function on (emitter, name, opts = {}) {
|
||||
if (signal) signal.addEventListener('abort', onabort)
|
||||
|
||||
return {
|
||||
next () {
|
||||
next() {
|
||||
if (events.length) {
|
||||
return Promise.resolve({ value: events.shift(), done: false })
|
||||
}
|
||||
@@ -212,25 +221,23 @@ exports.on = function on (emitter, name, opts = {}) {
|
||||
|
||||
if (done) return onclose()
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
promises.push({ resolve, reject })
|
||||
)
|
||||
return new Promise((resolve, reject) => promises.push({ resolve, reject }))
|
||||
},
|
||||
|
||||
return () {
|
||||
return() {
|
||||
return onclose()
|
||||
},
|
||||
|
||||
throw (err) {
|
||||
throw(err) {
|
||||
return onerror(err)
|
||||
},
|
||||
|
||||
[Symbol.asyncIterator] () {
|
||||
[Symbol.asyncIterator]() {
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
function onevent (...args) {
|
||||
function onevent(...args) {
|
||||
if (promises.length) {
|
||||
promises.shift().resolve({ value: args, done: false })
|
||||
} else {
|
||||
@@ -238,7 +245,7 @@ exports.on = function on (emitter, name, opts = {}) {
|
||||
}
|
||||
}
|
||||
|
||||
function onerror (err) {
|
||||
function onerror(err) {
|
||||
if (promises.length) {
|
||||
promises.shift().reject(err)
|
||||
} else {
|
||||
@@ -248,11 +255,11 @@ exports.on = function on (emitter, name, opts = {}) {
|
||||
return Promise.resolve({ done: true })
|
||||
}
|
||||
|
||||
function onabort () {
|
||||
function onabort() {
|
||||
onerror(errors.OPERATION_ABORTED(signal.reason))
|
||||
}
|
||||
|
||||
function onclose () {
|
||||
function onclose() {
|
||||
emitter.off(name, onevent)
|
||||
|
||||
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 = {}) {
|
||||
const {
|
||||
signal
|
||||
} = opts
|
||||
exports.once = function once(emitter, name, opts = {}) {
|
||||
const { signal } = opts
|
||||
|
||||
if (signal && signal.aborted) {
|
||||
throw errors.OPERATION_ABORTED(signal.reason)
|
||||
@@ -289,13 +294,13 @@ exports.once = function once (emitter, name, opts = {}) {
|
||||
resolve(args)
|
||||
})
|
||||
|
||||
function onerror (err) {
|
||||
function onerror(err) {
|
||||
emitter.off('error', onerror)
|
||||
|
||||
reject(err)
|
||||
}
|
||||
|
||||
function onabort () {
|
||||
function onabort() {
|
||||
signal.removeEventListener('abort', onabort)
|
||||
|
||||
onerror(errors.OPERATION_ABORTED(signal.reason))
|
||||
@@ -303,34 +308,52 @@ 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]
|
||||
|
||||
const {
|
||||
emit = to.emit.bind(to)
|
||||
} = opts
|
||||
const { emit = to.emit.bind(to) } = opts
|
||||
|
||||
const listeners = names.map((name) => function onevent (...args) {
|
||||
emit(name, ...args)
|
||||
const listeners = names.map(
|
||||
(name) =>
|
||||
function onevent(...args) {
|
||||
emit(name, ...args)
|
||||
}
|
||||
)
|
||||
|
||||
to.on('newListener', (name) => {
|
||||
const i = names.indexOf(name)
|
||||
|
||||
if (i !== -1 && to.listenerCount(name) === 0) {
|
||||
from.on(name, listeners[i])
|
||||
}
|
||||
}).on('removeListener', (name) => {
|
||||
const i = names.indexOf(name)
|
||||
|
||||
if (i !== -1 && to.listenerCount(name) === 0) {
|
||||
from.off(name, listeners[i])
|
||||
}
|
||||
})
|
||||
|
||||
to
|
||||
.on('newListener', (name) => {
|
||||
const i = names.indexOf(name)
|
||||
|
||||
if (i !== -1 && to.listenerCount(name) === 0) {
|
||||
from.on(name, listeners[i])
|
||||
}
|
||||
})
|
||||
.on('removeListener', (name) => {
|
||||
const i = names.indexOf(name)
|
||||
|
||||
if (i !== -1 && to.listenerCount(name) === 0) {
|
||||
from.off(name, listeners[i])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
exports.listenerCount = function listenerCount (emitter, name) {
|
||||
exports.listenerCount = function listenerCount(emitter, 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 {
|
||||
constructor (msg, code, fn = EventEmitterError, opts) {
|
||||
constructor(msg, code, fn = EventEmitterError, opts) {
|
||||
super(`${code}: ${msg}`, opts)
|
||||
this.code = code
|
||||
|
||||
@@ -8,15 +8,19 @@ module.exports = class EventEmitterError extends Error {
|
||||
}
|
||||
}
|
||||
|
||||
get name () {
|
||||
get name() {
|
||||
return 'EventEmitterError'
|
||||
}
|
||||
|
||||
static OPERATION_ABORTED (cause, msg = 'Operation aborted') {
|
||||
return new EventEmitterError(msg, 'OPERATION_ABORTED', EventEmitterError.OPERATION_ABORTED, { cause })
|
||||
static OPERATION_ABORTED(cause, msg = 'Operation aborted') {
|
||||
return new EventEmitterError(msg, 'OPERATION_ABORTED', EventEmitterError.OPERATION_ABORTED, {
|
||||
cause
|
||||
})
|
||||
}
|
||||
|
||||
static UNHANDLED_ERROR (cause, msg = 'Unhandled error') {
|
||||
return new EventEmitterError(msg, 'UNHANDLED_ERROR', EventEmitterError.UNHANDLED_ERROR, { cause })
|
||||
static UNHANDLED_ERROR(cause, msg = 'Unhandled error') {
|
||||
return new EventEmitterError(msg, 'UNHANDLED_ERROR', EventEmitterError.UNHANDLED_ERROR, {
|
||||
cause
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+31
-4
@@ -1,21 +1,37 @@
|
||||
{
|
||||
"name": "bare-events",
|
||||
"version": "2.5.0",
|
||||
"version": "2.8.1",
|
||||
"description": "Event emitters for JavaScript",
|
||||
"exports": {
|
||||
".": "./index.js",
|
||||
"./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"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"index.d.ts",
|
||||
"global.js",
|
||||
"global.d.ts",
|
||||
"web.js",
|
||||
"web.d.ts",
|
||||
"lib"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "npm run lint && npm run test:bare && npm run test:node",
|
||||
"test:bare": "bare test.js",
|
||||
"test:node": "node test.js",
|
||||
"lint": "standard"
|
||||
"lint": "prettier . --check"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -28,7 +44,18 @@
|
||||
},
|
||||
"homepage": "https://github.com/holepunchto/bare-events#readme",
|
||||
"devDependencies": {
|
||||
"bare-abort-controller": "^1.0.0",
|
||||
"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",
|
||||
"version": "4.3.7",
|
||||
"version": "4.4.3",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/debug-js/debug.git"
|
||||
@@ -26,7 +26,7 @@
|
||||
"scripts": {
|
||||
"lint": "xo",
|
||||
"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:coverage": "cat ./coverage/lcov.info | coveralls"
|
||||
},
|
||||
@@ -37,7 +37,6 @@
|
||||
"brfs": "^2.0.1",
|
||||
"browserify": "^16.2.3",
|
||||
"coveralls": "^3.0.2",
|
||||
"istanbul": "^0.4.5",
|
||||
"karma": "^3.1.4",
|
||||
"karma-browserify": "^6.0.0",
|
||||
"karma-chrome-launcher": "^2.2.0",
|
||||
@@ -56,5 +55,10 @@
|
||||
"browser": "./src/browser.js",
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"xo": {
|
||||
"rules": {
|
||||
"import/extensions": "off"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -129,6 +129,7 @@ function useColors() {
|
||||
|
||||
// Is webkit? http://stackoverflow.com/a/16459606/376773
|
||||
// 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) ||
|
||||
// Is firebug? http://stackoverflow.com/a/398120/376773
|
||||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||||
@@ -218,7 +219,7 @@ function save(namespaces) {
|
||||
function load() {
|
||||
let r;
|
||||
try {
|
||||
r = exports.storage.getItem('debug');
|
||||
r = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;
|
||||
} catch (error) {
|
||||
// Swallow
|
||||
// XXX (@Qix-) should we be logging these?
|
||||
|
||||
+58
-40
@@ -166,26 +166,64 @@ function setup(env) {
|
||||
createDebug.names = [];
|
||||
createDebug.skips = [];
|
||||
|
||||
let i;
|
||||
const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
||||
const len = split.length;
|
||||
const split = (typeof namespaces === 'string' ? namespaces : '')
|
||||
.trim()
|
||||
.replace(/\s+/g, ',')
|
||||
.split(',')
|
||||
.filter(Boolean);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (!split[i]) {
|
||||
// ignore empty strings
|
||||
continue;
|
||||
}
|
||||
|
||||
namespaces = split[i].replace(/\*/g, '.*?');
|
||||
|
||||
if (namespaces[0] === '-') {
|
||||
createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));
|
||||
for (const ns of split) {
|
||||
if (ns[0] === '-') {
|
||||
createDebug.skips.push(ns.slice(1));
|
||||
} 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.
|
||||
*
|
||||
@@ -194,8 +232,8 @@ function setup(env) {
|
||||
*/
|
||||
function disable() {
|
||||
const namespaces = [
|
||||
...createDebug.names.map(toNamespace),
|
||||
...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
|
||||
...createDebug.names,
|
||||
...createDebug.skips.map(namespace => '-' + namespace)
|
||||
].join(',');
|
||||
createDebug.enable('');
|
||||
return namespaces;
|
||||
@@ -209,21 +247,14 @@ function setup(env) {
|
||||
* @api public
|
||||
*/
|
||||
function enabled(name) {
|
||||
if (name[name.length - 1] === '*') {
|
||||
return true;
|
||||
}
|
||||
|
||||
let i;
|
||||
let len;
|
||||
|
||||
for (i = 0, len = createDebug.skips.length; i < len; i++) {
|
||||
if (createDebug.skips[i].test(name)) {
|
||||
for (const skip of createDebug.skips) {
|
||||
if (matchesTemplate(name, skip)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0, len = createDebug.names.length; i < len; i++) {
|
||||
if (createDebug.names[i].test(name)) {
|
||||
for (const ns of createDebug.names) {
|
||||
if (matchesTemplate(name, ns)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -231,19 +262,6 @@ function setup(env) {
|
||||
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`.
|
||||
*
|
||||
|
||||
-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>]
|
||||
Increment a version by the specified level. Level can
|
||||
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.
|
||||
|
||||
--preid <identifier>
|
||||
@@ -141,6 +141,8 @@ A "version" is described by the `v2.0.0` specification found at
|
||||
<https://semver.org/>.
|
||||
|
||||
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
|
||||
|
||||
@@ -237,6 +239,13 @@ $ semver 1.2.4-beta.0 -i prerelease
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
* `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
|
||||
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
|
||||
version and down to a prerelease of that major version.
|
||||
`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
|
||||
prerelease. If the input version is already a prerelease it simply
|
||||
increments it.
|
||||
* `release` will remove any prerelease part of the version.
|
||||
* `identifier` can be used to prefix `premajor`, `preminor`,
|
||||
`prepatch`, or `prerelease` version increments. `identifierBase`
|
||||
is the base to be used for the `prerelease` identifier.
|
||||
@@ -477,7 +487,7 @@ strings that they parse.
|
||||
|
||||
### 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
|
||||
range.
|
||||
* `maxSatisfying(versions, range)`: Return the highest version in the list
|
||||
|
||||
+4
-1
@@ -3,6 +3,8 @@
|
||||
// Exits successfully and prints matching version(s) if
|
||||
// any supplied version is valid and passes all tests.
|
||||
|
||||
'use strict'
|
||||
|
||||
const argv = process.argv.slice(2)
|
||||
|
||||
let versions = []
|
||||
@@ -61,6 +63,7 @@ const main = () => {
|
||||
switch (argv[0]) {
|
||||
case 'major': case 'minor': case 'patch': case 'prerelease':
|
||||
case 'premajor': case 'preminor': case 'prepatch':
|
||||
case 'release':
|
||||
inc = argv.shift()
|
||||
break
|
||||
default:
|
||||
@@ -149,7 +152,7 @@ Options:
|
||||
-i --increment [<level>]
|
||||
Increment a version by the specified level. Level can
|
||||
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.
|
||||
|
||||
--preid <identifier>
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const ANY = Symbol('SemVer ANY')
|
||||
// hoisted class for cyclic dependency
|
||||
class Comparator {
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = {
|
||||
SemVer: require('./semver.js'),
|
||||
Range: require('./range.js'),
|
||||
|
||||
+3
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SPACE_CHARACTERS = /\s+/g
|
||||
|
||||
// hoisted class for cyclic dependency
|
||||
@@ -253,6 +255,7 @@ const isSatisfiable = (comparators, options) => {
|
||||
// already replaced the hyphen ranges
|
||||
// turn into a set of JUST comparators.
|
||||
const parseComparator = (comp, options) => {
|
||||
comp = comp.replace(re[t.BUILD], '')
|
||||
debug('comp', comp, options)
|
||||
comp = replaceCarets(comp, options)
|
||||
debug('caret', comp)
|
||||
|
||||
+41
-10
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const debug = require('../internal/debug')
|
||||
const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')
|
||||
const { safeRe: re, t } = require('../internal/re')
|
||||
@@ -10,7 +12,7 @@ class SemVer {
|
||||
|
||||
if (version instanceof SemVer) {
|
||||
if (version.loose === !!options.loose &&
|
||||
version.includePrerelease === !!options.includePrerelease) {
|
||||
version.includePrerelease === !!options.includePrerelease) {
|
||||
return version
|
||||
} else {
|
||||
version = version.version
|
||||
@@ -109,11 +111,25 @@ class SemVer {
|
||||
other = new SemVer(other, this.options)
|
||||
}
|
||||
|
||||
return (
|
||||
compareIdentifiers(this.major, other.major) ||
|
||||
compareIdentifiers(this.minor, other.minor) ||
|
||||
compareIdentifiers(this.patch, other.patch)
|
||||
)
|
||||
if (this.major < other.major) {
|
||||
return -1
|
||||
}
|
||||
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) {
|
||||
@@ -176,6 +192,19 @@ class SemVer {
|
||||
// preminor will bump the version up to the next minor release, and immediately
|
||||
// down to pre-release. premajor and prepatch work the same way.
|
||||
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) {
|
||||
case 'premajor':
|
||||
this.prerelease.length = 0
|
||||
@@ -206,6 +235,12 @@ class SemVer {
|
||||
}
|
||||
this.inc('pre', identifier, identifierBase)
|
||||
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':
|
||||
// If this is a pre-major version, bump up to the same major version.
|
||||
@@ -249,10 +284,6 @@ class SemVer {
|
||||
case 'pre': {
|
||||
const base = Number(identifierBase) ? 1 : 0
|
||||
|
||||
if (!identifier && identifierBase === false) {
|
||||
throw new Error('invalid increment argument: identifier is empty')
|
||||
}
|
||||
|
||||
if (this.prerelease.length === 0) {
|
||||
this.prerelease = [base]
|
||||
} else {
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const parse = require('./parse')
|
||||
const clean = (version, options) => {
|
||||
const s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const eq = require('./eq')
|
||||
const neq = require('./neq')
|
||||
const gt = require('./gt')
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const parse = require('./parse')
|
||||
const { safeRe: re, t } = require('../internal/re')
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const compareBuild = (a, b, loose) => {
|
||||
const versionA = new SemVer(a, loose)
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const compareLoose = (a, b) => compare(a, b, true)
|
||||
module.exports = compareLoose
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const compare = (a, 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 diff = (version1, version2) => {
|
||||
@@ -27,20 +29,13 @@ const diff = (version1, version2) => {
|
||||
return 'major'
|
||||
}
|
||||
|
||||
// Otherwise it can be determined by checking the high version
|
||||
|
||||
if (highVersion.patch) {
|
||||
// anything higher than a patch bump would result in the wrong version
|
||||
// If the main part has no difference
|
||||
if (lowVersion.compareMain(highVersion) === 0) {
|
||||
if (lowVersion.minor && !lowVersion.patch) {
|
||||
return 'minor'
|
||||
}
|
||||
return 'patch'
|
||||
}
|
||||
|
||||
if (highVersion.minor) {
|
||||
// anything higher than a minor bump would result in the wrong version
|
||||
return 'minor'
|
||||
}
|
||||
|
||||
// bumping major/minor/patch all have same result
|
||||
return 'major'
|
||||
}
|
||||
|
||||
// add the `pre` prefix if we are going to a prerelease version
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const eq = (a, b, loose) => compare(a, b, loose) === 0
|
||||
module.exports = eq
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const gt = (a, b, loose) => compare(a, b, loose) > 0
|
||||
module.exports = gt
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const gte = (a, b, loose) => compare(a, b, loose) >= 0
|
||||
module.exports = gte
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
|
||||
const inc = (version, release, options, identifier, identifierBase) => {
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const lt = (a, b, loose) => compare(a, b, loose) < 0
|
||||
module.exports = lt
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const lte = (a, b, loose) => compare(a, b, loose) <= 0
|
||||
module.exports = lte
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const major = (a, loose) => new SemVer(a, loose).major
|
||||
module.exports = major
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const minor = (a, loose) => new SemVer(a, loose).minor
|
||||
module.exports = minor
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const neq = (a, b, loose) => compare(a, b, loose) !== 0
|
||||
module.exports = neq
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const parse = (version, options, throwErrors = false) => {
|
||||
if (version instanceof SemVer) {
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const patch = (a, loose) => new SemVer(a, loose).patch
|
||||
module.exports = patch
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const parse = require('./parse')
|
||||
const prerelease = (version, options) => {
|
||||
const parsed = parse(version, options)
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compare = require('./compare')
|
||||
const rcompare = (a, b, loose) => compare(b, a, loose)
|
||||
module.exports = rcompare
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compareBuild = require('./compare-build')
|
||||
const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
|
||||
module.exports = rsort
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const Range = require('../classes/range')
|
||||
const satisfies = (version, range, options) => {
|
||||
try {
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const compareBuild = require('./compare-build')
|
||||
const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
|
||||
module.exports = sort
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const parse = require('./parse')
|
||||
const valid = (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
|
||||
const internalRe = require('./internal/re')
|
||||
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
|
||||
// Not necessarily the package version of this code.
|
||||
const SEMVER_SPEC_VERSION = '2.0.0'
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const debug = (
|
||||
typeof process === 'object' &&
|
||||
process.env &&
|
||||
|
||||
+6
@@ -1,5 +1,11 @@
|
||||
'use strict'
|
||||
|
||||
const numeric = /^[0-9]+$/
|
||||
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 bnum = numeric.test(b)
|
||||
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
class LRUCache {
|
||||
constructor () {
|
||||
this.max = 1000
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
// parse out just the options we care about
|
||||
const looseOption = Object.freeze({ loose: true })
|
||||
const emptyOpts = Object.freeze({ })
|
||||
|
||||
+10
-4
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const {
|
||||
MAX_SAFE_COMPONENT_LENGTH,
|
||||
MAX_SAFE_BUILD_LENGTH,
|
||||
@@ -10,6 +12,7 @@ exports = module.exports = {}
|
||||
const re = exports.re = []
|
||||
const safeRe = exports.safeRe = []
|
||||
const src = exports.src = []
|
||||
const safeSrc = exports.safeSrc = []
|
||||
const t = exports.t = {}
|
||||
let R = 0
|
||||
|
||||
@@ -42,6 +45,7 @@ const createToken = (name, value, isGlobal) => {
|
||||
debug(name, index, value)
|
||||
t[name] = index
|
||||
src[index] = value
|
||||
safeSrc[index] = safe
|
||||
re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
|
||||
safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)
|
||||
}
|
||||
@@ -74,12 +78,14 @@ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
|
||||
|
||||
// ## Pre-release Version 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]
|
||||
}|${src[t.NONNUMERICIDENTIFIER]})`)
|
||||
createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]
|
||||
}|${src[t.NUMERICIDENTIFIER]})`)
|
||||
|
||||
createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
|
||||
}|${src[t.NONNUMERICIDENTIFIER]})`)
|
||||
createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]
|
||||
}|${src[t.NUMERICIDENTIFIERLOOSE]})`)
|
||||
|
||||
// ## Pre-release Version
|
||||
// Hyphen, followed by one or more dot-separated pre-release version
|
||||
|
||||
+8
-7
@@ -1,20 +1,21 @@
|
||||
{
|
||||
"name": "semver",
|
||||
"version": "7.6.3",
|
||||
"version": "7.7.3",
|
||||
"description": "The semantic version parser used by npm.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "tap",
|
||||
"snap": "tap",
|
||||
"lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"",
|
||||
"lint": "npm run eslint",
|
||||
"postlint": "template-oss-check",
|
||||
"lintfix": "npm run lint -- --fix",
|
||||
"lintfix": "npm run eslint -- --fix",
|
||||
"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": {
|
||||
"@npmcli/eslint-config": "^4.0.0",
|
||||
"@npmcli/template-oss": "4.22.0",
|
||||
"@npmcli/eslint-config": "^5.0.0",
|
||||
"@npmcli/template-oss": "4.25.1",
|
||||
"benchmark": "^2.1.4",
|
||||
"tap": "^16.0.0"
|
||||
},
|
||||
@@ -51,7 +52,7 @@
|
||||
"author": "GitHub Inc.",
|
||||
"templateOSS": {
|
||||
"//@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",
|
||||
"distPaths": [
|
||||
"classes/",
|
||||
|
||||
+2
@@ -1,2 +1,4 @@
|
||||
'use strict'
|
||||
|
||||
// XXX remove in v8 or beyond
|
||||
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.
|
||||
const outside = require('./outside')
|
||||
const gtr = (version, range, options) => outside(version, range, '>', options)
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const Range = require('../classes/range')
|
||||
const intersects = (r1, r2, options) => {
|
||||
r1 = new Range(r1, options)
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const outside = require('./outside')
|
||||
// Determine if version is less than all the versions possible in the range
|
||||
const ltr = (version, range, options) => outside(version, range, '<', options)
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const Range = require('../classes/range')
|
||||
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const Range = require('../classes/range')
|
||||
const minSatisfying = (versions, range, options) => {
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const Range = require('../classes/range')
|
||||
const gt = require('../functions/gt')
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const SemVer = require('../classes/semver')
|
||||
const Comparator = require('../classes/comparator')
|
||||
const { ANY } = Comparator
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
// given a set of versions and a range, create a "simplified" range
|
||||
// that includes the same versions that the original range does
|
||||
// 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 Comparator = require('../classes/comparator.js')
|
||||
const { ANY } = Comparator
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const Range = require('../classes/range')
|
||||
|
||||
// Mostly just for testing and legacy API reasons
|
||||
|
||||
+2
@@ -1,3 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
const Range = require('../classes/range')
|
||||
const validRange = (range, options) => {
|
||||
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 PREMATURE_CLOSE = new Error('Premature close')
|
||||
|
||||
const queueTick = require('queue-tick')
|
||||
const FIFO = require('fast-fifo')
|
||||
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 */
|
||||
|
||||
// 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 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_NEXT_TICK_OR_OPENING = READ_NEXT_TICK | OPENING
|
||||
|
||||
// Combined write state
|
||||
const WRITE_PRIMARY_STATUS = OPEN_STATUS | WRITE_FINISHING | WRITE_DONE
|
||||
@@ -232,7 +235,7 @@ class WritableState {
|
||||
updateNextTick () {
|
||||
if ((this.stream._duplexState & WRITE_NEXT_TICK) !== 0) return
|
||||
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()
|
||||
}
|
||||
|
||||
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 () {
|
||||
if ((this.stream._duplexState & READ_NEXT_TICK) !== 0) return
|
||||
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) {
|
||||
this._readableState.updateNextTick()
|
||||
this._readableState.updateNextTickIfOpen()
|
||||
return this._readableState.push(data)
|
||||
}
|
||||
|
||||
unshift (data) {
|
||||
this._readableState.updateNextTick()
|
||||
this._readableState.updateNextTickIfOpen()
|
||||
return this._readableState.unshift(data)
|
||||
}
|
||||
|
||||
@@ -1134,6 +1143,10 @@ function isReadStreamx (stream) {
|
||||
return isStreamx(stream) && stream.readable
|
||||
}
|
||||
|
||||
function isDisturbed (stream) {
|
||||
return (stream._duplexState & OPENING) !== OPENING || (stream._duplexState & ACTIVE_OR_TICKING) !== 0
|
||||
}
|
||||
|
||||
function isTypedArray (data) {
|
||||
return typeof data === 'object' && data !== null && typeof data.byteLength === 'number'
|
||||
}
|
||||
@@ -1159,6 +1172,7 @@ module.exports = {
|
||||
isStreamx,
|
||||
isEnded,
|
||||
isFinished,
|
||||
isDisturbed,
|
||||
getStreamError,
|
||||
Stream,
|
||||
Writable,
|
||||
|
||||
+4
-12
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "streamx",
|
||||
"version": "2.20.2",
|
||||
"version": "2.23.0",
|
||||
"description": "An iteration of the Node.js core streams with a series of improvements",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"events-universal": "^1.0.0",
|
||||
"fast-fifo": "^1.3.2",
|
||||
"queue-tick": "^1.0.1",
|
||||
"text-decoder": "^1.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -14,20 +14,12 @@
|
||||
"end-of-stream": "^1.4.4",
|
||||
"standard": "^17.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"bare-events": "^2.2.0"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"imports": {
|
||||
"events": {
|
||||
"bare": "bare-events",
|
||||
"default": "events"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "standard && brittle test/*.js"
|
||||
"test": "standard && node test/all.js",
|
||||
"test:bare": "standard && bare test/all.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
Generated
+1421
-44
File diff suppressed because it is too large
Load Diff
+3
-1
@@ -12,7 +12,9 @@
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"globals": "^15.9.0",
|
||||
"less": "^4.1.3",
|
||||
"prettier": "^3.3.3"
|
||||
"prettier": "^3.3.3",
|
||||
"puppeteer": "^24.29.0",
|
||||
"turndown": "^7.2.2"
|
||||
},
|
||||
"author": "LeRatierBretonnien",
|
||||
"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
+114
-17
@@ -1,30 +1,127 @@
|
||||
<section>
|
||||
<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}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{formField systemFields.armorType value=system.armorType localize=true}}
|
||||
{{formField systemFields.defense value=system.defense}}
|
||||
{{formField systemFields.maximumMovement value=system.maximumMovement}}
|
||||
{{formField systemFields.hp value=system.hp}}
|
||||
{{formField systemFields.damageReduction value=system.damageReduction}}
|
||||
{{formField systemFields.encLoad value=system.encLoad}}
|
||||
{{! Armor Type (Light/Medium/Heavy) }}
|
||||
{{formField
|
||||
systemFields.armorType
|
||||
value=system.armorType
|
||||
localize=true
|
||||
label="PRISMRPG.Label.armorType"
|
||||
}}
|
||||
|
||||
{{formField systemFields.isHelmet value=system.isHelmet}}
|
||||
{{formField systemFields.equipped value=system.equipped}}
|
||||
{{! Armor Class (AC) }}
|
||||
{{formField
|
||||
systemFields.defense
|
||||
value=system.defense
|
||||
label="PRISMRPG.Label.armorClass"
|
||||
}}
|
||||
|
||||
{{formField systemFields.cost value=system.cost}}
|
||||
{{formField systemFields.money value=system.money localize=true}}
|
||||
{{! Maximum Reduction Rating (MRR) }}
|
||||
{{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>
|
||||
<legend>{{localize "PRISMRPG.Label.description"}}</legend>
|
||||
{{formInput
|
||||
systemFields.description
|
||||
enriched=enrichedDescription
|
||||
value=system.description
|
||||
name="system.description"
|
||||
toggled=true
|
||||
systemFields.description
|
||||
enriched=enrichedDescription
|
||||
value=system.description
|
||||
name="system.description"
|
||||
toggled=true
|
||||
}}
|
||||
</fieldset>
|
||||
</section>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user