Files
Christopher Wiebe b451f83174 Initial commit: Theriapolis baseline at port/godot branch point
Captures the pre-Godot-port state of the codebase. This is the rollback
anchor for the Godot port (M0 of theriapolis-rpg-implementation-plan-godot-port.md).
All Phase 0 through Phase 6.5 work is included; Phase 7 is in flight.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 20:40:51 -07:00

307 lines
23 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[
{
"id": "pack_forged",
"class_id": "fangsworn",
"name": "Pack-Forged",
"flavor": "Alone I am a fang. Together we are jaws. Canid pack-fighting adapted into formalized combat doctrine. Fights best in formation, amplifying allies and being amplified.",
"level_features": [
{ "level": 3, "features": ["packmates_howl"] },
{ "level": 7, "features": ["coordinated_takedown"] },
{ "level": 10, "features": ["rally_the_pack"] },
{ "level": 15, "features": ["wolfpack_frenzy"] },
{ "level": 18, "features": ["alphas_stand"] }
],
"feature_definitions": {
"packmates_howl": { "name": "Packmate's Howl", "kind": "stub", "description": "When you hit a creature with a melee attack, the next ally attack against that creature has advantage. (Phase 5: deferred.)" },
"coordinated_takedown": { "name": "Coordinated Takedown", "kind": "stub", "description": "+1d6 damage when you and an ally are both within 5 ft. of the same target. (Phase 5: deferred.)" },
"rally_the_pack": { "name": "Rally the Pack", "kind": "stub", "description": "Bonus action rally — 3 allies within 30 ft. gain temp HP equal to level + CHA. (Phase 5: deferred.)" },
"wolfpack_frenzy": { "name": "Wolfpack Frenzy", "kind": "stub", "description": "When you Action Surge, an ally within 10 ft. can take an additional action on their next turn. (Phase 5: deferred.)" },
"alphas_stand": { "name": "Alpha's Stand", "kind": "stub", "description": "When reduced to 0 HP, allies within 30 ft. gain advantage on attacks and saves until end of next turn. (Phase 5: deferred.)" }
}
},
{
"id": "lone_fang",
"class_id": "fangsworn",
"name": "Lone Fang",
"flavor": "The pack is a crutch. I am enough. Solo fighters and duelists — Felid tradition of individual perfection applied to warfare.",
"level_features": [
{ "level": 3, "features": ["isolation_bonus"] },
{ "level": 7, "features": ["predators_focus"] },
{ "level": 10, "features": ["uncanny_counter"] },
{ "level": 15, "features": ["no_witnesses"] },
{ "level": 18, "features": ["perfect_kill"] }
],
"feature_definitions": {
"isolation_bonus": { "name": "Isolation Bonus", "kind": "stub", "description": "+2 attack and +1 AC when no allied creature is within 10 ft. (Phase 5: deferred.)" },
"predators_focus": { "name": "Predator's Focus", "kind": "stub", "description": "Bonus action: focus a target — advantage on attacks against it for 1 minute, disadvantage on attacks against others. (Phase 5: deferred.)" },
"uncanny_counter": { "name": "Uncanny Counter", "kind": "stub", "description": "Reaction: when a creature misses you with a melee attack, attack it with advantage. (Phase 5: deferred.)" },
"no_witnesses": { "name": "No Witnesses", "kind": "stub", "description": "Regain HP equal to level + CON when you reduce a creature to 0 HP with no allies within 30 ft. (Phase 5: deferred.)" },
"perfect_kill": { "name": "Perfect Kill", "kind": "stub", "description": "Once per long rest: maximize all damage dice on a melee hit; if it kills, take another action. (Phase 5: deferred.)" }
}
},
{
"id": "herd_wall",
"class_id": "bulwark",
"name": "Herd-Wall",
"flavor": "Shoulder to shoulder. Horn to horn. They don't get through. Bovid-originated doctrine of communal defense.",
"level_features": [
{ "level": 3, "features": ["interlock_shields"] },
{ "level": 6, "features": ["stampede_redirect"] },
{ "level": 10, "features": ["unbreakable_line"] },
{ "level": 15, "features": ["fortress"] },
{ "level": 20, "features": ["the_herd_stands"] }
],
"feature_definitions": {
"interlock_shields": { "name": "Interlock Shields", "kind": "stub", "description": "Adjacent ally: both gain +1 AC (stacks with Herd Wall to max +3 from adjacency). (Phase 5: deferred.)" },
"stampede_redirect": { "name": "Stampede Redirect", "kind": "stub", "description": "Reaction: redirect a charge against an ally to yourself, gaining resistance to the damage. (Phase 5: deferred.)" },
"unbreakable_line": { "name": "Unbreakable Line", "kind": "stub", "description": "You and adjacent allies cannot be pushed/pulled/prone in Sentinel Stance. (Phase 5: deferred.)" },
"fortress": { "name": "Fortress", "kind": "stub", "description": "In Sentinel Stance: resistance to all damage except psychic. (Phase 5: deferred.)" },
"the_herd_stands": { "name": "The Herd Stands", "kind": "stub", "description": "Last One Standing also applies to allies who return to consciousness or your aura range. (Phase 5: deferred.)" }
}
},
{
"id": "antler_guard",
"class_id": "bulwark",
"name": "Antler-Guard",
"flavor": "I don't block. I make them regret swinging. Cervid tradition of active defense — punishment-based deterrence rather than passive absorption.",
"level_features": [
{ "level": 3, "features": ["retaliatory_strike"] },
{ "level": 6, "features": ["threatening_presence"] },
{ "level": 10, "features": ["braced_for_impact"] },
{ "level": 15, "features": ["wrath_of_the_cornered"] },
{ "level": 20, "features": ["no_prey_here"] }
],
"feature_definitions": {
"retaliatory_strike": { "name": "Retaliatory Strike", "kind": "stub", "description": "When taking damage from a melee attack in Sentinel Stance, deal 1d8 + CON back automatically. (Phase 5: deferred.)" },
"threatening_presence": { "name": "Threatening Presence", "kind": "stub", "description": "Hostile creatures starting their turn within 5 ft. take -2 to attack rolls against your allies. (Phase 5: deferred.)" },
"braced_for_impact": { "name": "Braced for Impact", "kind": "stub", "description": "Reaction: halve damage of a single attack but rooted (speed 0) until next turn. (Phase 5: deferred.)" },
"wrath_of_the_cornered": { "name": "Wrath of the Cornered", "kind": "stub", "description": "Below half HP: Retaliatory Strike → 2d8 + CON, affects any attacker (not just melee). (Phase 5: deferred.)" },
"no_prey_here": { "name": "No Prey Here", "kind": "stub", "description": "Last One Standing: hostile creatures in aura make WIS save or be frightened. (Phase 5: deferred.)" }
}
},
{
"id": "blood_memory",
"class_id": "feral",
"name": "Blood Memory",
"flavor": "My great-great-grandmother ate yours. I remember how it tasted. Predator-Clade Ferals who channel the deep, dark hunger.",
"level_features": [
{ "level": 3, "features": ["predatory_surge"] },
{ "level": 6, "features": ["terror_scent"] },
{ "level": 10, "features": ["taste_of_the_old_world"] },
{ "level": 14, "features": ["apex_pursuit"] }
],
"feature_definitions": {
"predatory_surge": { "name": "Predatory Surge", "kind": "stub", "description": "While raging: when you reduce a creature to 0 HP, move half-speed and make one additional melee attack. (Phase 5: deferred.)" },
"terror_scent": { "name": "Terror Scent", "kind": "stub", "description": "Prey-Clade creatures within 15 ft. save or be frightened of you each turn while raging. (Phase 5: deferred.)" },
"taste_of_the_old_world":{ "name": "Taste of the Old World", "kind": "stub", "description": "Bite hit while raging: regain HP equal to CON. (Phase 5: deferred.)" },
"apex_pursuit": { "name": "Apex Pursuit", "kind": "stub", "description": "Speed +15 ft. toward frightened creatures. Cannot end rage while one is fleeing within 60 ft. (Phase 5: deferred.)" }
}
},
{
"id": "stampede_heart",
"class_id": "feral",
"name": "Stampede Heart",
"flavor": "You call it panic. I call it a weapon. Prey-Clade Ferals who weaponize the flight response.",
"level_features": [
{ "level": 3, "features": ["trampling_charge"] },
{ "level": 6, "features": ["contagious_panic"] },
{ "level": 10, "features": ["born_to_run"] },
{ "level": 14, "features": ["the_herds_fury"] }
],
"feature_definitions": {
"trampling_charge": { "name": "Trampling Charge", "kind": "stub", "description": "Move 20+ ft. straight before melee: +1d8 bludgeoning, save or prone. (Phase 5: deferred.)" },
"contagious_panic": { "name": "Contagious Panic", "kind": "stub", "description": "Bonus action: scream/bellow/stamp. All creatures within 15 ft. save or move 15 ft. away. (Phase 5: deferred.)" },
"born_to_run": { "name": "Born to Run", "kind": "stub", "description": "While raging, base speed doubles. Move through hostile spaces as difficult terrain. (Phase 5: deferred.)" },
"the_herds_fury": { "name": "The Herd's Fury", "kind": "stub", "description": "Hit while raging: an ally within 30 ft. can use reaction to move half-speed and attack the same target. (Phase 5: deferred.)" }
}
},
{
"id": "noseblind",
"class_id": "shadow_pelt",
"name": "Noseblind",
"flavor": "In a world where scent is truth, I am the lie. Scent-warfare specialists — the CIA of Theriapolis.",
"level_features": [
{ "level": 3, "features": ["scent_forgery"] },
{ "level": 7, "features": ["olfactory_overload"] },
{ "level": 11, "features": ["read_the_room"] },
{ "level": 15, "features": ["ghost_protocol"] }
],
"feature_definitions": {
"scent_forgery": { "name": "Scent Forgery", "kind": "stub", "description": "10-min prep: produce a scent packet mimicking an individual you've been near. (Phase 5: deferred.)" },
"olfactory_overload": { "name": "Olfactory Overload", "kind": "stub", "description": "Action: scent bomb 30-ft. radius — scent abilities save or be scent-blinded for 1 minute. (Phase 5: deferred.)" },
"read_the_room": { "name": "Read the Room", "kind": "stub", "description": "1 minute observation: determine emotional state, clade, health, diet, mask use of any creature within 30 ft. (Phase 5: deferred.)" },
"ghost_protocol": { "name": "Ghost Protocol", "kind": "stub", "description": "Scent Ghost at-will; project any scent encountered. (Phase 5: deferred.)" }
}
},
{
"id": "ambush_artist",
"class_id": "shadow_pelt",
"name": "Ambush Artist",
"flavor": "The kill is over before they know it started. Pure combat application — Felid-derived ambush doctrine refined to surgical precision.",
"level_features": [
{ "level": 3, "features": ["opening_strike"] },
{ "level": 7, "features": ["vanish"] },
{ "level": 11, "features": ["death_from_above"] },
{ "level": 15, "features": ["predators_patience"] }
],
"feature_definitions": {
"opening_strike": { "name": "Opening Strike", "kind": "stub", "description": "First round of combat: if you act before your target, Sneak Attack +2d6. (Phase 5: deferred.)" },
"vanish": { "name": "Vanish", "kind": "stub", "description": "Bonus action after attack: Hide attempt with advantage even without cover. (Phase 5: deferred.)" },
"death_from_above": { "name": "Death From Above", "kind": "stub", "description": "Attack from 10+ ft. elevation: advantage and Sneak Attack +2d6. (Phase 5: deferred.)" },
"predators_patience": { "name": "Predator's Patience", "kind": "stub", "description": "Spend a round taking no actions: next attack auto-crits if it hits. (Phase 5: deferred.)" }
}
},
{
"id": "perfumer",
"class_id": "scent_broker",
"name": "Perfumer",
"flavor": "Perfume isn't cosmetics. It's espionage. Intelligence branch — create identities, destroy reputations, extract confessions.",
"level_features": [
{ "level": 3, "features": ["bespoke_identity"] },
{ "level": 6, "features": ["scent_interrogation"] },
{ "level": 10, "features": ["mass_influence"] },
{ "level": 14, "features": ["deep_cover"] },
{ "level": 18, "features": ["the_nose_behind_the_throne"] }
],
"feature_definitions": {
"bespoke_identity": { "name": "Bespoke Identity", "kind": "stub", "description": "1 hour with kit: create a complete scent identity (clade, emotional baseline, individual markers). (Phase 5: deferred.)" },
"scent_interrogation": { "name": "Scent Interrogation", "kind": "stub", "description": "5-min conversation: extract one piece of concealed info per conversation. (Phase 5: deferred.)" },
"mass_influence": { "name": "Mass Influence", "kind": "stub", "description": "Pheromone compounds affect 60-ft. radius / up to 10 creatures. (Phase 5: deferred.)" },
"deep_cover": { "name": "Deep Cover", "kind": "stub", "description": "Bespoke Identity holds under stress and combat. (Phase 5: deferred.)" },
"the_nose_behind_the_throne":{ "name": "The Nose Behind the Throne", "kind": "stub", "description": "1 hour procedure: permanently alter a creature's scent baseline. (Phase 5: deferred.)" }
}
},
{
"id": "tracker",
"class_id": "scent_broker",
"name": "Tracker",
"flavor": "I can tell you what they had for breakfast, how long ago they passed through, and whether they were scared. Field agents and manhunters.",
"level_features": [
{ "level": 3, "features": ["bloodhound"] },
{ "level": 6, "features": ["predators_mark"] },
{ "level": 10, "features": ["terrain_reader"] },
{ "level": 14, "features": ["no_trail_goes_cold"] },
{ "level": 18, "features": ["the_hunt"] }
],
"feature_definitions": {
"bloodhound": { "name": "Bloodhound", "kind": "stub", "description": "Track any creature whose scent you've encountered within 7 days. Determine trail age by scent. (Phase 5: deferred.)" },
"predators_mark": { "name": "Predator's Mark", "kind": "stub", "description": "Mark a creature for 24 hours: know direction and approximate distance. Up to 3 marks. (Phase 5: deferred.)" },
"terrain_reader": { "name": "Terrain Reader", "kind": "stub", "description": "1-min scenting: how many creatures, their clades, emotions, and whether violence occurred (within 48 hours). (Phase 5: deferred.)" },
"no_trail_goes_cold": { "name": "No Trail Goes Cold", "kind": "stub", "description": "Tracking extends to 30 days; water/fire/chemicals impose disadvantage rather than failure. (Phase 5: deferred.)" },
"the_hunt": { "name": "The Hunt", "kind": "stub", "description": "Once per long rest: know exact location of marked target for 1 hour, double speed toward them, advantage on attacks. (Phase 5: deferred.)" }
}
},
{
"id": "the_warden",
"class_id": "covenant_keeper",
"name": "The Warden",
"flavor": "I guard the line between person and prey. No one crosses it while I breathe. Enforcement branch — patrol borders, investigate rawfang activity.",
"level_features": [
{ "level": 3, "features": ["wardens_mark"] },
{ "level": 7, "features": ["judgment"] },
{ "level": 15, "features": ["relentless_pursuit"] },
{ "level": 20, "features": ["final_judgment"] }
],
"feature_definitions": {
"wardens_mark": { "name": "Warden's Mark", "kind": "stub", "description": "Bonus action: mark a suspected violator. Know direction/distance and advantage on Insight/Perception against them for 24 hours. (Phase 5: deferred.)" },
"judgment": { "name": "Judgment", "kind": "stub", "description": "Hit a marked creature: spend Covenant's Authority for additional radiant-equivalent damage. (Phase 5: deferred.)" },
"relentless_pursuit": { "name": "Relentless Pursuit", "kind": "stub", "description": "Speed +10 toward marked creature. Cannot be slowed/restrained by non-magical means. (Phase 5: deferred.)" },
"final_judgment": { "name": "Final Judgment", "kind": "stub", "description": "Reduce a marked creature to 0 HP: declare Final Judgment. They cannot be revived/healed; nearby hostiles save or are frightened. (Phase 5: deferred.)" }
}
},
{
"id": "the_bridge",
"class_id": "covenant_keeper",
"name": "The Bridge",
"flavor": "The Covenant isn't just a prohibition. It's a promise that we can live together. Diplomatic branch — heal inter-Clade tensions.",
"level_features": [
{ "level": 3, "features": ["peacemakers_presence"] },
{ "level": 7, "features": ["empathic_bond"] },
{ "level": 15, "features": ["sanctuary_aura"] },
{ "level": 20, "features": ["the_covenant_restored"] }
],
"feature_definitions": {
"peacemakers_presence": { "name": "Peacemaker's Presence", "kind": "stub", "description": "Action: 30-ft. zone of calm for 10 minutes. Aggressive creatures save or lose hostile intent. (Phase 5: deferred.)" },
"empathic_bond": { "name": "Empathic Bond", "kind": "stub", "description": "Touch a willing creature: 1 hour mutual emotional/intent awareness. (Phase 5: deferred.)" },
"sanctuary_aura": { "name": "Sanctuary Aura", "kind": "stub", "description": "Aura of the Covenant also breaks compulsion to attack. (Phase 5: deferred.)" },
"the_covenant_restored": { "name": "The Covenant Restored", "kind": "stub", "description": "Once per long rest: 60-ft. sanctified ground for 24 hours — +2 AC and saves, doubled healing, no willing harm. (Phase 5: deferred.)" }
}
},
{
"id": "warhorn",
"class_id": "muzzle_speaker",
"name": "Warhorn",
"flavor": "My voice is the tide my allies ride to victory. Battlefield support — vocalization as force multiplier.",
"level_features": [
{ "level": 3, "features": ["rally_howl"] },
{ "level": 6, "features": ["dissonance"] },
{ "level": 11, "features": ["anthem_of_the_pack"] },
{ "level": 14, "features": ["shatter_cry"] }
],
"feature_definitions": {
"rally_howl": { "name": "Rally Howl", "kind": "stub", "description": "Action: allies within 60 ft. gain temp HP equal to CHA mod + Vocalization Die roll. (Phase 5: deferred.)" },
"dissonance": { "name": "Dissonance", "kind": "stub", "description": "Action: target one creature within 60 ft. — psychic damage = 2× Vocalization Die, disadvantage on next attack. (Phase 5: deferred.)" },
"anthem_of_the_pack": { "name": "Anthem of the Pack", "kind": "stub", "description": "1-minute concentration: allies within 30 ft. add CHA mod to damage rolls. Once per long rest. (Phase 5: deferred.)" },
"shatter_cry": { "name": "Shatter-Cry", "kind": "stub", "description": "Action: 30-ft. cone, 8d6 thunder (CON save half), deafened 1 minute. Once per long rest. (Phase 5: deferred.)" }
}
},
{
"id": "whisperfur",
"class_id": "muzzle_speaker",
"name": "Whisperfur",
"flavor": "The loudest voice in the room is never the most dangerous. Infiltration and social manipulation through voice.",
"level_features": [
{ "level": 3, "features": ["suggestion"] },
{ "level": 6, "features": ["subsonic_influence"] },
{ "level": 11, "features": ["voice_thief"] },
{ "level": 14, "features": ["mass_suggestion"] }
],
"feature_definitions": {
"suggestion": { "name": "Suggestion", "kind": "stub", "description": "1-minute soft speech: implant a suggestion (WIS save, DC = 8 + prof + CHA). 2 uses per long rest. (Phase 5: deferred.)" },
"subsonic_influence": { "name": "Subsonic Influence", "kind": "stub", "description": "Project subsonic vocalizations affecting mood (calm/unease/trust/suspicion) in 30-ft. radius for 10 minutes. No save. (Phase 5: deferred.)" },
"voice_thief": { "name": "Voice Thief", "kind": "stub", "description": "After hearing a creature speak for 5 minutes, perfectly replicate their voice. (Phase 5: deferred.)" },
"mass_suggestion": { "name": "Mass Suggestion", "kind": "stub", "description": "Suggestion targets up to 5 creatures and requires only 1 round of speaking. 3 uses per long rest. (Phase 5: deferred.)" }
}
},
{
"id": "combat_engineer",
"class_id": "claw_wright",
"name": "Combat Engineer",
"flavor": "I don't fight you. I build something that fights you. Builds turrets, traps, exoskeletons.",
"level_features": [
{ "level": 3, "features": ["deployable_turret"] },
{ "level": 6, "features": ["reinforced_armor"] },
{ "level": 10, "features": ["area_denial"] },
{ "level": 14, "features": ["titan_frame"] },
{ "level": 18, "features": ["siege_engine"] }
],
"feature_definitions": {
"deployable_turret": { "name": "Deployable Turret", "kind": "stub", "description": "Short rest build: AC 15, HP = level × 5, +INT to hit, 2d6 piercing once per round, 60-ft. range. (Phase 5: deferred.)" },
"reinforced_armor": { "name": "Reinforced Armor", "kind": "stub", "description": "Long rest enhance one armor: +1 AC and resistance to one damage type for 24 hours. (Phase 5: deferred.)" },
"area_denial": { "name": "Area Denial", "kind": "stub", "description": "Short rest: deploy up to 3 traps (explosive, ensnaring, alarm). (Phase 5: deferred.)" },
"titan_frame": { "name": "Titan Frame", "kind": "stub", "description": "Long rest build a wearable exoskeleton: +4 STR, +2 AC, +1 size category. 1 hour. Once per long rest. (Phase 5: deferred.)" },
"siege_engine": { "name": "Siege Engine", "kind": "stub", "description": "Turret fires heavy ordnance: 6d10 damage, 20-ft. radius (DEX save half). 1-round reload. (Phase 5: deferred.)" }
}
},
{
"id": "body_wright",
"class_id": "claw_wright",
"name": "Body-Wright",
"flavor": "The body is a machine. I just make it run better. Field medicine, prosthetics, biological engineering.",
"level_features": [
{ "level": 3, "features": ["combat_medic"] },
{ "level": 6, "features": ["clade_calibration"] },
{ "level": 10, "features": ["prosthetic_expert"] },
{ "level": 14, "features": ["emergency_resurrection_protocol"] },
{ "level": 18, "features": ["biological_masterwork"] }
],
"feature_definitions": {
"combat_medic": { "name": "Combat Medic", "kind": "stub", "description": "Field Repair on living creatures heals 2d8 + INT, usable as bonus action. Stabilize 0-HP creature from 30 ft. with thrown kit. (Phase 5: deferred.)" },
"clade_calibration": { "name": "Clade Calibration", "kind": "stub", "description": "1 hour study: all healing/gadget effects on that creature are maximized for 24 hours. (Phase 5: deferred.)" },
"prosthetic_expert": { "name": "Prosthetic Expert", "kind": "stub", "description": "Long rest: build functional prosthetic limbs/organs/sensory augments. Can be enhanced. (Phase 5: deferred.)" },
"emergency_resurrection_protocol":{ "name": "Emergency Resurrection Protocol", "kind": "stub", "description": "Within 1 minute of death: INT check DC 20 to revive at 1 HP with 3 levels of exhaustion. Uses entire gadget pool. (Phase 5: deferred.)" },
"biological_masterwork": { "name": "Biological Masterwork", "kind": "stub", "description": "8-hour procedure: permanently modify a willing creature — natural weapon, save advantage, or sensory ability from another clade. One per creature. (Phase 5: deferred.)" }
}
}
]