- System manifest (system.json) for Foundry v13 - Project structure with module/, templates/, styles/, lang/, packs/ - Docker Compose for local Foundry development environment - SCSS architecture with parchment theme and accessibility colors - Base system entry point with CONFIG and Handlebars helpers - English localization file with all game terms - Project roadmap with 98 tasks across 11 phases Phase 0 (Foundation) complete. Ready for Phase 1 (Data Models). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
201 lines
5.0 KiB
JavaScript
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;
|