vagabond-rpg-foundryvtt/module/helpers/config.mjs
Cal Corum 44dbd00e1b Add development tooling: ESLint, Prettier, Husky, and Quench tests
Set up complete development environment with:
- ESLint with Foundry VTT globals (game, CONFIG, Actor, etc.)
- Prettier for consistent code formatting
- Husky + lint-staged for pre-commit hooks
- Quench test framework structure with sanity checks

Documentation:
- DEVELOPMENT.md with tooling decisions and rationale
- README.md updated with development setup instructions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 14:47:14 -06:00

201 lines
5.0 KiB
JavaScript

/**
* Vagabond RPG Configuration
* Contains all system constants and configuration data
*/
export const VAGABOND = {};
/**
* The set of Ability Scores (Stats) used within the system
*/
VAGABOND.stats = {
might: "VAGABOND.StatMight",
dexterity: "VAGABOND.StatDexterity",
awareness: "VAGABOND.StatAwareness",
reason: "VAGABOND.StatReason",
presence: "VAGABOND.StatPresence",
luck: "VAGABOND.StatLuck",
};
/**
* Abbreviated stat labels
*/
VAGABOND.statsAbbr = {
might: "VAGABOND.StatMightAbbr",
dexterity: "VAGABOND.StatDexterityAbbr",
awareness: "VAGABOND.StatAwarenessAbbr",
reason: "VAGABOND.StatReasonAbbr",
presence: "VAGABOND.StatPresenceAbbr",
luck: "VAGABOND.StatLuckAbbr",
};
/**
* Skills and their associated stats
*/
VAGABOND.skills = {
arcana: { label: "VAGABOND.SkillArcana", stat: "reason" },
brawl: { label: "VAGABOND.SkillBrawl", stat: "might" },
craft: { label: "VAGABOND.SkillCraft", stat: "reason" },
detect: { label: "VAGABOND.SkillDetect", stat: "awareness" },
finesse: { label: "VAGABOND.SkillFinesse", stat: "dexterity" },
influence: { label: "VAGABOND.SkillInfluence", stat: "presence" },
leadership: { label: "VAGABOND.SkillLeadership", stat: "presence" },
medicine: { label: "VAGABOND.SkillMedicine", stat: "reason" },
mysticism: { label: "VAGABOND.SkillMysticism", stat: "awareness" },
performance: { label: "VAGABOND.SkillPerformance", stat: "presence" },
sneak: { label: "VAGABOND.SkillSneak", stat: "dexterity" },
survival: { label: "VAGABOND.SkillSurvival", stat: "awareness" },
};
/**
* Attack types and their associated stats
*/
VAGABOND.attackTypes = {
melee: { label: "VAGABOND.AttackMelee", stat: "might" },
brawl: { label: "VAGABOND.AttackBrawl", stat: "might" },
ranged: { label: "VAGABOND.AttackRanged", stat: "awareness" },
finesse: { label: "VAGABOND.AttackFinesse", stat: "dexterity" },
};
/**
* Save types and their stat combinations
*/
VAGABOND.saves = {
reflex: { label: "VAGABOND.SaveReflex", stats: ["dexterity", "awareness"] },
endure: { label: "VAGABOND.SaveEndure", stats: ["might", "might"] },
will: { label: "VAGABOND.SaveWill", stats: ["reason", "presence"] },
};
/**
* Spell delivery types with base costs
*/
VAGABOND.spellDelivery = {
touch: { label: "VAGABOND.DeliveryTouch", cost: 0 },
remote: { label: "VAGABOND.DeliveryRemote", cost: 0 },
imbue: { label: "VAGABOND.DeliveryImbue", cost: 0 },
cube: { label: "VAGABOND.DeliveryCube", cost: 1 },
aura: { label: "VAGABOND.DeliveryAura", cost: 2 },
cone: { label: "VAGABOND.DeliveryCone", cost: 2 },
glyph: { label: "VAGABOND.DeliveryGlyph", cost: 2 },
line: { label: "VAGABOND.DeliveryLine", cost: 2 },
sphere: { label: "VAGABOND.DeliverySphere", cost: 2 },
};
/**
* Spell duration types
*/
VAGABOND.spellDuration = {
instant: { label: "VAGABOND.DurationInstant", focus: false },
focus: { label: "VAGABOND.DurationFocus", focus: true },
continual: { label: "VAGABOND.DurationContinual", focus: false },
};
/**
* Damage types
*/
VAGABOND.damageTypes = {
blunt: "VAGABOND.DamageBlunt",
slash: "VAGABOND.DamageSlash",
pierce: "VAGABOND.DamagePierce",
fire: "VAGABOND.DamageFire",
cold: "VAGABOND.DamageCold",
shock: "VAGABOND.DamageShock",
poison: "VAGABOND.DamagePoison",
acid: "VAGABOND.DamageAcid",
};
/**
* Weapon properties
*/
VAGABOND.weaponProperties = {
finesse: "VAGABOND.PropertyFinesse",
thrown: "VAGABOND.PropertyThrown",
cleave: "VAGABOND.PropertyCleave",
reach: "VAGABOND.PropertyReach",
loading: "VAGABOND.PropertyLoading",
brawl: "VAGABOND.PropertyBrawl",
crude: "VAGABOND.PropertyCrude",
versatile: "VAGABOND.PropertyVersatile",
};
/**
* Weapon grip types
*/
VAGABOND.gripTypes = {
"1h": "VAGABOND.Grip1H",
"2h": "VAGABOND.Grip2H",
versatile: "VAGABOND.GripVersatile",
fist: "VAGABOND.GripFist",
};
/**
* Armor types
*/
VAGABOND.armorTypes = {
light: "VAGABOND.ArmorLight",
heavy: "VAGABOND.ArmorHeavy",
shield: "VAGABOND.ArmorShield",
};
/**
* Size categories
*/
VAGABOND.sizes = {
small: "VAGABOND.SizeSmall",
medium: "VAGABOND.SizeMedium",
large: "VAGABOND.SizeLarge",
huge: "VAGABOND.SizeHuge",
giant: "VAGABOND.SizeGiant",
colossal: "VAGABOND.SizeColossal",
};
/**
* Being types
*/
VAGABOND.beingTypes = {
humanlike: "VAGABOND.BeingHumanlike",
fae: "VAGABOND.BeingFae",
cryptid: "VAGABOND.BeingCryptid",
artificial: "VAGABOND.BeingArtificial",
beast: "VAGABOND.BeingBeast",
outer: "VAGABOND.BeingOuter",
primordial: "VAGABOND.BeingPrimordial",
undead: "VAGABOND.BeingUndead",
};
/**
* Enemy zones for AI behavior
*/
VAGABOND.zones = {
frontline: "VAGABOND.ZoneFrontline",
midline: "VAGABOND.ZoneMidline",
backline: "VAGABOND.ZoneBackline",
};
/**
* Default crit threshold (Natural 20)
*/
VAGABOND.defaultCritThreshold = 20;
/**
* Speed values by Dexterity
*/
VAGABOND.speedByDex = {
2: 25,
3: 25,
4: 30,
5: 30,
6: 35,
7: 35,
};
/**
* Max fatigue before death
*/
VAGABOND.maxFatigue = 5;
/**
* Base item slots calculation
*/
VAGABOND.baseItemSlots = 8;