feat(rules): the race, calling, skill and attribute tables
Mechanics are rules and live in code, beside Luck and Currency. The skill pools are new — the races/classes spec said only 'the stat-appropriate slice' and never enumerated them; each pool is larger than its pick count so the choice is real. The dwarf's +2 vs poison is exposed separately from save() rather than folded into it: baking a conditional into a flat number is how a sheet starts lying. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QYa9u7Kdxv5gX4AnwWexy8
This commit is contained in:
28
client/scripts/rules/skills.gd
Normal file
28
client/scripts/rules/skills.gd
Normal file
@@ -0,0 +1,28 @@
|
||||
class_name Skills
|
||||
extends RefCounted
|
||||
## The 9 skills and the attribute each is governed by (races-and-classes spec §2).
|
||||
## Perception sits under FTH, not a standalone WIS — §8's FTH/MAG replace WIS/INT,
|
||||
## so a Bonesetter is also the party's best lookout. LCK owns no skill (§7).
|
||||
|
||||
const BY_ATTRIBUTE := {
|
||||
"athletics": "str",
|
||||
"intimidation": "str",
|
||||
"stealth": "dex",
|
||||
"sleight_of_hand": "dex",
|
||||
"acrobatics": "dex",
|
||||
"endurance": "con",
|
||||
"perception": "fth",
|
||||
"faith_lore": "fth",
|
||||
"sorcery": "mag",
|
||||
}
|
||||
|
||||
const IDS := ["athletics", "intimidation", "stealth", "sleight_of_hand", "acrobatics",
|
||||
"endurance", "perception", "faith_lore", "sorcery"]
|
||||
|
||||
|
||||
static func exists(skill: String) -> bool:
|
||||
return BY_ATTRIBUTE.has(skill)
|
||||
|
||||
|
||||
static func attribute(skill: String) -> String:
|
||||
return str(BY_ATTRIBUTE.get(skill, ""))
|
||||
Reference in New Issue
Block a user