Browse Source

I think passwords are done for now.

master
Noëlle 3 years ago
parent
commit
989ef0012b
1 changed files with 85 additions and 25 deletions
  1. 85
    25
      koboldgen.py

+ 85
- 25
koboldgen.py View File

}, },
] ]
def __init__(self, loc_desc=None, locIndex=None, battlefield=None, location=None, missIndex=None, oops=None, mission=None, probIndex=None, problem=None, probName=None, secProblem=None, thirdProblem=None, ):
def __init__(self, loc_desc=None, locIndex=None, battlefield=None, location=None, missIndex=None, oops=None, mission=None, probIndex=None, problem=None, probName=None, secProblem=None, thirdProblem=None):
self.loc_desc = loc_desc if loc_desc != None else Plot.loc1[r.randint(0, len(Plot.loc1)-1)] self.loc_desc = loc_desc if loc_desc != None else Plot.loc1[r.randint(0, len(Plot.loc1)-1)]
self.locIndex = int(locIndex) if locIndex != None else r.randint(0, len(Plot.loc2)-1) self.locIndex = int(locIndex) if locIndex != None else r.randint(0, len(Plot.loc2)-1)
self.battlefield = int(battlefield) if battlefield != None else 0 self.battlefield = int(battlefield) if battlefield != None else 0
self.location = location if location != None else Plot.loc2[self.locIndex] self.location = location if location != None else Plot.loc2[self.locIndex]
if locIndex == None and self.locIndex == len(Plot.loc2) - 1:
if locIndex == None and self.locIndex == len(Plot.loc2) - 2:
if self.battlefield == 0: if self.battlefield == 0:
self.battlefield = 1 self.battlefield = 1
self.locIndex = r.randint(0, len(Plot.loc2)-2)
self.locIndex = r.randint(0, len(Plot.loc2)-3)
elif locIndex == None and self.locIndex != len(Plot.loc2) - 1: elif locIndex == None and self.locIndex != len(Plot.loc2) - 1:
if self.location == "": if self.location == "":
self.location = Plot.loc2[self.locIndex] self.location = Plot.loc2[self.locIndex]
if self.oops != 1: if self.oops != 1:
self.oops = 0 self.oops = 0
self.mission = Plot.miss[r.randint(0, len(Plot.miss)-1)] self.mission = Plot.miss[r.randint(0, len(Plot.miss)-1)]
self.probIndex = r.randint(0, len(Plot.prob)-1)
self.probIndex = probIndex if probIndex != None else r.randint(0, len(Plot.prob)-1)
self.problem = Plot.prob[self.probIndex] self.problem = Plot.prob[self.probIndex]
self.secProblem = None
self.thirdProblem = None
self.problem["name"] = probName if probName != None else gen_name()
self.secProblem = [x for x in Plot.prob if x["id"] == secProblem][0] if (secProblem != None and secProblem in list(filter(lambda x:x["id"], Plot.prob))) else None
self.thirdProblem = [x for x in Plot.prob if x["id"] == thirdProblem][0] if (thirdProblem != None and thirdProblem in list(filter(lambda x:x["id"], Plot.prob))) else None
self.problem["givenname"] = probName if probName != None else gen_name()
if self.problem["id"] == 3: if self.problem["id"] == 3:
self.secProblem = {"name": "Parasites", "shortname": "parasites", "stats": [3,4,2,3]} self.secProblem = {"name": "Parasites", "shortname": "parasites", "stats": [3,4,2,3]}
if self.problem["id"] == 10: if self.problem["id"] == 10:
self.secProblem = Plot.prob[self.secProbIndex] self.secProblem = Plot.prob[self.secProbIndex]
if self.secProbIndex == 3: if self.secProbIndex == 3:
self.thirdProblem = {"name": "Parasites", "shortname": "parasites", "stats": [3,4,2,3]} self.thirdProblem = {"name": "Parasites", "shortname": "parasites", "stats": [3,4,2,3]}
self.fullProblem = self.problem["name"]
self.fullProblem = self.problem["givenname"] + ", " + self.problem["name"]
if self.secProblem and self.secProblem["name"] != "Parasites": if self.secProblem and self.secProblem["name"] != "Parasites":
self.fullProblem += " and its minion, " + self.secProblem["name"] self.fullProblem += " and its minion, " + self.secProblem["name"]




def __init__(self, name=None, career=None, stats=None, gadget=None): def __init__(self, name=None, career=None, stats=None, gadget=None):
self.name = name if name != None else "" self.name = name if name != None else ""
self.career = career if career != None else ""
if career == None:
self.career = ""
elif isinstance(career, str):
self.career = career
elif isinstance(career, int) and career < len(Campaign.CAREERS):
self.career = [x for x in Character.CAREERS if x["id"] == career][0]["name"]
else:
self.career = ""
self.stats = stats if stats != None else [] self.stats = stats if stats != None else []
self.gadget = gadget if gadget != None else ""
if gadget == None:
self.gadget = ""
elif isinstance(gadget, str) or isinstance(gadget, object):
self.gadget = gadget
elif isinstance(gadget, int) and gadget < len(Campaign.GADGETS):
self.gadget = [x for x in Character.GADGETS if x["id"] == gadget][0]
else:
self.gadget = ""
self.generate() self.generate()


def generate(self): def generate(self):
if self.name == "":
if self.name == "" or self.name == None:
self.gen_name() self.gen_name()
if self.stats == []:
if self.stats == [] or self.stats == None:
self.gen_stats() self.gen_stats()
if self.career == "":
if self.career == "" or self.career == None:
self.gen_career() self.gen_career()
if self.gadget == "":
if self.gadget == "" or self.gadget == None:
self.gen_gadget() self.gen_gadget()


def gen_name(self): def gen_name(self):
self.gadget = r.choice(Character.GADGETS) self.gadget = r.choice(Character.GADGETS)


def print_name(self, html=False): def print_name(self, html=False):
if isinstance(self.career, str):
cname = self.career
else:
cname = self.career["name"]
if html: if html:
charText = f"<h4>Name: {self.name} (Kobold {self.career})</h4>"
charText = f"<h4>Name: {self.name} (Kobold {cname})</h4>"
else: else:
charText = f"\nName: {self.name} (Kobold {self.career})"
charText = f"\nName: {self.name} (Kobold {cname})"
print(charText) print(charText)


def print(self, html=False): def print(self, html=False):
if html: if html:
if isinstance(self.career, str):
cname = self.career
else:
cname = self.career["name"]
if isinstance(self.gadget, str):
gdg = {"id": 127, "name": self.gadget, "description": "", "reusable": True}
else:
gdg = self.gadget
out = ( out = (
f"<div class='kobold'>\n" f"<div class='kobold'>\n"
f" <span class='koboldid'>\n" f" <span class='koboldid'>\n"
f" <span class='koboldname'>{self.name}</span><br>\n" f" <span class='koboldname'>{self.name}</span><br>\n"
f" <span class='koboldcareer'>Kobold {self.career.name}</span>\n"
f" <span class='koboldcareer'>Kobold {cname}</span>\n"
f" </span>\n" f" </span>\n"
f" <br>\n" f" <br>\n"
f" <span class='koboldstats'>\n" f" <span class='koboldstats'>\n"
f" </span>\n" f" </span>\n"
f" <br>\n" f" <br>\n"
f" <span class='koboldgadget'>\n" f" <span class='koboldgadget'>\n"
f" <span class='koboldgadgetname'>{self.gadget['name']}</span><br>\n"
f" <span class='koboldgadgetdescription'>{self.gadget['description']}</span>\n"
f" <span class='koboldgadgetreuse'>{'<br>Reusable' if self.gadget['reusable'] else ''}</span>\n"
f" <span class='koboldgadgetname'>{gdg['name']}</span><br>\n"
f" <span class='koboldgadgetdescription'>{gdg['description']}</span>\n"
f" <span class='koboldgadgetreuse'>{'<br>Reusable' if gdg['reusable'] else ''}</span>\n"
f" </span>" f" </span>"
f"</div>\n" f"</div>\n"
) )
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 ''})")
if isinstance(self.gadget, str):
print(f"Gadget: {self.gadget}")
else:
print(f"Gadget: {self.gadget['name']} ({self.gadget['description']}{'- Reusable' if self.gadget['reusable'] else ''})")


class Ship: class Ship:
NAME1 = ["Red","Orange","Yellow","Green","Blue","Violet","Dark","Light","Frenzied","Maniacal","Ancient"] NAME1 = ["Red","Orange","Yellow","Green","Blue","Violet","Dark","Light","Frenzied","Maniacal","Ancient"]
pb2 = bin(self.params.secProbIndex)[2:] pb2 = bin(self.params.secProbIndex)[2:]
else: else:
pb2 = bin(127)[2:] pb2 = bin(127)[2:]
pbname = self.encode_name(self.params.problem["name"])
pbname = self.encode_name(self.params.problem["givenname"])
n1 = bin(Ship.NAME1.index(self.ship.name1))[2:] n1 = bin(Ship.NAME1.index(self.ship.name1))[2:]
n2 = bin(Ship.NAME2.index(self.ship.name2))[2:] n2 = bin(Ship.NAME2.index(self.ship.name2))[2:]
gq = bin(Ship.GQUAL.index(self.ship.gqual))[2:] gq = bin(Ship.GQUAL.index(self.ship.gqual))[2:]
# print(f"Len(bq) = {len(bq)}") # print(f"Len(bq) = {len(bq)}")
self.key += l1 + l2 + lb + op + ms + pb1 + pbname + pb2 + n1 + n2 + gq + bq self.key += l1 + l2 + lb + op + ms + pb1 + pbname + pb2 + n1 + n2 + gq + bq
for k,chct in chars.items(): for k,chct in chars.items():
chct["name"] = lpad(chct["name"], 40)
chct["name"] = lpad(chct["name"], 40, "1")
# print(f"Len(chct.name) = {len(chct['name'])}") # print(f"Len(chct.name) = {len(chct['name'])}")
chct["career"] = lpad(chct["career"], 7) chct["career"] = lpad(chct["career"], 7)
# print(f"Len(chct.career) = {len(chct['career'])}") # print(f"Len(chct.career) = {len(chct['career'])}")
densePwd = pw.replace(" ", "") densePwd = pw.replace(" ", "")
if densePwd == "PACKTACTICS!------------------------------------------------------------------------------------": if densePwd == "PACKTACTICS!------------------------------------------------------------------------------------":
# Create a campaign featuring the Season 3 Pack Tactics crew. # Create a campaign featuring the Season 3 Pack Tactics crew.
self.ship = Ship("Red", "Star", "is maneuverable & unarmored", "has a politician who thinks they're in charge of it")
self.params = Plot()
self.art = "an" if self.params.loc_desc[0] in ["a","e","i","o","u"] else "a"
self.characters = []
self.characters.append(Character("Niwri", "Hunter", [3,4,4,3], "Shortbow of the Watch"))
self.characters.append(Character("Zax", "Barbarian", [1, 6, 2, 5], "Hammer of Thunderbolts"))
self.characters.append(Character("Chroma", "Artificer", [4, 2, 5, 3], "Eldritch Cannon"))
self.characters.append(Character("Zenosha", "Druid", [3, 3, 5, 3], "Staff of Lightning"))
self.characters.append(Character("Snax", "Wizard", [2, 4, 5, 1], "Voyager Staff"))
# self.print_params()
# self.print_chars()
return return
elif densePwd == "JUSTINBAILEY------------------------------------------------------------------------------------": elif densePwd == "JUSTINBAILEY------------------------------------------------------------------------------------":
# Create a random campaign, but everyone's Gadget is a leotard that somehow is also an environment suit # Create a random campaign, but everyone's Gadget is a leotard that somehow is also an environment suit
self.create_campaign(n=6, makeChars=True)
for c in self.characters:
c.gadget = {"id":127, "name": "The Bailey", "description": "A form-fitting leotard that somehow protects the wearer from all environmental effects except extreme heat - including vacuum and poison.", "reusable": True}
# self.print_params()
# self.print_chars()
return return
elif densePwd == "NARPASSWORD------------------------------------------------------------------------------------": elif densePwd == "NARPASSWORD------------------------------------------------------------------------------------":
# Create a random campaign, but all the kobolds' stats are set to 6 # Create a random campaign, but all the kobolds' stats are set to 6
self.create_campaign(n=6, makeChars=True)
for c in self.characters:
c.stats = [6,6,6,6]
# self.print_params()
# self.print_chars()
return return
numPwd = [] numPwd = []
for c in densePwd: for c in densePwd:
print(outkey) print(outkey)
self.ship = Ship(Ship.NAME1[outkey["sname1"]], Ship.NAME2[outkey["sname2"]], Ship.GQUAL[outkey["gqual"]], Ship.BQUAL[outkey["bqual"]]) self.ship = Ship(Ship.NAME1[outkey["sname1"]], Ship.NAME2[outkey["sname2"]], Ship.GQUAL[outkey["gqual"]], Ship.BQUAL[outkey["bqual"]])
self.params = Plot(loc_desc=Plot.loc1[outkey["loc1"]], locIndex=outkey["loc2"], battlefield=outkey["battlefield"], location=None, missIndex=outkey["miss"], oops=outkey["oops"], mission=None, probIndex=outkey["prob1"], problem=None, probName=self.decode_name(outkey["prob1name"]), secProblem=outkey["prob2"], thirdProblem=None) self.params = Plot(loc_desc=Plot.loc1[outkey["loc1"]], locIndex=outkey["loc2"], battlefield=outkey["battlefield"], location=None, missIndex=outkey["miss"], oops=outkey["oops"], mission=None, probIndex=outkey["prob1"], problem=None, probName=self.decode_name(outkey["prob1name"]), secProblem=outkey["prob2"], thirdProblem=None)
self.ship.print()
self.print_params()
self.art = "an" if self.params.loc_desc[0] in ["a","e","i","o","u"] else "a"
self.characters = []
for q in range(1,7):
keys = [f"char{q}name", f"char{q}career", f"char{q}ord", f"char{q}cha", f"char{q}bod", f"char{q}bra", f"char{q}gad"]
c = Character(name=self.decode_name(outkey[keys[0]]), career=outkey[keys[1]], stats=[outkey[keys[2]], outkey[keys[3]], outkey[keys[4]], outkey[keys[5]]], gadget=outkey[keys[6]])
self.characters.append(c)
#self.ship.print()
# self.print_params()
# self.print_chars()
return self.newBitfield return self.newBitfield


def encode_name(self, name): def encode_name(self, name):
#pw = Password(args.password) #pw = Password(args.password)
# print(pw.newBitfield) # print(pw.newBitfield)
cmp = Campaign(fromPW = True, pw=args.password) cmp = Campaign(fromPW = True, pw=args.password)
cmp.print_params(html=html)
cmp.print_chars(html=html)
elif args.campaign: elif args.campaign:
cmp = Campaign(args.campaign) cmp = Campaign(args.campaign)
cmp.print_params(html=html) cmp.print_params(html=html)

Loading…
Cancel
Save