import random as r def rinterp(s1, l1, s2): def rfunc(): return f"{s1}{r.choice(l1)}{s2}" return rfunc gadgets = [ { "id": 0, "name": "Awesome Dagger of Sneak(?) Attacks", "description": "Yell 'Sneak Attack!' to count a mixed-success Body attack as a success.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 1, "name": "Button of Uselessness", "description": rinterp("This large, red button can be stuck onto any flat surface, horizontal, vertical, or otherwise. A short time after it has been placed, any character (friend or foe) nearby must succeed a Brains roll to avoid pressing the button. Pressing the button does nothing, but this action takes the place of anything that might otherwise be done during an Event if the Brains roll is failed. The button can be pressed", list(range(1,7)), "times before it breaks and no longer compels others to press it."), "reusable": False, # boolean "cursed": False # boolean }, { "id": 2, "name": "Marwyse's Encyclopedia of Stuff I Totally Knew", "description": "Add 2 points to the target number of any uncontested Brains roll, or 1 point to the target number of a contested Brains roll.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 3, "name": "Medkit", "description": "Make a Brains/Order roll to restore 2 lost Body points, or 1 on a Mixed Success. If the character has medical training, restored Body points may be doubled.", "reusable": False, # boolean "cursed": False # boolean }, { "id": 4, "name": "Potion of Healing", "description": "Restore 1 lost Body point. Using counts as an Event but no roll is needed unless it's contested.", "reusable": False, # boolean "cursed": False # boolean }, { "id": 5, "name": "Tinfoil Helm of Shielding", "description": "Count any Brains damage as a mixed success. If you take Body damage, roll 1d6; on a 6, the Helm is useless until you take a nap.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 6, "name": "Handy Toothbrush", "description": "Scrub the Space Gunk off whatever object you're interacting with to turn a mixed Order success to make that object work into a full success.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 7, "name": "Jar of ... Something", "description": "Throw it (Body/Chaos) at another character to make them spend an Event cleaning it off, or throw it at the floor to make a ten-foot circle of difficult terrain.", "reusable": False, # boolean "cursed": False # boolean }, { "id": 8, "name": "Pocket Sand!", "description": "Yell 'Pocket Sand!' to count a successful Body attack against you as a mixed success.", "reusable": False, # boolean "cursed": False # boolean }, { "id": 9, "name": "The Fabulous Grappling Hook", "description": "As an Event, instantly move 50 feet in any direction. (Make sure you have 50 feet available to move in or take 1 Body damage when you arrive short of that.)", "reusable": True, # boolean "cursed": False # boolean }, { "id": 10, "name": "Pocket Accordion", "description": "Make a Brains/Order or Brains/Chaos roll. On a success, any nearby opponent has -1 Brains during their next event. On a failure, everybody nearby, including you, has -1 Brains on their next event.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 11, "name": "Cloak of Adsorption", "description": "The cloak starts out white. Whenever you are the target of a successful attack, the cloak becomes the color of whatever hit you. If your cloak is already the same color as whatever hit you, the attack becomes a mixed success and the cloak turns black and can no longer absorb colors. The cloak becomes white again after a nap.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 12, "name": "Cloak of Absorption", "description": "The cloak starts out white. You can remove the cloak and lay it over difficult terrain to make it easy terrain; if the terrain is difficult because the ground is wet, the cloak becomes wet and the ground in that area becomes dry. The cloak dries out after a nap.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 13, "name": "Cloak of Desorption", "description": "The cloak starts out black. As an Event, you can cause a gas to evaporate from the cloak, leaving it a dingy gray and healing 1 Body to anyone within ten feet of you. The cloak becomes black again after a nap.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 14, "name": "Cloak of Food Portions", "description": "Wearing this cloak causes it to flare out at the base, making the wearer resemble a pyramid. In conversations regarding food the wearer can add +2 to Brains rolls when trying to convince others to alter their diets. This can be done once per nap. Considering how many large things tend to snack on kobolds, this has been found to actually be quite useful.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 15, "name": "Huge Goggles", "description": "If you take Body damage, roll 1d6; on a 6, the lenses of the Goggles break until you take a nap.", "reusable": True, # boolean "cursed": False # boolean }, { "id": 16, # int "name": "Potion of Atmosphere Creation", # (f)string "description": "A character that consumes this extremely carbonated beverage will begin to burp uncontrollably. While little more than a juvenile pastime in many cases, this also surrounds the character in a breathable atmosphere that clings to their body until their next nap or until they encounter a stiff breeze. This regurgitated air smells foul but provides protection against hard vacuum and poisonous gasses.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 17, # int "name": "Potion of Reality Rejection", # (f)string "description": "Taking this potion allows the character to impose their sense of order upon their immediate surroundings. The character's Order score is temporarily increased by one (1) until they take a nap.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 18, # int "name": "Potion of Study Breaks", # (f)string "description": "Temporarily adds one (1) to the character's Brains Stat, even if it's already at maximum. This effect ends when the character takes Brains damage or a nap.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 19, # int "name": "Potion of Hangovers", # (f)string "description": "If used in conjunction with a Chaos roll meant to do damage, a Mixed Result or better will do a point of Brains damage in addition to any other results.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 20, # int "name": "Potion of Healing Transference", # (f)string "description": "Restores one (1) lost Body point to anyone within 15 feet. If no one is healed, the drinker takes 1 point of Body damage instead.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 21, # int "name": "Potion of Deception", # (f)string "description": "Resembles another potion (GM may roll or choose). When used, the drinker will believe they are under the effects of the potion for one minute or until the believed effects were expected to end. No one else will be fooled.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 22, # int "name": "Potion of Caffeine!", # (f)string "description": "Restores one (1) lost Brains point.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 23, # int "name": "Potion of Gut Punches", # (f)string "description": "If used in conjunction with a Chaos roll meant to do damage, a Mixed Result or better will do a point of Body damage in addition to any other results.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 24, # int "name": "Potion of Gym Membership", # (f)string "description": "Temporarily adds one (1) to the character's Body Stat, even if it's already at maximum. This effect ends when the character takes Body damage or a nap.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 25, # int "name": "Potion of Random Probability", # (f)string "description": "Anything can happen when this potion is taken! Anything! More specifically, the character's Chaos Stat is temporarily increased by one (1) until they take a nap. The character and GM are encouraged to describe the most unusual situations whenever the player makes a Chaos roll.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 26, # int "name": "Potion of Freeze Drying", # (f)string "description": "An organic character that drinks this potion will shrink to 20\% of their original size while expelling all of the water in their body. Clothing and equipment are not affected. The character enters a state of suspended animation that can be reversed by soaking their body in water for a few seconds. While in this state the character does not need to eat, drink, or breathe. Any beneficial or detrimental effects on the character are 'paused' until the effect is reversed.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 27, # int "name": "Book of Convoluted and often Contradictory Regulations", # (f)string "description": "This staple of lawyermancy can be used to confuse a being into believing they need to comply with the wielder's demands for one event. This does nothing if they are ordered to harm (or commit actions that will lead to harm, like stepping into an airlock...) themselves or an ally. After this time they become resentful that they were ordered around and are likely to retaliate.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 28, # int "name": "Zeeli's Guide to Responsible Pyromania", # (f)string "description": "While this book does not enable fire based attacks on its own, it does allow the wielder to take fire themed damage that would hit ally and have it instead be applied to an opponent. The book itself is highly flammable and is consumed in the process.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 29, # int "name": "\"The Book\"", # (f)string "description": "If thrown at a being that is in violation of an applicable law or regulation (player picks, GM decides after \"The Book\" is thrown whether it works), throwing \"The Book\" at that being does 1 Brains damage. This counts as an event but no roll is needed. Regardless of the results, \"The Book\" is not sturdy enough to be thrown twice.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 30, # int "name": "Marwyse's Overdue Library Book", # (f)string "description": "The wielder can use this book to subtract 1 from a Brains based roll once per nap, but each time they do so they take 1 point of Brains damage over the guilt of having not yet returned the book. This damage occurs after the results of the Brains roll are resolved.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 31, # int "name": "Guide to Scenic Vistas That Certainly Won't Kill You", # (f)string "description": "This booklet us published by a local tourist board and paints an image of the kobolds' destination as seen through rose colored glasses. It may be used to subtract 1 from any uncontested roll once per nap, but is completely useless after the mission has ended and the kobolds return home.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 32, # int "name": "Chroma's Abridged Guide to Ship Operations", # (f)string "description": "This book contains a single, oddly specific how-to for repairing, maintaining, or operating a spaceship. The wielder may use this book to replace a failed roll involving the ship with a Mixed Success, or to replace a Mixed Success with a Success.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 33, # int "name": "Niwri's Survivalist's Handbook", # (f)string "description": "This book may be used to reduce damage from environmental threats (earthquakes, volcanoes, floods, etc.) by half, rounded down. Somehow, the act of using a Survivalist's Handbook always results in it being destroyed by that same environmental threat.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 34, # int "name": "Daldain's Permit of Permissions", # (f)string "description": "If told by another being that the wielder may or cannot do something, they may display this permit to temporarily confuse that being. Word spreads quickly about this event and future attempts to use this permit do not affect anyone.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 35, # int "name": "Chroma's Out of Date Science Journal", # (f)string "description": "The wielder cites this journal by explaining an outdated theory on how the laws of physics were once thought to work. This \"theory\" can be 100\% fictional and the player is encouraged to make it up on the spot. For one event the laws of the universe conform to this outdated theory, after which the Science Journal's publisher issues a retraction. No damage or repairs caused by this journal persist after the event has been resolved, but anything avoided during that event is still avoided.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 36, # int "name": "Gox's Illustrated Manual of Physical Exertions", # (f)string "description": "Once per nap, the wielder of this book may add 2 points to the target number of any uncontested Body roll, or 1 point to the target number of a contested Body roll. If given to another character, that character must take a nap before this item can be used.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, # { # "id": 37, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 38, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 39, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 40, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 41, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 42, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 43, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 44, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 45, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 46, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 47, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 48, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 49, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 50, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 51, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 52, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 53, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 54, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 55, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 56, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 57, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 58, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 59, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 60, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 61, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 62, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 63, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 64, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 65, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 66, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 67, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 68, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 69, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 70, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 71, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 72, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 73, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 74, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 75, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 76, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 77, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 78, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 79, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 80, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 81, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 82, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 83, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 84, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 85, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 86, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 87, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 88, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 89, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 90, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 91, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 92, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 93, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 94, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 95, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 96, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 97, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 98, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 99, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 100, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 101, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 102, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 103, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 104, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 105, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 106, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 107, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 108, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 109, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 110, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 111, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 112, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, # { # "id": 113, # int # "name": "", # (f)string # "description": "", # (f)string # "reusable": False, # boolean # "cursed": False # boolean # }, { "id": 114, # int "name": "Bard's Lute", # (f)string "description": "Once per nap, you can use the Lute to grant yourself either flying or invisibility for one minute.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 115, # int "name": "Barbarian's Axe", # (f)string "description": "You get +1 Body damage to any successful or mixed-success attack while wielding this weapon.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 116, # int "name": "Evasive Ring", # (f)string "description": "You can reduce any successful Body attack against you to a mixed success while you wear this ring.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 117, # int "name": "Seven-League Boots", # (f)string "description": "While wearing these boots, you can move twice as far as you normally could.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 118, # int "name": "Bard's Lyre", # (f)string "description": "Twice per nap, you can use the Lyre to grant yourself either flying or invisibility for one minute, or you can create a wall of fire or of wind that lasts for one minute and extends 30 feet in whatever straight line you choose.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 119, # int "name": "Dragon Scale Mail", # (f)string "description": "Once per nap, you can reduce any successful Body attack against you to a failure, OR three times per nap, you can reduce a mixed success to a failure. If you use this to reduce a mixed success to a failure, you can't use the first feature until you've taken a nap.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 120, # int "name": "Shifting Cloak", # (f)string "description": "Once per nap, you can reduce any successful Body attack against you to a failure. In addition, whether or not you've used this ability, you subtract 1 from any roll you make to avoid a Body attack.", # (f)string "reusable": True, # boolean "cursed": False # boolean }, { "id": 121, # int "name": "Holy Mace", # (f)string "description": "You deal 1 additional Body damage when you wield this weapon. Once per nap, if you strike an undead with this weapon, they must immediately make an Order+Body check - after they take the damage! - or immediately be destroyed.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 122, # int "name": "Winged Cloak", # (f)string "description": "While wearing this cloak, you move half again as far as you normally could, and twice per nap, you can grant yourself the ability to fly for one minute.", # (f)string "reusable": False, # boolean "cursed": False # boolean }, { "id": 123, "name": "Shortbow of the Watch", "description": "Choose a single target. You get +1 to Body damage against that target and +1 to Brain rolls to track that target. Activating this is not an Event.", "reusable": True }, { "id": 124, "name": "Hammer of Thunderbolts", "description": "You get +1 Body damage on any successful or partially successful attack with this weapon. As an Event, you can also throw it at a target or surface, which will stun any creature within 30 feet of the impact for 1d6 Events.", "reusable": True }, { "id": 125, "name": "Eldritch Cannon", "description": "You conjure a small, semi-autonomous and semi-intelligent cannon that can produce a single spell effect of your choice as an Event.", "reusable": True }, { "id": 126, "name": "Staff of Lightning", "description": "As an Event, create a lightning bolt from the tip of the staff that travels 30 feet in a straight line and deals 2 Body damage to any target in its path.", "reusable": True }, { "id": 127, "name": "Voyager Staff", "description": "Any spell you cast has +1 damage. In addition, as an Event, you can move up to 50 feet in any direction - even through walls and other solid surfaces.", "reusable": True }]