First adaptation pass

This commit is contained in:
2025-11-06 00:01:59 +01:00
parent 5b1fd847c2
commit 6b883f8126
112 changed files with 44142 additions and 953 deletions
+41 -1
View File
@@ -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
View File
@@ -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({
+50
View File
@@ -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."
});
+112
View File
@@ -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",
+45
View File
@@ -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",
+14 -1
View File
@@ -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
View File
@@ -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"]
}