dm / commit
feat: add Tier 1 abilities to all foci; expose abilities in system prompt
plan.md | 2 +- public/index.html | 217 ++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 148 insertions(+), 71 deletions(-) diff --git a/plan.md b/plan.md index f318048..6983f27 100644 --- a/plan.md +++ b/plan.md @@ -108,7 +108,7 @@ reason // string - Debilitated → all pools at 0 → Dead (end screen) - [x] Enforce Cypher Limit: if `cyphers.length > cypherLimit`, warn player to use one - [x] Handle `tier_advance`: increment `tier`, recalculate `effort = tier`, show tier-up fanfare -- [ ] Handle `recovery_used`: increment `recoveryUsed` (max 4; fourth resets all and marks 10-hour rest taken) — deferred to Phase 3d (recovery button) +- [x] Handle `recovery_used`: increment `recoveryUsed` (max 4; fourth resets all and marks 10-hour rest taken) - [x] Replace level-up toast with Tier-up toast (text: "TIER [N]!") ### 2c — System prompt rewrite ✅ diff --git a/public/index.html b/public/index.html index e7c8ade..a06d878 100644 --- a/public/index.html +++ b/public/index.html @@ -1814,76 +1814,146 @@ const DESCRIPTORS = [ ]; // settings: which genres this focus fits. 'all' = any setting. +// tier1: the Tier 1 ability granted by this focus. const FOCI = [ - { name: 'Abides in Stone', icon: '🗿', settings: ['fantasy','numenera'], playstyle: 'Your body can merge with rock; you are patient, enduring, and terrifying in close combat.' }, - { name: 'Acts Without Consequence', icon: '😏', settings: ['all'], playstyle: 'Rules, ethics, and consequences never seem to stick to you — a charmed manipulator.' }, - { name: 'Battles Robots', icon: '🤖', settings: ['numenera','scifi'], playstyle: 'Specialised in locating and destroying mechanical threats of all kinds.' }, - { name: 'Carries a Quiver', icon: '🏹', settings: ['all'], playstyle: 'Master archer who never misses and always has the right arrow for the moment.' }, - { name: 'Commands Mental Powers', icon: '🧿', settings: ['all'], playstyle: 'Wields psychic force — telepathy, telekinesis, and mind-shattering blasts.' }, - { name: 'Controls Beasts', icon: '🦁', settings: ['fantasy','numenera','modern'], playstyle: 'Communicate with and command animals, from pets to apex predators.' }, - { name: 'Crafts Illusions', icon: '🎭', settings: ['fantasy','numenera'], playstyle: 'Fashion images from light so real they deceive all senses.' }, - { name: 'Crafts Unique Objects', icon: '⚙️', settings: ['fantasy','numenera','scifi'], playstyle: 'Inventor of strange gadgets, gear, and one-of-a-kind contraptions.' }, - { name: 'Dances with Dark Matter', icon: '🌌', settings: ['numenera','scifi'], playstyle: 'Shape the unseen fabric of reality into shields, weapons, and impossible structures.' }, - { name: 'Defends the Weak', icon: '🛡️', settings: ['all'], playstyle: 'Selfless protector who interposes and shields those who cannot protect themselves.' }, - { name: 'Doesn\'t Do Much', icon: '😴', settings: ['all'], playstyle: 'Outwardly lazy — secretly formidable. Passive abilities accumulate into devastating effect.' }, - { name: 'Employs Magnetism', icon: '🧲', settings: ['numenera','scifi'], playstyle: 'Attract, repel, and reshape metal at will; a terrifying force on any battlefield.' }, - { name: 'Entertains', icon: '🎶', settings: ['all'], playstyle: 'Your art — music, acrobatics, oration — captivates crowds and shapes hearts.' }, - { name: 'Exists Partially Out of Phase', icon: '👻', settings: ['numenera','scifi'], playstyle: 'Slip through walls and dodge attacks by stepping slightly outside reality.' }, - { name: 'Explores Dark Places', icon: '🕯️', settings: ['all'], playstyle: 'Treasure hunter and delver of forgotten ruins, always one step from disaster.' }, - { name: 'Fights Dirty', icon: '🤛', settings: ['all'], playstyle: 'Kicks, bites, throws sand — any tactic that wins is a valid tactic.' }, - { name: 'Fights With Panache', icon: '🎪', settings: ['all'], playstyle: 'Swashbuckling daredevil who wins through flamboyant style over brute force.' }, - { name: 'Focuses Mind Over Matter', icon: '🔵', settings: ['all'], playstyle: 'Forged by mental discipline; your will shapes the physical world around you.' }, - { name: 'Fuses Flesh and Steel', icon: '🦾', settings: ['numenera','scifi'], playstyle: 'Cybernetic enhancements blur the line between human and machine.' }, - { name: 'Fuses Mind and Machine', icon: '💻', settings: ['numenera','scifi'], playstyle: 'Interface directly with computers, drones, and AI — your mind is the terminal.' }, - { name: 'Grows to Towering Heights',icon: '🗼', settings: ['numenera','scifi','fantasy'], playstyle: 'Expand to enormous size, crushing opposition beneath your feet.' }, - { name: 'Howls at the Moon', icon: '🐺', settings: ['fantasy','numenera'], playstyle: 'Transforms into a fearsome beast — power beyond control, control beyond reach.' }, - { name: 'Hunts', icon: '🦌', settings: ['all'], playstyle: 'Stalking hunter who tracks and takes down a chosen quarry across any terrain.' }, - { name: 'Infiltrates', icon: '🕵️', settings: ['all'], playstyle: 'Uses subtlety, guile, and disguise to enter impossible places unseen.' }, - { name: 'Interprets the Law', icon: '⚖️', settings: ['all'], playstyle: 'Expert in rules, codes, and loopholes — the letter of the law is your weapon.' }, - { name: 'Is Licensed to Carry', icon: '🔫', settings: ['modern','scifi'], playstyle: 'Expert marksman trained in firearms, their maintenance, and lethal application.' }, - { name: 'Leads', icon: '👑', settings: ['all'], playstyle: 'Natural commander who earns loyalty and turns individuals into a deadly unit.' }, - { name: 'Lives in the Wilderness', icon: '🌲', settings: ['fantasy','numenera','modern'], playstyle: 'Survivalist who reads terrain, weather, and prey — thrives where others perish.' }, - { name: 'Looks for Trouble', icon: '😈', settings: ['all'], playstyle: 'Brawler who wades into any conflict and relishes the chaos of open combat.' }, - { name: 'Masters Defense', icon: '🛡️', settings: ['all'], playstyle: 'Immovable wall who absorbs punishment and keeps allies safe.' }, - { name: 'Masters Spells', icon: '📜', settings: ['fantasy','numenera'], playstyle: 'Memorizes and rapidly deploys a repertoire of arcane spells.' }, - { name: 'Masters the Swarm', icon: '🐝', settings: ['fantasy','numenera','scifi'], playstyle: 'Commands insects, vermin, or nanites as an extension of your will.' }, - { name: 'Masters Weaponry', icon: '🗡️', settings: ['all'], playstyle: 'Grandmaster of one weapon type — you wield it better than anyone alive.' }, - { name: 'Metes Out Justice', icon: '⚖️', settings: ['all'], playstyle: 'Vigilante who punishes the guilty and rights wrongs outside official channels.' }, - { name: 'Moves Like a Cat', icon: '🐈', settings: ['all'], playstyle: 'Acrobat and parkour artist; gravity is a suggestion, not a rule.' }, - { name: 'Moves Like the Wind', icon: '🌬️', settings: ['all'], playstyle: 'Blur of speed — strikes before enemies react and vanishes before they recover.' }, - { name: 'Murders', icon: '🩸', settings: ['all'], playstyle: 'Assassin specialising in lethal surprise and untraceable eliminations.' }, - { name: 'Needs No Weapon', icon: '👊', settings: ['all'], playstyle: 'Your body is the only weapon you need — fists, feet, and iron will.' }, - { name: 'Never Says Die', icon: '💀', settings: ['all'], playstyle: 'Unstoppable survivor who keeps fighting long past the point of reason.' }, - { name: 'Operates Undercover', icon: '🎭', settings: ['all'], playstyle: 'Deep-cover operative; multiple identities, zero trace, infinite patience.' }, - { name: 'Performs Feats of Strength',icon: '🏋️', settings: ['all'], playstyle: 'Immense physical power applied with precision — lift, throw, and crush at will.' }, - { name: 'Pilots Starcraft', icon: '🚀', settings: ['numenera','scifi'], playstyle: 'Born in the cockpit; fly, fight, and fix any spacecraft under any conditions.' }, - { name: 'Plays Too Many Games', icon: '♟️', settings: ['all'], playstyle: 'Master tactician whose life is one long game — always thinking three moves ahead.' }, - { name: 'Rages', icon: '😡', settings: ['all'], playstyle: 'Berserker who trades control for devastating fury, unstoppable in the heat of battle.' }, - { name: 'Rides the Lightning', icon: '⚡', settings: ['all'], playstyle: 'Creates and discharges electrical power to shock, stun, and energize.' }, - { name: 'Runs Away', icon: '🏃', settings: ['all'], playstyle: 'Escape artist who knows when to fight and when to vanish — and survives because of it.' }, - { name: 'Sailed Beneath the Jolly Roger', icon: '☠️', settings: ['fantasy','modern'], playstyle: 'Pirate captain: seafaring, swashbuckling, plundering — and proud of every bit of it.' }, - { name: 'Scavenges', icon: '♻️', settings: ['all'], playstyle: 'Improviser who finds tools, weapons, and value where others see only junk.' }, - { name: 'Sees Beyond', icon: '🔮', settings: ['fantasy','numenera'], playstyle: 'Peer into futures, pasts, and hidden truths — visions come unbidden and change everything.' }, - { name: 'Separates Mind From Body', icon: '🕯️', settings: ['all'], playstyle: 'Astral projection lets your mind travel freely while your body waits in safety.' }, - { name: 'Shreds the Walls of the World', icon: '🌀', settings: ['numenera','scifi','fantasy'], playstyle: 'Tear open dimensional rifts; step between spaces or hurl enemies into the void.' }, - { name: 'Shrinks to Microscopic Size', icon: '🔬', settings: ['numenera','scifi'], playstyle: 'Reduce to molecular scale to infiltrate, sabotage, and strike unseen.' }, - { name: 'Siphons Power', icon: '🌊', settings: ['fantasy','numenera','scifi'], playstyle: 'Drain energy from enemies, machines, or the environment and redirect it as your own.' }, - { name: 'Slays Monsters', icon: '🐉', settings: ['fantasy','numenera'], playstyle: 'Dedicated monster hunter with encyclopaedic knowledge of creature weaknesses.' }, - { name: 'Solves Mysteries', icon: '🔎', settings: ['all'], playstyle: 'Master of deduction who reads evidence to reconstruct hidden truths.' }, - { name: 'Speaks for the Land', icon: '🌿', settings: ['fantasy','numenera'], playstyle: 'Voice of nature itself; plants, winds, and stones obey your call.' }, - { name: 'Stands Like a Bastion', icon: '🏰', settings: ['all'], playstyle: 'An unmovable point of order amid chaos — your resolve is physically manifest.' }, - { name: 'Takes Animal Shape', icon: '🦊', settings: ['fantasy','numenera'], playstyle: 'Shapeshifter who borrows the bodies of beasts at will.' }, - { name: 'Talks to Machines', icon: '🖥️', settings: ['numenera','scifi'], playstyle: 'Converse with and command technology as naturally as breathing.' }, - { name: 'Throws with Deadly Accuracy', icon: '🎯', settings: ['all'], playstyle: 'Any object becomes a lethal projectile in your hands; range is not a problem.' }, - { name: 'Thunders', icon: '🔊', settings: ['all'], playstyle: 'Sonic blasts shatter stone, stun enemies, and shake the air for miles.' }, - { name: 'Travels Through Time', icon: '⏳', settings: ['numenera','scifi','fantasy'], playstyle: 'Skip forward, reach back, and observe branching moments of history.' }, - { name: 'Wears a Sheen of Ice', icon: '❄️', settings: ['fantasy','numenera','scifi'], playstyle: 'Commands the wintry power of cold, frost, and absolute zero.' }, - { name: 'Wields Power with Precision', icon: '🎯', settings: ['all'], playstyle: 'Your special abilities are calibrated to a razor edge — max effect, minimal collateral.' }, - { name: 'Wields Two Weapons', icon: '🤺', settings: ['all'], playstyle: 'Dual-wielder who overwhelms enemies with relentless twin-blade attacks.' }, - { name: 'Works Miracles', icon: '💫', settings: ['fantasy','numenera'], playstyle: 'Healer and restorer who defies fatal wounds and brings the near-dead back.' }, - { name: 'Works the Back Alleys', icon: '🌆', settings: ['all'], playstyle: 'Street-level operative: fences, fixers, and the shadow economy are your domain.' }, - { name: 'Worships the Lunar Nodes', icon: '🌕', settings: ['fantasy','numenera'], playstyle: 'Moon-bound cultist whose power waxes and wanes with the celestial cycle.' }, - { name: 'Would Rather Be Reading', icon: '📖', settings: ['all'], playstyle: 'Bookish scholar who always knows exactly the right fact at exactly the right moment.' }, + { name: 'Abides in Stone', icon: '🗿', settings: ['fantasy','numenera'], playstyle: 'Your body can merge with rock; you are patient, enduring, and terrifying in close combat.', + tier1: { name: 'Stone Body', cost: null, description: 'Your skin has a stone-like quality, granting +1 Armor at all times. You cannot be pushed or knocked prone.' } }, + { name: 'Acts Without Consequence', icon: '😏', settings: ['all'], playstyle: 'Rules, ethics, and consequences never seem to stick to you — a charmed manipulator.', + tier1: { name: 'Verbal Misdirection', cost: '2 Intellect', description: 'Distract a foe with rapid banter; their next action is hindered.' } }, + { name: 'Battles Robots', icon: '🤖', settings: ['numenera','scifi'], playstyle: 'Specialised in locating and destroying mechanical threats of all kinds.', + tier1: { name: 'Machine Vulnerabilities',cost: null, description: 'Trained in all tasks involving finding and exploiting weaknesses in machines and robots.' } }, + { name: 'Carries a Quiver', icon: '🏹', settings: ['all'], playstyle: 'Master archer who never misses and always has the right arrow for the moment.', + tier1: { name: 'Archery', cost: null, description: 'Ranged attacks with bows are eased.' } }, + { name: 'Commands Mental Powers', icon: '🧿', settings: ['all'], playstyle: 'Wields psychic force — telepathy, telekinesis, and mind-shattering blasts.', + tier1: { name: 'Telepathic', cost: null, description: 'Communicate silently with any creature within short range that you can see.' } }, + { name: 'Controls Beasts', icon: '🦁', settings: ['fantasy','numenera','modern'], playstyle: 'Communicate with and command animals, from pets to apex predators.', + tier1: { name: 'Beast Companion', cost: null, description: 'A level 2 creature becomes your loyal companion and follows your commands.' } }, + { name: 'Crafts Illusions', icon: '🎭', settings: ['fantasy','numenera'], playstyle: 'Fashion images from light so real they deceive all senses.', + tier1: { name: 'Minor Illusion', cost: '1 Intellect', description: 'Create a small, silent image of any object or scene within short range. It lasts until you move or dismiss it.' } }, + { name: 'Crafts Unique Objects', icon: '⚙️', settings: ['fantasy','numenera','scifi'], playstyle: 'Inventor of strange gadgets, gear, and one-of-a-kind contraptions.', + tier1: { name: 'Tinker', cost: '1 Intellect', description: 'Spend 10 minutes modifying a device; it functions one level higher for one specific task.' } }, + { name: 'Dances with Dark Matter', icon: '🌌', settings: ['numenera','scifi'], playstyle: 'Shape the unseen fabric of reality into shields, weapons, and impossible structures.', + tier1: { name: 'Shroud of Darkness', cost: '2 Intellect', description: 'Wrap yourself in dark matter; gain +1 Armor and your appearance becomes difficult to perceive.' } }, + { name: 'Defends the Weak', icon: '🛡️', settings: ['all'], playstyle: 'Selfless protector who interposes and shields those who cannot protect themselves.', + tier1: { name: 'Courageous', cost: null, description: 'Morale and fear-based attacks on allies within short range of you are hindered.' } }, + { name: 'Doesn\'t Do Much', icon: '😴', settings: ['all'], playstyle: 'Outwardly lazy — secretly formidable. Passive abilities accumulate into devastating effect.', + tier1: { name: 'Hang Back', cost: null, description: 'When you take no action on your turn, your next action is eased.' } }, + { name: 'Employs Magnetism', icon: '🧲', settings: ['numenera','scifi'], playstyle: 'Attract, repel, and reshape metal at will; a terrifying force on any battlefield.', + tier1: { name: 'Repel Metal', cost: '2 Intellect', description: 'Hurl a metal object within short range away from you; if aimed at a foe, it deals 4 points of damage.' } }, + { name: 'Entertains', icon: '🎶', settings: ['all'], playstyle: 'Your art — music, acrobatics, oration — captivates crowds and shapes hearts.', + tier1: { name: 'Performer', cost: null, description: 'All performance tasks (music, acting, oration, acrobatics) are eased.' } }, + { name: 'Exists Partially Out of Phase', icon: '👻', settings: ['numenera','scifi'], playstyle: 'Slip through walls and dodge attacks by stepping slightly outside reality.', + tier1: { name: 'Phase Sprint', cost: '2 Speed', description: 'Move up to a long distance as a single action by stepping partially out of phase with reality.' } }, + { name: 'Explores Dark Places', icon: '🕯️', settings: ['all'], playstyle: 'Treasure hunter and delver of forgotten ruins, always one step from disaster.', + tier1: { name: 'Eyes Adjusted', cost: null, description: 'You can see in dim light as well as you do in normal light.' } }, + { name: 'Fights Dirty', icon: '🤛', settings: ['all'], playstyle: 'Kicks, bites, throws sand — any tactic that wins is a valid tactic.', + tier1: { name: 'Dirty Fighter', cost: null, description: 'When you deal damage you may also blind, trip, or disorient your foe as part of the same action.' } }, + { name: 'Fights With Panache', icon: '🎪', settings: ['all'], playstyle: 'Swashbuckling daredevil who wins through flamboyant style over brute force.', + tier1: { name: 'Evasion', cost: null, description: 'Speed defense tasks are eased.' } }, + { name: 'Focuses Mind Over Matter', icon: '🔵', settings: ['all'], playstyle: 'Forged by mental discipline; your will shapes the physical world around you.', + tier1: { name: 'Telekinesis', cost: '2 Intellect', description: 'Move an object up to 25 lbs within short range to any other location within short range.' } }, + { name: 'Fuses Flesh and Steel', icon: '🦾', settings: ['numenera','scifi'], playstyle: 'Cybernetic enhancements blur the line between human and machine.', + tier1: { name: 'Weaponization', cost: null, description: 'One of your cybernetic components functions as a medium weapon that cannot be disarmed.' } }, + { name: 'Fuses Mind and Machine', icon: '💻', settings: ['numenera','scifi'], playstyle: 'Interface directly with computers, drones, and AI — your mind is the terminal.', + tier1: { name: 'Machine Affinity', cost: null, description: 'All tasks involving machines, computers, and electronics are eased.' } }, + { name: 'Grows to Towering Heights',icon: '🗼', settings: ['numenera','scifi','fantasy'], playstyle: 'Expand to enormous size, crushing opposition beneath your feet.', + tier1: { name: 'Enlarge', cost: '2 Might', description: 'Grow to twice your size; melee attacks deal 2 additional points of damage for one minute.' } }, + { name: 'Howls at the Moon', icon: '🐺', settings: ['fantasy','numenera'], playstyle: 'Transforms into a fearsome beast — power beyond control, control beyond reach.', + tier1: { name: 'Beast Form', cost: '3 Might', description: 'Transform into a beast; gain +6 to your Might pool and claws that inflict 4 points of damage.' } }, + { name: 'Hunts', icon: '🦌', settings: ['all'], playstyle: 'Stalking hunter who tracks and takes down a chosen quarry across any terrain.', + tier1: { name: 'Tracker', cost: null, description: 'All tasks involving tracking prey or following a trail are eased.' } }, + { name: 'Infiltrates', icon: '🕵️', settings: ['all'], playstyle: 'Uses subtlety, guile, and disguise to enter impossible places unseen.', + tier1: { name: 'Stealth', cost: null, description: 'Tasks involving hiding and sneaking are eased.' } }, + { name: 'Interprets the Law', icon: '⚖️', settings: ['all'], playstyle: 'Expert in rules, codes, and loopholes — the letter of the law is your weapon.', + tier1: { name: 'Legal Expertise', cost: null, description: 'All tasks involving law, contracts, government, and courtroom procedure are eased.' } }, + { name: 'Is Licensed to Carry', icon: '🔫', settings: ['modern','scifi'], playstyle: 'Expert marksman trained in firearms, their maintenance, and lethal application.', + tier1: { name: 'Gunner', cost: null, description: 'Attacks with firearms are eased.' } }, + { name: 'Leads', icon: '👑', settings: ['all'], playstyle: 'Natural commander who earns loyalty and turns individuals into a deadly unit.', + tier1: { name: 'Good Advice', cost: null, description: 'Spend a round advising an ally; their next action is eased.' } }, + { name: 'Lives in the Wilderness', icon: '🌲', settings: ['fantasy','numenera','modern'], playstyle: 'Survivalist who reads terrain, weather, and prey — thrives where others perish.', + tier1: { name: 'Wild Practicality', cost: null, description: 'All tasks involving survival, navigation, and finding food and water in the wild are eased.' } }, + { name: 'Looks for Trouble', icon: '😈', settings: ['all'], playstyle: 'Brawler who wades into any conflict and relishes the chaos of open combat.', + tier1: { name: 'Fists of Fury', cost: null, description: 'Unarmed attacks deal 4 points of damage instead of the usual 2.' } }, + { name: 'Masters Defense', icon: '🛡️', settings: ['all'], playstyle: 'Immovable wall who absorbs punishment and keeps allies safe.', + tier1: { name: 'Shield Master', cost: null, description: 'Speed defense tasks are eased when wielding a shield.' } }, + { name: 'Masters Spells', icon: '📜', settings: ['fantasy','numenera'], playstyle: 'Memorizes and rapidly deploys a repertoire of arcane spells.', + tier1: { name: 'Onslaught', cost: '1 Intellect', description: 'Project a ray of force at a target within long range for 4 points of Intellect damage.' } }, + { name: 'Masters the Swarm', icon: '🐝', settings: ['fantasy','numenera','scifi'], playstyle: 'Commands insects, vermin, or nanites as an extension of your will.', + tier1: { name: 'Influence Swarm', cost: '2 Intellect', description: 'Direct a nearby swarm of creatures to distract or harass one foe within short range for one minute.' } }, + { name: 'Masters Weaponry', icon: '🗡️', settings: ['all'], playstyle: 'Grandmaster of one weapon type — you wield it better than anyone alive.', + tier1: { name: 'Weapon Master', cost: null, description: 'Attacks with your chosen weapon type are eased.' } }, + { name: 'Metes Out Justice', icon: '⚖️', settings: ['all'], playstyle: 'Vigilante who punishes the guilty and rights wrongs outside official channels.', + tier1: { name: 'Designation', cost: null, description: 'Declare a target guilty or innocent; attacks against the guilty and tasks protecting the innocent are eased.' } }, + { name: 'Moves Like a Cat', icon: '🐈', settings: ['all'], playstyle: 'Acrobat and parkour artist; gravity is a suggestion, not a rule.', + tier1: { name: 'Contortionist', cost: null, description: 'All tasks involving flexibility, balance, and physical dexterity are eased.' } }, + { name: 'Moves Like the Wind', icon: '🌬️', settings: ['all'], playstyle: 'Blur of speed — strikes before enemies react and vanishes before they recover.', + tier1: { name: 'Sprint', cost: null, description: 'You can move up to a long distance as a single action.' } }, + { name: 'Murders', icon: '🩸', settings: ['all'], playstyle: 'Assassin specialising in lethal surprise and untraceable eliminations.', + tier1: { name: 'Surprise Attack', cost: null, description: 'Attacks against unaware foes are eased and deal 4 additional points of damage.' } }, + { name: 'Needs No Weapon', icon: '👊', settings: ['all'], playstyle: 'Your body is the only weapon you need — fists, feet, and iron will.', + tier1: { name: 'Unarmed Fighting Style',cost: null, description: 'You are trained in unarmed attacks, and they deal 4 points of damage.' } }, + { name: 'Never Says Die', icon: '💀', settings: ['all'], playstyle: 'Unstoppable survivor who keeps fighting long past the point of reason.', + tier1: { name: 'Ignore the Pain', cost: '2 Might', description: 'Shrug off harm; your next action is not hindered by the damage you just received.' } }, + { name: 'Operates Undercover', icon: '🎭', settings: ['all'], playstyle: 'Deep-cover operative; multiple identities, zero trace, infinite patience.', + tier1: { name: 'Investigate', cost: null, description: 'Trained in stealth, disguise, and gathering information discreetly.' } }, + { name: 'Performs Feats of Strength',icon: '🏋️', settings: ['all'], playstyle: 'Immense physical power applied with precision — lift, throw, and crush at will.', + tier1: { name: 'Athlete', cost: null, description: 'All tasks involving feats of strength — lifting, breaking, and throwing — are eased.' } }, + { name: 'Pilots Starcraft', icon: '🚀', settings: ['numenera','scifi'], playstyle: 'Born in the cockpit; fly, fight, and fix any spacecraft under any conditions.', + tier1: { name: 'Pilot', cost: null, description: 'All tasks involving piloting spacecraft and flying vehicles are eased.' } }, + { name: 'Plays Too Many Games', icon: '♟️', settings: ['all'], playstyle: 'Master tactician whose life is one long game — always thinking three moves ahead.', + tier1: { name: 'Strategize', cost: null, description: 'Spend a round planning; one ally\'s next action is eased.' } }, + { name: 'Rages', icon: '😡', settings: ['all'], playstyle: 'Berserker who trades control for devastating fury, unstoppable in the heat of battle.', + tier1: { name: 'Frenzy', cost: '1 Might', description: 'Enter a battle frenzy; attacks deal 1 additional point of damage, but Speed defense is hindered.' } }, + { name: 'Rides the Lightning', icon: '⚡', settings: ['all'], playstyle: 'Creates and discharges electrical power to shock, stun, and energize.', + tier1: { name: 'Shock', cost: '1 Intellect', description: 'Discharge electricity at a foe within short range for 1 point of damage that ignores Armor.' } }, + { name: 'Runs Away', icon: '🏃', settings: ['all'], playstyle: 'Escape artist who knows when to fight and when to vanish — and survives because of it.', + tier1: { name: 'Fleet of Foot', cost: null, description: 'Running and escape tasks are eased; you can move and take a different action on the same turn.' } }, + { name: 'Sailed Beneath the Jolly Roger', icon: '☠️', settings: ['fantasy','modern'], playstyle: 'Pirate captain: seafaring, swashbuckling, plundering — and proud of every bit of it.', + tier1: { name: 'Sea Legs', cost: null, description: 'All tasks aboard ships and in water are eased. You have a positive reputation among sailors and pirates.' } }, + { name: 'Scavenges', icon: '♻️', settings: ['all'], playstyle: 'Improviser who finds tools, weapons, and value where others see only junk.', + tier1: { name: 'Scrounge', cost: '1 Intellect', description: 'Search an area for 10 minutes to find a useful piece of moderately-priced equipment from available junk.' } }, + { name: 'Sees Beyond', icon: '🔮', settings: ['fantasy','numenera'], playstyle: 'Peer into futures, pasts, and hidden truths — visions come unbidden and change everything.', + tier1: { name: 'Premonition', cost: '2 Intellect', description: 'Ask the GM one yes/no question about the immediate future at this location. The answer must be accurate.' } }, + { name: 'Separates Mind From Body', icon: '🕯️', settings: ['all'], playstyle: 'Astral projection lets your mind travel freely while your body waits in safety.', + tier1: { name: 'Psychic Projection', cost: '2 Intellect', description: 'Project your consciousness up to 1 mile, perceiving the environment but unable to interact with it.' } }, + { name: 'Shreds the Walls of the World', icon: '🌀', settings: ['numenera','scifi','fantasy'], playstyle: 'Tear open dimensional rifts; step between spaces or hurl enemies into the void.', + tier1: { name: 'Phase Sight', cost: null, description: 'You can perceive objects and creatures that exist slightly out of phase with reality.' } }, + { name: 'Shrinks to Microscopic Size', icon: '🔬', settings: ['numenera','scifi'], playstyle: 'Reduce to molecular scale to infiltrate, sabotage, and strike unseen.', + tier1: { name: 'Shrink', cost: '1 Might', description: 'Reduce to 6 inches tall. Hiding is eased, attacks against you are hindered, and you can fit through tiny spaces.' } }, + { name: 'Siphons Power', icon: '🌊', settings: ['fantasy','numenera','scifi'], playstyle: 'Drain energy from enemies, machines, or the environment and redirect it as your own.', + tier1: { name: 'Drain Creature', cost: '2 Intellect', description: 'Drain 3 points from a creature\'s Might or Speed pool and add them to any of your own pools.' } }, + { name: 'Slays Monsters', icon: '🐉', settings: ['fantasy','numenera'], playstyle: 'Dedicated monster hunter with encyclopaedic knowledge of creature weaknesses.', + tier1: { name: 'Monster Lore', cost: null, description: 'Trained in all tasks involving knowledge of creatures and combat against them.' } }, + { name: 'Solves Mysteries', icon: '🔎', settings: ['all'], playstyle: 'Master of deduction who reads evidence to reconstruct hidden truths.', + tier1: { name: 'Investigate Scene', cost: '3 Intellect', description: 'Study an area for one minute; learn one accurate clue about what happened there.' } }, + { name: 'Speaks for the Land', icon: '🌿', settings: ['fantasy','numenera'], playstyle: 'Voice of nature itself; plants, winds, and stones obey your call.', + tier1: { name: 'Wilderness Lore', cost: null, description: 'Trained in all tasks involving nature, plants, animals, and natural phenomena.' } }, + { name: 'Stands Like a Bastion', icon: '🏰', settings: ['all'], playstyle: 'An unmovable point of order amid chaos — your resolve is physically manifest.', + tier1: { name: 'Fortified Position', cost: '1 Might', description: 'Anchor yourself; you cannot be moved or knocked prone and attacks against you are hindered until your next turn.' } }, + { name: 'Takes Animal Shape', icon: '🦊', settings: ['fantasy','numenera'], playstyle: 'Shapeshifter who borrows the bodies of beasts at will.', + tier1: { name: 'Animal Shape', cost: '3 Might', description: 'Take the form of a large animal, gaining its natural attacks, movement mode, and senses.' } }, + { name: 'Talks to Machines', icon: '🖥️', settings: ['numenera','scifi'], playstyle: 'Converse with and command technology as naturally as breathing.', + tier1: { name: 'Machine Language', cost: null, description: 'Communicate with machines and computers as naturally as speaking; basic queries are always understood.' } }, + { name: 'Throws with Deadly Accuracy', icon: '🎯', settings: ['all'], playstyle: 'Any object becomes a lethal projectile in your hands; range is not a problem.', + tier1: { name: 'Precision', cost: null, description: 'All tasks involving thrown weapons or objects as weapons are eased.' } }, + { name: 'Thunders', icon: '🔊', settings: ['all'], playstyle: 'Sonic blasts shatter stone, stun enemies, and shake the air for miles.', + tier1: { name: 'Thundering Voice', cost: '2 Might', description: 'Your shout stuns all creatures within short range; their next actions are hindered.' } }, + { name: 'Travels Through Time', icon: '⏳', settings: ['numenera','scifi','fantasy'], playstyle: 'Skip forward, reach back, and observe branching moments of history.', + tier1: { name: 'Temporal Viewer', cost: '2 Intellect', description: 'Observe up to one hour into the past or future at your current location.' } }, + { name: 'Wears a Sheen of Ice', icon: '❄️', settings: ['fantasy','numenera','scifi'], playstyle: 'Commands the wintry power of cold, frost, and absolute zero.', + tier1: { name: 'Ice Armor', cost: '2 Intellect', description: 'Coat yourself in ice, gaining +2 Armor for one hour.' } }, + { name: 'Wields Power with Precision', icon: '🎯', settings: ['all'], playstyle: 'Your special abilities are calibrated to a razor edge — max effect, minimal collateral.', + tier1: { name: 'Trained Without Armor', cost: null, description: 'Speed defense tasks are eased when wearing no armor.' } }, + { name: 'Wields Two Weapons', icon: '🤺', settings: ['all'], playstyle: 'Dual-wielder who overwhelms enemies with relentless twin-blade attacks.', + tier1: { name: 'Dual Light Wield', cost: null, description: 'You can wield two light weapons simultaneously without penalty.' } }, + { name: 'Works Miracles', icon: '💫', settings: ['fantasy','numenera'], playstyle: 'Healer and restorer who defies fatal wounds and brings the near-dead back.', + tier1: { name: 'Healing Touch', cost: '2 Intellect', description: 'Restore 1d6 points to any pool of a creature you touch.' } }, + { name: 'Works the Back Alleys', icon: '🌆', settings: ['all'], playstyle: 'Street-level operative: fences, fixers, and the shadow economy are your domain.', + tier1: { name: 'Underworld Contacts', cost: null, description: 'Trained in stealth and streetwise tasks; you have a fixer or contact in most settlements.' } }, + { name: 'Worships the Lunar Nodes', icon: '🌕', settings: ['fantasy','numenera'], playstyle: 'Moon-bound cultist whose power waxes and wanes with the celestial cycle.', + tier1: { name: 'Blessing of the Moon', cost: '2 Intellect', description: 'Grant yourself or a touched ally +2 to any pool temporarily, lasting until the next dawn.' } }, + { name: 'Would Rather Be Reading', icon: '📖', settings: ['all'], playstyle: 'Bookish scholar who always knows exactly the right fact at exactly the right moment.', + tier1: { name: 'Know It All', cost: null, description: 'Trained in two areas of knowledge of your choice; all tasks for recalling information are eased.' } }, ]; const DIE_TYPES = [4, 6, 8, 10, 12, 20, 100]; @@ -1920,6 +1990,7 @@ function buildSystemPrompt(character, theme, notes) { return `You are a masterful Game Master running a solo Cypher System adventure (CSRD rules). CHARACTER: ${c.name} — Tier ${c.tier} ${c.descriptor} ${c.type} who ${c.focus} +${(() => { const f = FOCI.find(x => x.name === c.focus); return f ? `FOCUS STYLE: ${f.playstyle}` : ''; })()} SETTING: ${setting.label}${theme ? ` | THEME: ${theme}` : ''} Currency: ${setting.currency} | Special abilities: ${setting.magic} ${setting.tone} @@ -1931,6 +2002,9 @@ STAT POOLS • Damage track: ${dt.toUpperCase()} | Effort: ${c.tier} | XP: ${c.xp} | Shins: ${c.shins} • Cyphers: ${(c.cyphers||[]).length}/${c.cypherLimit}${(c.cyphers||[]).length ? ' — ' + c.cyphers.map(cy=>`${cy.name} (Lv${cy.level})`).join(', ') : ''} +ABILITIES +${(c.abilities||[]).length ? (c.abilities).map(a => `• ${a.name}${a.cost ? ` [${a.cost}]` : ''} — ${a.description}`).join('\n') : '• None.'} +${(c.skills||[]).length ? `\nSKILLS\n${c.skills.map(s => `• ${s.name} (${s.rank})`).join('\n')}` : ''} CYPHER SYSTEM RULES — TASK RESOLUTION You set difficulty 0–10; target number = difficulty × 3; player rolls d20. Roll ≥ target = success. Special results: 1 = fumble/free GM Intrusion; 17–18 = minor effect; 19–20 = major effect. @@ -2270,7 +2344,10 @@ async function beginAdventure() { cypherLimit: selectedType.cypherLimit, cyphers: [], skills: [], - abilities: [...(selectedType.startingAbilities || [])], + abilities: [ + ...(selectedType.startingAbilities || []), + ...(selectedFocus.tier1 ? [selectedFocus.tier1] : []), + ], equipment: [...selectedType.equipment], shins: 10, xp: 0,