MAJOR DIRECTORY OVERHAUL

This commit is contained in:
jrmiller82 committed 2020-04-25 01:37:42 -05:00
1 parent 71ed03b165
commit 34ef5a6025
138 files changed
+48 -6

No files matched your search

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
-15
View File
@@ -1,15 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO abilityscores (abilityscores_id, flag_rep, short_name, long_name)
VALUES
(1, 1, 'STR', 'Strength'),
(2, 2, 'DEX', 'Dexterity'),
(3, 4, 'CON', 'Constitution'),
(4, 8, 'INT', 'Intelligence'),
(5, 16, 'WIS', 'Wisdom'),
(6, 32, 'CHA', 'Charisma'),
(7, 64, 'Free1', 'Free 1'),
(8, 128, 'Free2', 'Free 2');
-94
View File
@@ -1,94 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO actioncosts (
actioncosts_id,
name,
abbr
)
VALUES
(0, 'Varies', 'Varies'),
(1, 'Single Action', '1'),
(2, 'Two Actions', '2'),
(3, 'Three Actions', '3'),
(4, 'Free Action', 'free'),
(5, 'Reaction', 'reaction');
INSERT INTO actioncategories (actioncategories_id, sources_id, sources_pages, name, descr)
VALUES
(1, 1, '469', 'Basic', 'Basic actions represent common tasks like moving around, attacking, and helping others. As such, every creature can use basic actions except in some extreme circumstances, and many of those actions are used very frequently. Most notably, you’ll use Interact, Step, Stride, and Strike a great deal. Many feats and other actions call upon you to use one of these basic actions or modify them to produce different effects. For example, a more complex action might let you Stride up to double your Speed instead of just up to your Speed, and a large number of activities include a Strike.'),
(2, 1, '472', 'Specialty Basic', 'These actions are useful under specific circumstances. Some require you to have a special movement type.');
INSERT INTO actions
(actions_id,
sources_id,
sources_pages,
actioncategories_id,
actioncosts_id,
name,
req,
trigger,
descr
)
VALUES
-- BASIC ACTIONS FROM CRB
(1, 1, '470', 1, 5, 'Aid', 'The ally is willing to accept your aid, and you have prepared to help (see description).', 'An ally is about to use an action that requires a skill check or attack roll.', 'You try to help your ally with a task. To use this reaction, you must first prepare to help, usually by using an action during your turn. You must explain to the GM exactly how you’re trying to help, and they determine whether you can Aid your ally.\n\nWhen you use your Aid reaction, attempt a skill check or attack roll of a type decided by the GM. The typical DC is 20, but the GM might adjust this DC for particularly hard or easy tasks. The GM can add any relevant traits to your preparatory action or to your Aid reaction depending on the situation, or even allow you to Aid checks other than skill checks and attack rolls.\n\n**Critical Success** You grant your ally a +2 circumstance bonus to,the triggering check. If you’re a master with the check you,attempted, the bonus is +3, and if you’re legendary, it’s +4.\n**Success** You grant your ally a +1 circumstance bonus to the triggering check.\n**Critical Failure** Your ally takes a 1 circumstance penalty to the triggering check.'),
(2, 1, '470', 1, 1, 'Crawl', 'You are prone and your Speed is at least 10 feet.', NULL, 'You move 5 feet by crawling and continue to stay prone.'),
(3, 1, '470', 1, 4, 'Delay', NULL, 'Your turn begins.', 'You wait for the right moment to act. The rest of your turn doesn’t happen yet. Instead, you’re removed from the initiative order. You can return to the initiative order as a free action triggered by the end of any other creature’s turn. This permanently changes your initiative to the new position. You can’t use reactions until you return to the initiative order. If you Delay an entire round without returning to the initiative order, the actions from the Delayed turn are lost, your initiative doesn’t change, and your next turn occurs at your original position in the initiative order.\n\nWhen you Delay, any persistent damage or other negative effects that normally occur at the start or end of your turn occur immediately when you use the Delay action. Any beneficial effects that would end at any point during your turn also end. The GM might determine that other effects end when you Delay as well. Essentially, you can’t Delay to avoid negative consequences that would happen on your turn or to extend beneficial effects that would end on your turn.'),
(4, 1, '470', 1, 1, 'Drop Prone', NULL, NULL, 'You fall prone.'),
(5, 1, '470', 1, 1, 'Escape', NULL, NULL, 'You attempt to escape from being grabbed, immobilized, or restrained. Choose one creature, object, spell effect, hazard, or other impediment imposing any of those conditions on you. Attempt a check using your unarmed attack modifier against the DC of the effect. This is typically the Athletics DC of a creature grabbing you, the Thievery DC of a creature who tied you up, the spell DC for a spell effect, or the listed Escape DC of an object, hazard, or other impediment. You can attempt an Acrobatics or Athletics check instead of using your attack modifier if you choose (but this action still has the attack trait).\n\n**Critical Success** You get free and remove the grabbed, immobilized, and restrained conditions imposed by your chosen target. You can then Stride up to 5 feet.\n**Success** You get free and remove the grabbed, immobilized, and restrained conditions imposed by your chosen target.\n**Critical Failure** You don’t get free, and you can’t attempt to Escape again until your next turn.'),
(6, 1, '470', 1, 1, 'Interact', NULL, NULL, 'You use your hand or hands to manipulate an object or the terrain. You can grab an unattended or stored object, open a door, or produce some similar effect. You might have to attempt a skill check to determine if your Interact action was successful.'),
(7, 1, '531', 1, NULL, 'Invest an Item', NULL, NULL, 'You invest your energy in an item with the invested trait as you don it. This process requires 1 or more Interact actions, usually taking the same amount of time it takes to don the item. Once you’ve Invested the Item, you benefit from its constant magical abilities as long as you meet its other requirements (for most invested items, the only other requirement is that you must be wearing the item). This investiture lasts until you remove the item.\n\n You can invest no more than 10 items per day. If you remove an invested item, it loses its investiture. The item still counts against your daily limit after it loses its investiture. You reset the limit during your daily preparations, at which point you Invest your Items anew. If you’re still wearing items you had invested the previous day, you can typically keep them invested on the new day, but they still count against your limit. '),
(8, 1, '470', 1, 1, 'Leap', NULL, NULL, 'You take a careful, short jump. You can Leap up to 10 feet horizontally if your Speed is at least 15 feet, or up to 15 feet horizontally if your Speed is at least 30 feet. You land in the space where your Leap ends (meaning you can typically clear a 5-foot gap, or a 10-foot gap if your Speed is 30 feet or more).\n\nIf you Leap vertically, you can move up to 3 feet vertically and 5 feet horizontally onto an elevated surface.\n\nJumping a greater distance requires using the Athletics skill.'),
(9, 1, '470', 1, 2, 'Ready', NULL, NULL, 'You prepare to use an action that will occur outside your turn. Choose a single action or free action you can use, and designate a trigger. Your turn then ends. If the trigger you designated occurs before the start of your next turn, you can use the chosen action as a reaction (provided you still meet the requirements to use it). You can’t Ready a free action that already has a trigger.\n\nIf you have a multiple attack penalty and your readied action is an attack action, your readied attack takes the multiple attack penalty you had at the time you used Ready. This is one of the few times the multiple attack penalty applies when it’s not your turn.'),
(10, 1, '470', 1, 4, 'Release', NULL, NULL, 'You release something you’re holding in your hand or hands. This might mean dropping an item, removing one hand from your weapon while continuing to hold it in another hand, releasing a rope suspending a chandelier, or performing a similar action. Unlike most manipulate actions, Release does not trigger reactions that can be triggered by actions with the manipulate trait (such as Attack of Opportunity).\n\nIf you want to prepare to Release something outside of your turn, use the Ready activity.'),
(11, 1, '471', 1, 1, 'Seek', NULL, NULL, 'You scan an area for signs of creatures or objects. If you’re looking for creatures, choose an area you’re scanning. If precision is necessary, the GM can have you select a 30-foot cone or a 15-foot burst within line of sight. You might take a penalty if you choose an area that’s far away.\n\nIf you’re using Seek to search for objects (including secret doors and hazards), you search up to a 10-foot square adjacent to you. The GM might determine you need to Seek as an activity, taking more actions or even minutes or hours if you’re searching a particularly cluttered area.\n\nThe GM attempts a single secret Perception check for you and compares the result to the Stealth DCs of any undetected or hidden creatures in the area or the DC to detect each object in the area (as determined by the GM or by someone Concealing the Object). A creature you detect might remain hidden, rather than becoming observed, if you’re using an imprecise sense or if an effect (such as invisibility) prevents the subject from being observed.\n\n**Critical Success** If you were searching for creatures, any undetected or hidden creature you critically succeeded against becomes observed by you. If you were searching for an object, you learn its location.\n**Success** If you were searching for creatures, any undetected creature you succeeded against becomes hidden from you instead of undetected, and any hidden creature you succeeded against becomes observed by you. If you were searching for an object, you learn its location or get a clue to its whereabouts, as determined by the GM.'),
(12, 1, '471', 1, 1, 'Sense Motive', NULL, NULL, 'You try to tell whether a creature’s behavior is abnormal. Choose one creature, and assess it for odd body language, signs of nervousness, and other indicators that it might be trying to deceive someone. The GM attempts a single secret Perception check for you and compares the result to the Deception DC of the creature, the DC of a spell af ecting the creature’s mental state, or another appropriate DC determined by the GM. You typically can’t try to Sense the Motive of the same creature again until the situation changes significantly.\n\n**Critical Success** You determine the creature’s true intentions and get a solid idea of any mental magic affecting it.\n**Success** You can tell whether the creature is behaving normally, but you don’t know its exact intentions or what magic might be affecting it.\n**Failure** You detect what a deceptive creature wants you to believe. If they’re not being deceptive, you believe they’re behaving normally.\n**Critical Failure** You get a false sense of the creature’s intentions.'),
(13, 1, '471', 1, 1, 'Stand', NULL, NULL, 'You stand up from prone.'),
(14, 1, '471', 1, 1, 'Step', 'Your Speed is at least 10 feet.', NULL, 'You carefully move 5 feet. Unlike most types of movement, Stepping doesn’t trigger reactions, such as Attacks of Opportunity, that can be triggered by move actions or upon leaving or entering a square.\n\nYou can’t Step into difficult terrain (page 475 CRB), and you can’t Step using a Speed other than your land Speed.'),
(15, 1, '471', 1, 1, 'Stride', NULL, NULL, 'You move up to your Speed (page 463 CRB)'),
(16, 1, '471', 1, 1, 'Strike', NULL, NULL, 'You attack with a weapon you’re wielding or with an unarmed attack, targeting one creature within your reach (for a melee attack) or within range (for a ranged attack). Roll the attack roll for the weapon or unarmed attack you are using, and compare the result to the target creature’s AC to determine the effect. See Attack Rolls on page 446 CRB and Damage on page 450 CRB for details on calculating your attack and damage rolls.'),
(17, 1, '471', 1, 1, 'Take Cover', 'You are benfitting from cover, are near a feature that allows you to take cover, or you are prone.', NULL, 'You press yourself against a wall or duck behind an obstacle to take better advantage of cover (page 477 CRB). If you would have standard cover, you instead gain greater cover, which provides a +4 circumstance bonus to AC; to Reflex saves against area effects; and to Stealth checks to Hide, Sneak, or otherwise avoid detection. Otherwise, you gain the benefits of standard cover (a +2 circumstance bonus instead). This lasts until you move from your current space, use an attack action, become unconscious, or end this effect as a free action.'),
-- Specialty Basic Actions from CRB
(18, 1, '532', 2, NULL, 'Activate an Item', 'You can Activate an Item with the invested trait only if it’s invested by you. If the item requires you to Interact with it, you must be wielding it (if it’s a held item) or touching it with a free hand (if it’s another type of item).', NULL, 'You call forth the effect of an item by properly activating it. This is a special activity that takes a variable number of actions, as listed in the item’s stat block.\n\nSome items can be activated as a reaction or free action. In this case, you Activate the Item as a reaction or free action (as appropriate) instead of as an activity. Such cases are noted in the item’s Activate entry in its stat blockfor example, “Activate Reaction command.”\n\n**Long Activation Times** Some items take minutes or hours to activate. The Activate an Item activity for these items includes a mix of the listed activation components, but it’s not necessary to break down which one you’re providing at a given time. You can’t use other actions or reactions while activating such an item, though at the GM’s discretion, you might be able to speak a few sentences. As with other activities that take a long time, these activations have the exploration trait, and you can’t activate them in an encounter. If combat breaks out while you’re activating one, your activation is disrupted (see the Disrupting Activations sidebar).\n\n**Activation Components** Each activation entry lists any components involved in the activation after the action icons or text, such as “Single Action command.” The activation components, described below, add traits (listed in parentheses) and requirements to the activation. If you can’t provide the components, you fail to Activate the Item.\n\n- Command (auditory, concentrate)\n- Envision (concentrate)\n- Interact (manipulate)\n- Cast a Spell\n\n#### Activation Components\n\nAn item’s activate entry lists the components required to activate its abilities. Each component adds certain traits to the Activate an Item activity, and some components have special requirements. The components that appear in this book are listed below.\n\n#####Command\n\nThis component is a specific utterance you must make in a loud and strong voice. Activate an Item gains the auditory and concentrate traits. You must be able to speak to provide this component.\n\n##### Envision\n\nThis component is a specific image or phenomenon you need to imagine. Activate an Item gains the concentrate trait.\n\n##### Interact\n\nThis component works like the Interact basic action. Activate an Item gains the manipulate trait and requires you to use your hands, just like with any Interact action.\n\n##### Cast a Spell\n\nIf an item lists “Cast a Spell” after “Activate,” the activation requires you to use the Cast a Spell activity to Activate the Item. This happens when the item replicates a spell. You must have a spellcasting class feature to Activate an Item with this activation component. If the item can be used for a specific spell, the action icon for that spell is provided. If it’s an item like a staff, which can be used for many spells, the icon is omitted, and you must refer to each spell to determine which actions you must spend to Activate the Item to cast it.\n\n In this case, Activate an Item gains all the traits from the relevant components of the Cast a Spell activity.'), -- TODO there's a Reaction icon in here; need to swap for unicode and TODO there are some markdwon headings in here; maybe change those out
(19, 1, '472', 2, 5, 'Arrest a Fall', 'You have a fly Speed.', 'You fall.', 'You attempt an Acrobatics check to slow your fall. The DC is typically 15, but it might be higher due to air turbulence or other circumstances.\n\nSuccess You fall gently, taking no damage from the fall.'),
(20, 1, '472', 2, 1, 'Avert Gaze', NULL, NULL, 'You avert your gaze from danger. You gain a +2 circumstance bonus to saves against visual abilities that require you to look at a creature or object, such as a medusa’s petrifying gaze. Your gaze remains averted until the start of your next turn.'),
(21, 1, '472', 2, 1, 'Burrow', 'You have a burrow Speed.', NULL, 'You dig your way through dirt, sand, or a similar loose material at a rate up to your burrow Speed. You can’t burrow through rock or other substances denser than dirt unless you have an ability that allows you to do so.'),
(22, 1, '302', 2, NULL, 'Cast a Spell', NULL, NULL, 'You cast a spell you have prepared or in your repertoire. Casting a Spell is a special activity that takes a variable number of actions depending on the spell, as listed in each spell’s stat block. As soon as the spellcasting actions are complete, the spell effect occurs.\n\nSome spells are cast as a reaction or free action. In those cases, you Cast the Spell as a reaction or free action (as appropriate) instead of as an activity. Such cases will be noted in the spell’s stat blockfor example, “[reaction] verbal.”\n\n**Long Casting Times** Some spells take minutes or hours to cast. The Cast a Spell activity for these spells includes a mix of the listed spell components, but it’s not necessary to break down which one you’re providing at a given time. You can’t use other actions or reactions while casting such a spell, though at the GM’s discretion, you might be able to speak a few sentences. As with other activities that take a long time, these spells have the exploration trait, and you can’t cast them in an encounter. If combat breaks out while you’re casting one, your spell is disrupted (see Disrupted and Lost Spells on page 303 CRB).\n\n**Spell Components** Each spell lists the spell components required to cast it after the action icons or text, such as “[three-actions] material, somatic, verbal." The spell components, described in detail below, add traits and requirements to the Cast a Spell activity. If you can’t provide the components, you fail to Cast the Spell.\n\n- Material (manipulate)\n- Somatic (manipulate)\n- Verbal (concentrate)\n- Focus (manipulate)\n\n**Disrupted and Lost Spells** Some abilities and spells can disrupt a spell, causing it to have no effect and be lost. When you lose a spell, you’ve already expended the spell slot, spent the spell’s costs and actions, and used the Cast a Spell activity. If a spell is disrupted during a Sustain a Spell action, the spell immediately ends. The full rules for disrupting actions appear on page 462 CRB.'), --TODO had actions and reactions in here; need to substitute unicode
(23, 1, '305', 2, 1, 'Dismiss', NULL, NULL, 'You end one spell effect or magic item effect. This must be an effect you are allowed to dismiss, as defined by the spell or item. Dismissal might end the effect entirely or might end it just for a certain target or targets, depending on the spell or item.'),
(24, 1, '472', 2, 1, 'Fly', 'You have a fly Speed.', NULL, 'You move through the air up to your fly Speed. Moving upward (straight up or diagonally) uses the rules for moving through difficult terrain. You can move straight down 10 feet for every 5 feet of movement you spend. If you Fly to the ground, you don’t take falling damage. You can use an action to Fly 0 feet to hover in place. If you’re airborne at the end of your turn and didn’t use a Fly action this round, you fall.'),
(25, 1, '472', 2, 5, 'Grab an Edge', 'Your hands are not tied behind your back or otherwise restrained.', 'You fall from or past an edge or handhold.', 'When you fall off or past an edge or other handhold, you can try to grab it, potentially stopping your fall. You must succeed at a Reflex save, usually at the Climb DC. If you grab the edge or handhold, you can then Climb up using Athletics.\n\n**Critical Success** You grab the edge or handhold, whether or not you have a hand free, typically by using a suitable held item to catch yourself (catching a battle axe on a ledge, for example). You still take damage from the distance fallen so far, but you treat the fall as though it were 30 feet shorter.\n**Success** If you have at least one hand free, you grab the edge or handhold, stopping your fall. You still take damage from the distance fallen so far, but you treat the fall as though it were 20 feet shorter. If you have no hands free, you continue to fall as if you had failed the check.\n**Critical Failure** You continue to fall, and if you’ve fallen 20 feet or more before you use this reaction, you take 10 bludgeoning damage from the impact for every 20 feet fallen.'),
(26, 1, '472', 2, 1, 'Mount', 'You are adjacent to a creature that is at least one size larger than you and is willing to be your mount.', NULL, 'You move onto the creature and ride it. If you’re already mounted, you can instead use this action to dismount, moving of the mount into a space adjacent to it.'),
(27, 1, '472', 2, 1, 'Point Out', 'A creature is undetected by one or more of your allies but isn''t undetected by you.', NULL, 'You indicate a creature that you can see to one or more allies, gesturing in a direction and describing the distance verbally. That creature is hidden to your allies, rather than undetected (page 466 CRB). This works only for allies who can see you and are in a position where they could potentially detect the target. If your allies can’t hear or understand you, they must succeed at a Perception check against the creature’s Stealth DC or they misunderstand and believe the target is in a different location.'),
(28, 1, '472', 2, 1, 'Raise a Shield', 'You are wielding a shield.', NULL, 'You position your shield to protect yourself. When you have Raised a Shield, you gain its listed circumstance bonus to AC. Your shield remains raised until the start of your next turn.'),
(29, 1, '304', 2, 1, 'Sustain a Spell', 'You have at least one spell active with a sustained duration, and you are not fatigued.', NULL, 'Choose one spell with a sustained duration you have in effect. The duration of that spell continues until the end of your next turn. Some spells might have slightly different or expanded effects if you sustain them. Sustaining a Spell for more than 10 minutes (100 rounds) ends the spell and makes you fatigued unless the spell lists a different maximum duration (such as “sustained up to 1 minute” or “sustained up to 1 hour”).\n\nIf your Sustain a Spell action is disrupted, the spell immediately ends.'),
(30, 1, '534', 2, 1, 'Sustain an Activation', 'You have at least one magic item activation that you can sustain and you are not fatigued.', NULL, 'Choose one magic item activation with a sustained duration you have in effect. The duration of that activation continues until the end of your next turn. Some activations may have slightly different or expanded effects if you sustain them. Sustaining an Activation for more than 10 minutes (100 rounds) ends the activation and makes you fatigued unless the item’s description states a different maximum duration (such as “up to 1 minute” or “up to 1 hour”).\n\nIf your Sustain an Activation action is disrupted, the item’s effect immediately ends.');
INSERT INTO actions_traits (actions_id, traits_id)
VALUES
(2, 49), -- Crawl -> Move
(4, 49), -- Drop Prone -> Move
(5, 6), -- Escape -> Attack
(6, 42), -- Interact -> Manipulate
(8, 49), -- Leap -> Move
(9, 14), -- Ready -> Concentrate
(10, 42), -- Release -> Manipulate
(11, 14), -- Seek -> Concentrate
(11, 63), -- Seek -> Secret
(12, 14), -- Sense Motive -> Concentrate
(12, 63), -- Sense Motive -> Secret
(13, 49), -- Stand -> Move
(14, 49), -- Step -> Move
(15, 49), -- Stride -> Move
(16, 6), -- Strike -> Attack
(21, 49), -- Burrow -> Move
(23, 14), -- Dismiss -> Concentrate
(24, 49), -- Fly -> Move
(25, 42), -- Grab an Edge -> Manipulate
(26, 49), -- Mount -> Move
(27, 7), -- Point Out -> Auditory
(27, 42), -- Point Out -> Manipulate
(27, 74), -- Point Out -> Visual
(29, 14); -- Sustain a Spell -> Concentrate
-16
View File
@@ -1,16 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
BEGIN TRANSACTION;
INSERT INTO alignments VALUES(1,'Lawful Good','LG');
INSERT INTO alignments VALUES(2,'Neutral Good','NG');
INSERT INTO alignments VALUES(3,'Chaotic Good','CG');
INSERT INTO alignments VALUES(4,'Lawful Neutral','LN');
INSERT INTO alignments VALUES(5,'True Neutral','N'); -- per CRB they use 'True
-- Neutral' and 'N' only
INSERT INTO alignments VALUES(6,'Chaotic Neutral','CN');
INSERT INTO alignments VALUES(7,'Lawful Evil','LE');
INSERT INTO alignments VALUES(8,'Neutral Evil','NE');
INSERT INTO alignments VALUES(9,'Chaotic Evil','CE');
COMMIT;
-11
View File
@@ -1,11 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
BEGIN TRANSACTION;
INSERT INTO ammunition VALUES(1,1,'282','Arrows',0.1,10,0.1,'These projectiles are the ammunition for bows. The shaft of an arrow is made of wood. It is stabilized in flight by fletching at one end and bears a metal head on the other.');
INSERT INTO ammunition VALUES(2,1,'281','Blowgun Darts',0.05,10,0.1,'These thin, light darts are typically made of hardwood and stabilized with fletching of down or fur. They are often hollow so they can be used to deliver poison.');
INSERT INTO ammunition VALUES(3,1,'281','Bolts',0.1,10,0.1,'Shorter than traditional arrows but similar in construction, bolts are the ammunition used by crossbows.');
INSERT INTO ammunition VALUES(4,1,'281','Sling Bullets',0.01,10,0.1,'These are small metal balls, typically either iron or lead, designed to be used as ammunition in slings.');
COMMIT;
-83
View File
@@ -1,83 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
/* TODO decide on what goes in this flavor text. I'm thinking the small
one-paragraph at the top of the section, and we put in all the extra details as
a field with markdown formatted text. Need to think on it. */
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO ancestries (ancestry_id, short_name, flavor_text, hp, size_id, speed, vision_id,sources_id,sources_pages)
VALUES
(1, 'Dwarf', 'TODO', 10, 3, 20, 1,1,'35'),
(2, 'Elf', 'TODO', 6, 3, 30, 2,1,'39'),
(3, 'Gnome', 'TODO', 8, 2, 25, 2,1,'43'),
(4, 'Goblin', 'TODO', 6, 2, 25, 1,1,'47'),
(5, 'Halfling', 'TODO', 6, 2, 25, 3,1,'51'),
(6, 'Human', 'TODO', 8, 3, 25, 4,1,'55'),
(7, 'Half-Elf', 'TODO', 8, 3, 25, 4,1,'55'),
(8, 'Half-Orc', 'TODO', 8, 3, 25, 4,1,'55');
/* TODO insert remaining data into ancestries_boosts and ancestries_flaws */
/* Example Query to get boosts in text representation:
sqlite> select ancestries.short_name, abilityscores.short_name FROM ancestries INNER JOIN ancestries_boosts on ancestries_boosts.ancestry_id = ancestries.ancestry_id INNER JOIN abilityscores on ancestries_boosts.abilityscores_id = abilityscores.abilityscores_id;
short_name short_name
---------- ----------
Dwarf CON
Dwarf WIS
Dwarf Free1
*/
INSERT INTO ancestries_boosts (ancestry_id, abilityscores_id)
VALUES
(1, 3), -- dwarf CON
(1, 5), -- dwarf WIS
(1, 7), -- dwarf free 1
(2, 2), -- elf DEX
(2, 4), -- elf INT
(2, 7), -- elf free 1
(3, 3), -- gnome CON
(3, 6), -- gnome CHA
(3, 7), -- gnome free 1
(4, 2), -- goblin DEX
(4, 6), -- goblin CHA
(4, 7), -- goblin free 1
(5, 2), -- halfling DEX
(5, 5), -- halfling WIS
(5, 7), -- halfling free 1
(6, 7), -- human free 1
(6, 8); -- human free 2
INSERT INTO ancestries_flaws (ancestry_id, abilityscores_id)
VALUES
(1, 6), -- dwarf CHA
(2, 3), -- elf CON
(3, 1), -- gnome STR
(4, 5), -- goblin WIS
(5, 1); -- halfling STR
INSERT INTO ancestries_traits (ancestry_id, trait_id)
VALUES
(1,79), --Dwarf
(1,116), --Humanoid
(2,80), --Elf
(2,116),
(3,81), --Gnome
(3,116),
(4,82), --Goblin
(4,116),
(5,85), --Halfling
(5,116),
(6,86), --Human
(6,116),
(7,80), -- Half-Elf -> Elf
(7,86),
(7,116),
(7,83),
(8,116), --Half-Orc
(8,86),
(8,182),
(8,84);
-75
View File
@@ -1,75 +0,0 @@
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO armorgroup (
grp_id,
sources_id,
sources_pages,
short_name,
descr
)
VALUES
(1, 1, '275', 'Chain', 'The armor is so flexible it can bend with a critical hit and absorb some of the blow. Reduce the damage from critical hits by either 4 + the value of the armor’s potency rune for medium armor, or 6 + the value of the armor’s potency rune for heavy armor. This can’t reduce the damage to less than the damage rolled for the hit before doubling for a critical hit.'),
(2, 1, '275', 'Composite', 'The numerous overlapping pieces of this armor protect you from piercing attacks. You gain resistance to piercing damage equal to 1 + the value of the armor’s potency rune for medium armor, or 2 + the value of the armor’s potency rune for heavy armor.'),
(3, 1, '275', 'Leather', 'The thick second skin of the armor disperses blunt force to reduce bludgeoning damage. You gain resistance to bludgeoning damage equal to 1 + the value of the armor’s potency rune for medium armor, or 2 + the value of the armor’s potency rune for heavy armor.'),
(4, 1, '275', 'Plate', 'The sturdy plate provides no purchase for a cutting edge. You gain resistance to slashing damage equal to 1 + the value of the armor’s potency rune for medium armor, or 2 + the value of the armor’s potency rune for heavy armor.');
INSERT INTO armorcategory (armor_category_id, short_name)
VALUES
(1,'Unarmored'),
(2,'Light Armor'),
(3,'Medium Armor'),
(4,'Heavy Armor');
INSERT INTO armor (
armor_id,
sources_id,
sources_pages,
armor_category_id,
item_level,
short_name,
price_text,
price_gp,
ac_bonus,
dex_cap,
check_penalty,
speed_penalty,
strength,
bulk_id,
grp_id,
descr
)
VALUES
-- unarmored
(1, 1, '275', 1, 0, 'No armor', '-', 0.0, 0, NULL, NULL, NULL, NULL, 1, NULL, 'Not wearing protective garments.'),
(2, 1, '275', 1, 0, 'Explorer''s clothing', '1 sp', 0.1, 0, 5, NULL, NULL, NULL, 2, NULL, 'Adventurers who don’t wear armor travel in durable clothing. Though it’s not armor and uses your unarmored defense proficiency, it still has a Dex Cap and can grant an item bonus to AC if etched with potency runes.'),
-- light armor
(3, 1, '275', 2, 0, 'Padded armor', '2 sp', 0.2, 1, 3, NULL, NULL, 10, 2, NULL, 'This armor is simply a layer of heavy, quilted cloth, but it is sometimes used because it’s so inexpensive. Padded armor is easier to damage and destroy than other types of armor. Heavy armor comes with a padded armor undercoat included in its Price, though it loses the comfort trait when worn under heavy armor. You can wear just that padded armor undercoat to sleep in, if your heavy armor is destroyed, or when otherwise not wearing the full heavy armor. This allows you to keep the armor invested and benefit from the power of any runes on the associated heavy armor, but no one else can wear your heavy armor without the padded undercoat.'),
(4, 1, '275', 2, 0, 'Leather', '2 gp', 2.0, 1, 4, -1, NULL, 10, 3, NULL, 'A mix of flexible and molded boiled leather, a suit of this type of armor provides some protection with maximum flexibility.'),
(5, 1, '275', 2, 0, 'Studded leather', '3 gp', 3.0, 2, 3, -1, NULL, 12, 3, NULL, 'This leather armor is reinforced with metal studs and sometimes small metal plates, providing most of the flexibility of leather armor with more robust protection.'),
(6, 1, '275', 2, 0, 'Chain shirt', '5 gp', 5.0, 2, 3, -1, NULL, 12, 3, NULL, 'Sometimes called a hauberk, this is a long shirt constructed of the same metal rings as chainmail. However, it is much lighter than chainmail and protects only the torso, upper arms, and upper legs of its wearer.
'),
-- medium armor
(7, 1, '275', 3, 0, 'Hide', '2 gp', 2.0, 3, 2, -2, -5, 14, 4, 3, 'A mix of furs, sturdy hide, and sometimes molded boiled leather, this armor provides protection due to its layers of leather, though its bulkiness slows the wearer down and decreases mobility.'),
(8, 1, '275', 3, 0, 'Scale mail', '4 gp', 4.0, 3, 2, -2, -5, 14, 4, 2, 'Scale mail consists of many metal scales sewn onto a reinforced leather backing, often in the form of a long shirt that protects the torso, arms, and legs.'),
(9, 1, '275', 3, 0, 'Chain mail', '6 gp', 6.0, 4, 1, -2, -5, 16, 4, 1, '
A suit of chain mail consists of several pieces of armor composed of small metal rings linked together in a protective mesh. It typically includes a chain shirt, leggings, a pair of arms, and a coif, collectively protecting most of the body.'),
(10, 1, '275', 3, 0, 'Breastplate', '8 gp', 8.0, 4, 1, -2, -5, 16, 4, 4, 'Though referred to as a breastplate, this type of armor consists of several pieces of plate or half-plate armor that protect the torso, chest, neck, and sometimes the hips and lower legs. It strategically grants some of the protection of plate while allowing greater flexibility and speed.'),
-- heavy armor
(11, 1, '275', 4, 1, 'Splint mail', '13 gp', 13.0, 5, 1, -3, -10, 16, 5, 2, 'This type of armor is chain mail reinforced with flexible, interlocking metal plates, typically located on the wearer’s torso, upper arms, and legs. A suit of this armor comes with an undercoat of padded armor and a pair of gauntlets.'),
(12, 1, '275', 4, 1, 'Half plate', '18 gp', 18.0, 5, 1, -3, -10, 16, 5, 4, 'Half plate consists of most of the upper body plates used in full plate, with lighter or sparser steel plate protection for the arms and legs. This provides some of the protection of full plate with greater flexibility and speed. A suit of this armor comes with an undercoat of padded armor and a pair of gauntlets.'),
(13, 1, '275', 4, 2, 'Full plate', '30 gp', 30.0, 6, 0, -3, -10, 18, 6, 4, 'Plate mail consists of interlocking plates that encase nearly the entire body in a carapace of steel. It is costly and heavy, and the wearer often requires help to don it correctly, but it provides some of the best defense armor can supply. A suit of this armor comes with an undercoat of padded armor and a pair of gauntlets.');
-- TODO INSERT into armor_traits table
INSERT INTO armor_traits (armor_id, trait_id)
VALUES
(2, 88), -- explorer's clothing and comfort
(3, 88), -- padded and comfort
(6, 89), -- chain shirt flexible
(6, 90), -- chain shirt noisy
(9, 89), -- chain mail flexible
(9, 90), -- chain mail noisy
(13, 87); -- full plate bulwark
-76
View File
@@ -1,76 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
-- TODO Change bg_name and bg_descr to name and descr
-- TODO fill in bg_descr
INSERT INTO backgrounds (
bg_id,
is_comty_use,
is_specific_to_adv,
sources_id,
sources_pages,
name,
descr)
VALUES
-- CRB Backgrounds
(1, 0, 0, 1, 60, 'Acolyte', 'You spent your early days in a religious monastery or cloister. You may have traveled out into the world to spread the message of your religion or because you cast away the teachings of your faith, but deep down you’ll always carry within you the lessons you learned.\n\nChoose two ability boosts. One must be to Intelligence or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Religion skill and the Scribing Lore skill. You gain the Student of the Canon skill feat.'),
(2, 0, 0, 1, 60, 'Acrobat', 'In a circus or on the streets, you earned your pay by performing as an acrobat. You might have turned to adventuring when the money dried up, or simply decided to put your skills to better use.\n\nChoose two ability boosts. One must be to Strength or Dexterity, and one is a free ability boost.\n\nYou''re trained in the Acrobatics skill and the Circus Lore skill. You gain the Steady Balance skill feat.'),
(3, 0, 0, 1, 60, 'Animal Whisperer', 'You have always felt a connection to animals, and it was only a small leap to learn to train them. As you travel, you continuously encounter different creatures, befriending them along the way.\n\nChoose two ability boosts. One must be to Wisdom or Charisma, and one is a free ability boost.\n\nYou''re trained in the Nature skill and a Lore skill related to one terrain inhabited by animals you like (such as Plains Lore or Swamp Lore). You gain the Train Animal skill feat.'),
(4, 0, 0, 1, 60, 'Artisan', 'As an apprentice, you practiced a particular form of building or crafting, developing specialized skill. You might have been a blacksmith’s apprentice toiling over the forge for countless hours, a young tailor sewing garments of all kinds, or a shipwright shaping the hulls of ships.\n\nChoose two ability boosts. One must be to Strength or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Crafting skill and the Guild Lore skill. You gain the Specialty Crafting skill feat.'),
(5, 0, 0, 1, 60, 'Artist', 'Your art is your greatest passion, whatever form it takes. Adventuring might help you find inspiration, or simply be a way to survive until you become a world-famous artist.\n\nChoose two ability boosts. One must be to Dexterity or Charisma, and one is a free ability boost.\n\nYou''re trained in the Crafting skill and the Art Lore skill. You gain the Specialty Crafting skill feat.'),
(6, 0, 0, 1, 60, 'Barkeep', 'You have five specialties: hefting barrels, drinking, polishing steins, drinking, and drinking. You worked in a bar, where you learned how to hold your liquor and rowdily socialize.\n\nChoose two ability boosts. One must be to Constitution or Charisma, and one is a free ability boost.\n\nYou''re trained in the Diplomacy skill and the Alcohol Lore skill. You gain the Hobnobber skill feat.'),
(7, 0, 0, 1, 60, 'Barrister', 'Piles of legal manuals, stern teachers, and experience in the courtroom have instructed you in legal matters. You’re capable of mounting a prosecution or defense in court, and you tend to keep abreast of local laws, as you never can tell when you might need to know them on short notice.\n\nChoose two ability boosts. One must be to Intelligence or Charisma, and one is a free ability boost.\n\nYou''re trained in the Diplomacy skill and the Legal Lore skill. You gain the Group Impression skill feat.'),
(8, 0, 0, 1, 61, 'Bounty Hunter', 'Bringing in lawbreakers lined your pockets. Maybe you had an altruistic motive and sought to bring in criminals to make the streets safer, or maybe the coin was motivation enough. Your techniques for hunting down criminals transfer easily to the life of an adventurer.\n\nChoose two ability boosts. One must be to Strength or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Survival skill and the Legal Lore skill. You gain the Experienced Tracker skill feat.'),
(9, 0, 0, 1, 61, 'Charlatan', 'You traveled from place to place, peddling false fortunes and snake oil in one town, pretending to be royalty in exile to seduce a wealthy heir in the next. Becoming an adventurer might be your next big scam or an attempt to put your talents to use for a greater cause. Perhaps it’s a bit of both, as you realize that after pretending to be a hero, you’ve become the mask.\n\nChoose two ability boosts. One must be to Intelligence or Charisma, and one is a free ability boost.\n\nYou''re trained in the Deception skill and the Underworld Lore skill. You gain the Charming Liar skill feat.'),
(10, 0, 0, 1, 61, 'Criminal', 'As an unscrupulous independent or as a member of an underworld organization, you lived a life of crime. You might have become an adventurer to seek redemption, to escape the law, or simply to get access to bigger and better loot.\n\nChoose two ability boosts. One must be to Dexterity or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Stealth skill and the Underworld Lore skill. You gain the Experienced Smuggler skill feat.'),
(11, 0, 0, 1, 61, 'Detective', 'You solved crimes as a police inspector or took jobs for wealthy clients as a private investigator. You might have become an adventurer as part of your next big mystery, but likely it was due to the consequences or aftermath of a prior case.\n\nChoose two ability boosts. One must be to Intelligence or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Society skill and the Underworld Lore skill. You gain the Streetwise skill feat.'),
(12, 0, 0, 1, 61, 'Emissary', 'As a diplomat or messenger, you traveled to lands far and wide. Communicating with new people and forming alliances were your stock and trade.\n\nChoose two ability boosts. One must be to Intelligence or Charisma, and one is a free ability boost.\n\nYou''re trained in the Society skill and a Lore skill related to one city you''ve visited often. You gain the Multilingual skill feat.'),
(13, 0, 0, 1, 61-62, 'Entertainer', 'Through an education in the arts or sheer dogged practice, you learned to entertain crowds. You might have been an actor, a dancer, a musician, a street magician, or any other sort of performer.\n\nChoose two ability boosts. One must be to Dexterity or Charisma, and one is a free ability boost.\n\nYou''re trained in the Performance skill and the Theater Lore skill. You gain the Fascinating Performance skill feat.'),
(14, 0, 0, 1, 62, 'Farmhand', 'With a strong back and an understanding of seasonal cycles, you tilled the land and tended crops. Your farm could have been razed by invaders, you could have lost the family tying you to the land, or you might have simply tired of the drudgery, but at some point you became an adventurer.\n\nChoose two ability boosts. One must be to Constitution or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Athletics skill and the Farming Lore skill. You gain the Assurance skill feat with Athletics.'),
(15, 0, 0, 1, 62, 'Field Medic', 'In the chaotic rush of battle, you learned to adapt to rapidly changing conditions as you administered to battle casualties. You patched up soldiers, guards, or other combatants, and learned a fair amount about the logistics of war.\n\nChoose two ability boosts. One must be to Constitution or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Medicine skill and the Warfare Lore skill. You gain the Battle Medicine skill feat.'),
(16, 0, 0, 1, 62, 'Fortune Teller', 'The strands of fate are clear to you, as you have learned many traditional forms by which laypeople can divine the future. You might have used these skills to guide your community, or simply to make money. But even the slightest peek into these practices connects you to the occult mysteries of the universe.\n\nChoose two ability boosts. One must be to Intelligence or Charisma, and one is a free ability boost.\n\nYou''re trained in the Occultism skill and the Fortune-Telling Lore skill. You gain the Oddity Identification skill feat.'),
(17, 0, 0, 1, 62, 'Gambler', 'The thrill of the win drew you into games of chance. This might have been a lucrative sideline that paled in comparison to the real risks of adventuring, or you might have fallen on hard times due to your gambling and pursued adventuring as a way out of a spiral.\n\nChoose two ability boosts. One must be to Dexterity or Charisma, and one is a free ability boost.\n\nYou''re trained in the Deception skill and the Games Lore skill. You gain the Lie to Me skill feat.'),
(18, 0, 0, 1, 62, 'Gladiator', 'The bloody games of the arena taught you the art of combat. Before you attained true fame, you departed—or escaped—the arena to explore the world. Your skill at drawing both blood and a crowd’s attention pay off in a new adventuring life.\n\nChoose two ability boosts. One must be to Strength or Charisma, and one is a free ability boost.\n\nYou''re trained in the Performance skill and the Gladiatorial Lore skill. You gain the Impressive Performance skill feat.'),
(19, 0, 0, 1, 62, 'Guard', 'You served in the guard, out of either patriotism or the need for coin. Either way, you know how to get a difficult suspect to talk. However you left the guard, you might think of adventuring as a way to use your skills on a wider stage.\n\nChoose two ability boosts. One must be to Strength or Charisma, and one is a free ability boost.\n\nYou''re trained in the Intimidation skill and the Legal Lore skill or Warfare Lore skill. You gain the Quick Coercion skill feat.'),
(20, 0, 0, 1, 62, 'Herbalist', 'As a formally trained apothecary or a rural practitioner of folk medicine, you learned the healing properties of various herbs. You’re adept at collecting the right natural cures in all sorts of environments and preparing them properly.\n\nChoose two ability boosts. One must be to Constitution or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Nature skill and the Herbalism Lore skill. You gain the Natural Medicine skill feat.'),
(21, 0, 0, 1, 62, 'Hermit', 'In an isolated place—like a cave, remote oasis, or secluded mansion—you lived a life of solitude. Adventuring might represent your first foray out among other people in some time. This might be a welcome reprieve from solitude or an unwanted change, but in either case, you’re likely still rough around the edges.\n\nChoose two ability boosts. One must be to Constitution or Intelligence, and one is a free ability boost.\n\nYou''re trained in your choice of either the Nature or Occultism skill, as well as a Lore skill related to the terrain you lived in as a hermit (such as Cave Lore or Desert Lore). You gain the Dubious Knowledge skill feat.'),
(22, 0, 0, 1, 62, 'Hunter', 'You stalked and took down animals and other creatures of the wild. Skinning animals, harvesting their flesh, and cooking them were also part of your training, all of which can give you useful resources while you adventure.\n\nChoose two ability boosts. One must be to Dexterity or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Survival skill and the Tanning Lore skill. You gain the Survey Wildlife skill feat.'),
(23, 0, 0, 1, 62-63, 'Laborer', 'You’ve spent years performing arduous physical labor. It was a difficult life, but you somehow survived. You may have embraced adventuring as an easier method to make your way in the world, or you might adventure under someone else’s command.\n\nChoose two ability boosts. One must be to Strength or Constitution, and one is a free ability boost.\n\nYou''re trained in the Athletics skill and the Labor Lore skill. You gain the Hefty Hauler skill feat in Athletics.'),
(24, 0, 0, 1, 63, 'Martial Disciple', 'You dedicated yourself to intense training and rigorous study to become a great warrior. The school you attended might have been a traditionalist monastery, an elite military academy, or the local branch of a prestigious mercenary organization.\n\nChoose two ability boosts. One must be to Strength or Dexterity, and one is a free ability boost.\n\nYou''re trained in your choice of either the Acrobatics or Athletics skill, as well as the Warfare Lore skill. You gain a skill feat: Cat Fall if you chose Acrobatics or Quick Jump if you chose Athletics.'),
(25, 0, 0, 1, 63, 'Merchant', 'In a dusty shop, market stall, or merchant caravan, you bartered wares for coin and trade goods. The skills you picked up still apply in the adventuring life, in which a good deal on a suit of armor could prevent your death.\n\nChoose two ability boosts. One must be to Intelligence or Charisma, and one is a free ability boost.\n\nYou''re trained in the Diplomacy skill and the Mercantile Lore skill. You gain the Bargain Hunter skill feat.'),
(26, 0, 0, 1, 63, 'Miner', 'You earned a living wrenching precious minerals from the lightless depths of the earth. Adventuring might have seemed lucrative or glamorous compared to this backbreaking labor— and if you have to head back underground, this time you plan to do so armed with a real weapon instead of a miner’s pick.\n\nChoose two ability boosts. One must be to Strength or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Survival skill and the Mining Lore skill. You gain the Terrain Expertise skill feat with underground terrain.'),
(27, 0, 0, 1, 63, 'Noble', 'To the common folk, the life of a noble seems one of idyllic luxury, but growing up as a noble or member of the aspiring gentry, you know the reality: a noble’s lot is obligation and intrigue. Whether you seek to escape your duties by adventuring or to better your station, you have traded silks and pageantry for an adventurer’s life.\n\nChoose two ability boosts. One must be to Intelligence or Charisma, and one is a free ability boost.\n\nYou''re trained in the Society skill and the Genealogy Lore skill or Heraldy Lore skill. You gain the Courtly Graces skill feat.'),
(28, 0, 0, 1, 63, 'Nomad', 'Traveling far and wide, you picked up basic tactics for surviving on the road and in unknown lands, getting by with few supplies and even fewer comforts. As an adventurer, you travel still, often into even more dangerous places.\n\nChoose two ability boosts. One must be to Constitution or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Survival skill and a Lore skill related to one terrain you traveled in (such as Desert Lore or Swamp Lore). You gain the Assurance skill feat with Survival.'),
(29, 0, 0, 1, 63, 'Prisoner', 'You might have been imprisoned for crimes (whether you were guilty or not), or enslaved for some part of your upbringing. In your adventuring life, you take full advantage of your newfound freedom.\n\nChoose two ability boosts. One must be to Strength or Constitution, and one is a free ability boost.\n\nYou''re trained in the Stealth skill and the Underworld Lore skill. You gain the Experienced Smuggler skill feat.'),
(30, 0, 0, 1, 63, 'Sailor', 'You heard the call of the sea from a young age. Perhaps you signed onto a merchant’s vessel, joined the navy, or even fell in with a crew of pirates and scalawags.\n\nChoose two ability boosts. One must be to Strength or Dexterity, and one is a free ability boost.\n\nYou''re trained in the Athletics skill and the Sailing Lore skill. You gain the Underwater Marauder skill feat.'),
(31, 0, 0, 1, 63-64, 'Scholar', 'You have a knack for learning, and sequestered yourself from the outside world to learn all you could. You read about so many wondrous places and things in your books, and always dreamed about one day seeing the real things. Eventually, that curiosity led you to leave your studies and become an adventurer.\n\nChoose two ability boosts. One must be to Intelligence or Wisdom, and one is a free ability boost.\n\nYou''re trained in your choice of the Arcana, Nature, Occultism, or Religion skill, and the Academia Lore skill. You gain the Assurance skill feat.'),
(32, 0, 0, 1, 64, 'Scout', 'You called the wilderness home as you found trails and guided travelers. Your wanderlust could have called you to the adventuring life, or perhaps you served as a scout for soldiers and found you liked battle.\n\nChoose two ability boosts. One must be to Dexterity or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Survival skill and a Lore skill related to one terrain you scouted in (such as Forest Lore or Cavern Lore). You gain the Forager skill feat.'),
(33, 0, 0, 1, 64, 'Street Urchin', 'You eked out a living by picking pockets on the streets of a major city, never knowing where you’d find your next meal. While some folk adventure for the glory, you do so to survive.\n\nChoose two ability boosts. One must be to Dexterity or Constitution, and one is a free ability boost.\n\nYou''re trained in the Thievery skill and a Lore skill for the city you lived in as a street urchin (such as Absalom Lore or Magnimar Lore). You gain the Pickpocket skill feat.'),
(34, 0, 0, 1, 64, 'Tinker', 'Creating all sorts of minor inventions scratches your itch for problem-solving. Your engineering skills take a particularly creative bent, and no one know what you’ll come up with next. It might be a genius device with tremendous potential... or it might explode.\n\nChoose two ability boosts. One must be to Dexterity or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Crafting skill and the Engineering Lore skill. You gain the Specialty Crafting skill feat.'),
(35, 0, 0, 1, 64, 'Warrior', 'In your younger days, you waded into battle as a mercenary, a warrior defending a nomadic people, or a member of a militia or army. You might have wanted to break out from the regimented structure of these forces, or you could have always been as independent a warrior as you are now.\n\nChoose two ability boosts. One must be to Strength or Constitution, and one is a free ability boost.\n\nYou''re trained in the Intimidation skill and the Warfare Lore skill. You gain the Intimidating Glare skill feat.'),
-- Fall of Plaguestone Backgrounds
(36, 1, 1, 3, 55, 'Lesser Scion','You are the youngest child in a noble house (in Cheliax, Isger, or Andoran) and stand to inherit nothing from your family. Although you have a minor title, it affords you no lands or wealth, but it has garnered you a small amount of respect and deference in your travels. When play begins, you are riding in a caravan bound for Almas, where a cousin has promised to allow you to stay with them for a month.\n\nChoose two ability boosts. One must be to Dexterity or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Diplomacy skill and the Heraldry Lore skill. You gain the Hobnobber skill feat.'),
(37, 1, 1, 3, 55, 'Lost and Alone','You were training to become a knight in Lastwall when the Whispering Tyrant escaped his imprisonment and destroyed the nation. It was only by dumb luck that you are alive at all, but the memories of that fateful day haunt your dreams. When play begins, you have boarded a caravan heading toward a new town, having worn out your welcome at the taverns and inns of Elidir.\n\nChoose two ability boosts. One must be to Strength or Charisma, and one is a free ability boost.\n\nYou''re trained in the Intimidation skill and the Warfare Lore skill. You gain the Intimidating Glare skill feat.'),
(38, 1, 1, 3, 55, 'Missionary','You received training from clergy in a faraway temple, who sent you out into the world to spread the faith. Although you are relatively new at this, you are always on the lookout for new places in need of your deity’s teachings and guidance. When play begins, you are riding along in a caravan making your way through sparsely populated regions of Isger, spreading the news of your faith to those who will listen.\n\nChoose two ability boosts. One must be to Constitution or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Diplomacy skill and the Scribing Lore skill. You gain the Group Impression skill feat.'),
(39, 1, 1, 3, 55, 'Refugee','The fighting around the Lake Encarthan region has forced many of the people residing there to flee from the violence. Although your home is gone, you have managed to survive and are making your way south in search of a better life. When play begins, you are riding along in a caravan taking you to what might be either a new home in Andoran or simply another waypoint in your journey.\n\nChoose two ability boosts. One must be to Constitution or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Survival skill and the Hunting Lore skill. You gain the Forager skill feat.'),
(40, 1, 1, 3, 55, 'Teamster','You left your home a few months back for a life on the road, working for one caravan company and then another, always on the lookout for a new job and a better life. Last week, you were hired by the Bort Bargith’s company in Elidir. You don’t know anyone from the company just yet, but most of its members seem to be honest merchants and traders.\n\nChoose two ability boosts. One must be to Strength or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Nature skill and the Mercantile Lore skill. You gain the Train Animal skill feat.'),
-- Age of Ashes Backgrounds
(41, 1, 1, 4, 4, 'Dragon Scholar','Dragons have fascinated you for as long as you can remember. The potent power they possess, the long lives they lead, the ancient traditions they inspire—whatever the source of your interest, you’ve spent much of your life to this point immersed in all things draconic. These studies have bolstered your self-confidence and given you a wide range of methods and tactics you can use to impose your will on others.\n\nYou’ve likely chosen to attend the Call for Heroes as a way to seek funds as an adventurer to afford more texts about dragons or perhaps out of a desire to encounter one in real life.\n\nChoose two ability boosts. One must be to Strength or Charisma, and one is a free ability boost.\n\nYou''re trained in the Intimidation skill and the Dragon Lore skill. You gain the Intimidating Glare skill feat.'),
(42, 1, 1, 4, 4, 'Emancipated','Until recently, the nation of Ravounel was part of the larger nation of Cheliax, where the church of Asmodeus is the law and slaves are traded freely in the open market. You had the poor fortune to be born into slavery, but the good luck to have grown up in the city of Kintargo. When Ravounel seceded from Cheliax, the leaders of this new nation freed all slaves, and you’ve wasted no time in exploring and establishing your new life. How and why you’ve come to Breachill is left to you to decide—but the fact that you feel empowered to determine your own destiny continues to drive you!\n\n The chance to become an adventurer has excited you for some time, as you hope to build a new life for yourself as a hero rewarded with fame and fortune. Joining the Call for Heroes is a great opportunity to find a group to adventure with.\n\nChoose two ability boosts. One must be to Dexterity or Charisma, and one is a free ability boost.\n\nYou''re trained in the Stealth skill and the Kintargo Lore skill. You gain the Terrain Stalker skill feat.'),
(43, 1, 1, 4, 4-5, 'Haunting Vision','You’ve been haunted by frightening dreams of fires your whole life. This could be the result of a past, neardeath experience with fire or it might have no obvious source that you know of. Recently, you stumbled upon an image, story, or other omen featuring the dragon god of destruction, Dahak, and you were struck with an unnerving sense of deja vu—you’ve come to think that the draconic deity might have something to do with your dreams, and as such have been studying all you can about the god. Your visions have bolstered your faith as well; even if you don’t worship a specific deity, you have a deep passion for matters of faith.\n\n Your latest dream, for the first time, had enough details to identify its setting—in this last dream, you saw the town of Breachill burning. You’ve decided to join the Call for Heroes hoping to save the town you fear might burn to the ground soon.\n\nChoose two ability boosts. One must be to Constitution or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Religion skill and the Dahak Lore skill. You gain the Student of the Canon skill feat.'),
(44, 1, 1, 4, 5, 'Hellknight Historian','The various Hellknight Orders intrigue you, whether you seek to become one of their number yourself, wish to oppose their goals at every turn, or are merely inspired by or curious to learn more about them. You’ve heard that when the Order of the Nail abandoned Citadel Altaerein, they left behind the deed to the castle so anyone brave enough to explore the ruins and the defenses no doubt left behind would be rewarded with ownership of the abandoned fortress.\n\n You decided to join the Call for Heroes to hoping to gain an opportunity to explore Citadel Altaerein.\n\nChoose two ability boosts. One must be to Strength or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Society skill and the Architecture Lore skill. You gain the Courtly Graces skill feat.'),
(45, 1, 1, 4, 5, 'Local Scion','You’re from Breachill and have lived there most, if not all, of your life. You might be the son or daughter of a wellknown local adventuring family, or a family with a storied tradition of military or other martial service. You likely also have some sort of skill with your hands, as the people of Breachill are very self-sufficient.\n\n The Call for Heroes is one of your hometown’s most iconic traditions, and you want to attend so you can prove your own merits to the council—beyond simply those of your family’s name.\n\nChoose two ability boosts. One must be to Constitution or Charisma, and one is a free ability boost.\n\nYou''re trained in the Crafting skill and the Breachill Lore skill. You gain the Specialty Crafting skill feat.'),
(46, 1, 1, 4, 5, 'Out-of-Towner','You’ve never been to Breachill, nor do you have roots in the town, but as chance has it you find yourself visiting. You might be here traveling with a friend, visiting an old acquaintance, or merely here to see a new part of the world. Before coming to town, though, you spent many years living with an ancestry other than your own, and your diverse childhood has left you with an open mind and a curious nature.\n\n You’re excited to meet new people and cultures, and answering the Call for Heroes seems to be an interesting way to do so.\n\nChoose two ability boosts. One must be to Constitution or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Diplomacy skill and a Lore skill thematically associated with the members of the ancestry you grew up with: Dwarf, Elf, Gnome, Goblin, or Halfling. You gain the Hobnobber skill feat.'),
(47, 1, 1, 4, 5, 'Reputation Seeker','You’re likely from Breachill, but unlike the Local Scion, your family has no notable legacy in the area. You might not even have much of a family at all to call your own, and could be an orphan. You’ve seen so many people make names for themselves that you set out on your own and spent some time abroad in the jungles or deserts of Garund or in the upper reaches of the Darklands—regions that proved too dangerous to remain in for long on your own. You returned home with more caution and knowledge of the world beyond Breachill’s borders, but still determined to win fame.\n\n You’ve decided that joining an adventuring group would be the best way to secure aid in your quest to build your own reputation, and are attending the Call for Heroes to find such allies.\n\nChoose two ability boosts. One must be to Dexterity or Intelligence, and one is a free ability boost.\n\nYou''re trained in the Survival skill and the Darklands, Desert, or Jungle Lore skill. You gain the Terrain Expertise skill feat (underground if you have Darklands Lore, desert if you have Desert Lore, or forest if you have Jungle Lore).'),
(48, 1, 1, 4, 5-6, 'Returning Descendant','You aren’t from Breachill yourself—you might not even be from Isger or Avistan at all. You’ve lived a hard life, in any event. You have often had to make tough decisions, and have developed a knack for understanding how things work (and the best way to take them apart) that has helped you support yourself. Recently you discovered that an ancestor was from the town of Breachill and had a modest career as an adventurer. You can’t help but wonder if you would have had an easier life if you’d grown up there instead, and have decided to seek out this small town to learn more about it.\n\nYou’ve decided to respond to the Call for Heroes to follow in your ancestor’s footsteps, either to honor their memory or accomplish the great deeds they did not.\n\nChoose two ability boosts. One must be to Dexterity or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Thievery skill and the Engineering Lore skill. You gain the Pickpocket skill feat.'),
(49, 1, 1, 4, 6, 'Truth Seeker','Whether you are a local or from out of town, you’ve heard rumors that Breachill’s past contains a hidden secret. Perhaps you’ve heard strange rumors that the town’s founder, Lamond Breachton, was not the hero everyone touts, or maybe your grandmother heard stories from her own grandmother that contradict the town’s accepted narrative of its establishment. In the pursuit of the truth, you’ve learned to navigate the tangles of politics, and to never take anyone’s word at face value.\n\n You plan to join the Call for Heroes so that you can make yourself known to the council, or perhaps even ingratiating yourself to them, so you can seek the truth and eventually uncover Breachill’s secrets!\n\nChoose two ability boosts. One must be to Strength or Wisdom, and one is a free ability boost.\n\nYou''re trained in the Deception skill and the Politics Lore skill. You gain the Lie to Me skill feat.');
-22
View File
@@ -1,22 +0,0 @@
-- TODO update sizes table with a FK to bulk to get the data from the table on
-- pg 272 CRB
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO bulks (
bulk_id,
sources_id,
sources_pages,
short_name,
long_name,
numerical)
VALUES
(1, 1, '271-72', '-', 'Negligible', 0.0),
(2, 1, '271-72', 'L', 'Light', 0.1),
(3, 1, '271-72', '1', 'One', 1.0),
(4, 1, '271-72', '2', 'Two', 2.0),
(5, 1, '271-72', '3', 'Three', 3.0),
(6, 1, '271-72', '4', 'Four', 4.0),
(7, 1, '271-72', '5', 'Five', 5.0);
-62
View File
@@ -1,62 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
-- TODO Fill in the remaining short descriptions from pag 454 CRB
INSERT INTO conditions (
conditions_id,
sources_id,
sources_pages,
name,
short_descr,
descr)
VALUES
(1, 1, '454,618', 'Blinded', 'You''re unable to see.', 'You can’t see. All normal terrain is difficult terrain to you. You can’t detect anything using vision. You automatically critically fail Perception checks that require you to be able to see, and if vision is your only precise sense, you take a 4 status penalty to Perception checks. You are immune to visual effects. Blinded overrides dazzled.'),
(2, 1, '454,618', 'Clumsy', 'All your actions become clumsy and inexact.', 'Your movements become clumsy and inexact. Clumsy always includes a value. You take a status penalty equal to the condition value to Dexterity-based checks and DCs, including AC, Reflex saves, ranged attack rolls, and skill checks using Acrobatics, Stealth, and Thievery.'),
(3, 1, '454,618', 'Concealed', 'You become difficult for a creature to see.', 'While you are concealed from a creature, such as in a thick fog, you are difficult for that creature to see. You can still be observed, but you’re tougher to target. A creature that you’re concealed from must succeed at a DC 5 flat check when targeting you with an attack, spell, or other effect. Area effects aren’t subject to this flat check. If the check fails, the attack, spell, or effect doesn’t affect you.'),
(4, 1, '454,618', 'Confused', 'You lose your wits and attack wildly.', 'You don’t have your wits about you, and you attack wildly. You are flat-footed, you don’t treat anyone as your ally (though they might still treat you as theirs), and you can’t Delay, Ready, or use reactions.\n\nYou use all your actions to Strike or cast offensive cantrips, though the GM can have you use other actions to facilitate attack, such as draw a weapon, move so that a target is in reach, and so forth. Your targets are determined randomly by the GM. If you have no other viable targets, you target yourself, automatically hitting but not scoring a critical hit. If it’s impossible for you to attack or cast spells, you babble incoherently, wasting your actions.\n\nEach time you take damage from an attack or spell, you can attempt a DC 11 flat check to recover from your confusion and end the condition.'),
(5, 1, '454,618', 'Controlled', 'You are no longer in control of your own actions.', 'Someone else is making your decisions for you, usually because you’re being commanded or magically dominated. The controller dictates how you act and can make you use any of your actions, including attacks, reactions, or even Delay. The controller usually does not have to spend their own actions when controlling you.'),
(6, 1, '454,619', 'Dazzled', 'Your eyes are overstimulated and you can''t see clearly.', 'Your eyes are overstimulated. If vision is your only precise sense, all creatures and objects are concealed from you.'),
(7, 1, '454,619', 'Deafened', 'You are unable to hear', 'You can’t hear. You automatically critically fail Perception checks that require you to be able to hear. You take a 2 status penalty to Perception checks for initiative and checks that involve sound but also rely on other senses. If you perform an action with the auditory trait, you must succeed at a DC 5 flat check or the action is lost; attempt the check after spending the action but before any effects are applied. You are immune to auditory effects.'),
(9, 1, '454,619', 'Doomed', 'A powerful force is calling you to death.', 'A powerful force has gripped your soul, calling you closer to death. Doomed always includes a value. The dying value at which you die is reduced by your doomed value. If your maximum dying value is reduced to 0, you instantly die. When you die, you’re no longer doomed.\n\nYour doomed value decreases by 1 each time you get a full night’s rest.'),
(10, 1, '454,619', 'Drained', 'You have lost some of your blood or life force.', 'When a creature successfully drains you of blood or life force, you become less healthy. Drained always includes a value. You take a status penalty equal to your drained value on Constitution-based checks, such as Fortitude saves. You also lose a number of Hit Points equal to your level (minimum 1) times the drained value, and your maximum Hit Points are reduced by the same amount. For example, if you’re hit by an effect that inflicts drained 3 and you’re a 3rd-level character, you lose 9 Hit Points and reduce your maximum Hit Points by 9. Losing these Hit Points doesn’t count as taking damage.\n\nEach time you get a full night’s rest, your drained value decreases by 1. This increases your maximum Hit Points, but you don’t immediately recover the lost Hit Points.'),
(11, 1, '454,619', 'Dying', 'You are nearly dead.', 'You are bleeding out or otherwise at death’s door. While you have this condition, you are unconscious. Dying always includes a value, and if it ever reaches dying 4, you die. If you’re dying, you must attempt a recovery check (page 459) at the start of your turn each round to determine whether you get better or worse. Your dying condition increases by 1 if you take damage while dying, or by 2 if you take damage from an enemy’s critical hit or a critical failure on your save.\n\nIf you lose the dying condition by succeeding at a recovery check and are still at 0 Hit Points, you remain unconscious, but you can wake up as described in that condition. You lose the dying condition automatically and wake up if you ever have 1 Hit Point or more. Any time you lose the dying condition, you gain the wounded 1 condition, or increase your wounded condition value by 1 if you already have that condition.'),
(12, 1, '454,619', 'Encumbered', 'You are carrying too much weight to carry.', 'You are carrying more weight than you can manage. While you’re encumbered, you’re clumsy 1 and take a 10-foot penalty to all your Speeds. As with all penalties to your Speed, this can’t reduce your Speed below 5 feet.'),
(13, 1, '454,619', 'Enfeebled', 'You are physically weakened.', 'You’re physically weakened. Enfeebled always includes a value. When you are enfeebled, you take a status penalty equal to the condition value to Strength-based rolls and DCs, including Strength-based melee attack rolls, Strength-based damage rolls, and Athletics checks.'),
(14, 1, '454,619--20', 'Fascinated', 'You are compelled to focus your attention on something.', 'You are compelled to focus your attention on something, distracting you from whatever else is going on around you. You take a 2 status penalty to Perception and skill checks, and you can’t use actions with the concentrate trait unless they or their intended consequences are related to the subject of your fascination (as determined by the GM). For instance, you might be able to Seek and Recall Knowledge about the subject, but you likely couldn’t cast a spell targeting a different creature. This condition ends if a creature uses hostile actions against you or any of your allies.'),
(15, 1, '454,620', 'Fatigued', 'You are tired and can not summon much energy.', 'You’re tired and can’t summon much energy. You take a 1 status penalty to AC and saving throws. While exploring, you can’t choose an exploration activity.\n\nYou recover from fatigue after a full night’s rest.'),
(16, 1, '454,620', 'Flat-Footed', 'You are unable to focus your attention on your own defence.', 'You’re distracted or otherwise unable to focus your full attention on defense. You take a 2 circumstance penalty to AC. Some effects give you the flat-footed condition only to certain creatures or against certain attacks. Othersespecially conditionscan make you universally flat-footed against everything. If a rule doesn’t specify that the condition applies only to certain circumstances, it applies to all of them; for example, many effects simply say “The target is flat-footed.”'),
(17, 1, '454,620', 'Fleeing', 'You are forced to run away.', 'You’re forced to run away due to fear or some other compulsion. On your turn, you must spend each of your actions trying to escape the source of the fleeing condition as expediently as possible (such as by using move actions to flee, or opening doors barring your escape). The source is usually the effect or caster that gave you the condition, though some effects might define something else as the source. You can’t Delay or Ready while fleeing.'),
(18, 1, '454,620', 'Friendly', 'This creature likes you.', 'This condition reflects a creature’s disposition toward a particular character, and it affects only creatures that are not player characters. A creature that is friendly to a character likes that character. The character can attempt to make a Request of a friendly creature, and the friendly creature is likely to agree to a simple and safe request that doesn’t cost it much to fulfill. If the character or one of their allies uses hostile actions against the creature, the creature gains a worse attitude condition depending on the severity of the hostile action, as determined by the GM.'),
(19, 1, '454,620', 'Frightened', 'You are gripped with fear.', 'You’re gripped by fear and struggle to control your nerves. The frightened condition always includes a value. You take a status penalty equal to this value to all your checks and DCs. Unless specified otherwise, at the end of each of your turns, the value of your frightened condition decreases by 1.'),
(20, 1, '454,620', 'Grabbed', 'Another creature is holding you in place.', 'You’re held in place by another creature, giving you the flat-footed and immobilized conditions. If you attempt a manipulate action while grabbed, you must succeed at a DC 5 flat check or it is lost; roll the check after spending the action, but before any effects are applied.'),
(21, 1, '454,620', 'Helpful', 'This creature feels a desire to help you.', 'This condition reflects a creature’s disposition toward a particular character, and it affects only creatures that are not player characters. A creature that is helpful to a character wishes to actively aid that character. It will accept reasonable Requests from that character, as long as such requests aren’t at the expense of the helpful creature’s goals or quality of life. If the character or one of their allies uses a hostile action against the creature, the creature gains a worse attitude condition depending on the severity of the hostile action, as determined by the GM.'),
(22, 1, '454,620', 'Hidden', 'A creature knows you are around but cannot find you.', 'While you’re hidden from a creature, that creature knows the space you’re in but can’t tell precisely where you are. You typically become hidden by using Stealth to Hide. When Seeking a creature using only imprecise senses, it remains hidden, rather than observed. A creature you’re hidden from is flat-footed to you, and it must succeed at a DC 11 flat check when targeting you with an attack, spell, or other effect or it fails affect you. Area effects aren’t subject to this flat check.\n\nA creature might be able to use the Seek action to try to observe you, as described on page 471 CRB.'),
(23, 1, '454,620', 'Hostile', 'This creature wished haem upon you.', 'This condition reflects a creature’s disposition toward a particular character, and it affects only creatures that are not player characters. A creature that is hostile to a character actively seeks to harm that character. It doesn’t necessarily attack, but it won’t accept Requests from the character.'),
(24, 1, '454,620', 'Immobilized', 'You are unable to move.', 'You can’t use any action with the move trait. If you’re immobilized by something holding you in place and an external force would move you out of your space, the force must succeed at a check against either the DC of the effect holding you in place or the relevant defense (usually Fortitude DC) of the monster holding you in place.'),
(25, 1, '454,620', 'Indifferent', 'This creature doesn''t care about you.', 'This condition reflects a creature’s disposition toward a particular character, and it affects only creatures that are not player characters. A creature that is indifferent to a character doesn’t really care one way or the other about that character. Assume a creature’s attitude to a given character is indifferent unless specified otherwise.'),
(26, 1, '454,620--21', 'Invisible', 'You cannot be seen.', 'While invisible, you can’t be seen. You’re undetected to everyone. Creatures can Seek to attempt to detect you; if a creature succeeds at its Perception check against your Stealth DC, you become hidden to that creature until you Sneak to become undetected again. If you become invisible while someone can already see you, you start out hidden to the observer (instead of undetected) until you successfully Sneak. You can’t become observed while invisible except via special abilities or magic.'),
(27, 1, '454,621', 'Observed', 'Anything in plain view is observed by you.', 'Anything in plain view is observed by you. If a creature takes measures to avoid detection, such as by using Stealth to Hide, it can become hidden or undetected instead of observed. If you have another precise sense instead of or in addition to sight, you might be able to observe a creature or object using that sense instead. You can observe a creature only with precise senses. When Seeking a creature using only imprecise senses, it remains hidden, rather than observed.'),
(28, 1, '454,621', 'Paralyzed', 'You are frozen in place.', 'Your body is frozen in place. You have the flat-footed condition and can’t act except to Recall Knowledge and use actions that require only the use of your mind (as determined by the GM). Your senses still function, but only in the areas you can perceive without moving your body, so you can’t Seek while paralyzed.'),
(29, 1, '454,621', 'Persistent Damage', 'You take damage from a source over time.', 'Persistent damage comes from effects like acid, being on fire, or many other situations. It appears as “X persistent [type] damage,” where “X” is the amount of damage dealt and “[type]” is the damage type. Instead of taking persistent damage immediately, you take it at the end of each of your turns as long as you have the condition, rolling any damage dice anew each time. After you take persistent damage, roll a DC 15 flat check to see if you recover from the persistent damage. If you succeed, the condition ends.'),
(30, 1, '454,621', 'Petrified', 'You have been turned to stone.', 'You have been turned to stone. You can’t act, nor can you sense anything. You become an object with a Bulk double your normal Bulk (typically 12 for a petrified Medium creature or 6 for a petrified Small creature), AC 9, Hardness 8, and the same current Hit Points you had when alive. You don’t have a Broken Threshold. When you’re turned back into flesh, you have the same number of Hit Points you had as a statue. If the statue is destroyed, you immediately die. While petrified, your mind and body are in stasis, so you don’t age or notice the passing of time.'),
(31, 1, '454,621', 'Prone', 'You are lying on the ground.', 'You’re lying on the ground. You are flat-footed and take a 2 circumstance penalty to attack rolls. The only move actions you can use while you’re prone are Crawl and Stand. Standing up ends the prone condition. You can Take Cover while prone to hunker down and gain cover against ranged attacks, even if you don’t have an object to get behind, gaining a +4 circumstance bonus to AC against ranged attacks (but you remain flat-footed).\n\nIf you would be knocked prone while you’re Climbing or Flying, you fall (see pages 463464 for the rules on falling). You can’t be knocked prone when Swimming.'),
(32, 1, '454,622', 'Quickened', 'You are able to move faster than normal.', 'You gain 1 additional action at the start of your turn each round. Many effects that make you quickened specify the types of actions you can use with this additional action. If you become quickened from multiple sources, you can use the extra action you’ve been granted for any single action allowed by any of the effects that made you quickened. Because quickened has its effect at the start of your turn, you don’t immediately gain actions if you become quickened during your turn.'),
(33, 1, '454,622', 'Restrained', 'You are tied up and can barely move.', 'You’re tied up and can barely move, or a creature has you pinned. You have the flat-footed and immobilized conditions, and you can’t use any actions with the attack or manipulate traits except to attempt to Escape or Force Open your bonds. Restrained overrides grabbed.'),
(34, 1, '454,622', 'Sickened', 'You feel ill.', 'You feel ill. Sickened always includes a value. You take a status penalty equal to this value on all your checks and DCs. You can’t willingly ingest anythingincluding elixirs and potionswhile sickened.\n\nYou can spend a single action retching in an attempt to recover, which lets you immediately attempt a Fortitude save against the DC of the effect that made you sickened. On a success, you reduce your sickened value by 1 (or by 2 on a critical success).'),
(35, 1, '454,622', 'Slowed', 'You move slower than normal.', 'You have fewer actions. Slowed always includes a value. When you regain your actions at the start of your turn, reduce the number of actions you regain by your slowed value. Because slowed has its effect at the start of your turn, you don’t immediately lose actions if you become slowed during your turn.'),
(36, 1, '454,622', 'Stunned', 'You lose your senses.', 'You’ve become senseless. You can’t act while stunned. Stunned usually includes a value, which indicates how many total actions you lose, possibly over multiple turns, from being stunned. Each time you regain actions (such as at the start of your turn), reduce the number you regain by your stunned value, then reduce your stunned value by the number of actions you lost. For example, if you were stunned 4, you would lose all 3 of your actions on your turn, reducing you to stunned 1; on your next turn, you would lose 1 more action, and then be able to use your remaining 2 actions normally. Stunned might also have a duration instead of a value, such as “stunned for 1 minute.” In this case, you lose all your actions for the listed duration.\n\nStunned overrides slowed. If the duration of your stunned condition ends while you are slowed, you count the actions lost to the stunned condition toward those lost to being slowed. So, if you were stunned 1 and slowed 2 at the beginning of your turn, you would lose 1 action from stunned, and then lose only 1 additional action by being slowed, so you would still have 1 action remaining to use that turn.'),
(37, 1, '454,622', 'Stupefied', 'Your thoughts are indistinct and clouded', 'Your thoughts and indistinct and clouded. Stupefied always includes a value. You take a status penalty equal to this value on Intelligence-, Wisdom-, and Charisma-based checks and DCs, including Will saving throws, spell attack rolls, spell DCs, and skill checks that use these ability scores. Any time you attempt to Cast a Spell while stupefied, the spell is disrupted unless you succeed at a flat check with a DC equal to 5 + your stupefied value.'),
(38, 1, '454,622--23', 'Unconscious', 'You are sleeping or knocked out.', 'You’re sleeping, or you’ve been knocked out. You can’t act. You take a 4 status penalty to AC, Perception, and Reflex saves, and you have the blinded and flat-footed conditions. When you gain this condition, you fall prone and drop items you are wielding or holding unless the effect states otherwise or the GM determines you’re in a position in which you wouldn’t.\n\nIf you’re unconscious because you’re dying, you can’t wake up while you have 0 Hit Points. If you are restored to 1 Hit Point or more via healing, you lose the dying and unconscious conditions and can act normally on your next turn.\n\nIf you are unconscious and at 0 Hit Points, but not dying, you naturally return to 1 Hit Point and awaken after sufficient time passes. The GM determines how long you remain unconscious, from a minimum of 10 minutes to several hours. If you receive healing during this time, you lose the unconscious condition and can act normally on your next turn.\n\nIf you’re unconscious and have more than 1 Hit Point (typically because you are asleep or unconscious due to an effect), you wake up in one of the following ways. Each causes you to lose the unconscious condition.\n\n- You take damage, provided the damage doesn’t reduce you to 0 Hit Points. If the damage reduces you to 0 Hit Points, you remain unconscious and gain the dying condition as normal.\n- You receive healing, other than the natural healing you get from resting.\n- Someone shakes you awake with an Interact action.\n- There’s loud noise going on around youthough this isn’t automatic. At the start of your turn, you automatically attempt a Perception check against the noise’s DC (or the lowest DC if there is more than one noise), waking up if you succeed. If creatures are attempting to stay quiet around you, this Perception check uses their Stealth DCs. Some magical effects make you sleep so deeply that they don’t allow you to attempt this Perception check.\n- If you are simply asleep, the GM decides you wake up either because you have had a restful night’s sleep or something disrupted that rest.'),
(39, 1, '454,623', 'Undetected', 'A creature can not sense or track you.', 'When you are undetected by a creature, that creature cannot see you at all, has no idea what space you occupy, and can’t target you, though you still can be affected by abilities that target an area. When you’re undetected by a creature, that creature is flat-footed to you.\n\nA creature you’re undetected by can guess which square you’re in to try targeting you. It must pick a square and attempt an attack. This works like targeting a hidden creature (requiring a DC 11 flat check, as described on page 466), but the flat check and attack roll are rolled in secret by the GM, who doesn’t reveal whether the attack missed due to failing the flat check, failing the attack roll, or choosing the wrong square.\n\nA creature can use the Seek action to try to find you, as described on page 471 CRB.'),
(41, 1, '454,623', 'Unfriendly', 'A creature feels disdain for you.', 'This condition reflects a creature’s disposition toward a particular character, and it affects only creatures that are not player characters. A creature that is unfriendly to a character dislikes and specifically distrusts that character. The unfriendly creature won’t accept Requests from the character.'),
(42, 1, '454,623', 'Unnoticed', 'A creature has no idea about your presence.', 'If you are unnoticed by a creature, that creature has no idea you are present at all. When you’re unnoticed, you’re also undetected by the creature. This condition matters for abilities that can be used only against targets totally unaware of your presence.'),
(43, 1, '454,623', 'Wounded', 'You have been seriously injured.', 'You have been seriously injured. If you lose the dying condition and do not already have the wounded condition, you become wounded 1. If you already have the wounded condition when you lose the dying condition, your wounded condition value increases by 1. If you gain the dying condition while wounded, increase your dying condition value by your wounded value.\n\nThe wounded condition ends if someone successfully restores Hit Points to you with Treat Wounds, or if you are restored to full Hit Points and rest for 10 minutes.'),
-- objects only conditions
(44, 1, '618', 'Broken', 'This object has been broken.', 'Broken is a condition that affects objects. An object is broken when damage has reduced its Hit Points below its Broken Threshold. A broken object can’t be used for its normal function, nor does it grant bonuses-with the exception of armor. Broken armor still grants its item bonus to AC, but it also imparts a status penalty to AC depending on its category: -1 for broken light armor, -2 for broken medium armor, or -3 for broken heavy armor.\n\nA broken item still imposes penalties and limitations normally incurred by carrying, holding, or wearing it. For example, broken armor would still impose its Dexterity modifier cap, check penalty, and so forth.\n\nIf an effect makes an item broken automatically and the item has more HP than its Broken Threshold, that effect also reduces the item’s current HP to the Broken Threshold.');
-39
View File
@@ -1,39 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
-- TODO insert the damage category descriptions in MARKDOWN format from page 452.
BEGIN TRANSACTION;
INSERT INTO damagecategories VALUES(1,1,'452','Physical','Damage dealt by weapons, many physical hazards, and a handful of spells is collectively called physical damage. The main types of physical damage are bludgeoning, piercing, and slashing. **Bludgeoning damage** comes from weapons and hazards that deal blunt-force trauma, like a hit from a club or being dashed against rocks. **Piercing damage** is dealt from stabs and punctures, whether from a dragon’s fangs or the thrust of a spear. **Slashing damage** is delivered by a cut, be it the swing of the sword or the blow from a scythe blades trap.\n\nGhosts and other incorporeal creatures have a high resistance to physical attacks that aren’t magical (attacks that lack the magical trait). Furthermore, most incorporeal creatures have additional, though lower, resistance to magical physical damage (such as damage dealt from a mace with the magic trait) and most other damage types.');
INSERT INTO damagecategories VALUES(2,1,'452','Energy','Many spells and other magical effects deal energy damage. Energy damage is also dealt from effects in the world, such as the biting cold of a blizzard to a raging forest fire. The main types of energy damage are acid, cold, electricity, fire, and sonic. **Acid damage** can be delivered by gases, liquids, and certain solids that dissolve flesh, and sometimes by harder materials. **Cold damage** freezes material by way of contact with chilling gases and ice. **Electricity damage** comes from the discharge of powerful lightning and sparks. **Fire damage** burns through heat and combustion. **Sonic damage** assaults matter with high-frequency vibration and sound waves. Many times, you deal energy damage by casting magic spells, and doing so is often useful against creatures that have immunities or resistances to physical damage.\n\nTwo special types of energy damage specifically target the living and the undead. Positive energy often manifests as healing energy to living creatures but can create **positive damage** that withers undead bodies and disrupts and injures incorporeal undead. Negative energy often revivifies the unnatural, unliving power of undead, while manifesting as **negative damage** that gnaws at the living.\n\nPowerful and pure magical energy can manifest itself as **force damage**. Few things can resist this type of damage—not even incorporeal creatures such as ghosts and wraiths. ');
INSERT INTO damagecategories VALUES(3,1,'452','Alignment','Weapons and effects keyed to a particular alignment can deal **chaotic**, **evil**, **good**, or **lawful** damage. These damage types apply only to creatures that have the opposing alignment trait. Chaotic damage harms only lawful creatures, evil damage harms only good creatures, good damage harms only evil creatures, and lawful damage harms only chaotic creatures.');
INSERT INTO damagecategories VALUES(4,1,'452','Mental','Sometimes an effect can target the mind with enough psychic force to actually deal damage to the creature. When it does, it deals **mental damage**. Mindless creatures and those with only programmed or rudimentary intelligence are often immune to mental damage and effects.');
INSERT INTO damagecategories VALUES(5,1,'452','Poison','Venoms, toxins, and the like can deal **poison damage**, which affects creatures by way of contact, ingestion, innhalation, or injury, In addition to coming from monster attacks, alchemical items, and spells, poison damage is often caused by ongoing afflictions, which follow special rules described on page 457.');
INSERT INTO damagecategories VALUES(6,1,'452','Bleed',' Another special type of physical damage is **bleed damage**. This is persistent damage that represents loss of blood. As such, it has no effect on nonliving creatures or living creatures that don’t need blood to live. Weaknesses and resistances to physical damage apply.');
INSERT INTO damagecategories VALUES(7,1,'452','Precision','Sometimes you are able to make the most of your attack through sheer precision. When you hit with an ability that grants you **precision damage**, you increase the attack’s listed damage, using the same damage type, rather than tracking a separate pool of damage. For example, a non-magical dagger Strike that deals 1d6 precision damage from a rogue’s sneak attack increases the piercing damage by 1d6.\n\nSome creatures are immune to precision damage, regardless of the damage type; these are often amorphous creatures that lack vulnerable anatomy. A creature immune to precision damage would ignore the 1d6 precision damage in the example above, but it would still take the rest of the piercing damage from the Strike. Likewise, since precision damage is always the same type of damage as the attack it’s augmenting, a creature that is resistant to non-magical damage, like a ghost or other incorporeal creature, would resist not only the dagger’s damage but also the precision damage, even though it is not specifically resistant to precision damage.');
INSERT INTO damagecategories VALUES(8,1,'452','Precious Materials','While not their own damage category, precious materials can modify damage to penetrate a creature’s resistances or take advantage of its weaknesses. For instance, silver weapons are particularly effective against lycanthropes and bypass the resistances to physical damage that most devils have.');
COMMIT;
BEGIN TRANSACTION;
INSERT INTO damagetypes VALUES(1,1,'452',1,'B','Bludgeoning');
INSERT INTO damagetypes VALUES(2,1,'452',1,'P','Piercing');
INSERT INTO damagetypes VALUES(3,1,'452',1,'S','Slashing');
INSERT INTO damagetypes VALUES(4,1,'452',2,NULL,'Acid');
INSERT INTO damagetypes VALUES(5,1,'452',2,NULL,'Cold');
INSERT INTO damagetypes VALUES(6,1,'452',2,NULL,'Electricity');
INSERT INTO damagetypes VALUES(7,1,'452',2,NULL,'Fire');
INSERT INTO damagetypes VALUES(8,1,'452',2,NULL,'Sonic');
INSERT INTO damagetypes VALUES(9,1,'452',2,NULL,'Positive');
INSERT INTO damagetypes VALUES(10,1,'452',2,NULL,'Negative');
INSERT INTO damagetypes VALUES(11,1,'452',3,NULL,'Chaotic');
INSERT INTO damagetypes VALUES(12,1,'452',3,NULL,'Evil');
INSERT INTO damagetypes VALUES(13,1,'452',3,NULL,'Good');
INSERT INTO damagetypes VALUES(14,1,'452',3,NULL,'Lawful');
INSERT INTO damagetypes VALUES(15,1,'452',4,NULL,'Mental');
INSERT INTO damagetypes VALUES(16,1,'452',5,NULL,'Poison');
INSERT INTO damagetypes VALUES(17,1,'452',6,NULL,'Bleed');
INSERT INTO damagetypes VALUES(18,1,'452',7,NULL,'Precision');
INSERT INTO damagetypes VALUES(19,1,'452',8,NULL,'Precious Materials');
COMMIT;
File diff suppressed because it is too large. Load diff
-19
View File
@@ -1,19 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO frequency (
freq_id,
freq_descr
)
VALUES
(1, 'once per round'),
(2, 'once per turn'),
(3, 'once per minute'),
(4, 'once every 10 minutes'),
(5, 'once per hour'),
(6, 'once per day');
-- (7, 'once per week'),
-- (8, 'once per month'),
-- (9, 'once per year');
-115
View File
@@ -1,115 +0,0 @@
PRAGMA foreign_keys = ON;
BEGIN TRANSACTION;
INSERT INTO gear VALUES('1','Holly and Mistletoe','0','0','0','1','1','290','Plants of supernatural significance provide a primal focus for primal spellcasters, such as druids, when using certain abilities and casting some spells. A bundle of holly and mistletoe must be held in one hand to use it. Other primal foci exist for druids focused on other aspects of nature.');
INSERT INTO gear VALUES('2','Bedroll','0','0.01','0.1','','1','288','');
INSERT INTO gear VALUES('3','Candle','0','0.01','0','1','1','289','A lit candle sheds dim light in a 10-foot radius.');
INSERT INTO gear VALUES('4','Chalk','0','0.01','0','1','1','288','');
INSERT INTO gear VALUES('5','Mug','0','0.01','0','1','1','288','');
INSERT INTO gear VALUES('6','Oil','0','0.01','0','2','1','291','You can use oil to fuel lanterns, but you can also set a pint of oil aflame and throw it. You must first spend an Interact action preparing the oil, then throw it with another action as a ranged attack. If you hit, it splatters on the creature or in a single 5-foot square you target. You must succeed at a DC 10 flat check for the oil to ignite successfully when it hits. If the oil ignites, the target takes 1d6 fire damage.');
INSERT INTO gear VALUES('7','Piton','0','0.01','0','1','1','291','These small spikes can be used as anchors to make climbing easier. To affix a piton, you must hold it in one hand and use a hammer to drive it in with your other hand. You can attach a rope to the hammered piton so that you don''t fall all the way to the ground on a critical failure while Climbing.');
INSERT INTO gear VALUES('8','Sack','0','0.01','0.1','1','1','291','A sack can hold up to 8 Bulk worth of items. A sack containing 2 Bulk or less can be worn on the body, usually tucked into a belt. You can carry a sack with one hand, but must use two hands to transfer items in and out.');
INSERT INTO gear VALUES('9','Sheath','0','0.01','0','','1','291','A sheath or scabbard lets you easily carry a weapon on your person.');
INSERT INTO gear VALUES('10','Ten-Foot Pole','0','0.01','1','2','1','291','When wielding this long pole, you can use Seek to search a square up to 10 feet away. The pole is not sturdy enough to use as a weapon.');
INSERT INTO gear VALUES('11','Torch','0','0.01','0.1','1','1','292','A torch sheds bright light in a 20-foot radius (and dim light to the next 20 feet). It can be used as an improvised weapon that deals 1d4 bludgeoning damage plus 1 fire damage.');
INSERT INTO gear VALUES('12','Soap','0','0.02','0','1','1','288','');
INSERT INTO gear VALUES('13','Ladder','0','0.03','3','2','1','288','');
INSERT INTO gear VALUES('14','Belt Pouch','0','0.04','0','','1','289','A belt pouch holds up to four items of light Bulk.');
INSERT INTO gear VALUES('15','Flint and Steel','0','0.05','0','2','1','290','Flint and steel are useful in creating a fire if you have the time to catch a spark, though using them is typically too time-consuming to be practical during an encounter. Even in ideal conditions, using flint and steel to light a flame requires using at least 3 actions, and often significantly longer.');
INSERT INTO gear VALUES('16','Vial','0','0.05','0','1','1','292','A simple glass vial holds up to 1 ounce of liquid.');
INSERT INTO gear VALUES('17','Waterskin','0','0.05','0.1','1','1','292','When it''s full, a waterskin has 1 Bulk and contains roughly 1 day''s worth of water for a Small or Medium creature.');
INSERT INTO gear VALUES('18','Signal Whistle','0','0.08','0','1','1','291','When sounded, a signal whistle can be heard clearly up to half a mile away across open terrain.');
INSERT INTO gear VALUES('19','Backpack','0','0.1','0','','1','289','A backpack holds up to 4 Bulk of items. If you''re carrying or stowing the pack rather than wearing it on your back, its bulk is light instead of negligible.');
INSERT INTO gear VALUES('20','Bandolier','0','0.1','0','','1','289','A bandolier holds up to eight items of light Bulk within easy reach and is usually used for alchemical items or potions. If you are carrying or stowing a bandolier rather than wearing it around your chest, it has light Bulk instead of negligible. A bandolier can be dedicated to a full set of tools, such as healer''s tools, allowing you to draw the tools as part of the action that requires them.');
INSERT INTO gear VALUES('21','Basic Crafter''s Book','0','0.1','0.1','2','1','289','This book contains the formulas (page 293) for Crafting the common items in this chapter.');
INSERT INTO gear VALUES('22','Clothing (Explorer''s)','0','0.1','0.1','','1','287','Explorer''s clothing is sturdy enough that it can be reinforced to protect you, even though it isn''t a suit of armor. It comes in many forms, though the most common sorts look like clerical vestments, monk''s garments, or wizard''s robes, as members of all three classes are likely to avoid wearing armor. For more information on explorer''s clothing, see pages 275--76.');
INSERT INTO gear VALUES('23','Clothing (Oridinary)','0','0.1','0','','1','287','Ordinary clothing is functional with basic tailoring, such as peasant garb, monk''s robes, or work clothes.');
INSERT INTO gear VALUES('24','Disguise Kit (Replacement Cosmetics)','0','0.1','0','','1','290','This small wooden box contains cosmetics, false facial hair, spirit gum, and a few simple wigs. You usually need a disguise kit to set up a disguise in order to Impersonate someone using the Deception skill. An elite disguise kit adds a +1 item bonus to relevant checks. If you''ve crafted a large number of disguises, you can replenish your cosmetics supply with replacement cosmetics suitable for the type of your disguise kit.');
INSERT INTO gear VALUES('25','Grappling Hook','0','0.1','0.1','1','1','290','You can throw a grappling hook with a rope tied to it to make a climb easier. To anchor a grappling hook, make an attack roll with the secret trait against a DC depending on the target, typically at least DC 20. On a success, your hook has a firm hold, but on a critical failure, the hook seems like it will hold but actually falls when you''re partway up.');
INSERT INTO gear VALUES('26','Hammer','0','0.1','0.1','1','1','288','');
INSERT INTO gear VALUES('27','Religious Symbol (Wooden)','0','0.1','0.1','1','1','291','This piece of wood or silver is emblazoned with an image representing a deity. Some divine spellcasters, such as clerics, can use a religious symbol of their deity as a divine focus to use certain abilities and cast some spells. A religious symbol must be held in one hand to use it.');
INSERT INTO gear VALUES('28','Satchel','0','0.1','0','2','1','291','A satchel can hold up to 2 Bulk worth of items. If you are carrying or stowing a satchel rather than wearing it over your shoulder, it counts as light Bulk instead of negligible.');
INSERT INTO gear VALUES('29','Scroll Case','0','0.1','0','2','1','291','Scrolls, maps, and other rolled documents are stored in scroll cases for safe transport.');
INSERT INTO gear VALUES('30','Writing Set (Extra Ink and Paper)','0','0.1','0','','1','292','Using a writing set, you can draft correspondence and scribe scrolls. A set includes stationery, including a variety of paper and parchment, as well as ink, a quill or inkpen, sealing wax, and a simple seal. If you''ve written a large amount, you can refill your kit with extra ink and paper.');
INSERT INTO gear VALUES('31','Lock (Poor)','0','0.2','0','2','1','290','Picking a poor lock requires two successful DC 15 Thievery checks.');
INSERT INTO gear VALUES('32','Merchant''s Scale','0','0.2','0.1','2','1','288','');
INSERT INTO gear VALUES('33','Saddlebags','0','0.2','0.1','2','1','291','Saddlebags come in a pair. Each can hold up to 3 Bulk of items. The Bulk value given is for saddlebags worn by a mount. If you are carrying or stowing saddlebags, they count as 1 Bulk instead of light Bulk.');
INSERT INTO gear VALUES('34','Caltrops','0','0.3','0.1','1','1','289','These four-pronged metal spikes can cause damage to a creature''s feet. You can scatter caltrops in an empty square adjacent to you with an Interact action. The first creature that moves into that square must succeed at a DC 14 Acrobatics check or take 1d4 piercing damage and 1 persistent bleed damage. A creature taking persistent bleed damage from caltrops takes a 5-foot penalty to its Speed. Spending an Interact action to pluck the caltrops free reduces the DC to stop the bleeding. Once a creature takes damage from caltrops, enough caltrops are ruined that other creatures moving into the square are safe. Deployed caltrops can be salvaged and reused if no creatures took damage from them. Otherwise, enough caltrops are ruined that they can''t be salvaged.');
INSERT INTO gear VALUES('35','Manacles (Poor)','0','0.3','0','2','1','290','You can manacle someone who is willing or otherwise at your mercy as an exploration activity taking 10--30 seconds depending on the creature''s size and how many manacles you apply. A two-legged creature with its legs bound takes a 15-foot circumstance penalty to its Speeds, and a two-handed creature with its wrists bound has to succeed at a DC 5 flat check any time it uses a manipulate action or else that action fails. This DC may be higher depending on how tightly the manacles constrain the hands. A creature bound to a stationary object is immobilized. For creatures with more or fewer limbs, the GM determines what effect manacles have, if any. Freeing a creature from poor manacles requires two successful DC 17 Thievery checks.');
INSERT INTO gear VALUES('36','Thieves'' Tools (Replacement Picks)','0','0.3','0','','1','291','You need thieves'' tools to Pick Locks or Disable Devices (of some types) using the Thievery skill. If your thieves'' tools are broken, you can repair them by replacing the lock picks with replacement picks appropriate to your tools; this doesn''t require using the Repair action.');
INSERT INTO gear VALUES('37','Clothing (Winter)','0','0.4','0.1','','1','287','Winter clothing allows you to negate the damage from severe environmental cold and reduce the damage from extreme cold to that of severe cold.');
INSERT INTO gear VALUES('38','Rations','0','0.4','0.1','1','1','288','');
INSERT INTO gear VALUES('39','Tool (Short)','0','0.4','0.1','1','1','292','This entry is a catchall for basic hand tools that don''t have a specific adventuring purpose. A hoe, shovel, or sledgehammer is a long tool, and a hand drill, ice hook, or trowel is a short tool. A tool can usually be used as an improvised weapon, dealing 1d4 damage for a short tool or 1d6 for a long tool. The GM determines the damage type that''s appropriate or adjusts the damage if needed.');
INSERT INTO gear VALUES('40','Climbing Kit','0','0.5','1','2','1','287','This satchel includes 50 feet of rope, pulleys, a dozen pitons, a hammer, a grappling hook, and one set of crampons. Climbing kits allow you to attach yourself to the wall you''re Climbing, moving half as quickly as usual (minimum 5 feet) but letting you attempt a DC 5 flat check whenever you critically fail to prevent a fall. A single kit has only enough materials for one climber; each climber needs their own kit.');
INSERT INTO gear VALUES('41','Climbing Kit (Extreme)','3','40','1','2','1','287','This satchel includes 50 feet of rope, pulleys, a dozen pitons, a hammer, a grappling hook, and one set of crampons. Climbing kits allow you to attach yourself to the wall you''re Climbing, moving half as quickly as usual (minimum 5 feet) but letting you attempt a DC 5 flat check whenever you critically fail to prevent a fall. You gain a +1 item bonus to Athletics checks to Climb while using an extreme climbing kit. A single kit has only enough materials for one climber; each climber needs their own kit.');
INSERT INTO gear VALUES('42','Crowbar','0','0.5','0.1','2','1','290','When Forcing Open an object that doesn''t have an easy grip, a crowbar makes it easier to gain the necessary leverage. Without a crowbar, prying something open takes a -2 item penalty to the Athletics check to Force Open (similar to using a shoddy item).');
INSERT INTO gear VALUES('43','Material Component Pouch','0','0.5','0.1','1','1','290','This pouch contains material components for those spells that require them. Though the components are used up over time, you can refill spent components during your daily preparations.');
INSERT INTO gear VALUES('44','Rope','0','0.5','0.1','2','1','288','');
INSERT INTO gear VALUES('45','Chest','0','0.6','2','2','1','289','A wooden chest can hold up to 8 Bulk of items.');
INSERT INTO gear VALUES('46','Adventurer''s Pack','0','0.7','2','','1','289','This item is the starter kit for an adventurer, containing the essential items for exploration and survival. The Bulk value is for the entire pack together, but see the descriptions of individual items as necessary. \n\n The pack contains the following items: backpack (containing the other goods), bedroll, two belt pouches, 10 pieces of chalk, flint and steel, 50 feet of rope, 2 weeks'' rations, soap, 5 torches, and a waterskin.');
INSERT INTO gear VALUES('47','Lantern (Hooded)','0','0.7','0.1','1','1','290','A lantern sheds bright light and requires 1 pint of oil to function for 6 hours. \n\n A hooded lantern sheds light in a 30-foot radius (and dim light in the next 30 feet) and is equipped with shutters, which you can close to block the light. Closing or opening the shutters takes an Interact action.');
INSERT INTO gear VALUES('48','Fishing Tackle','0','0.8','1','2','1','290','This kit include a collapsible fishing pole, fishhooks, line, lures, and a fishing net.');
INSERT INTO gear VALUES('49','Musical Instrument (Handheld)','0','0.8','1','2','1','290','Handheld instruments include bagpipes, a small set of chimes, small drums, fiddles and viols, flutes and recorders, small harps, lutes, trumpets, and similarly sized instruments. The GM might rule that an especially large handheld instrument (like a tuba) has greater Bulk.');
INSERT INTO gear VALUES('50','Tent (Pup)','0','0.8','0.1','2','1','288','');
INSERT INTO gear VALUES('51','Compass','0','1','0.1','1','1','290','A compass helps you Sense Direction or navigate, provided you''re in a location with uniform magnetic fields. Without a compass, you take a --2 item penalty to these checks (similar to using a shoddy item).');
INSERT INTO gear VALUES('52','Cookware','0','1','2','2','1','288','');
INSERT INTO gear VALUES('53','Formula Book (Blank)','0','1','1','1','1','290','A formula book holds the formulas necessary to make items other than the common equipment from this chapter; alchemists typically get one for free. Each formula book can hold the formulas for up to 100 different items. Formulas can also appear on parchment sheets, tablets, and almost any other medium; there''s no need for you to copy them into a specific book as long as you can keep them on hand to reference them.');
INSERT INTO gear VALUES('54','Lantern (Bull''s-Eye)','0','1','1','1','1','290','A lantern sheds bright light and requires 1 pint of oil to function for 6 hours. \n\n A bull''s-eye lantern emits its light in a 60-foot cone (and dim light in the next 60 feet).');
INSERT INTO gear VALUES('55','Mirror','0','1','0','1','1','288','');
INSERT INTO gear VALUES('56','Religious Text','0','1','0.1','1','1','291','This manuscript contains scripture of a particular religion. Some divine spellcasters, such as clerics, can use a religious text as a divine focus to use certain abilities and cast some spells. A religious text must be held in one hand to use it.');
INSERT INTO gear VALUES('57','Spellbook (Blank)','0','1','1','1','1','291','A spellbook holds the written knowledge necessary to learn and prepare various spells, a necessity for wizards (who typically get one for free) and a useful luxury for other spellcasters looking to learn additional spells. Each spellbook can hold up to 100 spells. The Price listed is for a blank spellbook.');
INSERT INTO gear VALUES('58','Tool (Long)','0','1','1','2','1','292','This entry is a catchall for basic hand tools that don''t have a specific adventuring purpose. A hoe, shovel, or sledgehammer is a long tool, and a hand drill, ice hook, or trowel is a short tool. A tool can usually be used as an improvised weapon, dealing 1d4 damage for a short tool or 1d6 for a long tool. The GM determines the damage type that''s appropriate or adjusts the damage if needed.');
INSERT INTO gear VALUES('59','Writing Set','0','1','0.1','2','1','292','Using a writing set, you can draft correspondence and scribe scrolls. A set includes stationery, including a variety of paper and parchment, as well as ink, a quill or inkpen, sealing wax, and a simple seal. If you''ve written a large amount, you can refill your kit with extra ink and paper.Writing SetItem 0Source Core Rulebook pg. 292Price 1 gpHands 2; Bulk LWriting Set (Extra Ink and Paper)Item 0Source Core Rulebook pg. 292Price 1 sp');
INSERT INTO gear VALUES('60','Clothing (Fine)','0','2','0.1','','1','287','Fine clothing, suitable for a noble or royal, is made with expensive fabrics, precious metals, and intricate patterns.');
INSERT INTO gear VALUES('61','Disguise Kit','0','2','0.1','2','1','290','This small wooden box contains cosmetics, false facial hair, spirit gum, and a few simple wigs. You usually need a disguise kit to set up a disguise in order to Impersonate someone using the Deception skill. An elite disguise kit adds a +1 item bonus to relevant checks. If you''ve crafted a large number of disguises, you can replenish your cosmetics supply with replacement cosmetics suitable for the type of your disguise kit.');
INSERT INTO gear VALUES('62','Musical Instrument (Heavy)','0','2','16','2','1','290','Handheld instruments include bagpipes, a small set of chimes, small drums, fiddles and viols, flutes and recorders, small harps, lutes, trumpets, and similarly sized instruments. The GM might rule that an especially large handheld instrument (like a tuba) has greater Bulk. Heavy instruments such as large drums, a full set of chimes, and keyboard instruments are less portable and generally need to be stationary while played.');
INSERT INTO gear VALUES('63','Religious Symbol (Silver)','0','2','0.1','1','1','291','This piece of wood or silver is emblazoned with an image representing a deity. Some divine spellcasters, such as clerics, can use a religious symbol of their deity as a divine focus to use certain abilities and cast some spells. A religious symbol must be held in one hand to use it.');
INSERT INTO gear VALUES('64','Repair Kit','0','2','1','2','1','291','A repair kit allows you to perform simple repairs while traveling. It contains a portable anvil, tongs, woodworking tools, a whetstone, and oils for conditioning leather and wood. You can use a repair kit to Repair items using the Crafting skill.');
INSERT INTO gear VALUES('65','Hourglass','0','3','0.1','1','1','288','');
INSERT INTO gear VALUES('66','Thieves'' Tools','0','3','0.1','2','1','291','You need thieves'' tools to Pick Locks or Disable Devices (of some types) using the Thievery skill. If your thieves'' tools are broken, you can repair them by replacing the lock picks with replacement picks appropriate to your tools; this doesn''t require using the Repair action.');
INSERT INTO gear VALUES('67','Artisan''s Tools','0','4','2','2','1','289','You need these tools to create items from raw materials with the Craft skill. Different sets are needed for different work, as determined by the GM; for example, blacksmith''s tools differ from woodworker''s tools.');
INSERT INTO gear VALUES('68','Chain','0','4','1','2','1','288','');
INSERT INTO gear VALUES('69','Tack','0','4','1','','1','291','Tack includes all the gear required to outfit a riding animal, including a saddle, bit and bridle, and stirrups if necessary. Especially large or oddly shaped animals might require specialty saddles. These can be more expensive or hard to find, as determined by the GM. The Bulk value given is for tack worn by a creature. If carried, the Bulk increases to 2.');
INSERT INTO gear VALUES('70','Alchemist''s Tools','0','5','2','2','1','287','These beakers and chemicals can be used to set up a mobile alchemical laboratory. When you carry the tools from place to place, you keep many of the components handy on your person, in pockets or bandoliers.');
INSERT INTO gear VALUES('71','Healer''s Tools','0','5','1','2','1','290','This kit of bandages, herbs, and suturing tools is necessary for Medicine checks to Administer First Aid, Treat Disease, Treat Poison, or Treat Wounds. When you carry the tools from place to place, you keep many of the components handy on your person, in pockets or bandoliers.');
INSERT INTO gear VALUES('72','Snare Kit','0','5','2','2','1','291','This kit contains tools and materials for creating snares. A snare kit allows you to Craft snares using the Crafting skill.');
INSERT INTO gear VALUES('73','Tent (Four-Person)','0','5','1','2','1','288','');
INSERT INTO gear VALUES('74','Spyglass','0','20','0.1','2','1','291','A typical spyglass lets you see eight times farther than normal.');
INSERT INTO gear VALUES('75','Magnifying Glass','0','40','0','1','1','290','This quality handheld lens gives you a +1 item bonus to Perception checks to notice minute details of documents, fabric, and the like.');
INSERT INTO gear VALUES('76','Lock (Simple)','1','2','0','2','1','290','Picking a simple lock requires three successful DC 20 Thievery checks.');
INSERT INTO gear VALUES('77','Manacles (Simple)','1','3','0','2','1','290','You can manacle someone who is willing or otherwise at your mercy as an exploration activity taking 10-30 seconds depending on the creature''s size and how many manacles you apply. A two-legged creature with its legs bound takes a 15-foot circumstance penalty to its Speeds, and a two-handed creature with its wrists bound has to succeed at a DC 5 flat check any time it uses a manipulate action or else that action fails. This DC may be higher depending on how tightly the manacles constrain the hands. A creature bound to a stationary object is immobilized. For creatures with more or fewer limbs, the GM determines what effect manacles have, if any. Freeing a creature from simple manacles requires three successes at DC 22.');
INSERT INTO gear VALUES('78','Tent (Pavilion)','2','40','12','2','1','288','');
INSERT INTO gear VALUES('79','Disguise Kit (Elite Cosmetics)','3','0.5','0','','1','290','This small wooden box contains cosmetics, false facial hair, spirit gum, and a few simple wigs. You usually need a disguise kit to set up a disguise in order to Impersonate someone using the Deception skill. An elite disguise kit adds a +1 item bonus to relevant checks. If you''ve crafted a large number of disguises, you can replenish your cosmetics supply with replacement cosmetics suitable for the type of your disguise kit.');
INSERT INTO gear VALUES('80','Thieve''s Tools (Infiltrator Picks)','3','3','0','','1','291','You need thieves'' tools to Pick Locks or Disable Devices (of some types) using the Thievery skill. Infiltrator thieves'' tools add a +1 item bonus to checks to Pick Locks and Disable Devices. If your thieves'' tools are broken, you can repair them by replacing the lock picks with replacement picks appropriate to your tools; this doesn''t require using the Repair action.');
INSERT INTO gear VALUES('81','Scholarly Journal','3','6','0.1','1','1','291','Scholarly journals are uncommon. Each scholarly journal is a folio on a very specific topic, such as vampires or the history of a single town or neighborhood of a city. If you spend 1 minute referencing an academic journal before attempting a skill check to Recall Knowledge about the subject, you gain a +1 item bonus to the check.');
INSERT INTO gear VALUES('82','Survey Map','3','10','0.1','1','1','291','Maps are uncommon. Most maps you can find are simple and functional. A survey map details a single location in excellent detail. One of these maps gives you a +1 item bonus to Survival checks and any skill checks to Recall Knowledge, provided the checks are related to the location detailed on the map.');
INSERT INTO gear VALUES('83','Lock (Average)','3','15','0','2','1','290','Picking an average lock requires four successes at DC 25.');
INSERT INTO gear VALUES('84','Compass (Lensatic)','3','20','0.1','1','1','290','A compass helps you Sense Direction or navigate, provided you''re in a location with uniform magnetic fields. Without a compass, you take a --2 item penalty to these checks (similar to using a shoddy item). A lensatic compass gives you a +1 item bonus to these checks.');
INSERT INTO gear VALUES('85','Crowbar (Levered)','3','20','0.1','2','1','290','When Forcing Open an object that doesn''t have an easy grip, a crowbar makes it easier to gain the necessary leverage. Without a crowbar, prying something open takes a -2 item penalty to the Athletics check to Force Open (similar to using a shoddy item). A levered crowbar grants you a +1 item bonus to Athletics checks to Force Open anything that can be pried open. ');
INSERT INTO gear VALUES('86','Fishing Tackle (Professional)','3','20','1','2','1','290','This kit include a collapsible fishing pole, fishhooks, line, lures, and a fishing net. Professional fishing tackle grants a +1 item bonus to checks to fish.');
INSERT INTO gear VALUES('87','Manacles (Average)','3','20','0','2','1','290','You can manacle someone who is willing or otherwise at your mercy as an exploration activity taking 10--30 seconds depending on the creature''s size and how many manacles you apply. A two-legged creature with its legs bound takes a -15-foot circumstance penalty to its Speeds, and a two-handed creature with its wrists bound has to succeed at a DC 5 flat check any time it uses a manipulate action or else that action fails. This DC may be higher depending on how tightly the manacles constrain the hands. A creature bound to a stationary object is immobilized. For creatures with more or fewer limbs, the GM determines what effect manacles have, if any. Freeing a creature from average manacles require four successes at DC 27.');
INSERT INTO gear VALUES('88','Repair Kit (Superb)','3','25','1','2','1','291','A repair kit allows you to perform simple repairs while traveling. It contains a portable anvil, tongs, woodworking tools, a whetstone, and oils for conditioning leather and wood. You can use a repair kit to Repair items using the Crafting skill. A superb repair kit gives you a +1 item bonus to the check.');
INSERT INTO gear VALUES('89','Scholarly Journal (Compendium)','3','30','0.1','1','1','291','Scholarly journals are uncommon. Each scholarly journal is a folio on a very specific topic, such as vampires or the history of a single town or neighborhood of a city. If you spend 1 minute referencing an academic journal before attempting a skill check to Recall Knowledge about the subject, you gain a +1 item bonus to the check. A compendium of journals costs five times as much as a single journal and requires both hands to use; each compendium contains several journals and grants its bonus on a broader topic, such as all undead or a whole city. The GM determines what scholarly journals are available in any location.');
INSERT INTO gear VALUES('90','Disguise Kit (Elite)','3','40','0.1','','1','290','This small wooden box contains cosmetics, false facial hair, spirit gum, and a few simple wigs. You usually need a disguise kit to set up a disguise in order to Impersonate someone using the Deception skill. An elite disguise kit adds a +1 item bonus to relevant checks. If you''ve crafted a large number of disguises, you can replenish your cosmetics supply with replacement cosmetics suitable for the type of your disguise kit.');
INSERT INTO gear VALUES('91','Artisan''s Tools (Sterling)','3','50','2','2','1','287','You need these tools to create items from raw materials with the Craft skill. Sterling artisan''s tools give you a +1 item bonus to the check. Different sets are needed for different work, as determined by the GM; for example, blacksmith''s tools differ from woodworker''s tools.');
INSERT INTO gear VALUES('92','Healer''s Tools (Expanded)','3','50','1','2','1','290','This kit of bandages, herbs, and suturing tools is necessary for Medicine checks to Administer First Aid, Treat Disease, Treat Poison, or Treat Wounds. Expanded healer''s tools provide a +1 item bonus to such checks. When you carry the tools from place to place, you keep many of the components handy on your person, in pockets or bandoliers.');
INSERT INTO gear VALUES('93','Musical Instrument (Virtuoso Handheld)','3','50','1','2','1','290','Handheld instruments include bagpipes, a small set of chimes, small drums, fiddles and viols, flutes and recorders, small harps, lutes, trumpets, and similarly sized instruments. The GM might rule that an especially large handheld instrument (like a tuba) has greater Bulk. \n\n A virtuoso instrument gives a +1 item bonus to Performance checks using that instrument.');
INSERT INTO gear VALUES('94','Survey Map (Atlas)','3','50','0.1','2','1','291','Maps are uncommon. Most maps you can find are simple and functional. A survey map details a single location in excellent detail. One of these maps gives you a +1 item bonus to Survival checks and any skill checks to Recall Knowledge, provided the checks are related to the location detailed on the map. Maps sometimes come in atlases, containing a number of maps of the same quality, often on similar topics. An atlas costs five times as much as a single map and requires both hands to use. The GM determines what maps are available in any location.');
INSERT INTO gear VALUES('95','Thieve''s Tools (Infiltrator)','3','50','0.1','2','1','291','You need thieves'' tools to Pick Locks or Disable Devices (of some types) using the Thievery skill. Infiltrator thieves'' tools add a +1 item bonus to checks to Pick Locks and Disable Devices. If your thieves'' tools are broken, you can repair them by replacing the lock picks with replacement picks appropriate to your tools; this doesn''t require using the Repair action.');
INSERT INTO gear VALUES('96','Alchemist''s Tools (Expanded)','3','55','2','2','1','287','These beakers and chemicals can be used to set up a mobile alchemical laboratory. Expanded alchemist''s tools give a +1 item bonus to Crafting checks to create alchemical items. When you carry the tools from place to place, you keep many of the components handy on your person, in pockets or bandoliers.');
INSERT INTO gear VALUES('97','Clothing (High-Fashion Fine)','3','55','0.1','','1','287','Fine clothing, suitable for a noble or royal, is made with expensive fabrics, precious metals, and intricate patterns. You gain a +1 item bonus to checks to Make an Impression on nobility or other upper-class folk while wearing high-fashion fine clothing.');
INSERT INTO gear VALUES('98','Snare Kit (Specialist)','3','55','2','2','1','291','This kit contains tools and materials for creating snares. A snare kit allows you to Craft snares using the Crafting skill. A specialist snare kit gives you a +1 item bonus to the check.');
INSERT INTO gear VALUES('99','Musical Instrument (Virtuoso Heavy)','3','100','16','2','1','290','Handheld instruments include bagpipes, a small set of chimes, small drums, fiddles and viols, flutes and recorders, small harps, lutes, trumpets, and similarly sized instruments. The GM might rule that an especially large handheld instrument (like a tuba) has greater Bulk. Heavy instruments such as large drums, a full set of chimes, and keyboard instruments are less portable and generally need to be stationary while played. \n\n A virtuoso instrument gives a +1 item bonus to Performance checks using that instrument. ');
INSERT INTO gear VALUES('100','Spyglass (Fine)','4','80','0.1','2','1','291','A typical spyglass lets you see eight times farther than normal. A fine spyglass adds a +1 item bonus to Perception checks to notice details at a distance.');
INSERT INTO gear VALUES('101','Lock (Good)','9','200','0','2','1','290','Picking a good lock requires five successes at DC 30.');
INSERT INTO gear VALUES('102','Manacles (Good)','9','250','0','2','1','290','You can manacle someone who is willing or otherwise at your mercy as an exploration activity taking 10--30 seconds depending on the creature''s size and how many manacles you apply. A two-legged creature with its legs bound takes a -15-foot circumstance penalty to its Speeds, and a two-handed creature with its wrists bound has to succeed at a DC 5 flat check any time it uses a manipulate action or else that action fails. This DC may be higher depending on how tightly the manacles constrain the hands. A creature bound to a stationary object is immobilized. For creatures with more or fewer limbs, the GM determines what effect manacles have, if any. Freeing a creature from good manacles require five successes at DC 32.');
INSERT INTO gear VALUES('103','Lock (Superior)','17','4500','0','2','1','290','Picking a superior lock six successes at DC 40.');
INSERT INTO gear VALUES('104','Manacles (Superior)','17','5000','0','2','1','290','You can manacle someone who is willing or otherwise at your mercy as an exploration activity taking 10--30 seconds depending on the creature''s size and how many manacles you apply. A two-legged creature with its legs bound takes a -15-foot circumstance penalty to its Speeds, and a two-handed creature with its wrists bound has to succeed at a DC 5 flat check any time it uses a manipulate action or else that action fails. This DC may be higher depending on how tightly the manacles constrain the hands. A creature bound to a stationary object is immobilized. For creatures with more or fewer limbs, the GM determines what effect manacles have, if any. Freeing a creature from superior manacles require six successes at DC 42.');
COMMIT;
BEGIN TRANSACTION;
INSERT INTO gear_traits (gear_id, trait_id) VALUES (81,203); -- Scholarly Journal -> Uncommon
INSERT INTO gear_traits (gear_id, trait_id) VALUES (82,203); -- Survey Map -> Uncommon
INSERT INTO gear_traits (gear_id, trait_id) VALUES (89,203); -- Scholarly Journal (Compendium) -> Uncommon
INSERT INTO gear_traits (gear_id, trait_id) VALUES (94,203); -- Survey Map (Atlas) -> Uncommon
COMMIT;
-61
View File
@@ -1,61 +0,0 @@
:: Delete previous db-file
del pf2.db
:: Loading schema
sqlite3 pf2.db < schema/sources.sql
sqlite3 pf2.db < schema/alignments.sql
sqlite3 pf2.db < schema/skills.sql
sqlite3 pf2.db < schema/movements.sql
sqlite3 pf2.db < schema/damagetypes.sql
sqlite3 pf2.db < schema/conditions.sql
sqlite3 pf2.db < schema/backgrounds.sql
sqlite3 pf2.db < schema/abilityscores.sql
sqlite3 pf2.db < schema/bulks.sql
sqlite3 pf2.db < schema/sizes.sql
sqlite3 pf2.db < schema/langs.sql
sqlite3 pf2.db < schema/traits.sql
sqlite3 pf2.db < schema/actions.sql
sqlite3 pf2.db < schema/spells.sql
sqlite3 pf2.db < schema/frequency.sql
sqlite3 pf2.db < schema/requirements.sql
sqlite3 pf2.db < schema/triggers.sql
sqlite3 pf2.db < schema/feats.sql
sqlite3 pf2.db < schema/senses.sql
sqlite3 pf2.db < schema/ancestries.sql
sqlite3 pf2.db < schema/armor.sql
sqlite3 pf2.db < schema/gear.sql
sqlite3 pf2.db < schema/weapons.sql
sqlite3 pf2.db < schema/ammunition.sql
:: Loading data
sqlite3 pf2.db < data/sources.sql
sqlite3 pf2.db < data/alignments.sql
sqlite3 pf2.db < data/skills.sql
sqlite3 pf2.db < data/movements.sql
sqlite3 pf2.db < data/damagetypes.sql
sqlite3 pf2.db < data/conditions.sql
sqlite3 pf2.db < data/backgrounds.sql
sqlite3 pf2.db < data/abilityscores.sql
sqlite3 pf2.db < data/bulks.sql
sqlite3 pf2.db < data/senses.sql
sqlite3 pf2.db < data/sizes.sql
sqlite3 pf2.db < data/langs.sql
sqlite3 pf2.db < data/traits.sql
sqlite3 pf2.db < data/actions.sql
sqlite3 pf2.db < data/spells.sql
sqlite3 pf2.db < data/frequency.sql
sqlite3 pf2.db < data/requirements.sql
sqlite3 pf2.db < data/triggers.sql
sqlite3 pf2.db < data/feats.sql
sqlite3 pf2.db < data/ancestries.sql
sqlite3 pf2.db < data/armor.sql
sqlite3 pf2.db < data/gear.sql
sqlite3 pf2.db < data/heritages.sql
sqlite3 pf2.db < data/weapons.sql
sqlite3 pf2.db < data/ammunition.sql
cd data/third_party_json
python spells.py
cd ../..
:: Wait for keypress
pause
-70
View File
@@ -1,70 +0,0 @@
# UNCOMMENT FOR DEBUGGING #!/bin/sh -v
rm pf2.db
echo 'loading schema'
sqlite3 pf2.db < schema/sources.sql
sqlite3 pf2.db < schema/alignments.sql
sqlite3 pf2.db < schema/skills.sql
sqlite3 pf2.db < schema/movements.sql
sqlite3 pf2.db < schema/damagetypes.sql
sqlite3 pf2.db < schema/conditions.sql
sqlite3 pf2.db < schema/backgrounds.sql
sqlite3 pf2.db < schema/abilityscores.sql
sqlite3 pf2.db < schema/bulks.sql
sqlite3 pf2.db < schema/sizes.sql
sqlite3 pf2.db < schema/langs.sql
sqlite3 pf2.db < schema/traits.sql
sqlite3 pf2.db < schema/actions.sql
sqlite3 pf2.db < schema/spells.sql
sqlite3 pf2.db < schema/frequency.sql
sqlite3 pf2.db < schema/requirements.sql
sqlite3 pf2.db < schema/triggers.sql
sqlite3 pf2.db < schema/feats.sql
sqlite3 pf2.db < schema/senses.sql
sqlite3 pf2.db < schema/ancestries.sql
sqlite3 pf2.db < schema/armor.sql
sqlite3 pf2.db < schema/gear.sql
sqlite3 pf2.db < schema/weapons.sql
sqlite3 pf2.db < schema/ammunition.sql
sqlite3 pf2.db < schema/monsters.sql
sqlite3 pf2.db < schema/staves.sql
echo 'loading data'
sqlite3 pf2.db < data/sources.sql
sqlite3 pf2.db < data/alignments.sql
sqlite3 pf2.db < data/skills.sql
sqlite3 pf2.db < data/movements.sql
sqlite3 pf2.db < data/damagetypes.sql
sqlite3 pf2.db < data/conditions.sql
sqlite3 pf2.db < data/backgrounds.sql
sqlite3 pf2.db < data/abilityscores.sql
sqlite3 pf2.db < data/bulks.sql
sqlite3 pf2.db < data/senses.sql
sqlite3 pf2.db < data/sizes.sql
sqlite3 pf2.db < data/langs.sql
sqlite3 pf2.db < data/traits.sql
sqlite3 pf2.db < data/actions.sql
sqlite3 pf2.db < data/spells.sql
sqlite3 pf2.db < data/frequency.sql
sqlite3 pf2.db < data/requirements.sql
sqlite3 pf2.db < data/triggers.sql
sqlite3 pf2.db < data/feats.sql
sqlite3 pf2.db < data/ancestries.sql
sqlite3 pf2.db < data/armor.sql
sqlite3 pf2.db < data/gear.sql
sqlite3 pf2.db < data/heritages.sql
sqlite3 pf2.db < data/weapons.sql
sqlite3 pf2.db < data/ammunition.sql
sqlite3 pf2.db < data/monsters.sql
# Comment out the following three lines if you don't want to generate the spell data.
cd data/third_party_json
python3 spells.py
cd ../..
# Staves need to be added after spells due to Foreign Key constraint
sqlite3 pf2.db < data/staves.sql
# TODO Eventually we will stop relying on the spells.py script and I will have
# the actual .sql files for the spell data; I am waiting to see if the
# third-party source improves the data in the next few weeks. If not, we'll
# "divorce" from that data, dump to .sql, and manually manipulate going
# forward.
-107
View File
@@ -1,107 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
/* TODO figure out how to model the reaction with heritages */
/* TODO how to add in vision for Half-elf Heritage? */
/* TODO maybe make vision trigger off of heritages instead of ancestries? Trying
not to repeat the vision data, but might just have to. It's not like it's
massive. */
/* TODO decide on how to represent paragraph breaks. See Issue #18 */
INSERT INTO heritages
(heritage_id,
short_name,
description,
bonus_type,
bonus_id)
VALUES
-- Start of Dwarf Heritages
(1, 'Ancient-Blooded Dwarf', 'Dwarven heroes of old could shrug off their enemies'' magic, and some of that resistance manifests in you. You gain the Call on Ancient Blood reaction.', 'Reaction', 1),
(2, 'Death Warden Dwarf', 'Your ancestors have been tomb guardians for generations, and the power they cultivated to ward off necromancy has passed on to you. If you roll a success on a saving throw against a necromancy effect, you get a critical success instead.', 0, 0),
(3, 'Forge Dwarf', 'You have a remarkable adaptation to hot environments from ancestors who inhabited blazing deserts or volcanic chambers beneath the earth. This grants you fire resistance equal to half your level (minimum 1), and you treat environmental heat effects as if they were one step less extreme (incredible heat becomes extreme, extreme heat becomes severe, and so on).', 0, 0),
(4, 'Rock Dwarf', 'Your ancestors lived and worked among the great ancient stones of the mountains or the depths of the earth. This makes you solid as a rock when you plant your feet. You gain a +2 circumstance bonus to your Fortitude or Reflex DC against attempts to Shove or Trip you. This bonus also applies to saving throws against spells or effects that attempt to knock you prone.', 0, 0),
(5, 'Strong-Blooded Dwarf', 'Your blood runs hearty and strong, and you can shake off toxins. You gain poison resistance equal to half your level (minimum 1), and each of your successful saving throws against a poison affliction reduces its stage by 2, or by 1 for a virulent poison. Each critical success against an ongoing poison reduces its stage by 3, or by 2 for a virulent poison.', 0, 0),
-- Start of Elf Heritages
(100, 'Arctic Elf', 'You dwell deep in the frozen north and have gained incredible resilience against cold environments, granting you cold resistance equal to half your level (minimum 1). You treat environmental cold effects as if they were one step less extreme (incredible cold becomes extreme, extreme cold becomes severe, and so on).', 0, 0),
(101, 'Cavern Elf', 'You were born or spent many years in underground tunnels or caverns where light is scarce. You gain darkvision.', 0, 0),
(102, 'Seer Elf', 'You have an inborn ability to detect and understand magical phenomena. You can cast the detect magic cantrip as an arcane innate spell at will. A cantrip is heightened to a spell level equal to half your level rounded up. In addition, you gain a +1 circumstance bonus to checks to Identify Magic and to Decipher Writing of a magical nature. These skill actions typically use the Arcana, Nature, Occultism, or Religion skill.', 0, 0),
(103, 'Whisper Elf', 'Your ears are finely tuned, able to detect even the slightest whispers of sound. As long as you can hear normally, you can use the Seek action to sense undetected creatures in a 60-foot cone instead of a 30-foot cone. You also gain a +2 circumstance bonus to locate undetected creatures that you could hear within 30 feet with a Seek action.', 0, 0),
(104, 'Woodland Elf', 'You’re adapted to life in the forest or the deep jungle, and you know how to climb trees and use foliage to your advantage. When Climbing trees, vines, and other foliage, you move at half your Speed on a success and at full Speed on a critical success (and you move at full Speed on a success if you have Quick Climb). This doesn’t affect you if you’re using a climb Speed.', 0, 0),
-- Start of Gnome Heritages
(200, 'Chameleon Gnome', 'The color of your hair and skin is mutable, possibly due to latent magic. You can slowly change the vibrancy and the exact color, and the coloration can be different across your body, allowing you to create patterns or other colorful designs. It takes a single action for minor localized shifts and up to an hour for dramatic shifts throughout your body. While you’re asleep, the colors shift on their own in tune with your dreams, giving you an unusual coloration each morning. When you’re in an area where your coloration is roughly similar to the environment (for instance, forest green in a forest), you can use the single action to make minor localized shifts designed to help you blend into your surroundings. This grants you a +2 circumstance bonus to Stealth checks until your surroundings shift in coloration or pattern.', 0, 0),
(201, 'Fey-Touched Gnome', 'The blood of the fey is so strong within you that you’re truly one of them. You gain the fey trait, in addition to the gnome and humanoid traits. Choose one cantrip from the <%SPELL.LIST%Primal%%>primal spell list. You can cast this spell as a primal innate spell at will. A cantrip is heightened to a spell level equal to half your level rounded up. You can change this cantrip to a different one from the same list once per day by meditating to realign yourself with the First World; this is a 10-minute activity that has the concentrate trait.', 0, 0),
(202, 'Sensate Gnome', 'You see all colors as brighter, hear all sounds as richer, and especially smell all scents with incredible detail. You gain a special sense: imprecise scent with a range of 30 feet. This means you can use your sense of smell to determine the exact location of a creature (as explained on page 465). The GM will usually double the range if you’re downwind from the creature or halve the range if you’re upwind.', 0, 0),
(204, 'Umbral Gnome', 'Whether from a connection to dark or shadowy fey, from the underground deep gnomes also known as svirfneblin, or another source, you can see in complete darkness. You gain darkvision.', 0, 0),
(205, 'Wellspring Gnome', 'Some other source of magic has a greater hold on you than the primal magic of your fey lineage does. This connection might come from an occult plane or an ancient occult song; a deity, celestial, or fiend; magical effluent left behind by a mage war; or ancient rune magic.', 0, 0), -- TODO there was an error with wellspring gnome being ID 204; need to double check other data to make sure it has been accounted for elsewhere
-- Start of Goblin Heritages
(300, 'Charhide Goblin', 'Your ancestors have always had a connection to fire and a thicker skin, which allows you to resist burning. You gain fire resistance equal to half your level (minimum 1). You can also recover from being on fire more easily. Your flat check to remove persistent fire damage is DC 10 instead of DC 15, which is reduced to DC 5 if another creature uses a particularly appropriate action to help.', 0, 0),
(301, 'Irongut Goblin', 'You can subsist on food that most folks would consider spoiled. You can keep yourself fed with poor meals in a settlement as long as garbage is readily available, without using the Subsist downtime activity. You can eat and drink things when you are sickened.', 0, 0),
(302, 'Razortooth Goblin', 'Your family’s teeth are formidable weapons. You gain a jaws unarmed attack that deals 1d6 piercing damage. Your jaws are in the brawling group and have the finesse and unarmed traits.', 0, 0),
(303, 'Snow Goblin', 'You are acclimated to living in frigid lands and have skin ranging from sky blue to navy in color, as well as blue fur. You gain cold resistance equal to half your level (minimum 1). You treat environmental cold effects as if they were one step less extreme (incredible cold becomes extreme, extreme cold becomes severe, and so on).', 0, 0),
(304, 'Unbreakable Goblin', 'You’re able to bounce back from injuries easily due to an exceptionally thick skull, cartilaginous bones, or some other mixed blessing. You gain 10 Hit Points from your ancestry instead of 6. When you fall, reduce the falling damage you take as though you had fallen half the distance.', 0, 0),
-- Start of Halfling Heritages
(400, 'Gutsy Halfling', 'Your family line is known for keeping a level head and staving off fear when the chips were down, making them wise leaders and sometimes even heroes. When you roll a success on a saving throw against an emotion effect, you get a critical success instead.', 0, 0),
(401, 'Hillock Halfling', 'Accustomed to a calm life in the hills, your people find rest and relaxation especially replenishing, particularly when indulging in creature comforts. When you regain Hit Points overnight, add your level to the Hit Points regained. When anyone uses the Medicine skill to Treat your Wounds, you can eat a snack to add your level to the Hit Points you regain from their treatment.', 0, 0),
(402, 'Nomadic Halfling', 'Your ancestors have traveled from place to place for generations, never content to settle down. You gain two additional languages of your choice, chosen from among the common and uncommon languages available to you, and every time you take the ', 0, 0),
(403, 'Twilight Halfling', 'Your ancestors performed many secret acts under the concealing cover of dusk, whether for good or ill, and over time they developed the ability to see in twilight beyond even the usual keen sight of halflings. You gain low-light vision.', 0, 0),
(404, 'Wildwood Halfling', 'You hail from deep in a jungle or forest, and you’ve learned how to use your small size to wriggle through undergrowth, vines, and other obstacles. You ignore difficult terrain from trees, foliage, and undergrowth.', 0, 0),
-- Start of Human Heritages
(500, 'Half-Elf', 'Either one of your parents was an elf, or one or both were half-elves. You have pointed ears and other telltale signs of elf heritage. You gain the elf trait and low-light vision. In addition, you can select elf, half-elf, and human feats whenever you gain an ancestry feat.', 0, 0),
(501, 'Half-Orc', 'One of your parents was an orc, or one or both were half-orcs. You have a green tinge to your skin and other indicators of orc heritage. You gain the orc trait and low-light vision. In addition, you can select orc, half-orc, and human feats whenever you gain an ancestry feat.', 0, 0),
(502, 'Skilled Heritage', 'Your ingenuity allows you to train in a wide variety of skills. You become trained in one skill of your choice. At 5th level, you become an expert in the chosen skill.', 0, 0),
(503, 'Versatile Heritage', 'Humanity’s versatility and ambition have fueled its ascendance to be the most common ancestry in most nations throughout the world. Select a general feat of your choice for which you meet the prerequisites (as with your ancestry feat, you can select this general feat at any point during character creation).', 0, 0);
INSERT INTO ancestries_heritages (ancestry_id, heritage_id)
VALUES
-- Dwarf
(1, 1),
(1, 2),
(1, 3),
(1, 4),
(1, 5),
-- Elf
(2, 100),
(2, 101),
(2, 102),
(2, 103),
(2, 104),
-- Gnome
(3, 200),
(3, 201),
(3, 202),
-- (3, 203), TODO there was no #203 in Gnomes; need to see what's going on
(3, 204),
(3, 205),
-- Goblin
(4, 300),
(4, 301),
(4, 302),
(4, 303),
(4, 304),
-- Halfling
(5, 400),
(5, 401),
(5, 402),
(5, 403),
(5, 404),
-- Human
(6, 500),
(6, 501),
(6, 502),
(6, 503),
-- Half-elf and half orc (yes, we know they're technically only a heritage,
-- but we link it up to ancestry ids too)
(7, 500),
(8, 501);
-46
View File
@@ -1,46 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO langsrarity (rarity_id, rarity_name)
VALUES
(1, 'Common'),
(2, 'Uncommon'),
(3, 'Secret');
-- These values are from Tables 2-1, 2-2, and 2-3 on page 65 CRB
INSERT INTO langs (lang_id, rarity_id, sources_id, sources_pages, lang, speakers)
VALUES
-- Common languages
(1, 1, 1, '65', 'Common', 'Humans, dwarves, elves, halflings, and other common ancestries'),
(2, 1, 1, '65', 'Draconic', 'Dragons, reptilian humanoids'),
(3, 1, 1, '65', 'Dwarven', 'Dwarves'),
(4, 1, 1, '65', 'Elven', 'Elves, half-elves'),
(5, 1, 1, '65', 'Gnomish', 'Gnomes'),
(6, 1, 1, '65', 'Goblin', 'Goblins, hobgoblins, bugbears'),
(7, 1, 1, '65', 'Halfling', 'Halflings'),
(8, 1, 1, '65', 'Jotun', 'Giants, ogres, trolls, ettins, cyclopes'),
(9, 1, 1, '65', 'Orcish', 'Orcs, half-orcs'),
(10, 1,1, '65', 'Sylvan', 'Fey, centaurs, plant creatures'),
(11, 1,1, '65', 'Undercommon', 'Drow, duergars, xulgaths'),
-- Uncommon languages
(100, 2, 1, '65', 'Abyssal', 'Demons'),
(101, 2, 1, '65', 'Aklo', 'Deros, evil fey, otherworldly monsters'),
(102, 2, 1, '65', 'Aquan', 'Aquatic creatures, water elemental creatures'),
(103, 2, 1, '65', 'Auran', 'Air elemental creatures, flying creatures'),
(104, 2, 1, '65', 'Celestial', 'Angels'),
(105, 2, 1, '65', 'Gnoll', 'Gnolls'),
(106, 2, 1, '65', 'Ignan', 'Fire elemental creatures'),
(107, 2, 1, '65', 'Infernal', 'Devils'),
(108, 2, 1, '65', 'Necril', 'Ghouls, intelligent undead'),
(109, 2, 1, '65', 'Shadowtongue', 'Nidalese, Shadow Plane creatures'),
(110, 2, 1, '65', 'Terran', 'Earth elemental creatures'),
-- Secret languages
(200, 3, 1, '65', 'Druidic', 'Druids'),
-- Bestiary Languages not in CRB
(300, 1, 2, '8', 'Utopian', 'Aeons');
-42
View File
@@ -1,42 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
BEGIN TRANSACTION;
INSERT INTO monsterflavortexttypes VALUES(1, 'Monster Category');
INSERT INTO monsterflavortexttypes VALUES(2, 'Advice and Rules');
INSERT INTO monsterflavortexttypes VALUES(3, 'Related Creatures');
INSERT INTO monsterflavortexttypes VALUES(4, 'Additional Lore');
INSERT INTO monsterflavortexttypes VALUES(5, 'Treasure and Rewards');
INSERT INTO monsterflavortexttypes VALUES(6, 'Locations');
COMMIT;
BEGIN TRANSACTION;
INSERT INTO monsterflavortexts VALUES(1, 1, 'Aeon', 'Aeons have always been the caretakers of reality and defenders of the natural order of balance. Each type of aeon takes on some form of duality in its manifestation and works either to shape the multiverse within the aspects of this duality in some way, or to correct imbalances to the perfect order of existence. Aeons can bring weal or woe when they appear in a region, and their machinations can raise a nation, raze it, or restore it from ruin. Their reasons are their own, and they rarely share their motivations with others— they simply create the results they insist through their strange envisioning communication are necessary to maintain the balance of the multiverse.\n\nAs a result of recent shifts in reality, aeons have begun to reassert a presence in the perfect planar city of Axis. To the aeons, this is merely the latest in a recurring cycle, albeit one that mortals have not yet borne witness to. Once regarded as an independent faction, the living machines known as inevitables are now revealed as having been agents of the aeons all along, and while inevitables have their own shared themes and features, they are very much living but constructed manifestations of the aeons’ war against imbalance—particularly with regard to how this war is waged against the forces of chaos.\n\nAeons have a name for this cyclic return, in which they welcome the industrious axiomites back to their fold and bring the inevitables once again under their control: the “Convergence.” At the onset of the Convergence, a council of pleroma aeons appeared in the Eternal City of Axis, where they revealed that axiomites were wayward aeons, split off long ago to pursue the act of creation. With the latest cycle of change it was time for the axiomites and their creations, the inevitables, to rejoin the aeon cause. While most axiomites and inevitables fell in line, realizing perhaps on a fundamental level of reality that what the aeons said was the truth, some refused to heed the call and waited for the wrath of the aeons — but that wrath has yet to come. The dual-natured aeons have responded to those who have declined in confusing ways. With some they treat and even bargain, while a handful of others they have destroyed, and a few have been exterminated by the axiomites and allied inevitables. But most of these quiet insurgents they leave alone, allowing these axiomites to continue to create in peace and the inevitables to continue with their duties. How—or if—this Convergence will end is as little understood as the aeons themselves.');
INSERT INTO monsterflavortexts VALUES(2, 4, 'Aeon Divinities', 'Whether the aeons serve an actual divinity, a philosophical concept, or merely a "supreme oneness" is a topic hotly debated by planar scholars. The aeons themselves are silent, referring to the being or concept as the Monad, a "condition of all." Regardless of what the Monad actually is, there certainly exists another category of powerful aeons---the primal inevitables, each a unique demigod with its own powers and goals. Relatively few primal inevitables remain today, for nearly three-quarters of their irreplaceable kind have fallen in the endless battle with the inexorable forces of entropy.');
COMMIT;
BEGIN TRANSACTION;
-- ARBITER
-- TODO +1 status to all saves versus magic?
INSERT INTO monsters VALUES(1, 0, 1, 'Arbiter', 1, 4, 7, 1, 16, 5, 7, 7, 22, 20, NULL, NULL, 40, NULL, 1, 4, 2, 0, 2, 1, 'These spherical inevitables are scouts and diplomats. Found throughout the multiverse, they have traditionally kept watch over on chaos and its agents. With the announcement of the Convergence, many arbiters now serve as go-betweens among the aeon alliance and its mortal associates.');
INSERT INTO monsters_monsterflavortexts (monster_id, monsterflavortext_id) VALUES(1, 1);
INSERT INTO monsters_monsterflavortexts (monster_id, monsterflavortext_id) VALUES(1, 2);
INSERT INTO monsters_senses (monster_id, sense_id) VALUES(1, 1); -- dark vision
INSERT INTO monsters_senses (monster_id, sense_id) VALUES(1, 100); -- detect alignment chaotic
INSERT INTO monsters_senses (monster_id, sense_id) VALUES(1, 101); -- locate inevitable
INSERT INTO monsters_langs (monster_id, lang_id) VALUES(1, 1); -- Common
INSERT INTO monsters_langs (monster_id, lang_id) VALUES(1, 104); -- Celestial
INSERT INTO monsters_langs (monster_id, lang_id) VALUES(1, 107); -- Infernal
INSERT INTO monsters_langs (monster_id, lang_id) VALUES(1, 300); -- Utopian
-- TODO immunities
-- TODO weaknesses
-- TODO resistances
-- TODO skills
-- TODO actions
-- TODO items?
COMMIT;
-13
View File
@@ -1,13 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
-- TODO any other movements?
BEGIN TRANSACTION;
INSERT INTO movements VALUES(0, 'Land');
INSERT INTO movements VALUES(1, 'Burrow');
INSERT INTO movements VALUES(2, 'Climb');
INSERT INTO movements VALUES(3, 'Fly');
INSERT INTO movements VALUES(4, 'Swim');
COMMIT;
-74
View File
@@ -1,74 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO requirements (
requirements_id,
requirements_descr
)
VALUES
(1, 'You are holding an infused alchemical bomb you crafted, with a level at least 3 lower than your advanced alchemy level.'),
(2, 'You haven’t used this ability since you last Raged.'),
(3, 'You are Medium or smaller.'),
(4, 'You have a foe grabbed.'),
(5, 'Your last action was a successful Strike.'),
(6, 'Your last action was a successful Strike, and either you have a hand free or your Strike used a grapple weapon.'),
(7, 'You are unarmored or wearing light armor.'),
(8, 'You’re under the effect of Come and Get Me.'),
(9, 'You haven’t acted yet on your turn.'),
(10, 'You are wielding a shield.'),
(11, 'Fiendsbane Oath'), -- May be errated to a requirement. Marking it incase to find easier.
(12, 'Shining Oath'), -- May be errated to a requirement. Marking it incase to find easier.
(13, 'exalt and Vengeful Oath'),
(14, 'Dragonslayer Oath'),
(15, 'You have a banishment spell prepared.'),
(16, 'You have at least 1 available Focus Point.'),
(17, 'You are wielding two melee weapons, each in a different hand.'),
(18, 'You are wielding a ranged weapon.'),
(19, 'You have one hand free, and your target is within reach of that hand.'),
(20, 'You are wielding a two-handed melee weapon.'),
(21, 'You are wielding only a single one-handed melee weapon and have your other hand or hands free.'),
(22, 'You are wielding a melee weapon.'),
(23, 'You are wielding a ranged weapon with reload 0.'),
(24, 'You are wielding a one-handed melee weapon and have a free hand.'),
(25, 'You are flanked by at least two enemies.'),
(26, 'You are wielding two melee weapons, one in each hand.'),
(27, 'You are wielding a single one-handed melee weapon and have your other hand or hands free.'),
(28, 'You are wielding a melee weapon that deals piercing damage.'),
(29, 'A frightened creature is in your melee reach.'),
(30, 'You are benefiting from Dueling Parry.'),
(31, 'You are wielding a two-handed melee weapon and your target is within your reach.'),
(32, 'You have a shield raised.'),
(33, 'You are wielding a melee weapon in two hands.'),
(34, 'You are adjacent to an enemy.'),
(35, 'You meet the requirements to use an action with the press trait.'),
(36, 'You are wielding two weapons, each in a different hand.'),
(37, 'You are wielding a ranged weapon with the volley trait and reload 0.'),
(38, 'You are unarmored.'),
(39, 'You are unarmored and touching the ground.'),
(40, 'You’re aware of the attack, are not flat-footed against it, and have a hand free.'),
(41, 'You are in Crrane Stance.'),
(42, 'You are in Dragon Stance.'),
(43, 'You are in Mountain Stance.'),
(44, 'You are in Tiger Stance.'),
(45, 'You have a creature grabbed or restrained.'),
(46, 'You are in Wolf Stance.'),
(47, 'You are in Ironblood Stance.'),
(48, 'You are in Tangled Forest Stance.'),
(49, 'You are in Wild Winds Stance.'),
(50, 'This is the first action of your turn.'),
(51, 'You are not armored or fatigued.'),
(52, 'You are benefiting from Twin Parry.'),
(53, 'You are wielding a loaded ranged weapon with reload 1 or more, and you have not reloaded your weapon since your last turn.'),
(54, 'You are not encumbered.'),
(55, 'You are wielding a piercing or slashing weapon and have a free hand.'),
(56, 'You have a free hand.'),
(57, 'Your last action was a melee Strike that dealt sneak attack damage to a flat-footed target.'),
(58, 'You are currently affected by a mental effect that you gained by failing, but not critically failing, a saving throw.'),
(59, 'You are adjacent to a floor or vertical wall.'),
(60, 'When you make your daily preparations, you must specify a trigger for this reaction using the same restrictions as the triggers for the Ready action. You also choose a single spell from the arcane, divine, occult, or primal list of 4th level or lower. The spell can’t have a cost, nor can its casting time be more than 10 minutes. The spell must be able to target a single creature, and you must be a valid target for it.'),
(61, 'You have Perfect Distraction ready to use.'),
(62, 'You have an unexpended spell slot you could use to cast the triggered spell.'),
(63, 'Your most recent action was to cast a non-cantrip spell.'),
(64, 'The last action you used was Drain Bonded Item.');
-53
View File
@@ -1,53 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
/* TODO add in any different vision types from Bestiary / Monsters */
/* TODO smoke vision is from young-red dragon */
INSERT INTO senses (senses_id,
sources_id,
sources_pages,
short_name,
description)
VALUES
(1, 1, '465', 'Darkvision', 'A creature with darkvision or greater darkvision can see perfectly well in areas of darkness and dim light, though such vision is in black and white only. Some forms of magical darkness, such as a 4th-level *darkness* spell, block normal darkvision. A creature with greater darkvision, however, can see through even these forms of magical darkness.'),
(2, 1, '465', 'Low-Light Vision', 'You can see in dim light as though it were bright light, and you ignore the concealed condition due to dim light.'),
(3, 1, '51', 'Keen Eyes', 'Your eyes are sharp, allowing you to make out small details about concealed or even invisible creatures that others might miss. You gain a +2 circumstance bonus when using the Seek action to find hidden or undetected creatures within 30 feet of you. When you target an opponent that is concealed from you or hidden from you, reduce the DC of the flat check to 3 for a concealed target or 9 for a hidden one.'),
(4, 1, 'TODO', 'None', 'No special vision.'),
(5, 1, 'TODO', 'Smoke Vision', 'You can see perfectly in smoky conditions'),
(6, 2, '342', 'All-Around Vision','This monster can see in all directions simultaneously, and therefore can’t be flanked.'),
(7, 1, 'TODO', 'Snow Vision','This creature can see perfectly well in snowy conditions. this creature does not suffer any penalties to Perception checks while in snow.'),
(8, 1, 'TODO', 'Manifold Vision','TODO (can not find any definition ref:https://2e.aonprd.com/Monsters.aspx?ID=249)'),
(9, 1, '465', 'Greater Darkvision','A creature with darkvision or greater darkvision can see perfectly well in areas of darkness and dim light, though such vision is in black and white only. Some forms of magical darkness, such as a 4th-level *darkness* spell, block normal darkvision. A creature with greater darkvision, however, can see through even these forms of magical darkness.'),
(10, 1, '465', 'Scent','TODO Bestiary 1 pg 344'),
(11, 1, 'TODO', 'Echolocation','You can perceive the world by creating high-pitched noises and listening to their echoes. This gives you blindsight to a range of 40 feet.'),
(12, 1, '465', 'Tremorsense','TODO CRB 465 or Bestiary 344'),
(13, 1, 'TODO', 'Lightblindness','Creatures with light blindness are blinded for 1 round if exposed to bright light, such as sunlight or the Daylight spell. Such creatures are dazzled as long as they remain in areas of bright light.'),
(14, 1, 'TODO', 'Thoughtsense','You automatically detect and locate conscious creatures within 60 feet, as if you possessed the blindsight ability.'),
(15, 1, 'TODO', 'Bloodscent','This creature has the scent universal monster ability, but only for purposes of detecting and pinpointing injured creatures (below full hit points). Creatures below half their full hit points or suffering bleed damage are considered strong scents for this ability.'),
(16, 1, 'TODO', 'Lifesense','TODO Bestiary 343'),
(17, 1, 'TODO', 'Plaguesense','TODO find definiton for plaguesense. Senses sickness??'),
(18, 1, 'TODO', 'Crystalsense','This creature can sense the presence of any crystals or gems within 30 feet as if using the scent ability.'),
(19, 1, 'TODO', 'Fogvision','This creature can see perfectly in foggy conditions'),
(20, 1, 'TODO', 'Wavesense','This sense allows a monster to feel vibrations caused by movement through a liquid. It’s an imprecise sense with a limited range (listed in the ability). Wavesense functions only if monster and the subject are in the same body of liquid, and only if the subject is moving through the liquid.'), -- this looks correct per bestiary pg 344
(21, 1, 'TODO', 'Sporesight','TODO'),
(22, 1, 'TODO', 'Windsense','This creature senses vibrations in the air.'),
(23, 1, 'TODO', 'Motionsense','TODO'),
(24, 1, 'TODO', 'Metalscent','This creature has the scent universal monster ability but it can smell only metals using it.'),
(25, 1, 'TODO', 'Hungersense','Hungersense allows the gimmerling to sense creatures that require food to live.'),
(26, 1, 'TODO', 'Entropysense','A voidworm can anticipate the most likely presence of a creature through a supernatural insight into chaotic probabilities and chance. This grants it the ability to sense creatures within the listed range. A creature under the effects of nondetection or that is otherwise shielded from divinations and predictions cannot be noticed via entropy sense.'),
(27, 1, 'TODO', 'Websense','TODO'),
(28, 1, 'TODO', 'Heatsight','Heatsight is a precise sense that sees heat signatures.'),
(29, 1, 'TODO', 'Sinscent','This creature has scent against creatures whose nature reflects it''s sin. For example, wrathful sinspawn can scent creatures using rage effects. The GM should adjudicate what creatures a particular sinspawn can scent.'),
-- Minor senses from Bestiary; start at ID 100
(100, 2, '8', 'Detect Alignment (chaotic only)', NULL),
(101, 2, '8', 'Locate Inevitable', NULL);
;
-12
View File
@@ -1,12 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO sizes (size_id, short_name, space_in_ft, reach_tall_ft, reach_long_ft) VALUES
(1,'Tiny',4,0,0),
(2,'Small',5,5,5),
(3,'Medium',5,5,5),
(4,'Large',10,10,5),
(5,'Huge',15,15,10),
(6,'Gargantuan',20,20,15);
-25
View File
@@ -1,25 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON;
-- TODO Need to enter descriptions
BEGIN TRANSACTION;
INSERT INTO skills VALUES(1, 1, '240', 'Acrobatics', 'TODO');
INSERT INTO skills VALUES(2, 1, '241', 'Arcana', 'TODO');
INSERT INTO skills VALUES(3, 1, '241', 'Athletics', 'TODO');
INSERT INTO skills VALUES(4, 1, '243', 'Crafting', 'TODO');
INSERT INTO skills VALUES(5, 1, '245', 'Deception', 'TODO');
INSERT INTO skills VALUES(6, 1, '246', 'Diplomacy', 'TODO');
INSERT INTO skills VALUES(7, 1, '247', 'Intimidation', 'TODO');
INSERT INTO skills VALUES(8, 1, '247', 'Lore', 'TODO'); -- TODO special case
INSERT INTO skills VALUES(9, 1, '248', 'Medicine', 'TODO');
INSERT INTO skills VALUES(10, 1, '249', 'Nature', 'TODO');
INSERT INTO skills VALUES(11, 1, '249', 'Occultism', 'TODO');
INSERT INTO skills VALUES(12, 1, '250', 'Performance', 'TODO');
INSERT INTO skills VALUES(13, 1, '250', 'Religion', 'TODO');
INSERT INTO skills VALUES(14, 1, '250', 'Society', 'TODO');
INSERT INTO skills VALUES(15, 1, '251', 'Stealth', 'TODO');
INSERT INTO skills VALUES(16, 1, '252', 'Survival', 'TODO');
INSERT INTO skills VALUES(17, 1, '253', 'Thievery', 'TODO');
COMMIT;
-68
View File
@@ -1,68 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
/* TODO Decide on how to format the copyright block text... perhaps with Markdown? */
INSERT INTO sources (sources_id,
isbn,
pzocode,
sources_full_name,
sources_short_name,
sources_abbrev,
sources_descr,
release_date,
first_party,
ogl_copyright_block)
VALUES
-- Core Rulebook
(1,
'978-1-64078-168-9',
'PZO2101',
'Pathfinder Core Rulebook (Second Edition)',
'Core Rulebook',
'CRB',
'Volume containing the rules core rules for players and Game Masters',
'2019-08-01',
1,
'Open Game License v.1.0a (c) 2000, Wizards of the Coast, Inc.; System Reference Document (c) 2000, Wizards of the Coast, Inc.; Authors: Jonathan Tweet, Monte Cook, and Skip Williams, based on material by E. Gary Gygax and Dave Arneson. Pathfinder Core Rulebook (Second Edition) (c) 2019, Paizo, Inc.; Designers: Logan Bonner, Jason Bulmahn, Stephen Radney-MacFarland, and Mark Seifter.'),
-- Bestiary 1
(2,
'978-1-64078-170-2',
'PZO2102',
'Pathfinder Bestiary (Second Edition)',
'Bestiary',
'BST1',
'TODO',
'2019-08-01',
1,
'Daemon, Guardian from the Tome of Horrors Complete © 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on original material by Ian McDowall. Dark Creeper from the Tome of Horrors Complete © 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on original material by Rik Shepard. Dark Stalker from the Tome of Horrors Complete © 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on original material by Simon Muth. Dragon, Faerie from the Tome of Horrors Complete © 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on original material by Brian Jaeger and Gary Gygax. Genie, Marid from the Tome of Horrors Complete © 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on original material by Gary Gygax. Mite from the Tome of Horrors Complete © 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on original material by Ian Livingstone and Mark Barnes. Pathfinder Bestiary (Second Edition) © 2019, Paizo Inc.; Authors: Alexander Augunas, Logan Bonner, Jason Bulmahn, John Compton, Paris Crenshaw, Adam Daigle, Eleanor Ferron, Leo Glass, Thurston Hillman, James Jacobs, Jason Keeley, Lyz Liddell, Ron Lundeen, Robert G. McCreary, Tim Nightengale, Stephen Radney-MacFarland, Alex Riggs, David N. Ross, Michael Sayre, Mark Seifter, Chris S. Sims, Jeffrey Swank, Jason Tondro, Tonya Woldridge, and Linda Zayas-Palmer.'),
-- The Fall of Plaguestone
(3,
'978-1-64078-174-0',
'PZO9555',
'Pathfinder Adventure: The Fall of Plaguestone',
'The Fall of Plaguestone',
'TFoP',
'TODO',
'2019-08-01',
1,
'Pathfinder Adventure: The Fall of Plaguestone © 2019, Paizo Inc.; Author: Jason Bulmahn.'),
-- Core Rulebook
(4,
NULL,
'PZO9000-25E',
'Age of Ashes Player''s Guide',
'Age of Ashes Player''s Guide',
'AoAPG',
'Player''s Guide for the Age of Ashes Adventure Path',
'2019',
1,
'Age of Ashes Player''s Guide © 2019, Paizo Inc.; Authors: James Jacobs with Amanda Hamon.');
BEGIN TRANSACTION;
INSERT INTO sourceentries VALUES(1, 1, 8, 9);
COMMIT;
-49
View File
@@ -1,49 +0,0 @@
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO spelltypes (
spelltypes_id,
name
)
VALUES
(1, 'Spell'),
(2, 'Cantrip'),
(3, 'Focus'),
(4, 'Ritual');
INSERT INTO spellcomponents (
spellcomponents_id,
name)
VALUES
(1, 'Material'),
(2, 'Verbal'),
(3, 'Somatic'),
(4, 'Focus');
INSERT INTO spelltraditions (
spelltraditions_id,
name
)
VALUES
(1, 'Arcane'),
(2, 'Divine'),
(3, 'Occult'),
(4, 'Primal');
INSERT INTO spellschools (
spellschools_id,
sources_id,
sources_pages,
name,
descr
)
VALUES
(1, 1, '297','Abjuration', 'Abjurations protect and ward. They create barriers that keep out attacks, effects, or even certain types of creatures. They also create effects that harm trespassers or banish interlopers.'),
(2, 1, '297','Conjuration', 'Conjuration spells transport creatures via teleportation, create an object, or bring a creature or object from somewhere else (typically from another plane) to follow your commands.\n\nConjuration spells often have the teleportation trait, and the creatures summoned by conjuration spells have the summoned trait.'),
(3, 1, '297','Divination', 'Divinations allow you to learn the secrets of the present, past, and future. They bestow good fortune, grant you the ability to perceive remote locations, and reveal secret knowledge.\n\nDivinations often have the detection trait if they find something, the prediction trait if they grant you insight about what might happen in the future, the revelation trait if they show things as they truly are, or the scrying trait if they let you perceive another location.'),
(4, 1, '297','Enchantment', 'Enchantments affect the minds and emotions of other creatures—sometimes to influence and control them, and other times to bolster them to greater heights of courage. Enchantment spells almost always have the mental trait, and many have the emotion trait or the fear trait.'),
(5, 1, '298','Evocation', 'Evocations capture magical energy and then shape it to harm your foes or protect your allies. Evocation spells often have a trait that comes from the type of damage they deal, such as acid, cold, fire, force, or sonic.'),
(6, 1, '298','Illusion', 'Illusions create the semblance of something real, fooling the eyes, ears, and other senses. They almost always have the mental trait, and depending on how the illusion is perceived, they might also have the auditory or visual trait.'),
(7, 1, '298','Necromancy', 'Necromancy spells harness the power of life and death. They can sap life essence or sustain creatures with life-saving healing. Necromancy spells often have the curse, death, healing, negative, or positive traits.'),
(8, 1, '298','Transmutation', 'Transmutation spells make alterations to or transform the physical form of a creature or object. The morph and polymorph traits appear primarily in transmutation spells.');
-779
View File
@@ -1,779 +0,0 @@
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
------------------
-- Staff insert --
------------------
INSERT INTO staff (
staff_id
,"name"
,"level"
,price
,bulk
,usage
,item_bonus
,craft_requirements
,source_id
,source_pages
,"description"
)
VALUES
-- Animal Staff --
(1, 'Animal Staff', 4, 90, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 592, 'This staff is topped with carved animal and monster heads. While wielding the staff, you gain a +2 circumstance bonus to Nature checks to identify animals.')
,(2, 'Animal Staff (Greater)', 8, 460, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 592, 'This staff is topped with carved animal and monster heads. While wielding the staff, you gain a +2 circumstance bonus to Nature checks to identify animals.')
,(3, 'Animal Staff (Major)', 12, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 592, 'This staff is topped with carved animal and monster heads. While wielding the staff, you gain a +2 circumstance bonus to Nature checks to identify animals.')
-- Mentalist's Staff --
,(4, 'Mentalist''s Staff', 4, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 593, 'This polished wooden staff bears a swirling motif reminiscent of the folds of a brain. While wielding the staff, you gain a +2 circumstance bonus to checks to identify mental magic.')
,(5, 'Mentalist''s Staff (Greater)', 8, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 593, 'This polished wooden staff bears a swirling motif reminiscent of the folds of a brain. While wielding the staff, you gain a +2 circumstance bonus to checks to identify mental magic.')
,(6, 'Mentalist''s Staff (Major)', 12, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 593, 'This polished wooden staff bears a swirling motif reminiscent of the folds of a brain. While wielding the staff, you gain a +2 circumstance bonus to checks to identify mental magic.')
-- Staff of Abjuration --
,(7, 'Staff of Abjuration', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This intricately carved wooden staff is warm to the touch and thrums with inner energy. While wielding the staff, you gain a +2 circumstance bonus to checks to identify abjuration magic.')
,(8, 'Staff of Abjuration (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This intricately carved wooden staff is warm to the touch and thrums with inner energy. While wielding the staff, you gain a +2 circumstance bonus to checks to identify abjuration magic.')
,(9, 'Staff of Abjuration (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This intricately carved wooden staff is warm to the touch and thrums with inner energy. While wielding the staff, you gain a +2 circumstance bonus to checks to identify abjuration magic.')
-- Staff of Conjuration --
,(10, 'Staff of Conjuration', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This ash staff is decorated with animals; wielding it, you gain a +2 circumstance bonus to checks to identify conjuration magic.')
,(11, 'Staff of Conjuration (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This ash staff is decorated with animals; wielding it, you gain a +2 circumstance bonus to checks to identify conjuration magic.')
,(12, 'Staff of Conjuration (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This ash staff is decorated with animals; wielding it, you gain a +2 circumstance bonus to checks to identify conjuration magic.')
-- Staff of Divination --
,(13, 'Staff of Divination', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'Semiprecious gemstones emerge, seemingly at random, from the surface of this gnarled wooden staff. While wielding it, you gain a +2 circumstance bonus to checks to identify divination magic.')
,(14, 'Staff of Divination (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'Semiprecious gemstones emerge, seemingly at random, from the surface of this gnarled wooden staff. While wielding it, you gain a +2 circumstance bonus to checks to identify divination magic.')
,(15, 'Staff of Divination (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'Semiprecious gemstones emerge, seemingly at random, from the surface of this gnarled wooden staff. While wielding it, you gain a +2 circumstance bonus to checks to identify divination magic.')
-- Staff of Enchantment --
,(16, 'Staff of Enchantment', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'A mesmerizing gemstone caps the head of this handsomely crafted wooden staff. While wielding the staff, you gain a +2 circumstance bonus to checks to identify enchantment magic.')
,(17, 'Staff of Enchantment (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'A mesmerizing gemstone caps the head of this handsomely crafted wooden staff. While wielding the staff, you gain a +2 circumstance bonus to checks to identify enchantment magic.')
,(18, 'Staff of Enchantment (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'A mesmerizing gemstone caps the head of this handsomely crafted wooden staff. While wielding the staff, you gain a +2 circumstance bonus to checks to identify enchantment magic.')
-- Staff of Evocation --
,(19, 'Staff of Evocation', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This staff is tapered at the base and carved into a gem-studded twist at the top. While wielding the staff, you gain a +2 circumstance bonus to checks to identify evocation magic.')
,(20, 'Staff of Evocation (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This staff is tapered at the base and carved into a gem-studded twist at the top. While wielding the staff, you gain a +2 circumstance bonus to checks to identify evocation magic.')
,(21, 'Staff of Evocation (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This staff is tapered at the base and carved into a gem-studded twist at the top. While wielding the staff, you gain a +2 circumstance bonus to checks to identify evocation magic.')
-- Staff of Fire --
,(22, 'Staff of Fire', 3, 60, 1, 'held in one hand', NULL, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This staff resembles a blackened and burned length of ashen wood. It smells faintly of soot and glows as if lit by embers. You can use an Interact action to touch the tip of this staff to a torch, tinder, or a flammable substance to ignite a flame.')
,(23, 'Staff of Fire (Greater)', 8, 450, 1, 'held in one hand', NULL, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This staff resembles a blackened and burned length of ashen wood. It smells faintly of soot and glows as if lit by embers. You can use an Interact action to touch the tip of this staff to a torch, tinder, or a flammable substance to ignite a flame.')
,(24, 'Staff of Fire (Major)', 12, 1800, 1, 'held in one hand', NULL, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This staff resembles a blackened and burned length of ashen wood. It smells faintly of soot and glows as if lit by embers. You can use an Interact action to touch the tip of this staff to a torch, tinder, or a flammable substance to ignite a flame.')
-- Staff of Healing --
,(25, 'Staff of Healing', 4, 90, 1, 'held in one hand', 1, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'Made of smooth, white wood, this staff is capped at each end with a golden cross adorned with a multitude of ruby cabochons. A staff of healing grants an item bonus to the Hit Points you restore anytime you cast the heal spell using your own spell slots or using charges from the staff.')
,(26, 'Staff of Healing (Greater)', 8, 470, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'Made of smooth, white wood, this staff is capped at each end with a golden cross adorned with a multitude of ruby cabochons. A staff of healing grants an item bonus to the Hit Points you restore anytime you cast the heal spell using your own spell slots or using charges from the staff.')
,(27, 'Staff of Healing (Major)', 12, 1800, 1, 'held in one hand', 3, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'Made of smooth, white wood, this staff is capped at each end with a golden cross adorned with a multitude of ruby cabochons. A staff of healing grants an item bonus to the Hit Points you restore anytime you cast the heal spell using your own spell slots or using charges from the staff.')
,(28, 'Staff of Healing (True)', 16, 9200, 1, 'held in one hand', 4, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'Made of smooth, white wood, this staff is capped at each end with a golden cross adorned with a multitude of ruby cabochons. A staff of healing grants an item bonus to the Hit Points you restore anytime you cast the heal spell using your own spell slots or using charges from the staff.')
-- Staff of Illumination --
,(29, 'Staff of Illumination', 18, 425, 1, 'held in one hand', NULL, 'Supply one casting of all listed levels of all listed spells.', 1, 594, 'This simple iron staff is capped with a faceted, clear gem.')
-- Staff of Illusion --
,(30, 'Staff of Illusion', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This ornately designed metal staff shines with precious inlays of gold. When you Cast a Spell from the staff, the illusory image of something you desire flashes across its surface. While wielding the staff, you gain a +2 circumstance bonus to checks to identify illusion magic.')
,(31, 'Staff of Illusion (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This ornately designed metal staff shines with precious inlays of gold. When you Cast a Spell from the staff, the illusory image of something you desire flashes across its surface. While wielding the staff, you gain a +2 circumstance bonus to checks to identify illusion magic.')
,(32, 'Staff of Illusion (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This ornately designed metal staff shines with precious inlays of gold. When you Cast a Spell from the staff, the illusory image of something you desire flashes across its surface. While wielding the staff, you gain a +2 circumstance bonus to checks to identify illusion magic.')
-- Staff of Necromancy --
,(33, 'Staff of Necromancy', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This twisted and grim-looking staff is adorned with hideous skull and bone motifs. While wielding the staff, you gain a +2 circumstance bonus to checks to identify necromancy magic.')
,(34, 'Staff of Necromancy (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This twisted and grim-looking staff is adorned with hideous skull and bone motifs. While wielding the staff, you gain a +2 circumstance bonus to checks to identify necromancy magic.')
,(35, 'Staff of Necromancy (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This twisted and grim-looking staff is adorned with hideous skull and bone motifs. While wielding the staff, you gain a +2 circumstance bonus to checks to identify necromancy magic.')
-- Staff of Power --
,(36, 'Staff of Power', 16, 10000, 1, 'held in one hand', NULL, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This staff of magically hardened wood is topped with a silver sculpture depicting magical runic symbols. When used as a weapon, a staff of power is a +2 greater striking staff.\n\nVoluntarily destroying a staff of power unleashes an incredible blast of energy. When wielding the staff, you can Interact to break it. This releases a 30-foot-burst magical explosion centered on the staff. This deals 2d8 force damage per charge remaining in the staff (DC 40 basic Reflex save). You automatically critically fail your save. A creature reduced to 0 Hit Points by this damage dies instantly; this is a death effect.')
-- Staff of the Magi --
,(37, 'Staff of the Magi', 20, 90000, 1, 'held in one hand', NULL, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'Sigils and runes of ancient and powerful magic cover the iron cladding on this long wooden staff. A staff of the magi is a +3 major striking staff, and when wielding it you gain a +1 circumstance bonus to saving throws against spells.\n\nVoluntarily destroying a staff of the magi unleashes a truly devastating wave of arcane energy that surges out, dissipating with distance. When wielding the staff, you can break it using an Interact action. This releases a 30-foot‑burst magical explosion centered on the staff. This deals 2d10 force damage per charge remaining in the staff (DC 40 basic Reflex save), You automatically critically fail your save. The explosion continues to echo beyond the initial blast zone, dealing half as much damage to creatures beyond 30 feet but within a 60-foot burst. A creature reduced to 0 Hit Points by this damage dies instantly; this is a death effect.')
-- Staff of Transmutation --
,(38, 'Staff of Transmutation', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'A glass orb atop this metal staff contains fine, undulating sand. While wielding the staff, you gain a +2 circumstance bonus to checks to identify transmutation magic.')
,(39, 'Staff of Transmutation (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'A glass orb atop this metal staff contains fine, undulating sand. While wielding the staff, you gain a +2 circumstance bonus to checks to identify transmutation magic.')
,(40, 'Staff of Transmutation (Major)', 14, 4000, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'A glass orb atop this metal staff contains fine, undulating sand. While wielding the staff, you gain a +2 circumstance bonus to checks to identify transmutation magic.')
-- Verdant Staff --
,(41, 'Verdant Staff', 6, 230, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This oak branch grows leaves in spring that change color in autumn and shed in winter. While wielding it, you gain a +2 circumstance bonus to Nature checks to identify plants.')
,(42, 'Verdant Staff (Greater)', 10, 900, 1, 'held in one hand', 2, 'Supply one casting of all listed levels of all listed spells.', 1, 595, 'This oak branch grows leaves in spring that change color in autumn and shed in winter. While wielding it, you gain a +2 circumstance bonus to Nature checks to identify plants.')
;
------------------------------
-- staff activations insert --
------------------------------
INSERT INTO staffactivations (
staffactivations_id,
"activation",
effect
)
VALUES
-- Most staves --
(1, 'Cast a Spell', 'You expend a number of charges from the staff to cast a spell from its list.')
-- Staff of Illumination --
,(2, 'Interact', 'The gem at the top of the staff glows as a torch, shedding bright light in a 20-foot radius (and dim light to the next 20 feet) for 10 minutes.')
-- Staff of Power --
,(3, 'Interact', 'This releases a 30-foot-burst magical explosion centered on the staff. This deals 2d8 force damage per charge remaining in the staff (DC 40 basic Reflex save). You automatically critically fail your save. A creature reduced to 0 Hit Points by this damage dies instantly; this is a death effect.')
-- Staff of the Magi --
,(4, 'Interact', 'This releases a 30-foot‑burst magical explosion centered on the staff. This deals 2d10 force damage per charge remaining in the staff (DC 40 basic Reflex save), You automatically critically fail your save. The explosion continues to echo beyond the initial blast zone, dealing half as much damage to creatures beyond 30 feet but within a 60-foot burst. A creature reduced to 0 Hit Points by this damage dies instantly; this is a death effect.')
;
INSERT INTO staff_staffactivations (
id,
staff_id,
staffactivations_id
)
VALUES
-- Animal Staff --
(1, 1, 1)
,(2, 2, 1)
,(3, 3, 1)
-- Mentalist's Staff --
,(4, 4, 1)
,(5, 5, 1)
,(6, 6, 1)
-- Staff of Abjuration --
,(7, 7, 1)
,(8, 8, 1)
,(9, 9, 1)
-- Staff of Conjuration --
,(10, 10, 1)
,(11, 11, 1)
,(12, 12, 1)
-- Staff of Divination -
,(13, 13, 1)
,(14, 14, 1)
,(15, 15, 1)
-- Staff of Enchantment --
,(16, 16, 1)
,(17, 17, 1)
,(18, 18, 1)
-- Staff of Evocation --
,(19, 19, 1)
,(20, 20, 1)
,(21, 21, 1)
-- Staff of Fire --
,(22, 22, 1)
,(23, 23, 1)
,(24, 24, 1)
-- Staff of Healing --
,(25, 25, 1)
,(26, 26, 1)
,(27, 27, 1)
,(28, 28, 1)
-- Staff of Illumination --
,(29, 29, 2)
,(30, 29, 1)
-- Staff of Illusion --
,(31, 30, 1)
,(32, 31, 1)
,(33, 32, 1)
-- Staff of Necromancy --
,(34, 33, 1)
,(35, 34, 1)
,(36, 35, 1)
-- Staff of Power --
,(37, 36, 3)
,(38, 36, 1)
-- Staff of the Magi --
,(39, 37, 4)
,(40, 37, 1)
-- Staff of Transmutation --
,(41, 38, 1)
,(42, 39, 1)
,(43, 40, 1)
-- Verdant Staff --
,(44, 41, 1)
,(45, 42, 1)
;
------------------------
-- staff_trait insert --
------------------------
INSERT INTO staff_trait (
id,
staff_id,
trait_id
)
VALUES
-- Animal Staff --
(1, 1, 207)
,(2, 1, 41)
,(3, 1, 142)
,(4, 2, 207)
,(5, 2, 41)
,(6, 2, 142)
,(7, 3, 207)
,(8, 3, 41)
,(9, 3, 142)
-- Mentalist's Staff --
,(10, 4, 207)
,(11, 4, 41)
,(12, 4, 142)
,(13, 5, 207)
,(14, 5, 41)
,(15, 5, 142)
,(16, 6, 207)
,(17, 6, 41)
,(18, 6, 142)
-- Staff of Abjuration --
,(19, 7, 205)
,(20, 7, 41)
,(21, 7, 142)
,(22, 8, 205)
,(23, 8, 41)
,(24, 8, 142)
,(25, 9, 205)
,(26, 9, 41)
,(27, 9, 142)
-- Staff of Conjuration --
,(28, 10, 206)
,(29, 10, 41)
,(30, 10, 142)
,(31, 11, 206)
,(32, 11, 41)
,(33, 11, 142)
,(34, 12, 206)
,(35, 12, 41)
,(36, 12, 142)
-- Staff of Divination --
,(37, 13, 205)
,(38, 13, 41)
,(39, 13, 142)
,(40, 14, 205)
,(41, 14, 41)
,(42, 14, 142)
,(43, 15, 205)
,(44, 15, 41)
,(45, 15, 142)
-- Staff of Enchantment --
,(46, 16, 208)
,(47, 16, 41)
,(48, 16, 142)
,(49, 17, 208)
,(50, 17, 41)
,(51, 17, 142)
,(52, 18, 208)
,(53, 18, 41)
,(54, 18, 142)
-- Staff of Evocation --
,(55, 19, 209)
,(56, 19, 41)
,(57, 19, 142)
,(58, 20, 209)
,(59, 20, 41)
,(60, 20, 142)
,(61, 21, 209)
,(62, 21, 41)
,(63, 21, 142)
-- Staff of Fire --
,(64, 22, 209)
,(65, 22, 41)
,(66, 22, 142)
,(67, 23, 209)
,(68, 23, 41)
,(69, 23, 142)
,(70, 24, 209)
,(71, 24, 41)
,(72, 24, 142)
-- Staff of Healing --
,(73, 25, 211)
,(74, 25, 41)
,(75, 25, 142)
,(76, 26, 211)
,(77, 26, 41)
,(78, 26, 142)
,(79, 27, 211)
,(80, 27, 41)
,(81, 27, 142)
,(82, 28, 211)
,(83, 28, 41)
,(84, 28, 142)
-- Staff of Illumination --
,(85, 29, 209)
,(86, 29, 41)
,(87, 29, 142)
-- Staff of Illusion --
,(88, 30, 210)
,(89, 30, 41)
,(90, 30, 142)
,(91, 31, 210)
,(92, 31, 41)
,(93, 31, 142)
,(94, 32, 210)
,(95, 32, 41)
,(96, 32, 142)
-- Staff of Necromancy --
,(97, 33, 211)
,(98, 33, 41)
,(99, 33, 142)
,(100, 34, 211)
,(101, 34, 41)
,(102, 34, 142)
,(103, 35, 211)
,(104, 35, 41)
,(105, 35, 142)
-- Staff of Power --
,(106, 36, 209)
,(107, 36, 41)
,(108, 36, 142)
,(109, 36, 202)
-- Staff of the Magi --
,(110, 37, 209)
,(111, 37, 41)
,(112, 37, 142)
,(113, 37, 202)
-- Staff of Transmutation
,(114, 38, 212)
,(115, 38, 41)
,(116, 38, 142)
,(117, 39, 212)
,(118, 39, 41)
,(119, 39, 142)
,(120, 40, 212)
,(121, 40, 41)
,(122, 40, 142)
-- Verdant Staff --
,(123, 41, 207)
,(124, 41, 41)
,(125, 41, 142)
,(126, 42, 207)
,(127, 42, 41)
,(128, 42, 142)
;
------------------------
-- staff_spell insert --
------------------------
INSERT INTO staff_spell (
id
,staff_id
,"level"
,spell_id
)
VALUES
-- Anmial Staff --
(1, 1, 0, 253)
,(2, 1, 1, 273)
,(3, 1, 1, 442)
-- Animal Staff (Greater) --
,(4, 2, 0, 253)
,(5, 2, 1, 273)
,(6, 2, 1, 442)
,(7, 2, 2, 19)
,(8, 2, 2, 415)
,(9, 2, 2, 442)
,(10, 2, 3, 18)
,(11, 2, 3, 442)
-- Animal Staff (Major) --
,(12, 3, 0, 253)
,(13, 3, 1, 273)
,(14, 3, 1, 442)
,(15, 3, 2, 19)
,(16, 3, 2, 415)
,(17, 3, 2, 442)
,(18, 3, 3, 18)
,(19, 3, 3, 442)
,(20, 3, 4, 442)
,(21, 3, 5, 18)
,(22, 3, 5, 299)
,(23, 3, 5, 442)
--22entalist's Staff --
,(24, 4, 0, 88)
,(25, 4, 1, 291)
,(26, 4, 1, 322)
--26entalist's Staff (Greater) --
,(27, 5, 0, 88)
,(28, 5, 1, 291)
,(29, 5, 1, 322)
,(30, 5, 2, 314)
,(31, 5, 3, 230)
,(32, 5, 3, 322)
-- Mentalist's Staff (Major) --
,(33, 6, 0, 88)
,(34, 6, 1, 291)
,(35, 6, 1, 322)
,(36, 6, 2, 314)
,(37, 6, 3, 230)
,(38, 6, 3, 322)
,(39, 6, 4, 296)
,(40, 6, 4, 466)
,(41, 6, 5, 322)
,(42, 6, 5, 455)
,(43, 6, 5, 456)
-- Staff of Abjuration --
,(44, 7, 0, 399)
,(45, 7, 1, 11)
,(46, 7, 1, 167)
,(47, 7, 2, 112)
,(48, 7, 2, 148)
,(49, 7, 2, 370)
-- Staff of Abjuration (Greater) --
,(50, 8, 0, 399)
,(51, 8, 1, 11)
,(52, 8, 1, 167)
,(53, 8, 2, 112)
,(54, 8, 2, 148)
,(55, 8, 2, 370)
,(56, 8, 3, 11)
,(57, 8, 3, 202)
,(58, 8, 4, 102)
,(59, 8, 4, 112)
,(60, 8, 4, 370)
-- Staff of Abjuration (Major) --
,(61, 9, 0, 399)
,(62, 9, 1, 11)
,(63, 9, 1, 167)
,(64, 9, 2, 112)
,(65, 9, 2, 148)
,(66, 9, 2, 370)
,(67, 9, 3, 11)
,(68, 9, 3, 202)
,(69, 9, 4, 102)
,(70, 9, 4, 112)
,(71, 9, 4, 370)
,(72, 9, 5, 32)
,(73, 9, 5, 148)
,(74, 9, 6, 112)
,(75, 9, 6, 368)
-- Staff of Conjuration --
,(76, 10, 0, 459)
,(77, 10, 1, 444)
,(78, 10, 1, 494)
,(79, 10, 2, 309)
,(80, 10, 2, 323)
,(81, 10, 2, 444)
,(82, 10, 2, 446)
-- Staff of Conjuration (Greater) --
,(83, 11, 0, 459)
,(84, 11, 1, 444)
,(85, 11, 1, 494)
,(86, 11, 2, 309)
,(87, 11, 2, 323)
,(88, 11, 2, 444)
,(89, 11, 2, 446)
,(90, 11, 3, 432)
,(91, 11, 3, 444)
,(92, 11, 3, 446)
,(93, 11, 4, 79)
,(94, 11, 4, 232)
,(95, 11, 4, 444)
,(96, 11, 4, 446)
-- Staff of Conjuration (Major) --
,(97, 12, 0, 459)
,(98, 12, 1, 444)
,(99, 12, 1, 494)
,(100, 12, 2, 309)
,(101, 12, 2, 323)
,(102, 12, 2, 444)
,(103, 12, 2, 446)
,(104, 12, 3, 432)
,(105, 12, 3, 444)
,(106, 12, 3, 446)
,(107, 12, 4, 79)
,(108, 12, 4, 232)
,(109, 12, 4, 444)
,(110, 12, 4, 446)
,(111, 12, 5, 37)
,(112, 12, 5, 444)
,(113, 12, 5, 446)
,(114, 12, 6, 323)
,(115, 12, 6, 444)
,(116, 12, 6, 446)
-- Staff of Divination --
,(117, 13, 0, 97)
,(118, 13, 1, 485)
,(119, 13, 2, 70)
,(120, 13, 2, 87)
,(121, 13, 2, 466)
-- Staff of Divination (Greater) --
,(122, 14, 0, 97)
,(123, 14, 1, 485)
,(124, 14, 2, 70)
,(125, 14, 2, 87)
,(126, 14, 2, 466)
,(127, 14, 3, 60)
,(128, 14, 3, 87)
,(129, 14, 4, 61)
,(130, 14, 4, 70)
,(131, 14, 4, 466)
-- Staff of Divination (Major) --
,(132, 15, 0, 97)
,(133, 15, 1, 485)
,(134, 15, 2, 70)
,(135, 15, 2, 87)
,(136, 15, 2, 466)
,(137, 15, 3, 60)
,(138, 15, 3, 87)
,(139, 15, 4, 61)
,(140, 15, 4, 70)
,(141, 15, 4, 466)
,(142, 15, 5, 348)
,(143, 15, 5, 390)
,(144, 15, 5, 466)
,(145, 15, 5, 484)
-- Staff of Enchantment --
,(146, 16, 0, 88)
,(147, 16, 1, 53)
,(148, 16, 1, 67)
,(149, 16, 2, 221)
,(150, 16, 2, 474)
-- Staff of Enchantment (Greater) --
,(151, 17, 0, 88)
,(152, 17, 1, 53)
,(153, 17, 1, 67)
,(154, 17, 2, 221)
,(155, 17, 2, 474)
,(156, 17, 3, 313)
,(157, 17, 4, 53)
,(158, 17, 4, 72)
,(159, 17, 4, 441)
-- Staff of Enchantment (Major) --
,(160, 18, 0, 88)
,(161, 18, 1, 53)
,(162, 18, 1, 67)
,(163, 18, 2, 221)
,(164, 18, 2, 474)
,(165, 18, 3, 313)
,(166, 18, 4, 53)
,(167, 18, 4, 72)
,(168, 18, 4, 441)
,(169, 18, 5, 67)
,(170, 18, 5, 82)
,(171, 18, 6, 123)
,(172, 18, 6, 168)
-- Staff of Evocation --
,(173, 19, 0, 357)
,(174, 19, 1, 274)
,(175, 19, 1, 403)
,(176, 19, 2, 5)
,(177, 19, 2, 199)
-- Staff of Evocation (Greater) --
,(178, 20, 0, 357)
,(179, 20, 1, 274)
,(180, 20, 1, 403)
,(181, 20, 2, 5)
,(182, 20, 2, 199)
,(183, 20, 3, 259)
,(184, 20, 3, 274)
,(185, 20, 4, 178)
,(186, 20, 4, 520)
-- Staff of Evocation (Major) --
,(187, 21, 0, 357)
,(188, 21, 1, 274)
,(189, 21, 1, 403)
,(190, 21, 2, 5)
,(191, 21, 2, 199)
,(192, 21, 3, 259)
,(193, 21, 3, 274)
,(194, 21, 4, 178)
,(195, 21, 4, 520)
,(196, 21, 5, 71)
,(197, 21, 5, 274)
,(198, 21, 5, 51)
,(199, 21, 5, 510)
-- Staff of Fire --
,(200, 22, 0, 342)
,(201, 22, 1, 45)
-- Staff of Fire (Greater) --
,(202, 23, 0, 342)
,(203, 23, 1, 45)
,(204, 23, 2, 45)
,(205, 23, 2, 181)
,(206, 23, 3, 181)
,(207, 23, 3, 178)
-- Staff of Fire (Major) --
,(208, 24, 0, 342)
,(209, 24, 1, 45)
,(210, 24, 2, 45)
,(211, 24, 2, 181)
,(212, 24, 3, 181)
,(213, 24, 3, 178)
,(214, 24, 4, 177)
,(215, 24, 4, 178)
,(216, 24, 4, 509)
,(217, 24, 5, 178)
,(218, 24, 5, 509)
-- Staff of Healing --
,(219, 25, 0, 430)
,(220, 25, 1, 215)
-- Staff of Healing (Greater) --
,(221, 26, 0, 430)
,(222, 26, 1, 215)
,(223, 26, 2, 215)
,(224, 26, 2, 372)
,(225, 26, 2, 373)
,(226, 26, 3, 215)
,(227, 26, 3, 365)
-- Staff of Healing (Major) --
,(228, 27, 0, 430)
,(229, 27, 1, 215)
,(230, 27, 2, 215)
,(231, 27, 2, 372)
,(232, 27, 2, 373)
,(233, 27, 3, 215)
,(234, 27, 3, 365)
,(235, 27, 4, 215)
,(236, 27, 4, 372)
,(237, 27, 5, 44)
,(238, 27, 5, 215)
,(239, 27, 5, 365)
-- Staff of Healing (True) --
,(240, 28, 0, 430)
,(241, 28, 1, 215)
,(242, 28, 2, 215)
,(243, 28, 2, 372)
,(244, 28, 2, 373)
,(245, 28, 3, 215)
,(246, 28, 3, 365)
,(247, 28, 4, 215)
,(248, 28, 4, 372)
,(249, 28, 5, 44)
,(250, 28, 5, 215)
,(251, 28, 5, 365)
,(252, 28, 6, 215)
,(253, 28, 6, 372)
,(254, 28, 6, 373)
,(255, 28, 7, 215)
,(256, 28, 7, 362)
,(257, 28, 7, 365)
-- Staff of Illumination --
,(258, 29, 0, 258)
,(259, 29, 2, 74)
,(260, 29, 3, 74)
,(261, 29, 3, 387)
-- Staff of Illusion --
,(262, 30, 0, 194)
,(263, 30, 1, 233)
,(264, 30, 1, 234)
,(265, 30, 2, 232)
,(266, 30, 2, 246)
-- Staff of Illusion (Greater) --
,(267, 31, 0, 194)
,(268, 31, 1, 233)
,(269, 31, 1, 234)
,(270, 31, 2, 232)
,(271, 31, 2, 246)
,(272, 31, 3, 233)
,(273, 31, 3, 146)
,(274, 31, 4, 232)
,(275, 31, 4, 498)
-- Staff of Illusion (Major) --
,(276, 32, 0, 194)
,(277, 32, 1, 233)
,(278, 32, 1, 234)
,(279, 32, 2, 232)
,(280, 32, 2, 246)
,(281, 32, 3, 233)
,(282, 32, 3, 146)
,(283, 32, 4, 232)
,(284, 32, 4, 498)
,(285, 32, 5, 235)
,(286, 32, 5, 498)
,(287, 32, 6, 210)
,(288, 32, 6, 295)
-- Staff of Necromancy --
,(289, 33, 0, 56)
,(290, 33, 1, 207)
,(291, 33, 1, 356)
,(292, 33, 2, 90)
,(293, 33, 2, 193)
-- Staff of Necromancy (Greater) --
,(294, 34, 0, 56)
,(295, 34, 1, 207)
,(296, 34, 1, 356)
,(297, 34, 2, 90)
,(298, 34, 2, 193)
,(299, 34, 3, 41)
,(300, 34, 3, 497)
,(301, 34, 4, 207)
-- Placeholder for 4th level Enervation which is missing --
-- Staff of Necromancy (Major) --
,(303, 35, 0, 56)
,(304, 35, 1, 207)
,(305, 35, 1, 356)
,(306, 35, 2, 90)
,(307, 35, 2, 193)
,(308, 35, 3, 41)
,(309, 35, 3, 497)
,(310, 35, 4, 207)
,(311, 35, 5, 64)
,(312, 35, 5, 193)
,(313, 35, 6, 207)
,(314, 35, 6, 496)
-- Staff of Power --
,(315, 36, 1, 356)
,(316, 36, 2, 74)
,(317, 36, 3, 256)
,(318, 36, 4, 200)
,(319, 36, 4, 313)
,(320, 36, 5, 274)
,(321, 36, 6, 510)
,(322, 36, 7, 71)
,(323, 36, 7, 178)
,(324, 36, 7, 259)
-- Staff of the Magi --
,(325, 37, 0, 97)
,(326, 37, 0, 258)
,(327, 37, 0, 271)
,(328, 37, 0, 463)
,(329, 37, 1, 266)
,(330, 37, 2, 153)
,(331, 37, 2, 199)
,(332, 37, 2, 243)
,(333, 37, 2, 252)
,(334, 37, 2, 462)
,(335, 37, 2, 523)
,(336, 37, 3, 112)
,(337, 37, 3, 178)
,(338, 37, 3, 259)
,(339, 37, 4, 243)
,(340, 37, 4, 153)
,(341, 37, 4, 178)
,(342, 37, 4, 509)
,(343, 37, 4, 523)
,(344, 37, 5, 71)
,(345, 37, 5, 316)
,(346, 37, 5, 461)
,(347, 37, 6, 110)
,(348, 37, 6, 112)
,(349, 37, 6, 178)
,(350, 37, 6, 259)
,(351, 37, 7, 71)
,(352, 37, 7, 316)
,(353, 37, 7, 325)
,(354, 37, 7, 509)
,(355, 37, 8, 178)
,(356, 37, 8, 270)
,(357, 37, 9, 112)
,(358, 37, 9, 287)
,(359, 37, 9, 445)
-- Staff of Transmutation --
,(360, 38, 0, 406)
,(361, 38, 1, 182)
,(362, 38, 1, 248)
,(363, 38, 2, 153)
,(364, 38, 2, 226)
-- Staff of Transmutation (Greater) --
,(365, 39, 0, 406)
,(366, 39, 1, 182)
,(367, 39, 1, 248)
,(368, 39, 2, 153)
,(369, 39, 2, 226)
,(370, 39, 3, 169)
,(371, 39, 3, 248)
,(372, 39, 4, 191)
,(373, 39, 4, 394)
-- Staff of Transmutation (Major) --
,(374, 40, 0, 406)
,(375, 40, 1, 182)
,(376, 40, 1, 248)
,(377, 40, 2, 153)
,(378, 40, 2, 226)
,(379, 40, 3, 169)
,(380, 40, 3, 248)
,(381, 40, 4, 191)
,(382, 40, 4, 394)
,(383, 40, 5, 226)
,(384, 40, 6, 30)
,(385, 40, 6, 127)
,(386, 40, 6, 183)
-- Verdant Staff --
,(387, 41, 0, 459)
,(388, 41, 1, 402)
,(389, 41, 2, 33)
,(390, 41, 2, 154)
,(391, 41, 2, 395)
,(392, 41, 2, 480)
-- Verdant Staff (Greater) --
,(393, 42, 0, 459)
,(394, 42, 1, 402)
,(395, 42, 2, 33)
,(396, 42, 2, 154)
,(397, 42, 2, 395)
,(398, 42, 2, 480)
,(399, 42, 3, 513)
,(400, 42, 4, 33)
,(401, 42, 4, 416)
,(402, 42, 5, 326)
,(403, 42, 5, 513)
;
@@ -1 +0,0 @@
[{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=381","name":"Counter Performance","traits":["bard","composition","enchantment","fortune","mental"],"type":"Focus","level":1,"source":"Core Rulebook pg. 386","cast":"somatic or verbal","action":"reaction","trigger":"You or an ally within 60 feet rolls a saving throw against an auditory or visual effect.","area":"60-foot emanation","description":"Your performance protects you and your allies. Roll a Performance check for a type you know: an auditory performance if the trigger was auditory, or a visual one for a visual trigger. You and allies in the area can use the better result between your Performance check and the saving throw.","components":["somaticorverbal"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=385","name":"Inspire Competence","traits":["bard","cantrip","composition","emotion","enchantment","mental"],"type":"Cantrip","level":1,"source":"Core Rulebook pg. 386","cast":"verbal","action":"1","range":"60 feet","targets":"1 ally","duration":"1 round","description":"Your encouragement inspires your ally to succeed at a task. This counts as having taken sufficient preparatory actions to Aid your ally on a skill check of your choice, regardless of the circumstances. When you later use the Aid reaction, you can roll Performance instead of the normal skill check, and if you roll a failure, you get a success instead. If you are legendary in Performance, you automatically critically succeed. The GM might rule that you can't use this ability if the act of encouraging your ally would interfere with the skill check (such as a check to Sneak quietly or maintain a disguise).","components":["verbal"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=386","name":"Inspire Courage","traits":["bard","cantrip","composition","emotion","enchantment","mental"],"type":"Cantrip","level":1,"source":"Core Rulebook pg. 386","cast":"verbal","action":"1","area":"60-foot emanation","saving throw":"NULl","duration":"1 round","description":"You inspire your allies with words or tunes of encouragement. You and all allies in the area gain a +1 status bonus to attack rolls, damage rolls, and saves against fear effects.","components":["verbal"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=389","name":"Lingering Composition","traits":["bard","enchantment"],"type":"Focus","level":1,"source":"Core Rulebook pg. 387","cast":"verbal","action":"free","description":"You add a flourish to your composition to extend its benefits. If your next action is to cast a cantrip composition with a duration of 1 round, attempt a Performance check. The DC is usually a standard-difficulty DC of a level equal to the highest-level target of your composition, but the GM can assign a different DC based on the circumstances. The effect depends on the result of your check.\r\n**Critical Success** The composition lasts 4 rounds.\r\n**Success** The composition lasts 3 rounds.\r\n**Failure** The composition lasts 1 round, but you don't spend the Focus Point for casting this spell.","components":["verbal"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=390","name":"Loremaster's Etude","traits":["bard","divination","fortune"],"type":"Focus","level":1,"source":"Core Rulebook pg. 387","cast":"somatic","action":"free","trigger":"You or an ally within range attempts a skill check to Recall Knowledge","range":"30 feet","targets":"you or the triggering ally","description":"You call upon your muse's deep mysteries, granting the target a greater ability to think and recall information. Roll the triggering Recall Knowledge skill check twice and use the better result.","components":["somatic"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=387","name":"Inspire Defense","traits":["bard","cantrip","composition","emotion","enchantment","mental"],"type":"Cantrip","level":2,"source":"Core Rulebook pg. 386","cast":"verbal","action":"1","area":"60-foot emanation","duration":"1 round","description":"You inspire your allies to protect themselves more effectively. You and all allies in the area gain a +1 status bonus to AC and saving throws, as well as resistance equal to half the spell's level to physical damage.","components":["verbal"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=392","name":"Triple Time","traits":["bard","cantrip","composition","emotion","enchantment","mental"],"type":"Cantrip","level":2,"source":"Core Rulebook pg. 387","cast":"somatic","action":"1","area":"60-foot emanation","duration":"1 round","description":"You dance at a lively tempo, speeding your allies' movement. You and all allies in the area gain a +10-foot status bonus to all Speeds for 1 round.","components":["somatic"]},{"nethysUrl":"https://2e.aonprd.com/Spells.aspx?ID=382","name":"Dirge of Doom","traits":["bard","cantrip","composition","emotion","enchantment","fear","mental"],"type":"Cantrip","level":3,"source":"Core Rulebook pg. 386","cast":"verbal","action":"1","area":"30-foot emanation","duration":"1 round","desLine truncated
-353
View File
@@ -1,353 +0,0 @@
import json
import sqlite3
import io
def main():
# load json into python
print("loading json")
## read file into memory
with io.open('spellsNEW.json', 'r', encoding='utf-8-sig') as f:
# raw_data = f.read()
data = json.load(f)
print("Importing {} spells.".format(len(data)))
# alphabetize spells into a list
sorted_names = []
for i in data:
sorted_names.append(i['name'])
sorted_names.sort()
# print(sorted_names)
# get list of dicts in order
sorted_dicts = [] # sorted by ['name'] alphabetically
for i in sorted_names:
for x in data:
# yes, I know this is double nested and not that efficient; don't
# care yet, it's not that many items
if x['name'] == i:
sorted_dicts.append(x)
# NOW we can go alphabetically spell by spell
## Get database connection
conn = sqlite3.connect('../../pf2.db')
## Set pragmas
pragma1 = "PRAGMA synchronous=OFF;"
pragma2 = "PRAGMA count_changes=OFF;"
pragma3 = "PRAGMA journal_mode=MEMORY;"
pragma4 = "PRAGMA temp_store=MEMORY;"
pragma5 = "PRAGMA foreign_keys=ON;"
conn.execute(pragma1)
conn.execute(pragma2)
conn.execute(pragma3)
conn.execute(pragma4)
conn.execute(pragma5)
# load in ids for traits from traits table so we only call this once
# instead of every spell
stmt = "SELECT trait_id, short_name FROM traits"
c = conn.cursor()
c.execute(stmt)
traits = c.fetchall()
# print(traits)
# load in ids for spelltypes from spelltypes table so we only call this once
# instead of every spell
stmt = "SELECT spelltypes_id, name FROM spelltypes"
c = conn.cursor()
c.execute(stmt)
stypes = c.fetchall()
# TODO FIX THIS FOR SPELL COMPONENTS
# CREATE TABLE spellcomponents (
# spellcomponents_id INTEGER PRIMARY KEY,
# name TEXT NOT NULL UNIQUE
# );
# load in ids for spelltypes from spelltypes table so we only call this once
# instead of every spell
stmt = "SELECT spellcomponents_id, name FROM spellcomponents"
c = conn.cursor()
c.execute(stmt)
ctypes = c.fetchall()
# List the various triggers and see if there are any duplicates
# THERE ARE NOT IN THE CRB SO NOT BOTHERING WITH SEPARATE TRIGGERS TABLE YET
### trigs = []
### for i in sorted_dicts:
### if 'trigger' in i:
### trigs.append(i['trigger'])
### print(sorted(trigs))
### print(len(trigs))
### print(len(set(trigs)))
# List the various targets and see if there are any duplicates
## YES, there are MANY duplicates, so we need a separate targets table
targs = []
for i in sorted_dicts:
if 'targets' in i:
targs.append(i['targets'])
dedup_targs = set(targs)
sorted_targs = sorted(dedup_targs)
inp_targs = []
id = 0
for i in sorted_targs:
id += 1
inp_targs.append((id,i))
stmt = "INSERT INTO spelltargets (spelltargets_id, name) VALUES (?,?)"
try:
conn.executemany(stmt,inp_targs)
except:
print("Error creating targets")
else:
conn.commit()
# load in ids for targets so just doing this once
stmt = "SELECT spelltargets_id, name FROM spelltargets"
c = conn.cursor()
c.execute(stmt)
ttypes = c.fetchall()
# load in ids for actions so just doing this once
stmt = "SELECT actioncosts_id, abbr FROM actioncosts"
c = conn.cursor()
c.execute(stmt)
acttypes = c.fetchall()
# print(sorted(targs))
# print(len(targs))
# print(len(set(targs)))
id = 0
for i in sorted_dicts:
id += 1
do_basic_sql(i, id, conn)
do_range_numbers(i,id,conn)
do_sources_pages(i,id,conn)
do_spell_traits(i,id,conn,traits)
do_spell_types(i,id,conn,stypes)
do_spell_components(i,id,conn,ctypes)
do_spell_targets(i,id,conn,ttypes)
do_spell_actions(i,id,conn,acttypes)
print("Finished {} spells.".format(len(sorted_dicts)))
def do_spell_actions(i,id,conn,acttypes):
if 'action' not in i:
return
res = 0
for j in acttypes:
if i['action'] == j[1]:
res = j[0]
# print(id , res)
inp = (res, id)
stmt = "UPDATE spells SET actioncosts_id=? WHERE spells_id=?"
try:
conn.execute(stmt, inp)
except sqlite3.Error as e:
print("Error updating actioncosts_id: {}".format(e))
print("\tSpell:{}\tinp:{}".format(i['name'],inp))
else:
conn.commit()
def do_spell_components(i,id,conn,ctypes):
# this block handles heal or harm which have all 3
if i['name']=='Heal' or i['name']=='Harm':
# print("Need to handle heal and harm")
inp = [(id, 1), (id, 2), (id, 3)]
stmt = "INSERT INTO spells_spellcomponents (spells_id, spellcomponents_id) VALUES (?,?)"
try:
conn.executemany(stmt, inp)
except sqlite3.Error as e:
print("Error inserting spell components: {}".format(e))
print("\tinp: {}".format(inp))
else:
print("handled {} succesfully".format(i['name']))
conn.commit()
return
# this handles the rest
res = None
for j in ctypes:
for k in i['components']:
if k.capitalize() == j[1]:
res = j[0]
inp = (id, res)
stmt = "INSERT INTO spells_spellcomponents (spells_id, spellcomponents_id) VALUES (?,?)"
try:
conn.execute(stmt, inp)
except sqlite3.Error as e:
print("Error inserting spell components: {}".format(e))
print("\tinp: {}".format(inp))
else:
conn.commit()
def do_spell_targets(i,id,conn,ttypes):
if 'targets' not in i:
return
res = 0
for j in ttypes:
if i['targets'] == j[1]:
res = j[0]
# print(id , res)
inp = (res, id)
stmt = "UPDATE spells SET spelltargets_id=? WHERE spells_id=?"
try:
conn.execute(stmt, inp)
except:
print("Error updating spelltargets_id")
else:
conn.commit()
def do_spell_types(i,id,conn,stypes):
res = 0
for j in stypes:
if i['type'] == j[1]:
res = j[0]
# print(id , res)
inp = (res, id)
stmt = "UPDATE spells SET spelltypes_id=? WHERE spells_id=?"
try:
conn.execute(stmt, inp)
except:
print("Error updating spell types")
else:
conn.commit()
def do_spell_traits(i, id, conn, traits):
# get list of traits from the json and capitalize first letter
traits_json = []
for item in i['traits']:
traits_json.append(item.capitalize())
trait_ids =[]
for j in traits_json:
for k in traits:
if j == k[1]:
trait_ids.append(k[0])
# print(trait_ids)
inp = []
for j in trait_ids:
inp.append((id,j))
# print(inp)
# insert into sql
stmt = "INSERT OR REPLACE INTO spells_traits (spells_id, trait_id) VALUES (?,?)"
try:
conn.executemany(stmt, inp)
except:
print("Error updating traits")
else:
conn.commit()
def do_sources_pages(i, id, conn):
if 'source' not in i:
return
res = ''
source_id = 0
# Do Core Rulebook branch
if "Core Rulebook" in i['source']:
res = i['source'].replace('Core Rulebook pg.','').strip()
source_id = 1
stmt = "UPDATE spells SET sources_id=?, sources_pages=? WHERE spells_id=?"
inp = (source_id, res, id)
try:
conn.execute(stmt, inp)
except:
print("Error updating sources")
else:
conn.commit()
def do_range_numbers(i, id, conn):
# no need to do range
if 'range' not in i:
return
rg = -1
# convert range_text to an integer representation
if i['range'] == 'touch':
rg = 0
elif i['range'] == 'planetary':
rg = 999999999
# is the only one in CRB with emanation 40' from current scraping
elif i['name'] == 'Repulsion':
rg = 40
else:
# DO SPLITS
splits = i['range'].split(' ')
# print(splits)
rg = splits[0]
inp = (rg, id)
stmt = "UPDATE spells SET range_ft=? WHERE spells_id=?"
try:
conn.execute(stmt, inp)
except:
print("Error updating range_ft")
else:
conn.commit()
# print("Successfully updated range_ft")
def do_basic_sql(i, id, conn):
#print("Doing spell id #{}: {}".format(id, i['name']))
stmt = """INSERT INTO spells (
spells_id,
sources_id,
sources_pages,
nethysurl,
name,
level,
descr,
range_text,
trigger,
area_text)
VALUES (?,?,?,?,?,?,?,?,?,?)"""
rge = None
if 'range' in i:
rge = i['range']
dscr = None
if 'description' in i:
dscr = i['description']
trg = None
if 'trigger' in i:
trg = i['trigger']
area = None
if 'area' in i:
area = i['area']
inp = (id, 1, i['source'], i['nethysUrl'], i['name'], i['level'], dscr, rge, trg, area)
try:
conn.execute(stmt, inp)
except:
print("Error inserting row")
else:
conn.commit()
# print("Successfully inserted row")
if __name__ == "__main__":
main()
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
-334
View File
@@ -1,334 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
-- #########################################################
-- This space is where we say the latest ID for incrementing
--
-- 269 is top ID right now so start with 270 for anything new
--
-- #########################################################
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO traittypes (traittype_id, name)
VALUES
(1, 'None'),
(2, 'Alignment'),
(3, 'Ancestry'),
(4, 'Armor'),
(5, 'Class'),
(6, 'Creature Type'),
(7, 'Elemental'),
(8, 'Energy'),
(9, 'Equipment'),
(10, 'Monster'),
(11, 'Poison'),
(12, 'Rarity'),
(13, 'School'),
(14, 'Tradition'),
(15, 'Weapon');
-- TODO change the undefineds below to NULL (make sure table allows NULLs in description too)
INSERT INTO traits (trait_id, traittype, short_name, description)
VALUES
-- CRB and Monster Manual
-- "None" type traits
(1, 1, 'Additive', 'Feats with the additive trait allow you to spend actions to add special substances to bombs or elixirs. You can add only one additive to a single alchemical item, and attempting to add another spoils the item. You can typically use actions with the additive trait only when you’re creating an infused alchemical item, and some can be used only with the Quick Alchemy action. The additive trait is always followed by a level, such as additive 2. An additive adds its level to the level of the alchemical item you’re modifying; the result is the new level of the mixture. The mixture’s item level must be no higher than your advanced alchemy level.'),
(2, 1, 'Alchemical', 'Alchemical items are powered by reactions of alchemical reagents. Alchemical items aren’t magical and don’t radiate a magical aura.'),
(3, 1, 'Apex', 'When you Invest an Item that has the apex trait, it improves one of your ability scores, either increasing it by 2 or to a total of 18, whichever grants the higher score. This gives you all the benefits of the new ability score until the investiture ends. An apex item grants this benefit only the first time it’s invested within a 24-hour period, and you can benefit from only one apex item at a time. If you attempt to invest an apex item when you already have one invested, you don’t gain the ability score increase, though you do gain any other effects of Investing the Item.'),
(4, 1, 'Archetype', 'This feat belongs to an archetype.'),
(5, 1, 'Artifact', 'undefined'),
(6, 1, 'Attack', 'An ability with this trait involves an attack. For each attack you make beyond the first on your turn, you take a multiple attack penalty.'),
(7, 1, 'Auditory', 'Auditory actions and effects rely on sound. An action with the auditory trait can be successfully performed only if the creature using the action can speak or otherwise produce the required sounds. A spell or effect with the auditory trait has its effect only if the target can hear it. This applies only to sound-based parts of the effect, as determined by the GM. This is different from a sonic effect, which still affects targets who can’t hear it (such as deaf targets) as long as the effect itself makes sound.'),
(8, 1, 'Aura', 'An aura is an emanation that continually ebbs out from you, af ecting creatures within a certain radius. Aura can also refer to the magical signature of an item or a creature with a strong alignment.'),
(9, 1, 'Cantrip', 'A spell you can cast at will that is automatically heightened to half your level rounded up.'),
(10, 1, 'Charm', 'undefined'),
(11, 1, 'Companion', 'An item with this trait can be worn by an animal companion or similar creature. A companion can have up to two items invested.'),
(12, 1, 'Complex', 'A hazard with this trait takes turns in an encounter.'),
(13, 1, 'Composition', 'To cast a composition cantrip or focus spell, you usually use a type of Performance. If the spell includes a verbal component, you must use an auditory performance, and if it includes a somatic component, you must use a visual one. The spell gains all the traits of the performance you used. You can cast only one composition spell each turn, and you can have only one active at a time. If you cast a new composition spell, any ongoing effects from your previous composition spell end immediately.'),
(14, 1, 'Concentrate', 'An action with this trait requires a degree of mental concentration and discipline.'),
(15, 1, 'Consecration', 'A consecration spell enhances an area for an extended period of time. A given area can have only a single consecration effect at a time. The new effect attempts to counteract any existing one in areas of overlap.'),
(16, 1, 'Curse', 'A curse is an effect that places some long-term affliction on a creature. Curses are always magical and are typically the result of a spell or trap.'),
(17, 1, 'Darkness', 'Darkness effects extinguish non-magical light in the area, and can counteract less powerful magical light. You must usually target light magic with your darkness magic directly to counteract the light, but some darkness spells automatically attempt to counteract light.'),
(18, 1, 'Death', 'An effect with the death trait kills you immediately if it reduces you to 0 HP. Some death effects can bring you closer to death or slay you outright without reducing you to 0 HP.'),
(19, 1, 'Dedication', 'You must select a feat with this trait to apply an archetype to your character.'),
(20, 1, 'Detection', 'Effects with this trait attempt to determine the presence or location of a person, object, or aura.'),
(21, 1, 'Disease', 'An effect with this trait applies one or more diseases. A disease is typically an affliction.'),
(22, 1, 'Downtime', 'An activity with this trait takes a day or more, and can be used only during downtime.'),
(23, 1, 'Emotion', 'This effect alters a creature’s emotions. Effects with this trait always have the mental trait as well. Creatures with special training or that have mechanical or artificial intelligence are immune to emotion effects.'),
(24, 1, 'Environmental', 'A hazard with this trait is something dangerous that’s part of the natural world, such as quicksand or harmful mold.'),
(25, 1, 'Exploration', 'An activity with this trait takes more than a turn to use, and can usually be used only during exploration mode.'),
(26, 1, 'Extradimensional', 'This effect or item creates an extradimensional space. An extradimensional effect placed inside another extradimensional space ceases to function until it is removed.'),
(27, 1, 'Fear', 'Fear effects evoke the emotion of fear. Effects with this trait always have the mental and emotion traits as well.'),
(28, 1, 'Flourish', 'Flourish actions are actions that require too much exertion to perform a large number in a row. You can use only 1 action with the flourish trait per turn.'),
(29, 1, 'Focused', 'An item with this trait can give you an additional Focus Point. This focus point is separate from your focus pool and doesn’t count toward the cap on your focus pool. You can gain this benefit only if you have a focus pool, and there might be restrictions on how the point can be used. You can’t gain more than 1 Focus Point per day from focused items.'),
(30, 1, 'Fortune', 'A fortune effect beneficially alters how you roll your dice. You can never have more than one fortune effect alter a single roll. If multiple fortune effects would apply, you have to pick which to use. If a fortune effect and a misfortune effect would apply to the same roll, the two cancel each other out, and you roll normally.'),
(31, 1, 'General', 'A type of feat that any character can select, regardless of ancestry and class, as long as they meet the prerequisites. You can select a feat with this trait when your class grants a general feat.'),
(32, 1, 'Haunt', 'A hazard with this trait is a spiritual echo, often of someone with a tragic death. Putting a haunt to rest often involves resolving the haunt’s unfinished business. A haunt that hasn’t been properly put to rest always returns after a time.'),
(33, 1, 'Healing', 'A healing effect restores a creature’s body, typically by restoring Hit Points, but sometimes by removing diseases or other debilitating effects.'),
(34, 1, 'Incapacitation', 'An ability with this trait can take a character completely out of the fight or even kill them, and it’s harder to use on a more powerful character. If a spell has the incapacitation trait, any creature of more than twice the spell’s level treats the result of their check to prevent being incapacitated by the spell as one degree of success better, or the result of any check the spellcaster made to incapacitate them as one degree of success worse. If any other effect has the incapacitation trait, a creature of higher level than the item, creature, or hazard generating the effect gains the same benefits.'),
(35, 1, 'Incorporeal', 'An incorporeal creature or object has no physical form. It can pass through solid objects, including walls. When inside an object, an incorporeal creature can’t perceive, attack, or interact with anything outside the object, and if it starts its turn in an object, it is slowed 1. Corporeal creatures can pass through an incorporeal creature, but they can’t end their movement in its space.'),
(36, 1, 'Infused', 'You created an alchemical item with the infused trait using your infused reagents, and it has a limited time before it becomes inert. Any nonpermanent effects from your infused alchemical items, with the exception of afflictions such as slow-acting poisons, end when you make your daily preparations again.'),
(37, 1, 'Instinct', 'Instinct abilities require a specific instinct; you lose access if you perform acts anathema to your instinct.'),
(38, 1, 'Light', 'Light effects overcome non-magical darkness in the area, and can counteract magical darkness. You must usually target darkness magic with your light magic directly to counteract the darkness, but some light spells automatically attempt to counteract darkness.'),
(39, 1, 'Linguistic', 'An effect with this trait depends on language comprehension. A linguistic effect that targets a creature works only if the target understands the language you are using.'),
(40, 1, 'Litany', 'Litanies are special devotion spells, typically used by champions and requiring a single action, that usually give temporary immunity to further litanies.'),
(41, 1, 'Magical', 'Something with the magical trait is imbued with magical energies not tied to a specific tradition of magic. A magical item radiates a magic aura infused with its dominant school of magic.'),
(42, 1, 'Manipulate', 'You must physically manipulate an item or make gestures to use an action with this trait. Creatures without a suitable appendage can’t perform actions with this trait. Manipulate actions often trigger reactions.'),
(43, 1, 'Mechanical', 'A hazard with this trait is a constructed physical object.'),
(44, 1, 'Mental', 'A mental effect can alter the target’s mind. It has no effect on an object or a mindless creature.'),
(45, 1, 'Metamagic', 'Actions with the metamagic trait, usually from metamagic feats, tweak the properties of your spells. You must use a metamagic action directly before Casting the Spell you want to alter. If you use any action (including free actions and reactions) other than Cast a Spell directly after, you waste the benefits of the metamagic action. Any additional effects added by a metamagic action are part of the spell’s effect, not of the metamagic action itself.'),
(46, 1, 'Minion', 'Minions are creatures that directly serve another creature. A creature with this trait can use only 2 actions per turn and can’t use reactions. Your minion acts on your turn in combat, once per turn, when you spend an action to issue it commands. For an animal companion, you Command an Animal; for a minion that’s a spell or magic item effect, like a summoned minion, you Sustain a Spell or Sustain an Activation; if not otherwise specified, you issue a verbal command, a single action with the auditory and concentrate traits. If given no commands, minions use no actions except to defend themselves or to escape obvious harm. If left unattended for long enough, typically 1 minute, mindless minions usually don’t act, animals follow their instincts, and sapient minions act how they please.'),
(47, 1, 'Misfortune', 'A misfortune effect detrimentally alters how you roll your dice. You can never have more than one misfortune effect alter a single roll. If multiple misfortune effects would apply, the GM decides which is worse and applies it. If a fortune effect and a misfortune effect would apply to the same roll, the two cancel each other out, and you roll normally.'),
(48, 1, 'Morph', 'Effects that slightly alter a creature’s form have the morph trait. Any Strikes specifically granted by a morph effect are magical. You can be affected by multiple morph spells at once, but if you morph the same body part more than once, the second morph effect attempts to counteract the first (in the same manner as two polymorph effects, described in that trait).'),
(49, 1, 'Move', 'An action with this trait involves moving from one space to another.'),
(50, 1, 'Multiclass', 'Archetypes with the multiclass trait represent diversifying your training into another class’s specialties. You can’t select a multiclass archetype’s dedication feat if you are a member of the class of the same name.'),
(51, 1, 'Oath', 'Oaths add an additional tenet to your code. You can usually have only one feat with this trait.'),
(52, 1, 'Open', 'These maneuvers work only as the first salvo on your turn. You can use an open only if you haven’t used an action with the attack or open trait yet this turn.'),
(53, 1, 'Plant', 'Magical effects with this trait manipulate or conjure plants or plant matter in some way. Those that manipulate plants have no effect in an area with no plants.'),
(54, 1, 'Polymorph', 'These effects transform the target into a new form. A target can’t be under the effect of more than one polymorph effect at a time. If it comes under the effect of a second polymorph effect, the second polymorph effect attempts to counteract the first. If it succeeds, it takes effect, and if it fails, the spell has no effect on that target. Any Strikes specifically granted by a polymorph effect are magical. Unless otherwise stated, polymorph spells don’t allow the target to take on the appearance of a specific individual creature, but rather just a generic creature of a general type or ancestry.'),
(55, 1, 'Possession', 'Effects with this trait allow a creature to project its mind and spirit into a target. A creature immune to mental effects can’t use a possession effect. While possessing a target, a possessor’s true body is unconscious (and can’t wake up normally), unless the possession effect allows the creature to physically enter the target. Whenever the target takes damage, the possessor takes half that amount of damage as mental damage.'),
(56, 1, 'Precious', 'Valuable materials with special properties have the precious trait. They can be substituted for base materials when you Craft items.'),
(57, 1, 'Prediction', 'Effects with this trait determine what is likely to happen in the near future. Most predictions are divinations.'),
(58, 1, 'Press', 'Actions with this trait allow you to follow up earlier attacks. An action with the press trait can be used only if you are currently affected by a multiple attack penalty. Some actions with the press trait also grant an effect on a failure. The effects that are added on a failure don’t apply on a critical failure. If your press action succeeds, you can choose to apply the failure effect instead. (For example, you may wish to do this when an attack deals no damage due to resistance.) Because a press action requires a multiple attack penalty, you can’t use one when it’s not your turn, even if you use the Ready activity.'),
(59, 1, 'Rage', 'You must be raging to use abilities with the rage trait, and they end automatically when you stop raging.'),
(60, 1, 'Reload', 'While all weapons need some amount of time to get into position, many ranged weapons also need to be loaded and reloaded. This entry indicates how many Interact actions it takes to reload such weapons. This can be 0 if drawing ammunition and firing the weapon are part of the same action. If an item takes 2 or more actions to reload, the GM determines whether they must be performed together as an activity, or you can spend some of those actions during one turn and the rest during your next turn.'),
(61, 1, 'Revelation', 'Effects with this trait see things as they truly are.'),
(62, 1, 'Scrying', 'A scrying effect lets you see, hear, or otherwise get sensory information from a distance using a sensor or apparatus, rather than your own eyes and ears.'),
(63, 1, 'Secret', 'The GM rolls the check for this ability in secret.'),
(64, 1, 'Shadow', 'This magic involves shadows or the energy of the Shadow Plane.'),
(65, 1, 'Skill', 'A general feat with the skill trait improves your skills and their actions or gives you new actions for a skill. A feat with this trait can be selected when a class grants a skill feat or general feat. Archetype feats with the skill trait can be selected in place of a skill feat if you have that archetype’s dedication feat.'),
(66, 1, 'Sleep', 'This effect can cause a creature to fall asleep or get drowsy.'),
(67, 1, 'Splash', 'When you use a thrown weapon with the splash trait, you don’t add your Strength modifier to the damage roll. If an attack with a splash weapon fails, succeeds, or critically succeeds, all creatures within 5 feet of the target (including the target) take the listed splash damage. On a failure (but not a critical failure), the target of the attack still takes the splash damage. Add splash damage together with the initial damage against the target before applying the target’s weaknesses or resistances. You don’t multiply splash damage on a critical hit.'),
(68, 1, 'Stance', 'A stance is a general combat strategy that you enter by using an action with the stance trait, and that you remain in for some time. A stance lasts until you get knocked out, until its requirements (if any) are violated, until the encounter ends, or until you enter a new stance, whichever comes first. After you use an action with the stance trait, you can’t use another one for 1 round. You can enter or be in a stance only in encounter mode.'),
(69, 1, 'Summoned', 'A creature called by a conjuration spell or effect gains the summoned trait. A summoned creature can’t summon other creatures, create things of value, or cast spells that require a cost. It has the minion trait. If it tries to cast a spell of equal or higher level than the spell that summoned it, it overpowers the summoning magic, causing the summoned creature’s spell to fail and the summon spell to end. Otherwise, the summoned creature uses the standard abilities for a creature of its kind. It generally attacks your enemies to the best of its abilities. If you can communicate with it, you can attempt to command it, but the GM determines the degree to which it follows your commands.'),
(70, 1, 'Telepathy', 'undefined'),
(71, 1, 'Teleportation', 'Teleportation effects allow you to instantaneously move from one point in space to another. Teleportation does not usually trigger reactions based on movement.'),
(72, 1, 'Trap', 'A hazard or item with this trait is constructed to hinder interlopers.'),
(73, 1, 'Virulent', 'Afflictions with the virulent trait are harder to remove. You must succeed at two consecutive saves to reduce a virulent affliction’s stage by 1. A critical success reduces a virulent affliction’s stage by only 1 instead of by 2.'),
(74, 1, 'Visual', 'A visual effect can affect only creatures that can see it. This applies only to visible parts of the effect, as determined by the GM.'),
-- 'Alignment' type traits
(75, 2, 'Chaotic', 'Chaotic effects often manipulate energy from chaos-aligned Outer Planes and are anathema to lawful divine servants or divine servants of lawful deities. A creature with this trait is chaotic in alignment. An ability with this trait can be selected or used only by chaotic creatures.'),
(76, 2, 'Evil', 'Evil effects often manipulate energy from evil-aligned Outer Planes and are antithetical to good divine servants or divine servants of good deities. A creature with this trait is evil in alignment. An ability with this trait can be selected or used only by evil creatures.'),
(77, 2, 'Good', 'Good effects often manipulate energy from good-aligned Outer Planes and are antithetical to evil divine servants or divine servants of evil deities. A creature with this trait is good in alignment. An ability with this trait can be selected or used only by good creatures.'),
(78, 2, 'Lawful', 'Lawful effects often manipulate energy from law-aligned Outer Planes and are antithetical to chaotic divine servants or divine servants of chaotic deities. A creature with this trait is lawful in alignment. An ability with this trait can be selected or used by lawful creatures only.'),
-- 'Ancestry' type traits
(79, 3, 'Dwarf', 'A creature with this trait is a member of the dwarf ancestry. Dwarves are stout folk who often live underground and typically have darkvision. An ability with this trait can be used or selected only by dwarves. An item with this trait is created and used by dwarves.'),
(80, 3, 'Elf', 'A creature with this trait is a member of the elf ancestry. Elves are mysterious people with rich traditions of magic and scholarship who typically have low-light vision. An ability with this trait can be used or selected only by elves. A weapon with this trait is created and used by elves.'),
(81, 3, 'Gnome', 'A creature with this trait is a member of the gnome ancestry. Gnomes are small people skilled at magic who seek out new experiences and usually have low-light vision. An ability with this trait can be used or selected only by gnomes. A weapon with this trait is created and used by gnomes.'),
(82, 3, 'Goblin', 'A creature with this trait can come from multiple tribes of creatures, including goblins, hobgoblins, and bugbears. Goblins tend to have darkvision. An ability with this trait can be used or chosen only by goblins. A weapon with this trait is created and used by goblins.'),
(83, 3, 'Half-Elf', 'A creature with this trait is part human and part elf. An ability with this trait can be used or selected only by half-elves.'),
(84, 3, 'Half-Orc', 'A creature with this trait is part human and part orc. An ability with this trait can be used or selected only by half-orcs.'),
(85, 3, 'Halfling', 'A creature with this trait is a member of the halfling ancestry. These small people are friendly wanderers considered to be lucky. An ability with this trait can be used or selected only by halflings. A weapon with this trait is created and used by halflings.'),
(86, 3, 'Human', 'A creature with this trait is a member of the human ancestry. Humans are a diverse array of people known for their adaptability. An ability with this trait can be used or selected only by humans.'),
-- 'Armor' type traits
(87, 4, 'Bulwark', 'The armor covers you so completely that it provides benefits against some damaging effects. On Reflex saves to avoid a damaging effect, such as a *fireball*, you add a +3 modifier instead of your Dexterity modifier.'),
(88, 4, 'Comfort', 'The armor is so comfortable that you can rest normally while wearing it.'),
(89, 4, 'Flexible', 'The armor is flexible enough that it doesn’t hinder most actions. You don’t apply its check penalty to Acrobatics or Athletics checks.'),
(90, 4, 'Noisy', 'This armor is loud and likely to alert others to your presence when you’re using the Avoid Notice exploration activity.'),
-- 'Class' type traits
(91, 5, 'Alchemist', 'This indicates abilities from the alchemist class.'),
(92, 5, 'Barbarian', 'This indicates abilities from the barbarian class.'),
(93, 5, 'Bard', 'This indicates abilities from the bard class.'),
(94, 5, 'Champion', 'This indicates abilities from the champion class.'),
(95, 5, 'Cleric', 'This indicates abilities from the cleric class.'),
(96, 5, 'Druid', 'This indicates abilities from the druid class.'),
(97, 5, 'Fighter', 'This indicates abilities from the fighter class.'),
(98, 5, 'Monk', 'Abilities with this trait are from the monk class. A weapon with this trait is primarily used by monks.'),
(99, 5, 'Ranger', 'This indicates abilities from the ranger class.'),
(100, 5, 'Rogue', 'This indicates abilities from the rogue class.'),
(101, 5, 'Sorcerer', 'This indicates abilities from the sorcerer class.'),
(102, 5, 'Wizard', 'This indicates abilities from the wizard class.'),
(252, 1, 'Additive 1', 'Feats with the additive trait allow you to spend actions to add special substances to bombs or elixirs. You can add only one additive to a single alchemical item, and attempting to add another spoils the item. You can typically use actions with the additive trait only when you’re creating an infused alchemical item, and some can be used only with the Quick Alchemy action. The additive trait is always followed by a level, such as additive 2. An additive adds its level to the level of the alchemical item you’re modifying; the result is the new level of the mixture. The mixture’s item level must be no higher than your advanced alchemy level.'),
(253, 1, 'Additive 2', 'Feats with the additive trait allow you to spend actions to add special substances to bombs or elixirs. You can add only one additive to a single alchemical item, and attempting to add another spoils the item. You can typically use actions with the additive trait only when you’re creating an infused alchemical item, and some can be used only with the Quick Alchemy action. The additive trait is always followed by a level, such as additive 2. An additive adds its level to the level of the alchemical item you’re modifying; the result is the new level of the mixture. The mixture’s item level must be no higher than your advanced alchemy level.'),
(254, 1, 'Additive 3', 'Feats with the additive trait allow you to spend actions to add special substances to bombs or elixirs. You can add only one additive to a single alchemical item, and attempting to add another spoils the item. You can typically use actions with the additive trait only when you’re creating an infused alchemical item, and some can be used only with the Quick Alchemy action. The additive trait is always followed by a level, such as additive 2. An additive adds its level to the level of the alchemical item you’re modifying; the result is the new level of the mixture. The mixture’s item level must be no higher than your advanced alchemy level.'),
-- 'Creature type' type traits
(103, 6, 'Aberration', 'Aberrations are creatures from beyond the planes or corruptions of the natural order.'),
(104, 6, 'Animal', 'An animal is a creature with a relatively low intelligence. It typically doesn’t have an Intelligence ability modifier over –4, can’t speak languages, and can’t be trained in Intelligence-based skills.'),
(105, 6, 'Astral', 'Astral creatures are native of the Astral Plane. They can survive the basic environmental effects of the Astral Plane.'),
(106, 6, 'Beast', 'A creature similar to an animal but with an Intelligence modifier of –3 or higher is usually a beast. Unlike an animal, a beast might be able to speak and reason.'),
(107, 6, 'Celestial', 'Creatures that hail from or have a strong connection to the good-aligned planes are called celestials. Celestials can survive the basic environmental effects of planes in the Outer Sphere.'),
(108, 6, 'Construct', 'A construct is an artificial creature empowered by a force other than necromancy. Constructs are often mindless; they are immune to disease, the paralyzed condition, and poison; and they may have Hardness based on the materials used to construct their bodies. Constructs are not living creatures, nor are they undead. When reduced to 0 Hit Points, a construct creature is destroyed.'),
(109, 6, 'Dragon', 'Dragons are reptilian creatures, often winged or with the power of flight. Most are able to use a breath weapon and are immune to sleep and paralysis.'),
(110, 6, 'Elemental', 'Elementals are creatures directly tied to an element and native to the Elemental Planes. Elementals don’t need to breathe.'),
(111, 6, 'Ethereal', 'Ethereal creatures are natives of the Ethereal Plane. They can survive the basic environmental effects of the Ethereal Plane.'),
(112, 6, 'Fey', 'Creatures of the First World are called the fey.'),
(113, 6, 'Fiend', 'Creatures that hail from or have a strong connection to the evil-aligned planes are called fiends. Fiends can survive the basic environmental effects of planes in the Outer Sphere.'),
(114, 6, 'Fungus', 'Fungal creatures have the fungus trait. They are distinct from normal fungi.'),
(115, 6, 'Giant', 'Giants are massive humanoid creatures.'),
(116, 6, 'Humanoid', 'Humanoid creatures reason and act much like humans. They typically stand upright and have two arms and two legs.'),
(117, 6, 'Monitor', 'Creatures that hail from or have a strong connection to the neutrally aligned planes are called monitors. Monitors can survive the basic environmental effects of planes in the Outer Sphere.'),
(118, 6, 'Ooze', 'Oozes are creatures with simple anatomies. They tend to have low mental ability scores and immunity to mental effects and precision damage.'),
(119, 6, 'Plant', 'Vegetable creatures have the plant trait. They are distinct from normal plants.'),
(120, 6, 'Spirit', 'Spirits are ephemeral creatures defined by their spiritual self and often lacking a physical form.'),
(121, 6, 'Undead', 'Once living, these creatures were infused after death with negative energy and soul-corrupting evil magic. When reduced to 0 Hit Points, an undead creature is destroyed. Undead creatures are damaged by positive energy, are healed by negative energy, and don’t benefit from healing effects.'),
-- 'Elemental' type traits
(122, 7, 'Air', 'Effects with the air trait either manipulate or conjure air. Those that manipulate air have no effect in a vacuum or an area without air. Creatures with this trait consist primarily of air or have a magical connection to that element.'),
(123, 7, 'Earth', 'Effects with the earth trait either manipulate or conjure earth. Those that manipulate earth have no effect in an area without earth. Creatures with this trait consist primarily of earth or have a magical connection to that element.'),
(124, 7, 'Fire', 'Effects with the fire trait either conjure or manipulate fire. Those that manipulate fire have no effect in an area without fire. Creatures with this trait consist primarily of fire or have a magical connection to that element.'),
(125, 7, 'Water', 'Effects with the water trait either manipulate or conjure water. Those that manipulate water have no effect in an area without water. Creatures with this trait consist primarily of water or have a magical connection to the element.'),
-- 'Energy' type traits
(126, 8, 'Acid', 'Effects with this trait deal acid damage. Creatures with this trait have a magical connection to acid.'),
(127, 8, 'Cold', 'Effects with this trait deal cold damage. Creatures with this trait have a connection to magical cold.'),
(128, 8, 'Electricity', 'Effects with this trait deal electricity damage. A creature with this trait has a magical connection to electricity.'),
(129, 8, 'Fire', 'Effects with this trait deal fire damage. Creatures with this trait have a magical connection to fire.'),
(130, 8, 'Force', 'Effects with this trait deal force damage or create objects made of pure magical force.'),
(131, 8, 'Negative', 'Effects with this trait heal undead creatures with negative energy, deal negative damage to living creatures, or manipulate negative energy.'),
(132, 8, 'Positive', 'Effects with this trait heal living creatures with positive energy, deal positive energy damage to undead, or manipulate positive energy.'),
(133, 8, 'Sonic', 'An effect with the sonic trait functions only if it makes sound, meaning it has no effect in an area of silence or in a vacuum. This is different from an auditory spell, which is effective only if the target can hear it. A sonic effect might deal sonic damage.'),
-- 'Equipment' type traits
(134, 9, 'Bomb', 'An alchemical bomb combines volatile alchemical components that explode when the bomb hits a creature or object. Most alchemical bombs deal damage, though some produce other effects.'),
(135, 9, 'Elixir', 'Elixirs are alchemical liquids that are used by drinking them.'),
(136, 9, 'Invested', 'A character can wear only 10 magical items that have the invested trait. None of the magical effects of the item apply if the character hasn’t invested it, nor can it be activated, though the character still gains any normal benefits from wearing the physical item (like a hat keeping rain off their head).'),
(137, 9, 'Mutagen', 'An elixir with the mutagen trait temporarily transmogrifies the subject’s body and alters its mind. A mutagen always conveys one or more beneficial effects paired with one or more detrimental effects. Mutagens are polymorph effects, meaning you can benefit from only one at a time.'),
(138, 9, 'Oil', 'Oils are magical gels, ointments, pastes, or salves that are typically applied to an object and are used up in the process.'),
(139, 9, 'Potion', 'A potion is a magical liquid activated when you drink it.'),
(140, 9, 'Scroll', 'A scroll contains a single spell you can cast without a spell slot.'),
(141, 9, 'Snare', 'Traps typically made by rangers, snares follow special rules that allow them to be constructed quickly and used on the battlefield.'),
(142, 9, 'Staff', 'This magic item holds spells of a particular theme and allows a spellcaster to cast additional spells by preparing the staff.'),
(143, 9, 'Structure', 'An item with the structure trait creates a magical building or other structure when activated. The item must be activated on a plot of land free of other structures. The structure adapts to the natural terrain, adopting the structural requirements for being built there. The structure adjusts around small features such as ponds or spires of rock, but it can’t be created on water or other nonsolid surfaces. If activated on snow, sand dunes, or other soft surfaces with a solid surface underneath, the structure’s foundation (if any) reaches the solid ground. If an item with this trait is activated on a solid but unstable surface, such as a swamp or an area plagued by tremors, roll a DC 3 flat check each day; on a failure, the structure begins to sink or collapse.'),
(144, 9, 'Talisman', 'A talisman is a small object affixed to armor, a shield, or a weapon (called the affixed item). You must be wielding or wearing an item to activate a talisman attached to it. Once activated, a talisman burns out permanently.'),
(145, 9, 'Wand', 'A wand contains a single spell which you can cast once per day.'),
-- 'Monster' type traits
(146, 10, 'Aeon', 'These monitors are the self-styled defenders of reality. Traditional aeons have dualistic natures and forms, and they hold a dichotomy of interests, though axiomites and inevitables do not. Aeons other than axiomites and inevitables communicate via a strange telepathic hodgepodge of sensory sending called envisioning.'),
(147, 10, 'Amphibious', 'An amphibious creature can breathe in water and in air, even outside of its preferred environment, usually indenitely but at least for hours. These creatures often have a swim Speed. Their bludgeoning and slashing unarmed Strikes don’t take the usual –2 penalty for being underwater.'),
(148, 10, 'Anadi', 'Anadis are peaceful, reclusive humanoids who live deep within woodlands, jungles, and other untamed areas of wilderness. Their natural forms resemble humanoid spiders covered in beautiful and distinctive markings of varying colors.'),
(149, 10, 'Angel', 'This family of celestials is native to the plane of Nirvana. Most angels are neutral good, have darkvision, and have a weakness to evil damage.'),
(150, 10, 'Aquatic', 'Aquatic creatures are at home underwater. Their bludgeoning and slashing unarmed Strikes don’t take the usual –2 penalty for being underwater. Aquatic creatures can breathe water but not air.'),
(151, 10, 'Archon', 'Members of this family of celestials are the protectors of Heaven and are lawful good. They have darkvision and a weakness to evil damage.'),
(152, 10, 'Azata', 'This family of celestials is native to Elysium. They are typically chaotic good and have darkvision and a weakness to evil and cold iron.'),
(153, 10, 'Boggard', 'Boggards are frog-like humanoids. They typically have darkvision.'),
(154, 10, 'Brutal', 'undefined'),
(155, 10, 'Caligni', 'These subterranean people have darkvision, and some have powers to create darkness.'),
(156, 10, 'Catfolk', 'Catfolk are humanoids with feline features.'),
(157, 10, 'Changeling', 'These humanoids are the children of hags and members of other humanoid ancestries.'),
(158, 10, 'Daemon', 'A family of fiends spawned on the desolate plane of Abaddon, most daemons are neutral evil. They typically have darkvision and weakness to good damage.'),
(159, 10, 'Demon', 'A family of fiends, demons hail from or trace their origins to the Abyss. Most are irredeemably chaotic evil and have darkvision.'),
(160, 10, 'Dero', 'This family of humanoids are the descendants of fey creatures that fell into darkness and confusion after being abandoned in the Darklands. They are immune to confusion and vulnerable to sunlight.'),
(161, 10, 'Devil', 'A family of fiends from Hell, most devils are irredeemably lawful evil. They typically have greater darkvision, immunity to fire, and telepathy.'),
(162, 10, 'Dhampir', 'These humanoids are the immortal offspring of vampires and members of other ancestries.'),
(163, 10, 'Dinosaur', 'These reptiles have survived from prehistoric times.'),
(164, 10, 'Drow', 'Subterranean kin of the elves, drow typically have darkvision and inborn magical abilities.'),
(165, 10, 'Duergar', 'Subterranean kin of the dwarves, duergar typically have darkvision and immunity to poison. They are not easily fooled by illusions.'),
(166, 10, 'Genie', 'The diverse families of genies hold positions of prominence on the Elemental Planes. They have powerful magical abilities.'),
(167, 10, 'Ghost', 'Lost souls that haunt the world as incorporeal undead are called ghosts.'),
(168, 10, 'Ghoul', 'Ghouls are vile undead creatures that feast on flesh.'),
(169, 10, 'Gnoll', 'Gnolls are humanoids that resemble hyenas.'),
(170, 10, 'Golem', 'Golems are a special type of construct. Golems are immune to almost all magic, but most have a weakness to certain spells.'),
(171, 10, 'Gremlin', 'Cruel and mischievous fey, gremlins have acclimated to life on the Material Plane.'),
(172, 10, 'Hag', 'These creatures are malevolent spellcasters who form covens.'),
(173, 10, 'Inevitable', 'These constructed aeons were created by the axiomites. Each type of inevitable is dedicated to a specific task. Most inevitables have weakness to chaotic damage.'),
(174, 10, 'Kobold', 'Kobolds are reptilian humanoids who are usually Small and typically have darkvision.'),
(175, 10, 'Leshy', 'Leshys are small plant creatures, roughly humanoid in form.'),
(176, 10, 'Lizardfolk', 'Lizardfolk are a family of reptilian humanoids.'),
(177, 10, 'Merfolk', 'These aquatic humanoids have an upper body similar to a human and a lower body similar to a fish.'),
(178, 10, 'Mindless', 'A mindless creature has either programmed or rudimentary mental attributes. Most, if not all, of their mental ability modifiers are –5. They are immune to all mental effects.'),
(179, 10, 'Mummy', 'A mummy is an undead creature created from a preserved corpse.'),
(180, 10, 'Mutant', 'The monster has mutated or evolved, granting it unusual benefits, drawbacks, or both.'),
(181, 10, 'Olfactory', 'undefined'),
(182, 10, 'Orc', 'A creature with this trait is a member of the orc ancestry. These green-skinned people tend to have darkvision. An ability with this trait can be used or selected only by orcs. An item with this trait is created and used by orcs.'),
(183, 10, 'Rakshasa', 'Reincarnations of evil souls, rakshasas are fiends that live on the Material Plane.'),
(184, 10, 'Ratfolk', 'Ratfolk are humanoids who resemble rats.'),
(185, 10, 'Sea Devil', 'Evil ocean-dwelling humanoids, sea devils usually have darkvision and wavesense.'),
(186, 10, 'Skeleton', 'This undead is made by animating a dead creature’s skeleton with negative energy.'),
(187, 10, 'Soulbound', 'These constructs are mentally augmented by a fragment of a once-living creature’s soul.'),
(188, 10, 'Sprite', 'A family of diminutive winged fey with a strong connection to primal magic.'),
(189, 10, 'Swarm', 'A swarm is a mass or cloud of creatures that functions as one monster. Its size entry gives the size of the entire mass, though for most swarms the individual creatures that make up that mass are Tiny. A swarm can occupy the same space as other creatures, and must do so in order to use its damaging action. A swarm typically has weakness to effects that deal damage over an area (like area spells and splash weapons).'),
(190, 10, 'Tengu', 'Tengu are humanoids who resemble birds.'),
(191, 10, 'Troll', 'Trolls are giant, brutish creatures and are well known for their ability to regenerate.'),
(192, 10, 'Vampire', 'Undead creatures who thirst for blood, vampires are notoriously versatile and hard to destroy.'),
(193, 10, 'Werecreature', 'These shapechanging creatures either are naturally able to shift between animal, humanoid, and hybrid forms or are afflicted with a curse that forces them to shift involuntarily.'),
(194, 10, 'Xulgath', 'These subterranean reptilian creatures tend to have darkvision and smell awful.'),
(195, 10, 'Zombie', 'These undead are mindless rotting corpses that hunger for living flesh.'),
-- 'Poison' type traits
(196, 11, 'Contact', 'This poison is delivered by contact with the skin.'),
(197, 11, 'Ingested', 'This poison is delivered when drunk or eaten.'),
(198, 11, 'Inhaled', 'This poison is delivered when breathed in.'),
(199, 11, 'Injury', 'This poison is delivered by damaging the recipient.'),
(200, 11, 'Poison', 'An effect with this trait delivers a poison or deals poison damage. An item with this trait is poisonous and might cause an affliction.'),
-- 'Rarity' type traits
(201, 12, 'Common', 'Anything that doesn’t list another rarity trait (uncommon, rare, or unique) automatically has the common trait. This rarity indicates that an ability, item, or spell is available to all players who meet the prerequisites for it. A creature of this rarity is generally known and can be summoned with the appropriate '),
(202, 12, 'Rare', 'This rarity indicates that a rules element is very difficult to find in the game world. A rare feat, spell, item or the like is available to players only if the GM decides to include it in the game, typically through discovery during play. Creatures with this trait are rare. They typically can’t be summoned. The DC of Recall Knowledge checks related to these creatures is increased by 5.'),
(203, 12, 'Uncommon', 'Something of uncommon rarity requires special training or comes from a particular culture or part of the world. Some character choices give access to uncommon options, and the GM can choose to allow access for anyone. Less is known about uncommon creatures than common creatures. They typically can’t be summoned. The DC of Recall Knowledge checks related to these creature is increased by 2.'),
(204, 12, 'Unique', 'A rules element with this trait is one-of-a-kind. The DC of Recall Knowledge checks related to creatures with this trait is increased by 10.'),
-- 'School' type traits
(205, 13, 'Abjuration', 'Effects and magic items with this trait are associated with the abjuration school of magic, typically involving protection or wards.'),
(206, 13, 'Conjuration', 'Effects and magic items with this trait are associated with the conjuration school of magic, typically involving summoning, creation, teleportation, or moving things from place to place.'),
(207, 13, 'Divination', 'The divination school of magic typically involves obtaining or transferring information, or predicting events.'),
(208, 13, 'Enchantment', 'Effects and magic items with this trait are associated with the enchantment school of magic, typically involving mind control, emotion alteration, and other mental effects.'),
(209, 13, 'Evocation', 'Effects and magic items with this trait are associated with the evocation school of magic, typically involving energy and elemental forces.'),
(210, 13, 'Illusion', 'Effects and magic items with this trait are associated with the illusion school of magic, typically involving false sensory stimuli.'),
(211, 13, 'Necromancy', 'Effects and magic items with this trait are associated with the necromancy school of magic, typically involving forces of life and death.'),
(212, 13, 'Transmutation', 'Effects and magic items with this trait are associated with the transmutation school of magic, typically changing something’s form.'),
-- 'Tradition' type traits
(213, 14, 'Arcane', 'This magic comes from the arcane tradition, which is built on logic and rationality. Anything with this trait is magical.'),
(214, 14, 'Divine', 'This magic comes from the divine tradition, drawing power from deities or similar sources. Anything with this trait is magical.'),
(215, 14, 'Occult', 'This magic comes from the occult tradition, calling upon bizarre and ephemeral mysteries. Anything with this trait is magical.'),
(216, 14, 'Primal', 'This magic comes from the primal tradition, connecting to the natural world and instinct. Anything with this trait is magical.'),
-- 'Weapon' traits
(217, 15, 'Agile', 'The multiple attack penalty you take with this weapon on the second attack on your turn is –4 instead of –5, and –8 instead of –10 on the third and subsequent attacks in the turn.'),
(218, 15, 'Attached', 'An attached weapon must be combined with another piece of gear to be used. The trait lists what type of item the weapon must be attached to. You must be wielding or wearing the item the weapon is attached to in order to attack with it. For example, shield spikes are attached to a shield, allowing you to attack with the spikes instead of a shield bash, but only if you’re wielding the shield. An attached weapon is usually bolted onto or built into the item it’s attached to, and typically an item can have only one weapon attached to it. An attached weapon can be affixed to an item with 10 minutes of work and a successful DC 10 Crafting check; this includes the time needed to remove the weapon from a previous item, if necessary. If an item is destroyed, its attached weapon can usually be salvaged.'),
(219, 15, 'Backstabber', 'When you hit a flat-footed creature, this weapon deals 1 precision damage in addition to its normal damage. The precision damage increases to 2 if the weapon is a '),
(220, 15, 'Backswing', 'You can use the momentum from a missed attack with this weapon to lead into your next attack. After missing with this weapon on your turn, you gain a +1 circumstance bonus to your next attack with this weapon before the end of your turn.'),
(221, 15, 'Deadly', 'On a critical hit, the weapon adds a weapon damage die of the listed size. Roll this after doubling the weapon’s damage. This increases to two dice if the weapon has a '),
(222, 15, 'Disarm', 'You can use this weapon to Disarm with the Athletics skill even if you don’t have a free hand. This uses the weapon’s reach (if different from your own) and adds the weapon’s item bonus to attack rolls (if any) as an item bonus to the Athletics check. If you critically fail a check to Disarm using the weapon, you can drop the weapon to take the effects of a failure instead of a critical failure. On a critical success, you still need a free hand if you want to take the item.'),
(223, 15, 'Dwarf', 'Dwarves craft and use these weapons.'),
(224, 15, 'Elf', 'Elves craft and use these weapons.'),
(225, 15, 'Fatal', 'The fatal trait includes a die size. On a critical hit, the weapon’s damage die increases to that die size instead of the normal die size, and the weapon adds one additional damage die of the listed size.'),
(226, 15, 'Finesse', 'You can use your Dexterity modifier instead of your Strength modifier on attack rolls using this melee weapon. You still use your Strength modifier when calculating damage.'),
(227, 15, 'Forceful', 'This weapon becomes more dangerous as you build momentum. When you attack with it more than once on your turn, the second attack gains a circumstance bonus to damage equal to the number of weapon damage dice, and each subsequent attack gains a circumstance bonus to damage equal to double the number of weapon damage dice.'),
(228, 15, 'Free-Hand', 'This weapon doesn’t take up your hand, usually because it is built into your armor. A free-hand weapon can’t be Disarmed. You can use the hand covered by your free-hand weapon to wield other items, perform manipulate actions, and so on. You can’t attack with a free-hand weapon if you’re wielding anything in that hand or otherwise using that hand. When you’re not wielding anything and not otherwise using the hand, you can use abilities that require you to have a hand free as well as those that require you to be wielding a weapon in that hand. Each of your hands can have only one free-hand weapon on it.'),
(229, 15, 'Gnome', 'Gnomes craft and use these weapons.'),
(230, 15, 'Goblin', 'Goblins craft and use these weapons.'),
(231, 15, 'Grapple', 'You can use this weapon to Grapple with the Athletics skill even if you don’t have a free hand. This uses the weapon’s reach (if different from your own) and adds the weapon’s item bonus to attack rolls as an item bonus to the Athletics check. If you critically fail a check to Grapple using the weapon, you can drop the weapon to take the effects of a failure instead of a critical failure.'),
(232, 15, 'Halfling', 'Halflings craft and use these weapons.'),
(233, 15, 'Jousting', 'The weapon is suited for mounted combat with a harness or similar means. When mounted, if you moved at least 10 feet on the action before your attack, add a circumstance bonus to damage for that attack equal to the number of damage dice for the weapon. In addition, while mounted, you can wield the weapon in one hand, changing the damage die to the listed value.'),
(234, 15, 'Monk', 'Many monks learn to use these weapons.'),
(235, 15, 'Nonlethal', 'Attacks with this weapon are nonlethal, and are used to knock creatures unconscious instead of kill them. You can use a nonlethal weapon to make a lethal attack with a –2 circumstance penalty.'),
(236, 15, 'Orc', 'Orcs craft and use these weapons.'),
(237, 15, 'Parry', 'This weapon can be used defensively to block attacks. While wielding this weapon, if your proficiency with it is trained or better, you can spend an Interact action to position your weapon defensively, gaining a +1 circumstance bonus to AC until the start of your next turn.'),
(238, 15, 'Propulsive', 'You add half your Strength modifier (if positive) to damage rolls with a propulsive ranged weapon. If you have a negative Strength modifier, you add your full Strength modifier instead.'),
(239, 15, 'Range', 'These attacks will either list a finite range or a range increment, which follows the normal rules for range increments.'),
(240, 15, 'Ranged Trip', 'This weapon can be used to Trip with the '),
(241, 15, 'Reach', 'Natural attacks with this trait can be used to attack creatures up to the listed distance away instead of only adjacent creatures.'),
(242, 15, 'Shove', 'You can use this weapon to Shove with the Athletics skill even if you don’t have a free hand. This uses the weapon’s reach (if different from your own) and adds the weapon’s item bonus to attack rolls as an item bonus to the Athletics check. If you critically fail a check to Shove using the weapon, you can drop the weapon to take the effects of a failure instead of a critical failure.'),
(243, 15, 'Sweep', 'This weapon makes wide sweeping or spinning attacks, making it easier to attack multiple enemies. When you attack with this weapon, you gain a +1 circumstance bonus to your attack roll if you already attempted to attack a different target this turn using this weapon.'),
(244, 15, 'Tethered', 'This weapon is attached to a length of rope or chain that allows you to retrieve it after it has left your hand. If you have a free hand while wielding this weapon, you can use an '),
(245, 15, 'Thrown', 'You can throw this weapon as a ranged attack. A thrown weapon adds your Strength modifier to damage just like a melee weapon does. When this trait appears on a melee weapon, it also includes the range increment. Ranged weapons with this trait use the range increment specified in the weapon’s Range entry.'),
(246, 15, 'Trip', 'You can use this weapon to Trip with the Athletics skill even if you don’t have a free hand. This uses the weapon’s reach (if different from your own) and adds the weapon’s item bonus to attack rolls as an item bonus to the Athletics check. If you critically fail a check to Trip using the weapon, you can drop the weapon to take the effects of a failure instead of a critical failure.'),
(247, 15, 'Twin', 'These weapons are used as a pair, complementing each other. When you attack with a twin weapon, you add a circumstance bonus to the damage roll equal to the weapon’s number of damage dice if you have previously attacked with a different weapon of the same type this turn. The weapons must be of the same type to benefit from this trait, but they don’t need to have the same runes.'),
(248, 15, 'Two-Hand', 'This weapon can be wielded with two hands. Doing so changes its weapon damage die to the indicated value. This change applies to all the weapon’s damage dice, such as those from '),
(249, 15, 'Unarmed', 'An unarmed attack uses your body rather than a manufactured weapon. An unarmed attack isn’t a weapon, though it’s categorized with weapons for weapon groups, and it might have weapon traits. Since it’s part of your body, an unarmed attack can’t be Disarmed. It also doesn’t take up a hand, though a fist or other grasping appendage follows the same rules as a free-hand weapon.'),
(250, 15, 'Versatile', 'A versatile weapon can be used to deal a different type of damage than that listed in the Damage entry. This trait indicates the alternate damage type. For instance, a piercing weapon that is versatile S can be used to deal piercing or slashing damage. You choose the damage type each time you make an attack.'),
(251, 15, 'Volley', 'This ranged weapon is less effective at close distances. Your attacks against targets that are at a distance within the range listed take a –2 penalty.'),
(255, 15, 'Thrown 10ft.', 'You can throw this weapon as a ranged attack. A thrown weapon adds your Strength modifier to damage just like a melee weapon does. When this trait appears on a melee weapon, it also includes the range increment. Ranged weapons with this trait use the range increment specified in the weapon’s Range entry.'),
(256, 15, 'Thrown 20ft.', 'You can throw this weapon as a ranged attack. A thrown weapon adds your Strength modifier to damage just like a melee weapon does. When this trait appears on a melee weapon, it also includes the range increment. Ranged weapons with this trait use the range increment specified in the weapon’s Range entry.'),
(257, 15, 'Deadly d8', 'On a critical hit, the weapon adds a weapon damage die of the listed size. Roll this after doubling the weapon’s damage. This increases to two dice if the weapon has a '),
(258, 15, 'Deadly d10', 'On a critical hit, the weapon adds a weapon damage die of the listed size. Roll this after doubling the weapon’s damage. This increases to two dice if the weapon has a '),
(259, 15, 'Versatile S', 'A versatile weapon can be used to deal a different type of damage than that listed in the Damage entry. This trait indicates the alternate damage type. For instance, a piercing weapon that is versatile S can be used to deal piercing or slashing damage. You choose the damage type each time you make an attack.'),
(260, 15, 'Versatile P', 'A versatile weapon can be used to deal a different type of damage than that listed in the Damage entry. This trait indicates the alternate damage type. For instance, a piercing weapon that is versatile S can be used to deal piercing or slashing damage. You choose the damage type each time you make an attack.'),
(261, 15, 'Versatile B', 'A versatile weapon can be used to deal a different type of damage than that listed in the Damage entry. This trait indicates the alternate damage type. For instance, a piercing weapon that is versatile S can be used to deal piercing or slashing damage. You choose the damage type each time you make an attack.'),
(262, 15, 'Two-Hand d8', 'This weapon can be wielded with two hands. Doing so changes its weapon damage die to the indicated value. This change applies to all the weapon’s damage dice, such as those from '),
(263, 15, 'Two-Hand d10', 'This weapon can be wielded with two hands. Doing so changes its weapon damage die to the indicated value. This change applies to all the weapon’s damage dice, such as those from '),
(264, 15, 'Two-Hand d12', 'This weapon can be wielded with two hands. Doing so changes its weapon damage die to the indicated value. This change applies to all the weapon’s damage dice, such as those from '),
(265, 15, 'Fatal d8', 'The fatal trait includes a die size. On a critical hit, the weapon’s damage die increases to that die size instead of the normal die size, and the weapon adds one additional damage die of the listed size.'),
(266, 15, 'Fatal d10', 'The fatal trait includes a die size. On a critical hit, the weapon’s damage die increases to that die size instead of the normal die size, and the weapon adds one additional damage die of the listed size.'),
(267, 15, 'Fatal d12', 'The fatal trait includes a die size. On a critical hit, the weapon’s damage die increases to that die size instead of the normal die size, and the weapon adds one additional damage die of the listed size.'),
(268, 15, 'Jousting d6', 'The weapon is suited for mounted combat with a harness or similar means. When mounted, if you moved at least 10 feet on the action before your attack, add a circumstance bonus to damage for that attack equal to the number of damage dice for the weapon. In addition, while mounted, you can wield the weapon in one hand, changing the damage die to the listed value.'),
(269, 15, 'Volley 30 ft.', 'This ranged weapon is less effective at close distances. Your attacks against targets that are at a distance within the range listed take a –2 penalty.');
-64
View File
@@ -1,64 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
INSERT INTO triggers (
triggers_id,
triggers_descr
)
VALUES
(1, 'An ally ends a move action adjacent to you.'),
(2, 'You fail a skill check or saving throw.'),
(3, 'You attempt a check using a skill you’re untrained in.'),
(4, 'You would be reduced to 0 Hit Points but not immediately killed.'),
(5, 'You attempt a saving throw against a spell or magical effect, before rolling.'),
(6, 'You bring a foe to 0 Hit Points.'),
(7, 'You use Quick Alchemy to craft an alchemical bomb with a level at least 1 lower than your advanced alchemy level.'),
(8, 'You use Quick Alchemy to craft an alchemical item that has the elixer trait and is at least 2 levels lower than your advanced alchemy level.'),
(9, 'You use Quick Alchemy to craft an alchemical bomb that is at least 2 levels lower than your advanced alchemy level.'),
(10, 'You craft an elixer of life using Quick Alchemy, and that elixir is at least 2 levels lower than your advanced alchemy level.'),
(11, 'You craft an alchemical bomb using Quick Alchemy that’s at least 2 levels lower than your advanced alchemy level.'),
(12, 'A foe within reach attempts to move away from you.'),
(13, 'You take damage and are capable of entering a rage.'),
(14, 'A creature within your reach uses a manipulate action or a move action, makes a ranged attack, or leaves a square during a move action it’s using.'),
(15, 'Your melee Strike kills a creature or knocks it unconscious, and another foe is adjacent to that creature.'),
(16, 'A creature within your reach succeeds or critically succeeds at an attack against you.'),
(17, 'Your turn begins, and you are at half or fewer Hit Points.'),
(18, 'You fail or critically fail an attack roll or Will save.'),
(19, 'You attempt a save against a spell, before you roll.'),
(20, 'A foe’s attack against an ally matches the trigger for both your Shield Block reaction and your champion’s reaction.'),
(21, 'You finish Casting a Spell using one of your divine spell slots on your turn.'),
(22, 'You critically hit a creature that is not on its home plane.'),
(23, 'An opponent adjacent to you critically hits you with a melee weapon or melee unarmed attack.'),
(24, 'An enemy hits you with a melee Strike.'),
(25, 'You use the Shield Block reaction, and the opponent that triggered Shield Block is adjacent to you and is your size or smaller.'),
(26, 'An ally within your melee reach is hit by an attack, you can see the attacker, and the ally gaining a +2 circumstance bonus to AC would turn the critical hit into a hit or the hit into a miss.'),
(27, 'A creature within your reach critically fails a Strike against you.'),
(28, 'An opponent casting a spell that targets you critically fails a speel attack roll against your AC.'),
(29, 'You complete the last action on your turn, and your turn has not ended yet.'),
(30, 'You roll initiative.'),
(31, 'You are the target of a physical ranged attack.'),
(32, 'A creature within your reach uses a move action or leaves a square during a move action it’s using.'),
(33, 'You are targeted with a melee attack by an attacker you can see.'),
(34, 'Your turn ends and you have a status penalty to your Speed or are immobilized or slowed.'),
(35, 'An enemy’s attack hits you or you fail a saving throw against an enemy’s ability.'),
(36, 'Your hunted prey is within your reach, and it uses a manipulate action, uses a move action, or leaves a square during a move action it’s using.'),
(37, 'You are about to roll a Perception or Survival check for initiative.'),
(38, 'You fail a check to Seek.'),
(39, 'A creature targets you with an attack and you can see the attacker.'),
(40, 'You reduce an enemy to 0 hit points.'),
(41, 'An adjacent foe moves away from you, and you can reach at least one space adjacent to the foe with a Stride action.'),
(42, 'A trap within your reach is triggered.'),
(43, 'A creature within your melee reach is hit by a melee attack from one of your allies.'),
(44, 'The attack roll for a Strike targeting you fails or critically fails.'),
(45, 'An adjacent enemy begins to use a reaction.'),
(46, 'A physical attack would reduce you to 0 Hit Points.'),
(47, 'Your turn ends.'),
(48, 'You specify the trigger when your daily preparations(see Requirements).'),
(49, 'You successfully use Stealth to Hide and become hidden from all of your current foes, or use Stealth to Sneak and become undetected to all your current foes.'),
(50, 'You would be hit by an attack or targeted by an effect, or you are within an effect’s area.'),
(51, 'A creature casts a spell that you have in your repertoire.'),
(52, 'A creature Casts a Spell that you have prepared.'),
(53, 'A creature within line of sight casts a spell that you don’t have prepared or in your spell repertoire, or a trap or similar object casts such a spell. You must be aware of the casting.'),
(54, 'While you have your shield raised, you would take damage from a physical attack.');
-356
View File
@@ -1,356 +0,0 @@
-- -*- mode:sql sql-product:sqlite -*-
PRAGMA foreign_keys = ON; -- database requires foreign key checking to be turned
-- on PER CONNECTION
-- TODO Insert descriptions from pgs 283-84
BEGIN TRANSACTION;
INSERT INTO weapongroups VALUES(1,1,'283','Axe','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(2,1,'284','Bomb','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(3,1,'284','Bow','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(4,1,'284','Brawling','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(5,1,'284','Club','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(6,1,'284','Dart','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(7,1,'284','Flail','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(8,1,'284','Hammer','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(9,1,'284','Knife','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(10,1,'284','Pick','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(11,1,'284','Polearm','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(12,1,'284','Shield','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(13,1,'284','Sling','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(14,1,'284','Spear','TODO descr from pg 283-84');
INSERT INTO weapongroups VALUES(15,1,'284','Sword','TODO descr from pg 283-84');
COMMIT;
BEGIN TRANSACTION;
INSERT INTO weaponcategories VALUES(1, 'Unarmed');
INSERT INTO weaponcategories VALUES(2, 'Simple');
INSERT INTO weaponcategories VALUES(3, 'Martial');
INSERT INTO weaponcategories VALUES(4, 'Advanced');
COMMIT;
BEGIN TRANSACTION;
INSERT INTO weapons VALUES(0,1,'280',1,4,'0',4,1,'0','1',NULL,NULL,'Fist','Nethys Note: no description was provided for this item');
INSERT INTO weapons VALUES(1,1,'280',2,9,'2',4,2,'0.1','1',NULL,NULL,'Clan Dagger','This broad dagger is carried by dwarves as a weapon, tool, and designation of clan. Losing or having to surrender a clan dagger is considered a mark of embarrassment to most dwarves.');
INSERT INTO weapons VALUES(2,1,'280',2,5,'0',6,1,'1','1',NULL,NULL,'Club','This is a piece of stout wood shaped or repurposed to bludgeon an enemy. Clubs can be intricately carved pieces of martial art or as simple as a tree branch or piece of wood.');
INSERT INTO weapons VALUES(3,1,'280',2,9,'0.2',4,2,'0.1','1',NULL,NULL,'Dagger','This small, bladed weapon is held in one hand and used to stab a creature in close combat. It can also be thrown.');
INSERT INTO weapons VALUES(4,1,'280',2,4,'0.2',4,1,'0.1','1',NULL,NULL,'Gauntlet','A pair of these metal gloves comes with full plate, half plate, and splint armor; they can also be purchased separately and worn with other types of armor. They not only protect your hands but also transform your hands into lethal weapons.');
INSERT INTO weapons VALUES(5,1,'280',2,9,'0.3',4,2,'0.1','1',NULL,NULL,'Katar','Also known as punching daggers, katars are characterized by their H-shaped hand grip that allows the blade to jut out from the knuckles.');
INSERT INTO weapons VALUES(6,1,'280',2,5,'0.4',4,1,'0.1','1',NULL,NULL,'Light Mace','A light mace has a short wooden or metal shaft ending with a dense metal head. Used much like a club, it delivers heavy bludgeoning blows, but with extra power derived from the head’s metal ridges or spikes.');
INSERT INTO weapons VALUES(7,1,'280',2,14,'0.5',8,2,'2','2',NULL,NULL,'Longspear','This very long spear, sometimes called a pike, is purely for thrusting rather than throwing. Used by many soldiers and city watch for crowd control and defense against charging enemies, it must be wielded with two hands.');
INSERT INTO weapons VALUES(8,1,'280',2,5,'1',6,1,'1','1',NULL,NULL,'Mace','With a stout haft and a heavy metal head, a mace is sturdy and allows its wielder to deliver powerful blows and dent armor.');
INSERT INTO weapons VALUES(9,1,'280',2,5,'1',6,1,'1','1',NULL,NULL,'Morningstar','This weapon has a short shaft ending in a metal ball studded with spikes.');
INSERT INTO weapons VALUES(10,1,'280',2,9,'0.2',4,3,'0.1','1',NULL,NULL,'Sickle','Originally a farming tool used for reaping grain, this one-handed weapon has a short wooden handle ending in a curved blade, sometimes sharpened on both sides.');
INSERT INTO weapons VALUES(11,1,'280',2,14,'0.1',6,2,'1','1',NULL,NULL,'Spear','A long metal shaft ending with a metal spike, a spear can be used one-handed as a melee weapon and can be thrown.');
INSERT INTO weapons VALUES(12,1,'280',2,4,'0.3',4,2,'0.1','1',NULL,NULL,'Spiked Gauntlet','Providing the same defensive function as a standard gauntlet, this version has a group of spikes protruding from the knuckles to deliver piercing damage with a punch.');
INSERT INTO weapons VALUES(13,1,'280',2,5,'0',4,1,'1','1',NULL,NULL,'Staff','This long piece of wood can aid in walking and deliver a mighty blow.');
INSERT INTO weapons VALUES(14,1,'280',3,15,'4',8,3,'1','1',NULL,NULL,'Bastard Sword','This broad-bladed sword, sometimes called the hand‑and‑a‑half sword, has a longer grip so it can be held in one hand or used with two hands to provide extra piercing or slashing power.');
INSERT INTO weapons VALUES(15,1,'280',3,1,'0.1',8,3,'1','1',NULL,NULL,'Battle Axe','These axes are designed explicitly as weapons, rather than tools. They typically weigh less, with a shaft reinforced with metal bands or bolts, and have a sharper blade, making them ideal for chopping limbs rather than wood.');
INSERT INTO weapons VALUES(16,1,'280',3,5,'0.2',8,1,'2','2',NULL,NULL,'Bo Staff','This strong but slender staff is tapered at the ends and well balanced. It’s designed to be an offensive and defensive weapon.');
INSERT INTO weapons VALUES(17,1,'280',3,15,'0.1',6,3,'0.1','1',NULL,NULL,'Dogslicer','This short, curved, and crude makeshift blade often has holes drilled into it to reduce its weight. It’s a favored weapon of goblins.');
INSERT INTO weapons VALUES(18,1,'281',3,15,'4',8,3,'2','2',NULL,NULL,'Elven Curve Blade','Essentially a longer version of the scimitar, this traditional elven weapon has a thinner blade than its cousin.');
INSERT INTO weapons VALUES(19,1,'280',3,15,'3',10,3,'2','2',NULL,NULL,'Falchion','This weapon is a heavier, two-handed version of the curved-bladed scimitar. It is weighted toward the blade’s end, making it a powerful slashing weapon.');
INSERT INTO weapons VALUES(20,1,'281',3,14,'1',4,2,'0.1','1',NULL,NULL,'Filcher''s Fork','This halfling weapon looks like a long, two-pronged fork and is used as both a weapon and a cooking implement.');
INSERT INTO weapons VALUES(21,1,'280',3,7,'1',6,1,'1','1',NULL,NULL,'Flail','This weapon consists of a wooden handle attached to a spiked ball or cylinder by a chain, rope, or strap of leather.');
INSERT INTO weapons VALUES(22,1,'280',3,11,'2',8,3,'2','2',NULL,NULL,'Glaive','This polearm consists of a long, single-edged blade on the end of a 7-foot pole. It is extremely effective at delivering lethal cuts at a distance.');
INSERT INTO weapons VALUES(23,1,'281',3,8,'2',6,1,'1','1',NULL,NULL,'Gnome Hooked Hammer','This gnome tool and weapon features a hammer at one end and a curved pick on the other. It’s such a strange and awkward weapon that others think the gnomes are slightly erratic for using it.');
INSERT INTO weapons VALUES(24,1,'280',3,1,'1',12,3,'2','2',NULL,NULL,'Greataxe','This large battle axe is too heavy to wield with only one hand. Many greataxes incorporate two blades, and they are often “bearded,” having a hook at the bottom to increase the strength of their chopping power.');
INSERT INTO weapons VALUES(25,1,'280',3,5,'1',10,1,'2','2',NULL,NULL,'Greatclub','While many greatclubs are intricately carved, others are little more than a sturdy tree branch. These massive clubs are too heavy to wield with only one hand.');
INSERT INTO weapons VALUES(26,1,'280',3,10,'2',10,2,'2','2',NULL,NULL,'Greatpick','This pick has a longer handle and broader head than a regular pick. It is too heavy to wield in one hand.');
INSERT INTO weapons VALUES(27,1,'280',3,15,'2',12,3,'2','2',NULL,NULL,'Greatsword','This immense two-handed sword is nearly as tall as its wielder. Its lower blade is often somewhat dulled to allow it to be gripped for extra leverage in close-quarter fights.');
INSERT INTO weapons VALUES(28,1,'280',3,11,'2',10,3,'2','2',NULL,NULL,'Guisarme','This polearm bears a long, often one‑sided, curved blade with a hook protruding from the blunt side of the blade, which can allow its wielder to trip opponents at a distance. Its shaft is usually 8 feet long.');
INSERT INTO weapons VALUES(29,1,'280',3,11,'2',10,2,'2','2',NULL,NULL,'Halberd','This polearm has a relatively short, 5-foot shaft. The business end is a long spike with an axe blade attached.');
INSERT INTO weapons VALUES(30,1,'280',3,1,'0.4',6,3,'0.1','1',NULL,NULL,'Hatchet','This small axe can be used in close combat or thrown.');
INSERT INTO weapons VALUES(31,1,'281',3,11,'0.9',8,3,'2','2',NULL,NULL,'Horsechopper','Created by goblins to battle horses, this weapon is essentially a long shaft ending in a blade with a large hook.');
INSERT INTO weapons VALUES(32,1,'281',3,9,'1',6,3,'0.1','1',NULL,NULL,'Kama','Similar to a sickle and used in some regions to reap grain, a kama has a short, slightly curved blade and a wooden handle.');
INSERT INTO weapons VALUES(33,1,'281',3,15,'2',6,3,'1','1',NULL,NULL,'Katana','A katana is a curved, single-edged sword known for its wickedly sharped blade.');
INSERT INTO weapons VALUES(34,1,'281',3,9,'0.6',6,3,'0.1','1',NULL,NULL,'Kukri','The blade of this foot-long knife curves inward and lacks a cross guard at the hilt.');
INSERT INTO weapons VALUES(35,1,'280',3,14,'1',8,2,'2','2',NULL,NULL,'Lance','This spear-like weapon is used by a mounted creature to deal a great deal of damage.');
INSERT INTO weapons VALUES(36,1,'281',3,8,'0.3',6,1,'0.1','1',NULL,NULL,'Light Hammer','This smaller version of the warhammer has a wooden or metal shaft ending in a metal head. Unlike its heavier cousin, it is light enough to throw.');
INSERT INTO weapons VALUES(37,1,'281',3,10,'0.4',4,2,'0.1','1',NULL,NULL,'Light Pick','A light pick is a modified mining implement with a wooden shaft ending in a pick head crafted more to pierce armor and flesh than chip rocks.');
INSERT INTO weapons VALUES(38,1,'281',3,15,'1',8,3,'1','1',NULL,NULL,'Longsword','Longswords can be one-edged or two‑edged swords. Their blades are heavy and they’re between 3 and 4 feet in length.');
INSERT INTO weapons VALUES(39,1,'281',3,9,'0.5',4,2,'0.1','1',NULL,NULL,'Main-gauche','This parrying dagger features a robust guard to protect the wielder’s hand.');
INSERT INTO weapons VALUES(40,1,'281',3,8,'3',12,1,'2','2',NULL,NULL,'Maul','Mauls are massive warhammers that must be swung with two hands.');
INSERT INTO weapons VALUES(41,1,'281',3,5,'0.2',6,1,'0.1','1',NULL,NULL,'Nunchaku','The nunchaku is constructed of two wooden or metal bars connected by a short length of rope or chain.');
INSERT INTO weapons VALUES(42,1,'281',3,9,'0.7',6,2,'0.1','1',NULL,NULL,'Orc Knuckle Dagger','This stout, metal blade of orc design has a horizontal basket hilt with blades jutting from each end, or sometimes one blade like that of a katar.');
INSERT INTO weapons VALUES(43,1,'281',3,10,'0.7',6,2,'1','1',NULL,NULL,'Pick','A pick designed solely for combat has a sturdy wooden shaft and a heavy, pointed head to deliver devastating blows.');
INSERT INTO weapons VALUES(44,1,'281',3,11,'2',10,2,'2','2',NULL,NULL,'Ranseur','This polearm is a long trident with a central prong that’s longer than the other two.');
INSERT INTO weapons VALUES(45,1,'281',3,15,'2',6,2,'1','1',NULL,NULL,'Rapier','The rapier is a long and thin piercing blade with a basket hilt. It is prized among many as a dueling weapon.');
INSERT INTO weapons VALUES(46,1,'281',3,9,'0.6',4,2,'0.1','1',NULL,NULL,'Sai','This piercing dagger is a metal spike flanked by a pair of prongs that can be used to trap an enemy’s weapon.');
INSERT INTO weapons VALUES(47,1,'281',3,5,'0.1',6,1,'0.1','1',NULL,NULL,'Sap','A sap has a soft wrapping around a dense core, typically a leather sheath around a lead rod. Its head is wider than its grip to disperse the force of a blow, as the weapon’s purpose is to knock out its victim rather than to draw blood.');
INSERT INTO weapons VALUES(48,1,'281',3,15,'1',6,3,'1','1',NULL,NULL,'Scimitar','This one-handed curved blade is sharp on one side.');
INSERT INTO weapons VALUES(49,1,'281',3,11,'2',10,3,'2','2',NULL,NULL,'Scythe','Derived from a farming tool used to mow down long grains and cereals, this weapon has a long wooden shaft with protruding handles, capped with a curved blade set at a right angle.');
INSERT INTO weapons VALUES(50,1,'281',3,12,'0',4,1,'0','1',NULL,NULL,'Shield Bash','A shield bash is not actually a weapon, but a maneuver in which you thrust or swing your shield to hit your foe with an impromptu attack.');
INSERT INTO weapons VALUES(51,1,'281',3,12,'0.5',6,1,'0','1',NULL,NULL,'Shield Boss','Typically a round, convex, or conical piece of thick metal attached to the center of a shield, a shield boss increases the bludgeoning damage of a shield bash.');
INSERT INTO weapons VALUES(52,1,'281',3,12,'0.5',6,2,'0','1',NULL,NULL,'Shield Spikes','These metal spikes are strategically placed on the defensive side of the shield to deal piercing damage with a shield bash.');
INSERT INTO weapons VALUES(53,1,'281',3,15,'0.9',6,2,'0.1','1',NULL,NULL,'Shortsword','These blades come in a variety of shapes and styles, but they are typically 2 feet long.');
INSERT INTO weapons VALUES(54,1,'281',3,7,'3',8,3,'1','2',NULL,NULL,'Spiked Chain','This 4‑foot‑long length of chain is covered with barbs and has spikes on one or both ends. Some feature metal hoops used as handgrips.');
INSERT INTO weapons VALUES(55,1,'281',3,9,'2',4,2,'0.1','1',NULL,NULL,'Starknife','From a central metal ring, four tapering metal blades extend like points on a compass rose. When gripping a starknife from the center, the wielder can use it as a melee weapon. It can also be thrown short distances.');
INSERT INTO weapons VALUES(56,1,'281',3,15,'2',8,3,'1','1',NULL,NULL,'Temple Sword','This heavy blade is favored by guardians of religious sites. It has a distinctive, crescent-shaped blade that seems to be a mix of a sickle and sword. It often has holes drilled into the blade or the pommel so that bells or other holy trinkets can be affixed to the weapon as an aid for prayer or mediation.');
INSERT INTO weapons VALUES(57,1,'281',3,14,'1',8,2,'1','1',NULL,NULL,'Trident','This three-pronged, spear-like weapon typically has a 4-foot shaft. Like a spear, it can be wielded with one hand or thrown.');
INSERT INTO weapons VALUES(58,1,'281',3,7,'2',10,1,'2','2',NULL,NULL,'War Flail','');
INSERT INTO weapons VALUES(59,1,'281',3,8,'1',8,1,'1','1',NULL,NULL,'Warhammer','This weapon has a wooden shaft ending in a large, heavy metal head. The head of the hammer might be single-sided or double-sided, but it’s always capable of delivering powerful bludgeoning blows.');
INSERT INTO weapons VALUES(60,1,'281',3,7,'0.1',4,3,'1','1',NULL,NULL,'Whip','This long strand of thick leather, often braided, delivers a painful but nonlethal slash at a distance, usually accompanied by a distinctive cracking sound.');
INSERT INTO weapons VALUES(61,2,'85',4,5,'5',6,1,'1','1',NULL,NULL,'Aklys','');
INSERT INTO weapons VALUES(62,1,'281',4,1,'3',8,3,'2','1',NULL,NULL,'Dwarven War Axe','This favored weapon of the dwarves has a large, ornate head mounted on a thick handle. This powerful axe can be wielded with one hand or two.');
INSERT INTO weapons VALUES(63,1,'281',4,7,'3',8,1,'2','1',NULL,NULL,'Gnome Flickmace','More a flail than a mace, this weapon has a short handle attached to a length of chain with a ball at the end. The ball is propelled to its reach with the flick of the wrist, the momentum of which brings the ball back to the wielder after the strike.');
INSERT INTO weapons VALUES(64,1,'281',4,1,'2',8,3,'1','1',NULL,NULL,'Orc Necksplitter','This single-bladed bearded axe has a jagged blade that’s perfect for separating bone from tendon and cartilage.');
INSERT INTO weapons VALUES(65,1,'281',4,15,'5',8,3,'0.1','1',NULL,NULL,'Sawtooth Saber','The signature weapon of the Red Mantis assassins, this curved blade is serrated like a saw, hence the name.');
INSERT INTO weapons VALUES(66,2,'253',4,10,'1',10,2,'2','2',NULL,NULL,'Ogre Hook','Ogres are known for using immense, curved picks called ogre hooks.');
INSERT INTO weapons VALUES(67,1,'281',2,6,'0.1',1,2,'0.1','1',20,'1','Blowgun','This long, narrow tube is used for shooting blowgun darts, using only the power of a forcefully exhaled breath.');
INSERT INTO weapons VALUES(68,1,'281',2,3,'3',8,2,'1','2',120,'1','Crossbow','This ranged weapon has a bow-like assembly mounted on a handled frame called a tiller. The tiller has a mechanism to lock the bowstring in place, attached to a trigger mechanism that releases the tension and launches a bolt.');
INSERT INTO weapons VALUES(69,1,'281',2,6,'0.01',4,2,'0.1','1',20,'','Dart','This thrown weapon is larger than an arrow but shorter than a javelin. It typically has a short shaft of wood ending in a metal tip and is sometimes stabilized by feathers or fur.');
INSERT INTO weapons VALUES(70,1,'281',2,3,'3',6,2,'0.1','1',60,'1','Hand Crossbow','Sometimes referred to as an alley bow by rogues or ruffians, this small crossbow fires small bolts that are sometimes used to deliver poison to the target. It''s small enough to be shot one-handed, but it still requires two hands to load.');
INSERT INTO weapons VALUES(71,1,'281',2,3,'4',10,2,'2','2',120,'2','Heavy Crossbow','This large crossbow is harder to load and more substantial than a regular crossbow, but it packs a greater punch.');
INSERT INTO weapons VALUES(72,1,'282',2,6,'0.1',6,2,'0.1','1',30,'','Javelin','This thin spear is well balanced for throwing but is not designed for melee use.');
INSERT INTO weapons VALUES(73,1,'282',2,13,'0',6,1,'0.1','1',50,'1','Sling','Little more than a leather cup attached to a pair of straps, a sling can be used to fling smooth stones or sling bullets at a range.');
INSERT INTO weapons VALUES(74,1,'282',3,2,'','',NULL,'0.1','1',20,'','Alchemical Bomb','These bombs come in a variety of types and levels of power, but no matter the variety, you throw the bomb at the target and it explodes, unleashing its alchemical blast.');
INSERT INTO weapons VALUES(75,1,'282',3,3,'20',8,2,'2','1+',100,'0','Composite Longbow','This projectile weapon is made from horn, wood, and sinew laminated together to increase the power of its pull and the force of its projectile. Like all longbows, its great size also increases the bow''s range and power. You must use two hands to fire it, and it cannot be used while mounted. Any time an ability is specifically restricted to a longbow, such as Erastil''s favored weapon, it also applies to composite longbows unless otherwise stated.');
INSERT INTO weapons VALUES(76,1,'282',3,3,'14',6,2,'1','1+',60,'0','Composite Shortbow','This shortbow is made from horn, wood, and sinew laminated together to increase the power of its pull and the force of its projectile. Its compact size and power make it a favorite of mounted archers. Any time an ability is specifically restricted to a shortbow, it also applies to composite shortbows unless otherwise stated.');
INSERT INTO weapons VALUES(77,1,'282',3,13,'5',10,1,'1','2',80,'1','Halfling Sling Staff','This staff ends in a Y-shaped split that cradles a sling. The length of the staff provides excellent leverage when used two‑handed to fling rocks or bullets from the sling.');
INSERT INTO weapons VALUES(78,1,'282',3,3,'6',8,2,'2','1+',100,'0','Longbow','This 5-foot-tall bow, usually made of a single piece of elm, hickory, or yew, has a powerful draw and is excellent at propelling arrows with great force and at an extreme distance. You must use two hands to fire a longbow, and it can''t be used while mounted.');
INSERT INTO weapons VALUES(79,1,'282',3,3,'3',6,2,'1','1+',60,'0','Shortbow','This smaller bow is made of a single piece of wood and favored by skirmishers and cavalry.');
INSERT INTO weapons VALUES(80,1,'282',3,6,'0.01',4,2,'','1',20,'0','Shuriken','This throwing star is a small piece of flat metal with sharp edges, designed to be flung with a flick of the wrist.');
COMMIT;
BEGIN TRANSACTION;
INSERT INTO weapons_traits VALUES(1,0,217);
INSERT INTO weapons_traits VALUES(2,0,226);
INSERT INTO weapons_traits VALUES(3,0,235);
INSERT INTO weapons_traits VALUES(4,0,249);
INSERT INTO weapons_traits VALUES(5,1,203);
INSERT INTO weapons_traits VALUES(6,1,217);
INSERT INTO weapons_traits VALUES(7,1,223);
INSERT INTO weapons_traits VALUES(8,1,237);
INSERT INTO weapons_traits VALUES(9,1,261);
INSERT INTO weapons_traits VALUES(10,2,245);
INSERT INTO weapons_traits VALUES(11,3,217);
INSERT INTO weapons_traits VALUES(12,3,226);
INSERT INTO weapons_traits VALUES(13,3,245);
INSERT INTO weapons_traits VALUES(14,3,250);
INSERT INTO weapons_traits VALUES(15,3,259);
INSERT INTO weapons_traits VALUES(16,4,217);
INSERT INTO weapons_traits VALUES(17,4,228);
INSERT INTO weapons_traits VALUES(18,5,98);
INSERT INTO weapons_traits VALUES(19,5,203);
INSERT INTO weapons_traits VALUES(20,5,217);
INSERT INTO weapons_traits VALUES(21,5,221);
INSERT INTO weapons_traits VALUES(22,5,234);
INSERT INTO weapons_traits VALUES(23,6,217);
INSERT INTO weapons_traits VALUES(24,6,226);
INSERT INTO weapons_traits VALUES(25,6,242);
INSERT INTO weapons_traits VALUES(26,7,241);
INSERT INTO weapons_traits VALUES(27,8,242);
INSERT INTO weapons_traits VALUES(28,9,250);
INSERT INTO weapons_traits VALUES(29,9,260);
INSERT INTO weapons_traits VALUES(30,10,217);
INSERT INTO weapons_traits VALUES(31,10,226);
INSERT INTO weapons_traits VALUES(32,10,246);
INSERT INTO weapons_traits VALUES(33,11,245);
INSERT INTO weapons_traits VALUES(34,12,217);
INSERT INTO weapons_traits VALUES(35,12,228);
INSERT INTO weapons_traits VALUES(36,13,248);
INSERT INTO weapons_traits VALUES(37,13,262);
INSERT INTO weapons_traits VALUES(38,14,248);
INSERT INTO weapons_traits VALUES(39,14,264);
INSERT INTO weapons_traits VALUES(40,15,243);
INSERT INTO weapons_traits VALUES(41,16,234);
INSERT INTO weapons_traits VALUES(42,16,237);
INSERT INTO weapons_traits VALUES(43,16,241);
INSERT INTO weapons_traits VALUES(44,16,246);
INSERT INTO weapons_traits VALUES(45,17,203);
INSERT INTO weapons_traits VALUES(46,17,217);
INSERT INTO weapons_traits VALUES(47,17,219);
INSERT INTO weapons_traits VALUES(48,17,226);
INSERT INTO weapons_traits VALUES(49,17,230);
INSERT INTO weapons_traits VALUES(50,18,224);
INSERT INTO weapons_traits VALUES(51,18,226);
INSERT INTO weapons_traits VALUES(52,18,227);
INSERT INTO weapons_traits VALUES(53,19,227);
INSERT INTO weapons_traits VALUES(54,19,243);
INSERT INTO weapons_traits VALUES(55,20,203);
INSERT INTO weapons_traits VALUES(56,20,217);
INSERT INTO weapons_traits VALUES(57,20,219);
INSERT INTO weapons_traits VALUES(58,20,221);
INSERT INTO weapons_traits VALUES(59,20,226);
INSERT INTO weapons_traits VALUES(60,20,232);
INSERT INTO weapons_traits VALUES(61,20,245);
INSERT INTO weapons_traits VALUES(62,21,222);
INSERT INTO weapons_traits VALUES(63,21,243);
INSERT INTO weapons_traits VALUES(64,21,246);
INSERT INTO weapons_traits VALUES(65,22,221);
INSERT INTO weapons_traits VALUES(66,22,227);
INSERT INTO weapons_traits VALUES(67,22,241);
INSERT INTO weapons_traits VALUES(68,22,257);
INSERT INTO weapons_traits VALUES(69,23,203);
INSERT INTO weapons_traits VALUES(70,23,229);
INSERT INTO weapons_traits VALUES(71,23,246);
INSERT INTO weapons_traits VALUES(72,23,248);
INSERT INTO weapons_traits VALUES(73,23,250);
INSERT INTO weapons_traits VALUES(74,23,260);
INSERT INTO weapons_traits VALUES(75,23,263);
INSERT INTO weapons_traits VALUES(76,24,243);
INSERT INTO weapons_traits VALUES(77,25,220);
INSERT INTO weapons_traits VALUES(78,25,242);
INSERT INTO weapons_traits VALUES(79,26,225);
INSERT INTO weapons_traits VALUES(80,26,267);
INSERT INTO weapons_traits VALUES(81,27,250);
INSERT INTO weapons_traits VALUES(82,27,260);
INSERT INTO weapons_traits VALUES(83,28,241);
INSERT INTO weapons_traits VALUES(84,28,246);
INSERT INTO weapons_traits VALUES(85,29,241);
INSERT INTO weapons_traits VALUES(86,29,250);
INSERT INTO weapons_traits VALUES(87,29,259);
INSERT INTO weapons_traits VALUES(88,30,217);
INSERT INTO weapons_traits VALUES(89,30,243);
INSERT INTO weapons_traits VALUES(90,30,245);
INSERT INTO weapons_traits VALUES(91,31,203);
INSERT INTO weapons_traits VALUES(92,31,230);
INSERT INTO weapons_traits VALUES(93,31,241);
INSERT INTO weapons_traits VALUES(94,31,246);
INSERT INTO weapons_traits VALUES(95,31,250);
INSERT INTO weapons_traits VALUES(96,31,260);
INSERT INTO weapons_traits VALUES(97,32,203);
INSERT INTO weapons_traits VALUES(98,32,217);
INSERT INTO weapons_traits VALUES(99,32,234);
INSERT INTO weapons_traits VALUES(100,32,246);
INSERT INTO weapons_traits VALUES(101,33,203);
INSERT INTO weapons_traits VALUES(102,33,221);
INSERT INTO weapons_traits VALUES(103,33,248);
INSERT INTO weapons_traits VALUES(104,33,250);
INSERT INTO weapons_traits VALUES(105,33,257);
INSERT INTO weapons_traits VALUES(106,33,260);
INSERT INTO weapons_traits VALUES(107,33,263);
INSERT INTO weapons_traits VALUES(108,34,203);
INSERT INTO weapons_traits VALUES(109,34,217);
INSERT INTO weapons_traits VALUES(110,34,226);
INSERT INTO weapons_traits VALUES(111,34,246);
INSERT INTO weapons_traits VALUES(112,35,221);
INSERT INTO weapons_traits VALUES(113,35,233);
INSERT INTO weapons_traits VALUES(114,35,241);
INSERT INTO weapons_traits VALUES(115,35,257);
INSERT INTO weapons_traits VALUES(116,35,268);
INSERT INTO weapons_traits VALUES(117,36,217);
INSERT INTO weapons_traits VALUES(118,36,245);
INSERT INTO weapons_traits VALUES(119,37,217);
INSERT INTO weapons_traits VALUES(120,37,225);
INSERT INTO weapons_traits VALUES(121,37,265);
INSERT INTO weapons_traits VALUES(122,38,250);
INSERT INTO weapons_traits VALUES(123,38,260);
INSERT INTO weapons_traits VALUES(124,39,217);
INSERT INTO weapons_traits VALUES(125,39,222);
INSERT INTO weapons_traits VALUES(126,39,226);
INSERT INTO weapons_traits VALUES(127,39,237);
INSERT INTO weapons_traits VALUES(128,39,250);
INSERT INTO weapons_traits VALUES(129,39,259);
INSERT INTO weapons_traits VALUES(130,40,242);
INSERT INTO weapons_traits VALUES(131,41,203);
INSERT INTO weapons_traits VALUES(132,41,220);
INSERT INTO weapons_traits VALUES(133,41,222);
INSERT INTO weapons_traits VALUES(134,41,226);
INSERT INTO weapons_traits VALUES(135,41,234);
INSERT INTO weapons_traits VALUES(136,42,203);
INSERT INTO weapons_traits VALUES(137,42,217);
INSERT INTO weapons_traits VALUES(138,42,222);
INSERT INTO weapons_traits VALUES(139,42,236);
INSERT INTO weapons_traits VALUES(140,43,225);
INSERT INTO weapons_traits VALUES(141,43,266);
INSERT INTO weapons_traits VALUES(142,44,222);
INSERT INTO weapons_traits VALUES(143,44,241);
INSERT INTO weapons_traits VALUES(144,45,221);
INSERT INTO weapons_traits VALUES(145,45,222);
INSERT INTO weapons_traits VALUES(146,45,226);
INSERT INTO weapons_traits VALUES(147,45,257);
INSERT INTO weapons_traits VALUES(148,46,203);
INSERT INTO weapons_traits VALUES(149,46,217);
INSERT INTO weapons_traits VALUES(150,46,222);
INSERT INTO weapons_traits VALUES(151,46,226);
INSERT INTO weapons_traits VALUES(152,46,234);
INSERT INTO weapons_traits VALUES(153,46,250);
INSERT INTO weapons_traits VALUES(154,46,261);
INSERT INTO weapons_traits VALUES(155,47,217);
INSERT INTO weapons_traits VALUES(156,47,235);
INSERT INTO weapons_traits VALUES(157,48,227);
INSERT INTO weapons_traits VALUES(158,48,243);
INSERT INTO weapons_traits VALUES(159,49,221);
INSERT INTO weapons_traits VALUES(160,49,246);
INSERT INTO weapons_traits VALUES(161,49,258);
INSERT INTO weapons_traits VALUES(162,53,217);
INSERT INTO weapons_traits VALUES(163,53,226);
INSERT INTO weapons_traits VALUES(164,53,250);
INSERT INTO weapons_traits VALUES(165,53,259);
INSERT INTO weapons_traits VALUES(166,54,203);
INSERT INTO weapons_traits VALUES(167,54,222);
INSERT INTO weapons_traits VALUES(168,54,226);
INSERT INTO weapons_traits VALUES(169,54,246);
INSERT INTO weapons_traits VALUES(170,55,217);
INSERT INTO weapons_traits VALUES(171,55,221);
INSERT INTO weapons_traits VALUES(172,55,226);
INSERT INTO weapons_traits VALUES(173,55,245);
INSERT INTO weapons_traits VALUES(174,55,250);
INSERT INTO weapons_traits VALUES(175,55,259);
INSERT INTO weapons_traits VALUES(176,56,203);
INSERT INTO weapons_traits VALUES(177,56,234);
INSERT INTO weapons_traits VALUES(178,56,246);
INSERT INTO weapons_traits VALUES(179,57,245);
INSERT INTO weapons_traits VALUES(180,58,222);
INSERT INTO weapons_traits VALUES(181,58,243);
INSERT INTO weapons_traits VALUES(182,58,246);
INSERT INTO weapons_traits VALUES(183,59,242);
INSERT INTO weapons_traits VALUES(184,60,222);
INSERT INTO weapons_traits VALUES(185,60,226);
INSERT INTO weapons_traits VALUES(186,60,235);
INSERT INTO weapons_traits VALUES(187,60,241);
INSERT INTO weapons_traits VALUES(188,60,246);
INSERT INTO weapons_traits VALUES(189,61,203);
INSERT INTO weapons_traits VALUES(190,61,240);
INSERT INTO weapons_traits VALUES(191,61,244);
INSERT INTO weapons_traits VALUES(192,61,245);
INSERT INTO weapons_traits VALUES(193,61,246);
INSERT INTO weapons_traits VALUES(194,62,223);
INSERT INTO weapons_traits VALUES(195,62,243);
INSERT INTO weapons_traits VALUES(196,62,248);
INSERT INTO weapons_traits VALUES(197,62,264);
INSERT INTO weapons_traits VALUES(198,63,203);
INSERT INTO weapons_traits VALUES(199,63,229);
INSERT INTO weapons_traits VALUES(200,63,241);
INSERT INTO weapons_traits VALUES(201,64,203);
INSERT INTO weapons_traits VALUES(202,64,227);
INSERT INTO weapons_traits VALUES(203,64,236);
INSERT INTO weapons_traits VALUES(204,64,243);
INSERT INTO weapons_traits VALUES(205,65,203);
INSERT INTO weapons_traits VALUES(206,65,217);
INSERT INTO weapons_traits VALUES(207,65,226);
INSERT INTO weapons_traits VALUES(208,65,247);
INSERT INTO weapons_traits VALUES(209,66,203);
INSERT INTO weapons_traits VALUES(210,66,221);
INSERT INTO weapons_traits VALUES(211,66,246);
INSERT INTO weapons_traits VALUES(212,67,217);
INSERT INTO weapons_traits VALUES(213,67,235);
INSERT INTO weapons_traits VALUES(214,69,217);
INSERT INTO weapons_traits VALUES(215,69,245);
INSERT INTO weapons_traits VALUES(216,72,245);
INSERT INTO weapons_traits VALUES(217,73,238);
INSERT INTO weapons_traits VALUES(218,75,221);
INSERT INTO weapons_traits VALUES(219,75,238);
INSERT INTO weapons_traits VALUES(220,75,251);
INSERT INTO weapons_traits VALUES(221,75,258);
INSERT INTO weapons_traits VALUES(222,75,269);
INSERT INTO weapons_traits VALUES(223,76,221);
INSERT INTO weapons_traits VALUES(224,76,238);
INSERT INTO weapons_traits VALUES(225,76,258);
INSERT INTO weapons_traits VALUES(226,77,203);
INSERT INTO weapons_traits VALUES(227,77,232);
INSERT INTO weapons_traits VALUES(228,77,238);
INSERT INTO weapons_traits VALUES(229,78,221);
INSERT INTO weapons_traits VALUES(230,78,251);
INSERT INTO weapons_traits VALUES(231,78,258);
INSERT INTO weapons_traits VALUES(232,78,269);
INSERT INTO weapons_traits VALUES(233,79,221);
INSERT INTO weapons_traits VALUES(234,79,258);
INSERT INTO weapons_traits VALUES(235,80,203);
INSERT INTO weapons_traits VALUES(236,80,217);
INSERT INTO weapons_traits VALUES(237,80,234);
INSERT INTO weapons_traits VALUES(238,80,245);
COMMIT;
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
-50
View File
@@ -1,50 +0,0 @@
# THIS FILE SIMPLY LOADS THE YAML FILE INTO PYYAML AND THEN SPITS IT BACK OUT
# TO CLEAN UP AND ORDER ALL THE YAML
import yaml
import glob
import os
def main():
# gets all files with a yaml extension in the directory
yfiles = []
for file in glob.glob("*.yaml"):
yfiles.append(file)
yfiles.sort()
print("Going to clean up the following files: {}".format(yfiles))
for x in yfiles:
print("Doing: {}".format(x))
with open(x, 'r') as r:
data = yaml.full_load(r)
if x == "feats.yaml":
for i in data['feat']:
# This is to clean out smart quotes that made it into the
# yaml file so it matches the requirements.yaml
if i['requirement'] != None:
# print("Before: {}".format(i['requirement']))
i['requirement'] = i['requirement'].replace('’', "'")
# print("After: {}".format(i['requirement']))
if i['trigger'] != None:
# print("Before: {}".format(i['trigger']))
i['trigger'] = i['trigger'].replace('’', "'")
# print("After: {}".format(i['trigger']))
if x == "triggers.yaml":
for i in data['trigger']:
print(i)
i = i.replace('’', "'")
final = yaml.safe_dump(data, allow_unicode=True)
with open(x, 'w') as f:
f.write(final)
print("\tDone.")
if __name__ == "__main__":
main()
-147
View File
@@ -1,147 +0,0 @@
ancestries:
- boosts:
- CON
- WIS
- Free1
flavor_text: TODO
flaws:
- CHA
hp: 10
name: Dwarf
senses: Darkvision
size: Medium
source:
- abbr: CRB
page_start: 35
page_stop: 35
speed: 20
traits:
- Dwarf
- Humanoid
- boosts:
- DEX
- INT
- Free1
flavor_text: TODO
flaws:
- CON
hp: 6
name: Elf
senses: Low-Light Vision
size: Medium
source:
- abbr: CRB
page_start: 39
page_stop: 39
speed: 30
traits:
- Elf
- Humanoid
- boosts:
- CON
- CHA
- Free1
flavor_text: TODO
flaws:
- STR
hp: 8
name: Gnome
senses: Low-Light Vision
size: Small
source:
- abbr: CRB
page_start: 43
page_stop: 43
speed: 25
traits:
- Gnome
- Humanoid
- boosts:
- DEX
- CHA
- Free1
flavor_text: TODO
flaws:
- WIS
hp: 6
name: Goblin
senses: Darkvision
size: Small
source:
- abbr: CRB
page_start: 47
page_stop: 47
speed: 25
traits:
- Goblin
- Humanoid
- boosts:
- DEX
- WIS
- Free1
flavor_text: TODO
flaws:
- STR
hp: 6
name: Halfling
senses: Keen Eyes
size: Small
source:
- abbr: CRB
page_start: 51
page_stop: 51
speed: 25
traits:
- Halfling
- Humanoid
- boosts:
- Free1
- Free2
flavor_text: TODO
flaws: null
hp: 8
name: Human
senses: None
size: Medium
source:
- abbr: CRB
page_start: 55
page_stop: 55
speed: 25
traits:
- Human
- Humanoid
- boosts: null
flavor_text: TODO
flaws: null
hp: 8
name: Half-Elf
senses: None
size: Medium
source:
- abbr: CRB
page_start: 55
page_stop: 55
speed: 25
traits:
- Elf
- Human
- Humanoid
- Half-Elf
- boosts: null
flavor_text: TODO
flaws: null
hp: 8
name: Half-Orc
senses: None
size: Medium
source:
- abbr: CRB
page_start: 55
page_stop: 55
speed: 25
traits:
- Humanoid
- Human
- Orc
- Half-Orc
-489
View File
@@ -1,489 +0,0 @@
import yaml
import re
def main():
cleanuphtmlstuff()
with open("tmp-monsters-html-cleanup.yaml", 'r') as content_file:
data = yaml.full_load(content_file)
counter = 0
for i in data:
counter += 1
#print("{}\t{}".format(counter, i['name']))
# Set some data points before iteration
i['saves_special'] = {}
# clean up ability mods
for k, v in i['ability_mods'].items():
i['ability_mods'][k] = int(v)
# print(k, i['ability_mods'][k])
# clean up skills
for k, v in i['skills'].items():
i['skills'][k] = int(v)
# print(k, i['ability_mods'][k])
# clean up saves
for k, v in i['saves'].items():
# print(k, v)
i['saves_special'][k] = None
if ',' in v:
# print("WE GOT A COMMA")
i['saves'][k] = v.replace(',', '')
if ';' in v:
# print("WE GOT A SPECIAL")
a = v.split('; ')
# print(a)
i['saves_special'][k] = a[1]
i['saves'][k] = a[0]
elif '(' in v:
#print("we got a parentheses")
#print(v)
a = v.split(' (')
# print(a)
i['saves_special'][k] = a[1]
i['saves'][k] = a[0]
i['saves'][k] = int(i['saves'][k])
# print(k, i['saves'][k])
# clean up immunities
if i['immunities'] == "None":
i['immunities'] = None
else:
tmp = i['immunities']
splits = tmp.split(',')
res = []
for z in splits:
res.append(z.strip())
i['immunities'] = res
# clean up traits with trailing or leading whitespace
traitslist = []
#print(i['traits'])
for x in i['traits']:
traitslist.append(x.strip())
#print(x.strip())
#print(traitslist)
i['traits'] = traitslist
# clean up traits underneath proactive actions with trailing or leading whitespace
#print(i['proactive_abilities'])
for x in i['proactive_abilities']:
traitslist = []
if x['traits'] != None:
if len(x['traits']) == 0:
x['traits'] = None
else:
for y in x['traits']:
traitslist.append(y.strip())
#print(y.strip())
x['traits'] = traitslist
# clean up traits underneath automatic_abilities with trailing or leading whitespace
for x in i['automatic_abilities']:
# this one line fixes leading and trailing whitespace
x['description'] = x['description'].strip()
traitslist = []
if x['traits'] != None:
if len(x['traits']) == 0:
x['traits'] = None
else:
for y in x['traits']:
traitslist.append(y.strip())
#print(y.strip())
x['traits'] = traitslist
# clean up traits underneath melee with trailing or leading whitespace
for x in i['melee']:
traitslist = []
if x['traits'] != None:
if len(x['traits']) == 0:
x['traits'] = None
else:
for y in x['traits']:
traitslist.append(y.strip())
#print(y.strip())
x['traits'] = traitslist
# clean up traits underneath ranged with trailing or leading whitespace
for x in i['ranged']:
traitslist = []
if x['traits'] != None:
if len(x['traits']) == 0:
x['traits'] = None
else:
for y in x['traits']:
traitslist.append(y.strip())
#print(y.strip())
x['traits'] = traitslist
# clean up senses
senseslist = []
if i['senses'] != None:
if len(i['senses']) == 0:
i['senses'] = None
else:
for x in i['senses']:
senseslist.append(x.strip())
i['senses'] = senseslist
# clean up spell DC
if i['spell_dc'] == "None":
i['spell_dc'] = None
else:
i['spell_dc'] = int(i['spell_dc'])
# clean up innate_spell levels
if 'innate_spells' not in i:
i['innate_spells'] = None
elif i['innate_spells'] == "None":
i['innate_spells'] = None
else:
for x in i['innate_spells']:
x['level'] = int(x['level'])
# clean up level
i['level'] = int(i['level'])
# clean up AC and HP and Perception
###print("AC:\t{}".format(i['ac']))
###print("HP:\t{}".format(i['hp']))
res = re.match('(\d+)', i['ac'].strip())
i['ac'] = int(res.group(1))
res = re.match('(\d+)', i['hp'].strip())
i['hp'] = int(res.group(1))
# clean up melee to hit
if 'melee' not in i:
i['melee'] = None
elif i['melee'] == "None":
i['melee'] = None
else:
for x in i['melee']:
if 'to_hit' not in x:
x['to_hit'] = None
else:
res = re.search('(\d+)', x['to_hit'])
#print("{}\t{}".format(counter, i['name']))
if res:
x['to_hit'] = int(res.group(1))
# clean up ranged to hit
if 'ranged' not in i:
i['ranged'] = None
elif i['ranged'] == "None":
i['ranged'] = None
else:
for x in i['ranged']:
if 'to_hit' not in x:
x['to_hit'] = None
else:
res = re.search('(\d+)', x['to_hit'])
#print("{}\t{}".format(counter, i['name']))
if res:
x['to_hit'] = int(res.group(1))
# clean up spell attack to hit
if 'spell_attack_to_hit' not in i:
i['spell_attack_to_hit'] = None
elif i['spell_attack_to_hit'] == "None":
i['spell_attack_to_hit'] = None
else:
res = re.search('(\d+)', i['spell_attack_to_hit'])
#print("{}\t{}".format(counter, i['name']))
if res:
i['spell_attack_to_hit'] = int(res.group(1))
###if i['perception'] == None or i['perception'] == "":
### print("{}\t{}".format(counter, i['name']))
### print("\t\t\t\t{}".format(i['perception']))
if type(i['perception']) is str:
#print("{}\t{}".format(counter, i['name']))
res = re.match('(\d+)', i['perception'])
#print(res.group(1))
i['perception'] = int(res.group(1))
# clean up nulls for empty lists
if i['automatic_abilities'] == []:
i['automatic_abilities'] = None
if i['ranged'] == []:
i['ranged'] = None
if i['melee'] == []:
i['melee'] = None
# clean up resistances
# set Nones to null
if i['resistances'] == "None":
i['resistances'] = None
# remove trailing ;
elif i['resistances'].endswith(";"):
i['resistances'] = i['resistances'][:-1]
#print("\t{}".format(i['resistances']))
if i['resistances'] != None:
#print("{}\t{}".format(counter, i['name']))
#print("\t{}".format(i['resistances']))
# print("{}\t{}".format(counter, i['name']))
res = processResistances(i['resistances'])
i['resistances'] = res
#print(res)
#if type(i['resistances']) == str:
# print("{}\t{}".format(counter, i['name']))
# print("\t\t\t\t{}".format(i['resistances']))
# clean up speeds
newspeed = []
if 'land' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['land'])
amt = int(res.group(1))
newspeed.append({"type": "Land", "amount": amt })
if 'fly' in i['speed']:
if 'from fly' in i['speed']['fly']:
# do the from fly version
res = re.match('(\d+)', i['speed']['fly'])
amt = int(res.group(1))
newspeed.append({"type": "Fly (from Fly)", "amount": amt })
else:
# get number
res = re.match('(\d+)', i['speed']['fly'])
amt = int(res.group(1))
newspeed.append({"type": "Fly", "amount": amt })
if 'swim' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['swim'])
amt = int(res.group(1))
newspeed.append({"type": "Swim", "amount": amt })
if 'burrow' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['burrow'])
amt = int(res.group(1))
newspeed.append({"type": "Burrow", "amount": amt })
if 'climb' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['climb'])
amt = int(res.group(1))
newspeed.append({"type": "Climb", "amount": amt })
if 'iceclimb' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['iceclimb'])
amt = int(res.group(1))
newspeed.append({"type": "Ice Climb", "amount": amt })
if 'climbstone' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['climbstone'])
amt = int(res.group(1))
newspeed.append({"type": "Climb Stone", "amount": amt })
if 'burrowsnowonly' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['burrowsnowonly'])
amt = int(res.group(1))
newspeed.append({"type": "Burrow (snow only)", "amount": amt })
if 'burrowsandonly' in i['speed']:
# get number
res = re.match('(\d+)', i['speed']['burrowsandonly'])
amt = int(res.group(1))
newspeed.append({"type": "Burrow (sand only)", "amount": amt })
if 'special' in i['speed']:
for x in i['speed']['special']:
if x == "ice stride":
newspeed.append({"type": "Ice Stride", "amount": None })
if x == "trickster's step":
newspeed.append({"type": "Trickster's Step", "amount": None })
if x == "earth glide":
newspeed.append({"type": "Earth Glide", "amount": None })
if x == "sand glide":
newspeed.append({"type": "Sand Glide", "amount": None })
if x == "glide":
newspeed.append({"type": "Glide", "amount": None })
if x == "compression":
newspeed.append({"type": "Compression", "amount": None })
if x == "suction":
newspeed.append({"type": "Suction", "amount": None })
if x == "swamp stride":
newspeed.append({"type": "Swamp Stride", "amount": None })
if x == "powerful jumper":
newspeed.append({"type": "Powerful Jumper", "amount": None })
if x == "woodland stride":
newspeed.append({"type": "Woodland Stride", "amount": None })
if x == "trackless step":
newspeed.append({"type": "Trackless Step", "amount": None })
if x == "cloud walk":
newspeed.append({"type": "Cloud Walk", "amount": None })
if x == "swiftness":
newspeed.append({"type": "Swiftness", "amount": None })
if x == "freedom of movement (constant)":
newspeed.append({"type": "Freedom of Movement (constant)", "amount": None })
if x == "spider climb (constant)":
newspeed.append({"type": "Spider Climb (constant)", "amount": None })
if x == "unstoppable burrow":
newspeed.append({"type": "Unstoppable Burrow", "amount": None })
if x == "walk in shadow":
newspeed.append({"type": "Walk in Shadow", "amount": None })
if x == "magma swim":
newspeed.append({"type": "Magma Swim", "amount": None })
if x == "Can't Move":
newspeed.append({"type": "Can't Move", "amount": None })
if x == "Air Walk (constant)":
newspeed.append({"type": "Air Walk (constant)", "amount": None })
i['speed'] = newspeed
final = yaml.safe_dump(data, allow_unicode=True)
with open("tmp-monsters.yaml", 'w') as f:
f.write(final)
def cleanuphtmlstuff():
with open("monsters.yaml", 'r') as f:
lines = f.readlines()
for num, _ in enumerate(lines):
lines[num] = cleanupalinks(lines[num])
lines[num] = cleanupilinks(lines[num])
lines[num] = cleanupblinks(lines[num])
lines[num] = cleanupbrlinks(lines[num])
lines[num] = cleanupulinks(lines[num])
lines[num] = cleanupspellslinks(lines[num])
lines[num] = cleanupimglinks(lines[num])
lines[num] = cleanuptlinks(lines[num])
with open("tmp-monsters-html-cleanup.yaml", 'w') as f:
f.writelines(lines)
def cleanupalinks(x):
tmp = re.sub('<a.+?>', '', x)
tmp2 = re.sub('</a>', '', tmp)
return tmp2
def cleanuptlinks(x):
tmp = re.sub('<t>', '', x)
return tmp
def cleanupimglinks(x):
res = re.search('(<img.+?>)', x)
if res != None:
print(res)
if res:
if 'Single Action' in res.group(0):
print("SingleAction")
tmp = re.sub('<img.+?>', '|1|', x)
tmp = re.sub('\|1\|\|1\|', '|1|', tmp)
elif 'Two Actions' in res.group(0):
print("TwoActions")
tmp = re.sub('<img.+?>', '|2|', x)
tmp = re.sub('\|2\|\|2\|', '|2|', tmp)
elif 'Three Actions' in res.group(0):
print("ThreeActions")
tmp = re.sub('<img.+?>', '|3|', x)
tmp = re.sub('\|3\|\|3\|', '|3|', tmp)
elif 'Free Action' in res.group(0):
print("FreeAction")
tmp = re.sub('<img.+?>', '|F|', x)
tmp = re.sub('\|F\|\|F\|', '|F|', tmp)
print(tmp)
return tmp
else:
return x
def cleanupspellslinks(x):
tmp = re.sub('<spells.+?>', '', x)
tmp2 = re.sub('</spells.+?>', '', tmp)
return tmp2
def cleanupilinks(x):
tmp = re.sub('<i>', '*', x)
tmp2 = re.sub('</i>', '*', tmp)
return tmp2
def cleanupulinks(x):
tmp = re.sub('<u>', '', x)
tmp2 = re.sub('</u>', '', tmp)
return tmp2
def cleanupblinks(x):
tmp = re.sub('<b>', '**', x)
tmp2 = re.sub('</b>', '**', tmp)
return tmp2
def cleanupbrlinks(x):
return re.sub('<br>', '\n', x)
def processResistances(r):
if '(' in r:
# TODO This is what needs to be done
#print("\t\tTODO: Need to process with parentheses")
# this tree does the simple ones without multiple items
if ',' not in r:
rr = re.split('(\d+)', r)
return [{"type": rr[0].strip() + ' ' + rr[2].strip(), "amount": int(rr[1])},]
elif ',' in r:
# FIGURE OUT BRANCH FOR THE COMMA IS NOT INSIDE THE PARENTHETICAL
test = re.search('(\(.+\))', r)
tstr = test.group(0)
if ',' in tstr:
# TODO here's the case for comma IS inside the parenthetical
print("\n")
print(r)
if 'haunted form' not in r:
# DO the majority of them
rr = re.split('(\d+)', r)
print(rr)
return [{"type": rr[0].strip() + ' ' + rr[2].strip(), "amount": int(rr[1])},]
elif 'haunted form' in r:
# DO the single haunted form one
##### NOTE I'm hard coding this in as it will be faster than writing regex
result = [{"type": "all (except force, ghost touch, or positive; double resistance against non-magical)", "amount": 8},
{"type": "haunted form", "amount": 12}]
print(result)
return result
else:
# TODO Here's the case for comma is NOT inside the parenthetical
splits = re.split(',', r)
mysplitlist = []
for x in splits:
rr = re.split('(\d+)', x)
mysplitlist.append({"type": rr[0].strip() + ' ' + rr[2].strip(), "amount": int(rr[1])})
return mysplitlist
else:
print("else has been run")
return None
else:
#print("\t\tNo parentheses")
# split on commas
res = r.split(',')
#print(r.split(','))
#print(res)
results_list = []
for i in res:
#print(i)
#tmp = re.search('(\d+)', i)
#print(tmp.groups())
tmp = re.split('(\d+)', i)
#print(tmp)
tmpres = {"type": tmp[0].strip(), "amount": int(tmp[1])}
results_list.append(tmpres)
return results_list
return "Something went wrong"
if __name__ == "__main__":
main()
-59
View File
@@ -1,59 +0,0 @@
#!/usr/bin/env python3
#
#
import csv
import yaml
def main():
# Load the CSV file and print out the false ones that need to be updated
csvlist = []
with open('../../scripts/feat_level.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if row['match'] == "False":
csvlist.append(dict(row))
res = yaml.safe_dump(csvlist, allow_unicode=True, width=100000)
with open('feats-levels-false-matches.yaml', 'w') as f:
f.write(res)
# Load the CSV file and make YAML file for the matched ones
truelist = []
with open('../../scripts/feat_level.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if row['match'] == "True":
r = dict(row)
tmp = {'name': r['name'], 'level': r['level']}
truelist.append(tmp)
trueres = yaml.safe_dump(truelist, allow_unicode=True, width=100000)
with open('feats-levels-true-matches.yaml', 'w') as f:
f.write(trueres)
# open up feats.yaml
with open('feats.yaml') as yamlfile:
y = yaml.safe_load(yamlfile)
z = yaml.safe_load(trueres)
# y is original yaml to be modified
# z is new true list
for i in z:
#print("Looking for a match for: {}".format(i['name']))
match = False
for j in y['feat']:
if i['name'] == j['name']:
match = True
j['level'] = int(i['level'])
#print('We got a match for: {}'.format(i['name']))
if match == False:
print("We never got a match for: {}'.format(i['name'])")
final = yaml.safe_dump(y, allow_unicode=True, width=100000)
with open('feats.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
@@ -1,420 +0,0 @@
- level: '4'
match: 'False'
name: Refocus
name_aon: Arcane School Spell
url_aon: https://2e.aonprd.com/Feats.aspx?ID=743
url_search: https://2e.aonprd.com/Search.aspx?query=Refocus
- level: '2'
match: 'False'
name: Call on Ancient Blood
name_aon: Call of the Wild
url_aon: https://2e.aonprd.com/Feats.aspx?ID=317
url_search: https://2e.aonprd.com/Search.aspx?query=Call on Ancient Blood
- level: '-1'
match: 'False'
name: Burn It!
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Burn+It!
url_search: https://2e.aonprd.com/Search.aspx?query=Burn It!
- level: '-1'
match: 'False'
name: Very, Very Sneaky
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Very%2c+Very+Sneaky
url_search: https://2e.aonprd.com/Search.aspx?query=Very, Very Sneaky
- level: '9'
match: 'False'
name: Cooperataive Soul
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=21
url_search: https://2e.aonprd.com/Search.aspx?query=Cooperataive Soul
- level: '-1'
match: 'False'
name: Craft Philosopher's Stone
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Craft+Philosopher%u2019s+Stone
url_search: https://2e.aonprd.com/Search.aspx?query=Craft Philosopher’s Stone
- level: '-1'
match: 'False'
name: Dragon’s Rage Breath
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Dragon%u2019s+Rage+Breath
url_search: https://2e.aonprd.com/Search.aspx?query=Dragon’s Rage Breath
- level: '-1'
match: 'False'
name: Giant’s Stature
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Giant%u2019s+Stature
url_search: https://2e.aonprd.com/Search.aspx?query=Giant’s Stature
- level: '-1'
match: 'False'
name: Spirits’ Interference
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Spirits%u2019+Interference
url_search: https://2e.aonprd.com/Search.aspx?query=Spirits’ Interference
- level: '-1'
match: 'False'
name: Come and Get Me
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Come+and+Get+Me
url_search: https://2e.aonprd.com/Search.aspx?query=Come and Get Me
- level: '-1'
match: 'False'
name: Dragon’s Rage Wings
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Dragon%u2019s+Rage+Wings
url_search: https://2e.aonprd.com/Search.aspx?query=Dragon’s Rage Wings
- level: '-1'
match: 'False'
name: Predator’s Pounce
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Predator%u2019s+Pounce
url_search: https://2e.aonprd.com/Search.aspx?query=Predator’s Pounce
- level: '-1'
match: 'False'
name: Spirit’s Wrath
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Spirit%u2019s+Wrath
url_search: https://2e.aonprd.com/Search.aspx?query=Spirit’s Wrath
- level: '-1'
match: 'False'
name: Titan’s Stature
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Titan%u2019s+Stature
url_search: https://2e.aonprd.com/Search.aspx?query=Titan’s Stature
- level: '-1'
match: 'False'
name: Giant’s Lunge
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Giant%u2019s+Lunge
url_search: https://2e.aonprd.com/Search.aspx?query=Giant’s Lunge
- level: '1'
match: 'False'
name: Lingering Composition
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=389
url_search: https://2e.aonprd.com/Search.aspx?query=Lingering Composition
- level: '-1'
match: 'False'
name: Loremaster’s Etude
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Loremaster%u2019s+Etude
url_search: https://2e.aonprd.com/Search.aspx?query=Loremaster’s Etude
- level: '2'
match: 'False'
name: Inspire Defense
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=387
url_search: https://2e.aonprd.com/Search.aspx?query=Inspire Defense
- level: '4'
match: 'False'
name: Inspire Heroics
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=388
url_search: https://2e.aonprd.com/Search.aspx?query=Inspire Heroics
- level: '20'
match: 'False'
name: Symphony of the Muse
name_aon: Symphony of the Muses
url_aon: https://2e.aonprd.com/Feats.aspx?ID=213
url_search: https://2e.aonprd.com/Search.aspx?query=Symphony of the Muse
- level: '-1'
match: 'False'
name: Deity’s Domain
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Deity%u2019s+Domain
url_search: https://2e.aonprd.com/Search.aspx?query=Deity’s Domain
- level: '3'
match: 'False'
name: Litany Against Wrath
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=397
url_search: https://2e.aonprd.com/Search.aspx?query=Litany Against Wrath
- level: '6'
match: 'False'
name: Loyal Warhouse
name_aon: Loyal Warhorse
url_aon: https://2e.aonprd.com/Feats.aspx?ID=228
url_search: https://2e.aonprd.com/Search.aspx?query=Loyal Warhouse
- level: '-1'
match: 'False'
name: Advanced Deity’s Domain
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Advanced+Deity%u2019s+Domain
url_search: https://2e.aonprd.com/Search.aspx?query=Advanced Deity’s Domain
- level: '-1'
match: 'False'
name: Champion’s Sacrifice
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Champion%u2019s+Sacrifice
url_search: https://2e.aonprd.com/Search.aspx?query=Champion’s Sacrifice
- level: '-1'
match: 'False'
name: Deity’s Protection
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Deity%u2019s+Protection
url_search: https://2e.aonprd.com/Search.aspx?query=Deity’s Protection
- level: '-1'
match: 'False'
name: Avatar’s Audience
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Avatar%u2019s+Audience
url_search: https://2e.aonprd.com/Search.aspx?query=Avatar’s Audience
- level: '4'
match: 'False'
name: Mature Animal Companion (Druid)
name_aon: Mature Animal Companion (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=322
url_search: https://2e.aonprd.com/Search.aspx?query=Mature Animal Companion
- level: '8'
match: 'False'
name: Incredible Companion (Druid)
name_aon: Incredible Companion (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=332
url_search: https://2e.aonprd.com/Search.aspx?query=Incredible Companion
- level: '10'
match: 'False'
name: Side by Side (Druid)
name_aon: Side by Side (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=339
url_search: https://2e.aonprd.com/Search.aspx?query=Side by Side
- level: '14'
match: 'False'
name: Specialized Companion (Druid)
name_aon: Specialized Companion (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=344
url_search: https://2e.aonprd.com/Search.aspx?query=Specialized Companion
- level: '8'
match: 'False'
name: Impaling Briars
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=475
url_search: https://2e.aonprd.com/Search.aspx?query=Impaling Briars
- level: '-1'
match: 'False'
name: Hierophant’s Power
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Hierophant%u2019s+Power
url_search: https://2e.aonprd.com/Search.aspx?query=Hierophant’s Power
- level: '-1'
match: 'False'
name: Guardian’s Deflection
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Guardian%u2019s+Deflection
url_search: https://2e.aonprd.com/Search.aspx?query=Guardian’s Deflection
- level: '-1'
match: 'False'
name: Paragon’s Guard
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Paragon%u2019s+Guard
url_search: https://2e.aonprd.com/Search.aspx?query=Paragon’s Guard
- level: '14'
match: 'False'
name: Improved Twin Riposte (Fighter)
name_aon: Improved Twin Riposte (Fighter)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=418
url_search: https://2e.aonprd.com/Search.aspx?query=Improved Twin Riposte
- level: '14'
match: 'False'
name: Stance Savant (Fighter)
name_aon: Stance Savant (Fighter)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=419
url_search: https://2e.aonprd.com/Search.aspx?query=Stance Savant
- level: '20'
match: 'False'
name: Boudless Reprisals
name_aon: Boundless Reprisals
url_aon: https://2e.aonprd.com/Feats.aspx?ID=428
url_search: https://2e.aonprd.com/Search.aspx?query=Boudless Reprisals
- level: '1'
match: 'False'
name: Ki Strike
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=486
url_search: https://2e.aonprd.com/Search.aspx?query=Ki Strike
- level: '3'
match: 'False'
name: Ki Blast
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=484
url_search: https://2e.aonprd.com/Search.aspx?query=Ki Blast
- level: '14'
match: 'False'
name: Stance Savant (Monk)
name_aon: Stance Savant (Fighter)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=419
url_search: https://2e.aonprd.com/Search.aspx?query=Stance Savant
- level: '8'
match: 'False'
name: Quivering Palm
name_aon: ''
url_aon: https://2e.aonprd.com/Spells.aspx?ID=487
url_search: https://2e.aonprd.com/Search.aspx?query=Quivering Palm
- level: '-1'
match: 'False'
name: Hunter’s Aim
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Hunter%u2019s+Aim
url_search: https://2e.aonprd.com/Search.aspx?query=Hunter’s Aim
- level: '-1'
match: 'False'
name: Companion’s Cry
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Companion%u2019s+Cry
url_search: https://2e.aonprd.com/Search.aspx?query=Companion’s Cry
- level: '-1'
match: 'False'
name: Scout’s Warning
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Scout%u2019s+Warning
url_search: https://2e.aonprd.com/Search.aspx?query=Scout’s Warning
- level: '4'
match: 'False'
name: Mature Animal Companion (Ranger)
name_aon: Mature Animal Companion (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=322
url_search: https://2e.aonprd.com/Search.aspx?query=Mature Animal Companion
- level: '-1'
match: 'False'
name: Warden’s Boon
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Warden%u2019s+Boon
url_search: https://2e.aonprd.com/Search.aspx?query=Warden’s Boon
- level: '8'
match: 'False'
name: Incredible Companion (Ranger)
name_aon: Incredible Companion (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=332
url_search: https://2e.aonprd.com/Search.aspx?query=Incredible Companion
- level: '-1'
match: 'False'
name: Warden’s Step
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Warden%u2019s+Step
url_search: https://2e.aonprd.com/Search.aspx?query=Warden’s Step
- level: '10'
match: 'False'
name: Side by Side (Ranger)
name_aon: Side by Side (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=339
url_search: https://2e.aonprd.com/Search.aspx?query=Side by Side
- level: '-1'
match: 'False'
name: Warden’s Guidance
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Warden%u2019s+Guidance
url_search: https://2e.aonprd.com/Search.aspx?query=Warden’s Guidance
- level: '14'
match: 'False'
name: Improved Twin Riposte (Ranger)
name_aon: Improved Twin Riposte (Fighter)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=418
url_search: https://2e.aonprd.com/Search.aspx?query=Improved Twin Riposte
- level: '14'
match: 'False'
name: Specialized Companion (Ranger)
name_aon: Specialized Companion (Druid)
url_aon: https://2e.aonprd.com/Feats.aspx?ID=344
url_search: https://2e.aonprd.com/Search.aspx?query=Specialized Companion
- level: '-1'
match: 'False'
name: You’re Next
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=You%u2019re+Next
url_search: https://2e.aonprd.com/Search.aspx?query=You’re Next
- level: '-1'
match: 'False'
name: Gang Up
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Gang+Up
url_search: https://2e.aonprd.com/Search.aspx?query=Gang Up
- level: '20'
match: 'False'
name: Sly Striker
name_aon: Impossible Striker
url_aon: https://2e.aonprd.com/Feats.aspx?ID=600
url_search: https://2e.aonprd.com/Search.aspx?query=Sly Striker
- level: '-1'
match: 'False'
name: Trickster’s Ace
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Trickster%u2019s+Ace
url_search: https://2e.aonprd.com/Search.aspx?query=Trickster’s Ace
- level: '12'
match: 'False'
name: Counterspell (Spontaneous)
name_aon: Clever Counterspell
url_aon: https://2e.aonprd.com/Feats.aspx?ID=653
url_search: https://2e.aonprd.com/Search.aspx?query=Counterspell
- level: '12'
match: 'False'
name: Counterspell (Prepared)
name_aon: Clever Counterspell
url_aon: https://2e.aonprd.com/Feats.aspx?ID=653
url_search: https://2e.aonprd.com/Search.aspx?query=Counterspell
- level: '-1'
match: 'False'
name: Archwizard’s Might
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Archwizard%u2019s+Might
url_search: https://2e.aonprd.com/Search.aspx?query=Archwizard’s Might
- level: '6'
match: 'False'
name: Advanced Conoction
name_aon: Advanced Weapon Training
url_aon: https://2e.aonprd.com/Feats.aspx?ID=378
url_search: https://2e.aonprd.com/Search.aspx?query=Advanced Conoction
- level: '-1'
match: 'False'
name: Juggernaut’s Fortitude
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Juggernaut%u2019s+Fortitude
url_search: https://2e.aonprd.com/Search.aspx?query=Juggernaut’s Fortitude
- level: '-1'
match: 'False'
name: Basic Muse’s Whispers
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Basic+Muse%u2019s+Whispers
url_search: https://2e.aonprd.com/Search.aspx?query=Basic Muse’s Whispers
- level: '-1'
match: 'False'
name: Advanced Muse’s Whispers
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Advanced+Muse%u2019s+Whispers
url_search: https://2e.aonprd.com/Search.aspx?query=Advanced Muse’s Whispers
- level: '-1'
match: 'False'
name: Champion’s Reaction
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Champion%u2019s+Reaction
url_search: https://2e.aonprd.com/Search.aspx?query=Champion’s Reaction
- level: '-1'
match: 'False'
name: Monk’s Flurry
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Monk%u2019s+Flurry
url_search: https://2e.aonprd.com/Search.aspx?query=Monk’s Flurry
- level: '-1'
match: 'False'
name: Perfection’s Path
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Perfection%u2019s+Path
url_search: https://2e.aonprd.com/Search.aspx?query=Perfection’s Path
- level: '-1'
match: 'False'
name: Basic Hunter’s Trick
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Basic+Hunter%u2019s+Trick
url_search: https://2e.aonprd.com/Search.aspx?query=Basic Hunter’s Trick
- level: '-1'
match: 'False'
name: Advanced Hunter’s Trick
name_aon: ''
url_aon: https://2e.aonprd.com/Search.aspx?query=Advanced+Hunter%u2019s+Trick
url_search: https://2e.aonprd.com/Search.aspx?query=Advanced Hunter’s Trick
- level: '1'
match: 'False'
name: Lie To Me
name_aon: Lie to Me
url_aon: https://2e.aonprd.com/Feats.aspx?ID=811
url_search: https://2e.aonprd.com/Search.aspx?query=Lie To Me
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
-31
View File
@@ -1,31 +0,0 @@
import yaml
import pprint
def main():
with open('ancestries.yaml') as anc:
anc_data = yaml.full_load(anc)
with open('heritages.yaml') as her:
her_data = yaml.full_load(her)
print(anc_data)
print(her_data)
for i in anc_data['ancestries']:
i['heritages'] = []
for j in her_data:
print(j)
if i['name'] in j['name']:
i['heritages'].append(j)
pp = pprint.PrettyPrinter(indent=1)
pp.pprint(anc_data)
final = yaml.safe_dump(anc_data, allow_unicode=True)
with open('tmp-ancestriesheritages.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
-187
View File
@@ -1,187 +0,0 @@
- descr: Dwarven heroes of old could shrug off their enemies' magic, and some of that
resistance manifests in you. You gain the Call on Ancient Blood reaction.
feat: Call on Ancient Blood
name: Ancient-Blooded Dwarf
- descr: Your ancestors have been tomb guardians for generations, and the power they
cultivated to ward off necromancy has passed on to you. If you roll a success
on a saving throw against a necromancy effect, you get a critical success instead.
feat: null
name: Death Warden Dwarf
- descr: You have a remarkable adaptation to hot environments from ancestors who inhabited
blazing deserts or volcanic chambers beneath the earth. This grants you fire resistance
equal to half your level (minimum 1), and you treat environmental heat effects
as if they were one step less extreme (incredible heat becomes extreme, extreme
heat becomes severe, and so on).
feat: null
name: Forge Dwarf
- descr: Your ancestors lived and worked among the great ancient stones of the mountains
or the depths of the earth. This makes you solid as a rock when you plant your
feet. You gain a +2 circumstance bonus to your Fortitude or Reflex DC against
attempts to Shove or Trip you. This bonus also applies to saving throws against
spells or effects that attempt to knock you prone.
feat: null
name: Rock Dwarf
- descr: Your blood runs hearty and strong, and you can shake off toxins. You gain
poison resistance equal to half your level (minimum 1), and each of your successful
saving throws against a poison affliction reduces its stage by 2, or by 1 for
a virulent poison. Each critical success against an ongoing poison reduces its
stage by 3, or by 2 for a virulent poison.
feat: null
name: Strong-Blooded Dwarf
- descr: You dwell deep in the frozen north and have gained incredible resilience
against cold environments, granting you cold resistance equal to half your level
(minimum 1). You treat environmental cold effects as if they were one step less
extreme (incredible cold becomes extreme, extreme cold becomes severe, and so
on).
feat: null
name: Arctic Elf
- descr: You were born or spent many years in underground tunnels or caverns where
light is scarce. You gain darkvision.
feat: null
name: Cavern Elf
- descr: You have an inborn ability to detect and understand magical phenomena. You
can cast the detect magic cantrip as an arcane innate spell at will. A cantrip
is heightened to a spell level equal to half your level rounded up. In addition,
you gain a +1 circumstance bonus to checks to Identify Magic and to Decipher Writing
of a magical nature. These skill actions typically use the Arcana, Nature, Occultism,
or Religion skill.
feat: null
name: Seer Elf
- descr: Your ears are finely tuned, able to detect even the slightest whispers of
sound. As long as you can hear normally, you can use the Seek action to sense
undetected creatures in a 60-foot cone instead of a 30-foot cone. You also gain
a +2 circumstance bonus to locate undetected creatures that you could hear within
30 feet with a Seek action.
feat: null
name: Whisper Elf
- descr: You’re adapted to life in the forest or the deep jungle, and you know how
to climb trees and use foliage to your advantage. When Climbing trees, vines,
and other foliage, you move at half your Speed on a success and at full Speed
on a critical success (and you move at full Speed on a success if you have Quick
Climb). This doesn’t affect you if you’re using a climb Speed.
feat: null
name: Woodland Elf
- descr: The color of your hair and skin is mutable, possibly due to latent magic.
You can slowly change the vibrancy and the exact color, and the coloration can
be different across your body, allowing you to create patterns or other colorful
designs. It takes a single action for minor localized shifts and up to an hour
for dramatic shifts throughout your body. While you’re asleep, the colors shift
on their own in tune with your dreams, giving you an unusual coloration each morning.
When you’re in an area where your coloration is roughly similar to the environment
(for instance, forest green in a forest), you can use the single action to make
minor localized shifts designed to help you blend into your surroundings. This
grants you a +2 circumstance bonus to Stealth checks until your surroundings shift
in coloration or pattern.
feat: null
name: Chameleon Gnome
- descr: The blood of the fey is so strong within you that you’re truly one of them.
You gain the fey trait, in addition to the gnome and humanoid traits. Choose one
cantrip from the <%SPELL.LIST%Primal%%>primal spell list. You can cast this spell
as a primal innate spell at will. A cantrip is heightened to a spell level equal
to half your level rounded up. You can change this cantrip to a different one
from the same list once per day by meditating to realign yourself with the First
World; this is a 10-minute activity that has the concentrate trait.
feat: null
name: Fey-Touched Gnome
- descr: 'You see all colors as brighter, hear all sounds as richer, and especially
smell all scents with incredible detail. You gain a special sense: imprecise scent
with a range of 30 feet. This means you can use your sense of smell to determine
the exact location of a creature (as explained on page 465). The GM will usually
double the range if you’re downwind from the creature or halve the range if you’re
upwind.'
feat: null
name: Sensate Gnome
- descr: Whether from a connection to dark or shadowy fey, from the underground deep
gnomes also known as svirfneblin, or another source, you can see in complete darkness.
You gain darkvision.
feat: null
name: Umbral Gnome
- descr: Some other source of magic has a greater hold on you than the primal magic
of your fey lineage does. This connection might come from an occult plane or an
ancient occult song; a deity, celestial, or fiend; magical effluent left behind
by a mage war; or ancient rune magic.
feat: null
name: Wellspring Gnome
- descr: Your ancestors have always had a connection to fire and a thicker skin, which
allows you to resist burning. You gain fire resistance equal to half your level
(minimum 1). You can also recover from being on fire more easily. Your flat check
to remove persistent fire damage is DC 10 instead of DC 15, which is reduced to
DC 5 if another creature uses a particularly appropriate action to help.
feat: null
name: Charhide Goblin
- descr: You can subsist on food that most folks would consider spoiled. You can keep
yourself fed with poor meals in a settlement as long as garbage is readily available,
without using the Subsist downtime activity. You can eat and drink things when
you are sickened.
feat: null
name: Irongut Goblin
- descr: Your family’s teeth are formidable weapons. You gain a jaws unarmed attack
that deals 1d6 piercing damage. Your jaws are in the brawling group and have the
finesse and unarmed traits.
feat: null
name: Razortooth Goblin
- descr: You are acclimated to living in frigid lands and have skin ranging from sky
blue to navy in color, as well as blue fur. You gain cold resistance equal to
half your level (minimum 1). You treat environmental cold effects as if they were
one step less extreme (incredible cold becomes extreme, extreme cold becomes severe,
and so on).
feat: null
name: Snow Goblin
- descr: You’re able to bounce back from injuries easily due to an exceptionally thick
skull, cartilaginous bones, or some other mixed blessing. You gain 10 Hit Points
from your ancestry instead of 6. When you fall, reduce the falling damage you
take as though you had fallen half the distance.
feat: null
name: Unbreakable Goblin
- descr: Your family line is known for keeping a level head and staving off fear when
the chips were down, making them wise leaders and sometimes even heroes. When
you roll a success on a saving throw against an emotion effect, you get a critical
success instead.
feat: null
name: Gutsy Halfling
- descr: Accustomed to a calm life in the hills, your people find rest and relaxation
especially replenishing, particularly when indulging in creature comforts. When
you regain Hit Points overnight, add your level to the Hit Points regained. When
anyone uses the Medicine skill to Treat your Wounds, you can eat a snack to add
your level to the Hit Points you regain from their treatment.
feat: null
name: Hillock Halfling
- descr: 'Your ancestors have traveled from place to place for generations, never
content to settle down. You gain two additional languages of your choice, chosen
from among the common and uncommon languages available to you, and every time
you take the '
feat: null
name: Nomadic Halfling
- descr: Your ancestors performed many secret acts under the concealing cover of dusk,
whether for good or ill, and over time they developed the ability to see in twilight
beyond even the usual keen sight of halflings. You gain low-light vision.
feat: null
name: Twilight Halfling
- descr: You hail from deep in a jungle or forest, and you’ve learned how to use your
small size to wriggle through undergrowth, vines, and other obstacles. You ignore
difficult terrain from trees, foliage, and undergrowth.
feat: null
name: Wildwood Halfling
- descr: Either one of your parents was an elf, or one or both were half-elves. You
have pointed ears and other telltale signs of elf heritage. You gain the elf trait
and low-light vision. In addition, you can select elf, half-elf, and human feats
whenever you gain an ancestry feat.
feat: null
name: Half-Elf
- descr: One of your parents was an orc, or one or both were half-orcs. You have a
green tinge to your skin and other indicators of orc heritage. You gain the orc
trait and low-light vision. In addition, you can select orc, half-orc, and human
feats whenever you gain an ancestry feat.
feat: null
name: Half-Orc
- descr: Your ingenuity allows you to train in a wide variety of skills. You become
trained in one skill of your choice. At 5th level, you become an expert in the
chosen skill.
feat: null
name: Skilled Heritage
- descr: Humanity’s versatility and ambition have fueled its ascendance to be the
most common ancestry in most nations throughout the world. Select a general feat
of your choice for which you meet the prerequisites (as with your ancestry feat,
you can select this general feat at any point during character creation).
feat: null
name: Versatile Heritage
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
-53
View File
@@ -1,53 +0,0 @@
import yaml
import sqlite3
def main():
q = "SELECT short_name, description, sources_pages FROM senses"
conn = sqlite3.connect('../../pf2.db')
c = conn.cursor()
c.execute(q)
data = c.fetchall()
datalist = []
for i in data:
# print(i)
print(i[2])
if i[2] != "TODO":
print("We got an int")
d = {
'name': i[0],
'descr': i[1],
'source': {
'abbr': 'CRB',
'page_start': int(i[2]),
'page_stop': int(i[2])
}
}
datalist.append(d)
else:
d = {
'name': i[0],
'descr': i[1],
'source': {
'abbr': 'CRB',
'page_start': 9999999,
'page_stop': 9999999,
'comment': "TODO fix the source page start and stop"
}
}
datalist.append(d)
tmpd = {'senses': datalist}
final = yaml.safe_dump(tmpd, allow_unicode=True)
with open('tmp-senses.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
-37
View File
@@ -1,37 +0,0 @@
import sqlite3
import yaml
def main():
q = """
select traits.short_name, traits.description, traittypes.name FROM traits INNER JOIN traittypes ON traits.traittype=traittypes.traittype_id;
"""
q = """
select short_name, description FROM heritages;
"""
conn = sqlite3.connect('../../../pf2.db')
c = conn.cursor()
c.execute(q)
data = c.fetchall()
# transform tuples into list of dicts
datalist = []
for i in data:
print(i)
d = { 'name': i[0], 'descr': i[1], 'feat': None}
datalist.append(d)
# now dump to yaml
final = yaml.safe_dump(datalist, allow_unicode=True)
with open('tmp-heritages.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
-34
View File
@@ -1,34 +0,0 @@
import sqlite3
import yaml
def main():
q = """
select traits.short_name, traits.description, traittypes.name FROM traits INNER JOIN traittypes ON traits.traittype=traittypes.traittype_id;
"""
conn = sqlite3.connect('../../pf2.db')
c = conn.cursor()
c.execute(q)
data = c.fetchall()
# transform tuples into list of dicts
datalist = []
for i in data:
print(i)
d = { 'type': i[2], 'name': i[0], 'descr': i[1]}
datalist.append(d)
tmpd = { 'trait': datalist }
# now dump to yaml
final = yaml.safe_dump(tmpd, allow_unicode=True)
with open('tmp-traits.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
@@ -1,27 +0,0 @@
import sqlite3
import yaml
def main():
q = """
SELECT is_comty_use, is_specific_to_adv, name, descr, sources_id, sources_pages
FROM backgrounds;
"""
conn = sqlite3.connect('../../pf2.db')
# so we get a dict out of our query
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
data = [dict(row) for row in c.fetchall()]
print(data)
final = yaml.safe_dump(data, allow_unicode=True)
with open('tmp-backgrounds.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
-25
View File
@@ -1,25 +0,0 @@
import yaml
def main():
with open('monsters.yaml') as m:
data = yaml.full_load(m)
monsterlist = []
for i in data:
if 'ac_special' in i:
monsterlist.append(i)
else:
i['ac_special'] = None
monsterlist.append(i)
finaldata = {'monsters': monsterlist}
final = yaml.safe_dump(finaldata, allow_unicode=True)
with open('tmp-monsters.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
@@ -1,57 +0,0 @@
import sqlite3
import yaml
def main():
q = """
SELECT * FROM actions;
"""
conn = sqlite3.connect('../../pf2.db')
# so we get a dict out of our query
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
data = [dict(row) for row in c.fetchall()]
# print(data)
for i in data:
del i['actions_id']
page = int(i['sources_pages'])
del i['sources_pages']
i['source'] = [{'abbr': 'CRB', 'page_start': page, 'page_stop': page }]
x = i['actioncategories_id']
if x == 1:
i['actioncategory'] = "Basic"
elif x ==2:
i['actioncategory'] = "Specialty Basic"
del i['actioncategories_id']
y = i['actioncosts_id']
if y == 0:
i['actioncost_name'] = "Varies"
elif y == 1:
i['actioncost_name'] = "Single Action"
elif y == 2:
i['actioncost_name'] = "Two Actions"
elif y == 3:
i['actioncost_name'] = "Three Actions"
elif y == 5:
i['actioncost_name'] = "Free Action"
elif y == 5:
i['actioncost_name'] = "Reaction"
del i['actioncosts_id']
data = {"action": data}
final = yaml.safe_dump(data, allow_unicode=True)
with open('tmp-actions.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
@@ -1,50 +0,0 @@
import sqlite3
import yaml
def main():
conn = sqlite3.connect('../../pf2.db')
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute("select * from ammunition;")
res = [dict(row) for row in c.fetchall()]
# for i in res:
# print(i)
reslist = []
for i in res:
tmp = {
"name":
i['name'],
"price_gp":
i['price_gp'],
"amount":
i['amount'],
"bulk":
i['bulk'],
"descr":
i['descr'],
"source": [
{
'abbr': 'CRB',
'page_start': int(i['sources_pages']),
'page_stop': int(i['sources_pages'])
},
]
}
reslist.append(tmp)
# print(reslist)
tmpd = {'ammunition': reslist}
# now dump to yaml
final = yaml.safe_dump(tmpd, allow_unicode=True)
with open('tmp-ammo.yaml', 'w') as f:
f.write(final)
if __name__ == '__main__':
main()
@@ -1,138 +0,0 @@
import sqlite3
import yaml
def main():
conn = sqlite3.connect('../../pf2.db')
conn.row_factory = sqlite3.Row
c = conn.cursor()
stmt = """
SELECT ancestries.short_name as name,
flavor_text,
hp,
sizes.short_name AS size,
speed,
senses.short_name AS senses,
ancestries.sources_pages
FROM ancestries
INNER JOIN
sizes ON sizes.size_id = ancestries.size_id
INNER JOIN
senses ON senses.senses_id = ancestries.vision_id;
"""
c.execute(stmt)
res = [dict(row) for row in c.fetchall()]
print(res)
# for i in res:
# if i['hands'] == None or i['hands'] == '':
# i['hands'] = 0
reslist = []
for i in res:
tmp = {
"name": i['name'],
"flavor_text": i['flavor_text'],
"hp": i['hp'],
"size": i['size'],
'speed': i['speed'],
'senses': i['senses'],
"source": [
{
'abbr': 'CRB',
'page_start': int(i['sources_pages']),
'page_stop': int(i['sources_pages'])
},
],
'boosts': None,
'flaws': None,
'traits': None
}
# add in boosts
stmt = """
SELECT abilityscores.short_name
FROM abilityscores
INNER JOIN
ancestries_boosts ON abilityscores.abilityscores_id = ancestries_boosts.abilityscores_id
INNER JOIN
ancestries ON ancestries.ancestry_id = ancestries_boosts.ancestry_id
WHERE ancestries.ancestry_id = (
SELECT ancestries.ancestry_id
WHERE ancestries.short_name = ?
);
"""
c.execute(stmt, (i['name'],))
resboosts = [dict(row) for row in c.fetchall()]
print(resboosts)
if len(resboosts) == 0:
tmp['boosts'] = None
else:
boostslist = []
for j in resboosts:
boostslist.append(j['short_name'])
tmp['boosts'] = boostslist
# add in flaws
stmt = """
SELECT abilityscores.short_name
FROM abilityscores
INNER JOIN
ancestries_flaws ON abilityscores.abilityscores_id = ancestries_flaws.abilityscores_id
INNER JOIN
ancestries ON ancestries.ancestry_id = ancestries_flaws.ancestry_id
WHERE ancestries.ancestry_id = (
SELECT ancestries.ancestry_id
WHERE ancestries.short_name = ?
);
"""
c.execute(stmt, (i['name'],))
resflaws = [dict(row) for row in c.fetchall()]
print(resflaws)
if len(resflaws) == 0:
tmp['flaws'] = None
else:
flawslist = []
for j in resflaws:
flawslist.append(j['short_name'])
tmp['flaws'] = flawslist
# add in traits
stmt = """
SELECT traits.short_name
FROM traits
INNER JOIN
ancestries_traits ON traits.trait_id = ancestries_traits.trait_id
INNER JOIN
ancestries ON ancestries.ancestry_id = ancestries_traits.ancestry_id
WHERE ancestries.ancestry_id = (
SELECT ancestries.ancestry_id
WHERE ancestries.short_name = ?
);
"""
c.execute(stmt, (i['name'],))
restraits = [dict(row) for row in c.fetchall()]
print(restraits)
if len(restraits) == 0:
tmp['traits'] = None
else:
traitslist = []
for j in restraits:
traitslist.append(j['short_name'])
tmp['traits'] = traitslist
reslist.append(tmp)
# # print(reslist)
tmpd = {'ancestries': reslist}
# now dump to yaml
final = yaml.safe_dump(tmpd, allow_unicode=True)
with open('tmp-ancestries.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
-126
View File
@@ -1,126 +0,0 @@
import yaml
import sqlite3
def main():
acats = ["Unarmored", "Light Armor", "Medium Armor", "Heavy Armor"]
# DO ARMORGROUP
q = "SELECT short_name, descr FROM armorgroup"
conn = sqlite3.connect('../../pf2.db')
c = conn.cursor()
c.execute(q)
data = c.fetchall()
datalist = []
for i in data:
d = {
'name': i[0],
'descr': i[1],
'source': [{
'abbr': 'CRB',
'page_start': 275,
'page_stop': 275
}]
}
datalist.append(d)
# DO MAIN ARMOR TABLE
qq = """
SELECT
armor.short_name,
item_level,
price_text,
price_gp,
ac_bonus,
dex_cap,
check_penalty,
speed_penalty,
strength,
bulks.short_name AS bulkname,
armorgroup.short_name AS grpname,
armorcategory.short_name AS catname
FROM armor
LEFT JOIN
bulks ON bulks.bulk_id = armor.bulk_id
LEFT JOIN
armorgroup ON armorgroup.grp_id = armor.grp_id
LEFT JOIN
armorcategory ON armorcategory.armor_category_id = armor.armor_category_id;
"""
c.execute(qq)
data2 = c.fetchall()
armorlist = []
for i in data2:
print('\n')
print(i)
t = {
'name': i[0],
'level': i[1],
'price_text': i[2],
'price_gp': i[3],
'ac_bonus': i[4],
'dex_cap': i[5],
'check_penalty': i[6],
'speed_penalty': i[7],
'strength': i[8],
'bulk': i[9],
'group': i[10],
'category': i[11],
'source': [
{
'abbr': 'CRB',
'page_start': 275,
'page_stop': 275
},
]
}
armorlist.append(t)
# datalist = []
# for i in data:
# # print(i)
# print(i[2])
# if i[2] != "TODO":
# print("We got an int")
# d = {
# 'name': i[0],
# 'descr': i[1],
# 'source': {
# 'abbr': 'CRB',
# 'page_start': int(i[2]),
# 'page_stop': int(i[2])
# }
# }
# datalist.append(d)
# else:
# d = {
# 'name': i[0],
# 'descr': i[1],
# 'source': {
# 'abbr': 'CRB',
# 'page_start': 9999999,
# 'page_stop': 9999999,
# 'comment': "TODO fix the source page start and stop"
# }
# }
# datalist.append(d)
print(armorlist)
tmpd = {'armorcategory': acats, 'armorgroup': datalist, 'armor': armorlist}
final = yaml.safe_dump(tmpd, allow_unicode=True)
with open('tmp-armor.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
File diff suppressed because it is too large. Load diff
-52
View File
@@ -1,52 +0,0 @@
import sqlite3
import yaml
def main():
conn = sqlite3.connect('../../pf2.db')
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute("select * from gear;")
res = [dict(row) for row in c.fetchall()]
for i in res:
if i['hands'] == None or i['hands'] == '':
i['hands'] = 0
reslist = []
for i in res:
if i['descr'] == '':
i['descr'] = None
tmp = {
"name": i['name'],
'level': int(i['level']),
"price_gp": i['price'],
"bulk": i['bulk'],
"descr": i['descr'],
'hands': int(i['hands']),
"source": [
{
'abbr': 'CRB',
'page_start': int(i['sources_pages']),
'page_stop': int(i['sources_pages'])
},
],
"traits": None
}
reslist.append(tmp)
# print(reslist)
tmpd = {'gear': reslist}
# now dump to yaml
final = yaml.safe_dump(tmpd, allow_unicode=True)
with open('tmp-gear.yaml', 'w') as f:
f.write(final)
# NOTE the 4 traits were added by hand manually to the final tmp-gear.yaml and not via this script
if __name__ == '__main__':
main()
-160
View File
@@ -1,160 +0,0 @@
import json
import yaml
def main():
with open(
'../third_party_json/spells20191115.json',
encoding='utf-8-sig') as f:
data = json.load(f)
# print(data)
for i in data:
if 'manual' in i:
del i['manual']
i['has_been_manually_proofread'] = False
if 'duration' not in i:
i['duration'] = None
# Fix components
if 'components' not in i:
i['components'] = None
else:
if i['components'] == ['1minute(material', 'somatic', 'verbal)']:
i['components'] = ['material', 'somatic', 'verbal']
if i['components'] == ['10minutes(material', 'somatic', 'verbal)']:
i['components'] = ['material', 'somatic', 'verbal']
if i['components'] == ['1hour(material', 'somatic', 'verbal)']:
i['components'] = ['material', 'somatic', 'verbal']
if i['components'] == ['1minute','material', 'somatic', 'verbal)']:
i['components'] = ['material', 'somatic', 'verbal']
if i['components'] == ['10minutes(somatic', 'verbal)']:
i['components'] = ['somatic', 'verbal']
if i['components'] == ['1minute(somatic', 'verbal)']:
i['components'] = ['somatic', 'verbal']
if i['components'] == ['1hour(somatic', 'verbal)']:
i['components'] = ['somatic', 'verbal']
for j, item in enumerate(i['components']):
if i['components'][j] == "somatic":
i['components'][j] = "Somatic"
if i['components'][j] == "material":
i['components'][j] = "Material"
if i['components'][j] == "verbal":
i['components'][j] = "Verbal"
if i['components'][j] == "focus":
i['components'][j] = "Focus"
if 'cast' not in i:
i['cast'] = None
if 'action' not in i:
i['action'] = None
i['action_abbr'] = i['action']
del i['action']
if i['action_abbr'] == "10 minutes":
i['action_abbr'] = "10m"
if i['action_abbr'] == "1 minute":
i['action_abbr'] = "1m"
if i['action_abbr'] == "1 hour":
i['action_abbr'] = "1h"
if 'traditions' not in i:
i['traditions'] = None
if i['traditions'] != None:
for j, item in enumerate(i['traditions']):
i['traditions'][j] = i['traditions'][j].capitalize()
if 'nethysUrl' in i:
del i['nethysUrl']
# print("spell:{}\n\tcast:{}\n\tcomponents:{}\n\taction:{}".format(i['name'], i['cast'], i['components'],i['action']))
# Fix source data
x = i['source']
if "Core Rulebook" in x:
tmp_abbr = "CRB"
elif "Lost Omens" in x:
tmp_abbr = "LOWG"
else:
raise Exception(
'something went wrong on sources in 3pp json data.')
res = [int(i) for i in x.split() if i.isdigit()]
# print("source line:{}\tres:{}".format(i['source'], res))
tmp_page_start = res[0]
tmp_page_stop = res[0]
i['source'] = [{
'abbr': tmp_abbr,
'page_start': tmp_page_start,
'page_stop': tmp_page_stop
}]
# description to descr
i['descr'] = i['description']
del i['description']
# Fix action cost
# fix requirements
if 'requirements' not in i:
i['req'] = None
else:
i['req'] = i['requirements']
del i['requirements']
if 'trigger' not in i:
i['trigger'] = None
if 'traits' not in i:
i['traits'] = None
else:
for idx, item in enumerate(i['traits']):
i['traits'][idx] = i['traits'][idx].capitalize()
# TODO Decide to keep targets or target
if 'targets' not in i:
i['targets'] = None
# for i in data:
# del i['actions_id']
# page = int(i['sources_pages'])
# del i['sources_pages']
# i['source'] = [{'abbr': 'CRB', 'page_start': page, 'page_stop': page }]
# x = i['actioncategories_id']
# if x == 1:
# i['actioncategory'] = "Basic"
# elif x ==2:
# i['actioncategory'] = "Specialty Basic"
# del i['actioncategories_id']
# y = i['actioncosts_id']
# if y == 0:
# i['actioncost_name'] = "Varies"
# elif y == 1:
# i['actioncost_name'] = "Single Action"
# elif y == 2:
# i['actioncost_name'] = "Two Actions"
# elif y == 3:
# i['actioncost_name'] = "Three Actions"
# elif y == 5:
# i['actioncost_name'] = "Free Action"
# elif y == 5:
# i['actioncost_name'] = "Reaction"
# del i['actioncosts_id']
data = {"spell": data}
final = yaml.safe_dump(data, allow_unicode=True, width=100000)
with open('tmp-spells.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
@@ -1,131 +0,0 @@
import sqlite3
import yaml
import pprint
def main():
pp = pprint.PrettyPrinter(indent=1, width=180)
conn = sqlite3.connect('../deprecated/pf2.db')
conn.row_factory = sqlite3.Row
q = """
SELECT * FROM staff;
"""
c = conn.cursor()
c.execute(q)
data = [dict(row) for row in c.fetchall()]
for i in data:
# ADD THE ITEM CATEGORY
i['itemcategory'] = "Staves"
# convert gp prices to cp prices to avoid float issues
if i['price'] == '':
i['price'] = '0'
i['price_cp'] = int(float(i['price']) * 100)
del i['price']
# make bulk a string
i['bulk'] = str(i['bulk'])
# handle source entries
i['source'] = [
{
'abbr': 'CRB',
'page_start': int(i['source_pages']),
'page_stop': int(i['source_pages'])
}
]
del i['source_id']
del i['source_pages']
# Get staffactivations and effects
qq = """
SELECT activation, effect FROM staffactivations
INNER JOIN
staff_staffactivations ON
staffactivations.staffactivations_id = staff_staffactivations.staffactivations_id
INNER JOIN
staff ON staff.staff_id = staff_staffactivations.staff_id
WHERE staff.staff_id = ?;
"""
# Get staffactivations
cc = conn.cursor()
cc.execute(qq, (i['staff_id'],))
res = cc.fetchall()
# print("\n\nStaff: {}".format(i['name']))
slist = []
for j in res:
x = tuple(j)[0]
y = tuple(j)[1]
xy = {'activation': x, 'effect': y}
slist.append(xy)
if len(slist) > 0:
i['staffactivations'] = slist
else:
i['staffactivations'] = None
# Get traits
qq = """
SELECT traits.short_name
FROM traits
INNER JOIN
staff_trait ON traits.trait_id = staff_trait.trait_id
INNER JOIN
staff ON staff.staff_id = staff_trait.staff_id
WHERE staff.staff_id = ?;
"""
cc = conn.cursor()
cc.execute(qq, (i['staff_id'],))
res = cc.fetchall()
# print("\n\nWeapon: {}".format(i['name']))
tlist = []
for j in res:
x = tuple(j)[0]
tlist.append(x)
if len(tlist) > 0:
i['traits'] = tlist
else:
i['traits'] = None
# Get staff spells
qq = """
SELECT spells.name, staff_spell.level
FROM spells
INNER JOIN
staff_spell ON staff_spell.spell_id = spells.spells_id
INNER JOIN
staff ON staff_spell.staff_id = staff.staff_id
WHERE staff.staff_id = ?;
"""
cc = conn.cursor()
cc.execute(qq, (i['staff_id'],))
res = cc.fetchall()
# print("\n\nStaff: {}".format(i['name']))
slist = []
for j in res:
x = tuple(j)[0]
y = tuple(j)[1]
xy = {'name': x, 'level': y}
slist.append(xy)
if len(slist) > 0:
i['staffspells'] = slist
else:
i['staffspells'] = None
# DO THIS LAST
del i['staff_id']
# pp.pprint(data)
fdata = {'staves': data}
final = yaml.safe_dump(fdata, allow_unicode=True)
with open('tmp--items-staves.yaml', 'w') as f:
f.write(final)
for i in data:
print("Staff Name: {}\tPrice (copper): {}".format(i['name'], i['price_cp']))
if __name__ == '__main__':
main()
-143
View File
@@ -1,143 +0,0 @@
import sqlite3
import yaml
import pprint
def main():
pp = pprint.PrettyPrinter(indent=4, width=160)
conn = sqlite3.connect('../../pf2.db')
conn.row_factory = sqlite3.Row
# DO WEAPONS
q = """
SELECT
price_gp,
dice_size,
bulk,
hands,
range,
reload,
weapons.name,
weapons.descr,
weapons.sources_id,
weapons.sources_pages,
weaponcategories.name AS weaponcategory,
weapongroups.name AS weapongroup,
damagetypes.name AS damagetype
FROM weapons
INNER JOIN
weaponcategories ON weapons.weaponcategories_id = weaponcategories.weaponcategories_id
INNER JOIN
weapongroups ON weapons.weapongroups_id = weapongroups.weapongroups_id
INNER JOIN
damagetypes ON weapons.damagetypes_id = damagetypes.damagetypes_id
;
"""
c = conn.cursor()
c.execute(q)
data = [dict(row) for row in c.fetchall()]
for i in data:
# handle empty bulk entries to match the abbr field in bulks.yaml
if i['bulk'] == '':
i['bulk'] = '-'
# convert gp prices to cp prices to avoid float issues
if i['price_gp'] == '':
i['price_gp'] = '0'
i['price_cp'] = int(float(i['price_gp']) * 100)
del i['price_gp']
i['source'] = [
{
'abbr': 'CRB',
'page_start': int(i['sources_pages']),
'page_stop': int(i['sources_pages'])
}
]
del i['sources_id']
del i['sources_pages']
# Get traits
qq = """
SELECT traits.short_name
FROM traits
INNER JOIN
weapons_traits ON traits.trait_id = weapons_traits.trait_id
INNER JOIN
weapons ON weapons.weapons_id = weapons_traits.weapons_id
WHERE weapons.weapons_id = (
SELECT weapons.weapons_id
WHERE weapons.name = ?
);
"""
cc = conn.cursor()
cc.execute(qq, (i['name'],))
res = cc.fetchall()
print("\n\nWeapon: {}".format(i['name']))
tlist = []
for j in res:
x = tuple(j)[0]
tlist.append(x)
if len(tlist) > 0:
i['traits'] = tlist
else:
i['traits'] = None
# pp.pprint(data)
fdata = {'weapons': data}
final = yaml.safe_dump(fdata, allow_unicode=True)
with open('tmp-weapons.yaml', 'w') as f:
f.write(final)
if __name__ == '__main__':
main()
# def done():
# DO WEAPON GROUPS
# q = """
# SELECT
# sources_pages,
# name,
# descr
# FROM weapongroups
# """
# c = conn.cursor()
# c.execute(q)
# data = [dict(row) for row in c.fetchall()]
# pp.pprint(data)
# # "source": [
# # {
# # 'abbr': 'CRB',
# # 'page_start': int(i['sources_pages']),
# # 'page_stop': int(i['sources_pages'])
# # },
# wgdata = []
# for i in data:
# res = {
# 'name': i['name'],
# 'descr': i['descr'],
# 'source': [
# {
# 'abbr': 'CRB',
# 'page_start': int(i['sources_pages']),
# 'page_stop': int(i['sources_pages'])
# }
# ]
# }
# wgdata.append(res)
# pp.pprint(wgdata)
# finalwgdata = {'weapongroups': wgdata}
# pp.pprint(finalwgdata)
# final = yaml.safe_dump(finalwgdata, allow_unicode=True)
# with open('tmp-weapongroups.yaml', 'w') as f:
# f.write(final)
@@ -1,209 +0,0 @@
import sqlite3
import yaml
import pprint
def main():
conn = sqlite3.connect('../../pf2.db')
conn.row_factory = sqlite3.Row
q = """
SELECT * FROM feats;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
data = [dict(row) for row in c.fetchall()]
# pprint.pprint(data)
q = """
SELECT * FROM requirements;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
req_data = [dict(row) for row in c.fetchall()]
# pprint.pprint(req_data)
q = """
SELECT * FROM actioncosts;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
act_data = [dict(row) for row in c.fetchall()]
# pprint.pprint(act_data)
q = """
SELECT * FROM frequency;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
freq_data = [dict(row) for row in c.fetchall()]
# pprint.pprint(freq_data)
q = """
SELECT * FROM triggers;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
trig_data = [dict(row) for row in c.fetchall()]
# pprint.pprint(trig_data)
q = """
SELECT featprereqs_id, descr, feat_id FROM featprereqs;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q)
# data = c.fetchall()
prdata = [dict(row) for row in c.fetchall()]
# pprint.pprint(prdata)
for i in prdata:
if i['feat_id'] != None:
q = """
SELECT short_name from feats WHERE feat_id=?;
"""
# so we get a dict out of our query
c = conn.cursor()
c.execute(q, (i['feat_id'],))
# data = c.fetchall()
subprdata = [dict(row) for row in c.fetchall()]
# pprint.pprint(subprdata)
i['feat'] = subprdata[0]['short_name']
else:
i['feat'] = None
for i in data:
# all this mess is getting the sources
x = i['sources_pages'].split(',')
# if len(x) > 1:
# print("name:{}, x:{}".format(i['short_name'], x))
s = []
for j in x:
page = int(j)
s.append({'abbr': 'CRB', 'page_start': page, 'page_stop': page })
i['source'] = s
del i['sources_pages']
# now get the actions
if i['action_id'] == None:
i['action'] = None
else:
# get action name based on id
id = i['action_id']
for a in act_data:
if a['actioncosts_id'] == id:
i['action'] = a['name']
del i['action_id']
# now do the triggers
if i['triggers_id'] == None:
i['trigger'] = None
else:
# get trigger name based on id
id = i['triggers_id']
for t in trig_data:
if t['triggers_id'] == id:
i['trigger'] = t['triggers_descr']
del i['triggers_id']
# now do the requirements
if i['requirements_id'] == None:
i['requirement'] = None
else:
# get requirement name based on id
id = i['requirements_id']
for r in req_data:
if r['requirements_id'] == id:
i['requirement'] = r['requirements_descr']
del i['requirements_id']
# now do the frequency
if i['frequency_id'] == None:
i['frequency'] = None
else:
# get requirement name based on id
id = i['frequency_id']
# print(id)
# print(i['short_name'])
for f in freq_data:
if f['freq_id'] == id:
i['frequency'] = f['freq_descr']
del i['frequency_id']
# populate prereqs:
### get prereq IDs for a feat
stmt = "SELECT featprereqs_id FROM feats_featprereqs WHERE feat_id=?"
c = conn.cursor()
# print(i['feat_id'])
c.execute(stmt, (i['feat_id'],))
# data = c.fetchall()
fpr_data = [dict(row) for row in c.fetchall()]
# if len(fpr_data) > 1:
# # print("fuck")
# pprint.pprint(fpr_data)
# print(fpr_data)
for f in fpr_data:
stmtnext = "SELECT descr, feat_id FROM featprereqs WHERE featprereqs_id=?"
c = conn.cursor()
# print(i['feat_id'])
c.execute(stmtnext, (f['featprereqs_id'],))
# data = c.fetchall()
fpr_data_next = [dict(row) for row in c.fetchall()]
# print(fpr_data_next)
prlist = []
for ff in fpr_data_next:
# print(ff)
if ff['feat_id'] == None:
prlist.append({'descr': ff['descr'], 'feat': None})
else:
stmtfinal = "SELECT short_name from feats WHERE feat_id=?"
c = conn.cursor()
# print(i['feat_id'])
c.execute(stmtfinal, (ff['feat_id'],))
# data = c.fetchall()
fn_data_final = [dict(row) for row in c.fetchall()]
# print("STUFF")
# print(fn_data_final)
prlist.append({'descr': ff['descr'], 'feat': fn_data_final[0]['short_name']})
i['prereqs'] = prlist
# Add in traits
tt = "SELECT feats_traits.trait_id AS trait_id, traits.short_name AS name FROM feats_traits LEFT JOIN traits ON feats_traits.trait_id = traits.trait_id WHERE feats_traits.feat_id=?"
c = conn.cursor()
# print(i['feat_id'])
c.execute(tt, (i['feat_id'],))
# data = c.fetchall()
trait_data = [dict(row) for row in c.fetchall()]
# print("short_name: {}\ttraits: {}".format(i['short_name'], trait_data))
trait_list = []
for item in trait_data:
trait_list.append(item['name'])
# print(trait_list)
if len(trait_list) < 1:
i['traits'] = None
else:
i['traits'] = trait_list
# THIS NEEDS TO BE LAST AS PREREQS REFERENCES IT
del i['feat_id']
i['has_been_manually_proofread'] = False
data = {"feat": data}
final = yaml.safe_dump(data, allow_unicode=True, width=10000)
with open('tmp-feat.yaml', 'w') as f:
f.write(final)
if __name__ == "__main__":
main()
-48
View File
@@ -1,48 +0,0 @@
import yaml
import pprint
def main():
standardize_monsters()
def standardize_monsters():
with open('monsters.yaml', 'r') as f:
data = yaml.full_load(f)
goodset = set()
for i in data['monsters']:
deletekeys = []
for k, v in i.items():
# print("Key:{}\tValue:{}".format(k,v))
if v == None:
# print("Deleting key: {} from {}".format(k, i['name']))
deletekeys.append(k)
else:
goodset.add(k)
# got to do it this way or your get a runtime error for changing the
# index mid iteration
for z in deletekeys:
del (i[z])
# print(goodset)
for i in data['monsters']:
for k in goodset:
if k not in i:
# print("Adding field {} to {}".format(k, i['name']))
i[k] = None
final = yaml.safe_dump(data, allow_unicode=True)
with open('monsters.yaml', 'w') as f:
f.write(final)
# pprint.pprint(data['monsters'][0])
# print(data['monsters'][0].keys())
# for key, value in data['monsters'][0]:
# print("Key:{}\tValue:{}".format(key,value))
if __name__ == "__main__":
main()