|
|
|
|
|
|
|
|
"id": 9, |
|
|
"id": 9, |
|
|
"name": "elder gods hailing from the dark spaces between the stars", |
|
|
"name": "elder gods hailing from the dark spaces between the stars", |
|
|
"shortname": "gods", |
|
|
"shortname": "gods", |
|
|
"stats": [6,6,6,6], |
|
|
|
|
|
|
|
|
"stats": [0,6,6,6], |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
{ |
|
|
"id": 10, |
|
|
"id": 10, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Character: |
|
|
class Character: |
|
|
|
|
|
GADGETS = [ {"name": "Awesome Dagger of Sneak(?) Attacks", "description": "Yell 'Sneak Attack!' to count a mixed-success Body attack as a success.", "reusable": True}, |
|
|
|
|
|
{"name": "Button of Uselessness", "description": f"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 {r.randint(1,6)} times before it breaks and no longer compels others to press it.", "reusable": False}, |
|
|
|
|
|
{"name": "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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"name": "Pocket Sand!", "description": "Yell 'Pocket Sand!' to count a successful Body attack against you as a mixed success.", "reusable": False}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
{"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}, |
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
def __init__(self): |
|
|
def __init__(self): |
|
|
self.name = "" |
|
|
self.name = "" |
|
|
self.career = "" |
|
|
self.career = "" |
|
|
|
|
|
|
|
|
self.gen_name() |
|
|
self.gen_name() |
|
|
self.gen_stats() |
|
|
self.gen_stats() |
|
|
self.gen_career() |
|
|
self.gen_career() |
|
|
|
|
|
self.gen_gadget() |
|
|
|
|
|
|
|
|
def gen_name(self): |
|
|
def gen_name(self): |
|
|
self.name = gen_name() |
|
|
self.name = gen_name() |
|
|
|
|
|
|
|
|
def gen_career(self): |
|
|
def gen_career(self): |
|
|
self.career = r.choice(["Soldier/Guard","Pilot","Medic","Mechanic","Politician","Spellcaster","Performer","Historian","Spy","Cook","Cartographer","Inventor","Merchant"]) |
|
|
self.career = r.choice(["Soldier/Guard","Pilot","Medic","Mechanic","Politician","Spellcaster","Performer","Historian","Spy","Cook","Cartographer","Inventor","Merchant"]) |
|
|
|
|
|
|
|
|
|
|
|
def gen_gadget(self): |
|
|
|
|
|
self.gadget = r.choice(Character.GADGETS) |
|
|
|
|
|
|
|
|
def print_name(self, html=False): |
|
|
def print_name(self, html=False): |
|
|
if html: |
|
|
if html: |
|
|
charText = f"<h4>Name: {self.name} (Kobold {self.career})</h4>" |
|
|
charText = f"<h4>Name: {self.name} (Kobold {self.career})</h4>" |
|
|
|
|
|
|
|
|
f" <li>Body: {self.stats[3]}</li>\n" |
|
|
f" <li>Body: {self.stats[3]}</li>\n" |
|
|
f" </ul>\n" |
|
|
f" </ul>\n" |
|
|
f" </span>\n" |
|
|
f" </span>\n" |
|
|
|
|
|
f" <br>\n" |
|
|
|
|
|
f" <span class='koboldgadget'>\n" |
|
|
|
|
|
f" {self.gadget['name']}<br>\n" |
|
|
|
|
|
f" {self.gadget['description']}<br>\n" |
|
|
|
|
|
f" {'Reusable' if self.gadget['reusable'] else ''}\n" |
|
|
|
|
|
f" </span>" |
|
|
f"</div>\n" |
|
|
f"</div>\n" |
|
|
) |
|
|
) |
|
|
print(out) |
|
|
print(out) |
|
|
|
|
|
|
|
|
print(f"Chaos: {self.stats[1]}") |
|
|
print(f"Chaos: {self.stats[1]}") |
|
|
print(f"Brain: {self.stats[2]}") |
|
|
print(f"Brain: {self.stats[2]}") |
|
|
print(f"Body: {self.stats[3]}") |
|
|
print(f"Body: {self.stats[3]}") |
|
|
|
|
|
print(f"Gadget: {self.gadget['name']} ({self.gadget['description']}{'- Reusable' if self.gadget['reusable'] else ''})") |
|
|
|
|
|
|
|
|
class Ship: |
|
|
class Ship: |
|
|
def __init__(self): |
|
|
def __init__(self): |