|
|
@@ -93,42 +93,76 @@ class Character: |
|
|
|
def gen_career(self): |
|
|
|
self.career = gen_career() |
|
|
|
|
|
|
|
def print(self): |
|
|
|
def print_name(self): |
|
|
|
print(f"Name: {self.name} (Kobold {self.career})") |
|
|
|
|
|
|
|
def print(self): |
|
|
|
self.print_name() |
|
|
|
print(f"Order: {self.stats[0]}") |
|
|
|
print(f"Chaos: {self.stats[1]}") |
|
|
|
print(f"Brain: {self.stats[2]}") |
|
|
|
print(f"Body: {self.stats[3]}") |
|
|
|
|
|
|
|
class Ship: |
|
|
|
def __init__(self): |
|
|
|
self.name1 = r.choice(["Red","Orange","Yellow","Green","Blue","Violet","Dark","Light","Frenzied","Maniacal","Ancient"]) |
|
|
|
self.name2 = r.choice(["Moon","Comet","Star","Saber","World-Eater","Dancer","Looter","Phlogiston","Fireball","Mecha","Raptor"]) |
|
|
|
self.gqual = r.choice(["is stealthy & unarmored","is speedy & unarmored","is maneuverable & unarmored","is always repairable","is self-repairing","is flamboyant & speedy","is slow & armored","is flamboyant & armored","is hard to maneuver & armored","has Too Many Weapons!","has a prototype hyperdrive"]) |
|
|
|
self.bqual = r.choice(["has an annoying AI","has inconveniently crossed circuits","has an unpredictable power source","drifts to the right","is haunted","was recently 'found' so the kobolds are unused to it","is too cold","has a constant odd smell","its interior design... changes","its water pressure shifts between slow drip and power wash","it leaves a visible smoke trail"]) |
|
|
|
self.fullname = f"{self.name1} {self.name2}" |
|
|
|
|
|
|
|
def print(self): |
|
|
|
print(f"The {self.fullname} {self.gqual}, but {self.bqual}.") |
|
|
|
|
|
|
|
class Campaign: |
|
|
|
def __init__(self, n=None): |
|
|
|
n = 6 if n == None else n |
|
|
|
self.ship = Ship() |
|
|
|
self.params = gen_plot() |
|
|
|
self.characters = [] |
|
|
|
for _ in range(n): |
|
|
|
c = Character() |
|
|
|
c.generate() |
|
|
|
self.characters.append(c) |
|
|
|
self.art = "an" if self.params[1][0] in ["A","E","I","O","U"] else "a" |
|
|
|
|
|
|
|
def print_params(self): |
|
|
|
print(f"The Kobolds of the {self.ship.fullname}") |
|
|
|
print(f"have been sent out to {self.art} {self.params[0]} {self.params[1]}") |
|
|
|
print(f"in order {self.params[2]}") |
|
|
|
print(f"but they're challenged by {self.params[3]}!") |
|
|
|
print() |
|
|
|
self.ship.print() |
|
|
|
|
|
|
|
def print_chars(self): |
|
|
|
print("The kobolds:") |
|
|
|
for k in self.characters: |
|
|
|
k.print() |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
group = parser.add_mutually_exclusive_group() |
|
|
|
group.add_argument("-n", "--num", help="print this many kobolds", type=int, default=1) |
|
|
|
group.add_argument("-k", "--kobolds", help="print this many kobolds", type=int, default=1) |
|
|
|
group.add_argument("-n", "--names", help="print this many kobolds without stat blocks", type=int) |
|
|
|
group.add_argument("-s", "--ship", help="print only the ship name and description", action="store_true") |
|
|
|
group.add_argument("-c", "--campaign", help="print a full campaign block with 6 kobolds", action="store_true") |
|
|
|
group.add_argument("-p", "--params", help="print only the parameters of a campaign", action="store_true") |
|
|
|
args = parser.parse_args() |
|
|
|
if args.campaign: |
|
|
|
cs = [] |
|
|
|
for _ in range(6): |
|
|
|
cmp = Campaign() |
|
|
|
cmp.print_params() |
|
|
|
cmp.print_chars() |
|
|
|
elif args.params: |
|
|
|
cmp = Campaign() |
|
|
|
cmp.print_params() |
|
|
|
elif args.ship: |
|
|
|
ship = Ship() |
|
|
|
ship.print() |
|
|
|
elif args.names: |
|
|
|
for _ in range(args.names): |
|
|
|
c = Character() |
|
|
|
c.generate() |
|
|
|
cs.append(c) |
|
|
|
parameters = gen_plot() |
|
|
|
ship = gen_transpo() |
|
|
|
art = "an" if parameters[1] == "Asteroid" else "a" |
|
|
|
print(f"The Kobolds of the {ship[0]} {ship[1]}") |
|
|
|
print(f"have been sent out to {art} {parameters[0]} {parameters[1]}") |
|
|
|
print(f"in order {parameters[2]}") |
|
|
|
print(f"but they're challenged by {parameters[3]}!") |
|
|
|
print() |
|
|
|
print(f"The {ship[0]} {ship[1]} {ship[2]}, but {ship[3]}.") |
|
|
|
print() |
|
|
|
print("The kobolds:") |
|
|
|
for k in cs: |
|
|
|
k.print() |
|
|
|
elif args.ship: |
|
|
|
ship = gen_transpo() |
|
|
|
print(f"The {ship[0]} {ship[1]} {ship[2]}, but {ship[3]}.") |
|
|
|
c.print_name() |
|
|
|
else: |
|
|
|
for _ in range(args.num): |
|
|
|
c = Character() |