Example #1
0
 def step_9_faction(self, select, next):
     faction_table = self.get_from_target("9.2")
     faction_result, faction_index = self.roll_on_table(faction_table, with_index=True)
     agi_uplift = self.char[3]["agi-uplift"]
     if agi_uplift:
         next_faction = self.get_from_target("9.14")
     elif faction_result["next"] == "prev":
         # FIXME What to do if next_focus is 6.12 ?
         if next == "6.1":
             next = random.choice(["9.4", "9.5", "9.6", "9.7", "9.8", "9.9", "9.10", "9.11", "9.12", "9.13"])
         next_faction = self.get_from_target(next)
     elif faction_result["next"] == "9.3":
         branch_table = self.get_from_target("9.3")
         branch_result = self.roll_on_table(branch_table)
         next_faction = self.get_from_target(branch_result["next"])
     next_faction_result = self.roll_on_table(next_faction)
     if agi_uplift and next_faction_result == "mercurial":
         next_faction_result += " {}".format(agi_uplift)
     faction_target = self.get_from_target(next_faction["target"])
     faction_package = clear_package(faction_target[next_faction_result], select)
     return {
         "title": faction_table.get("title", ""),
         "desc": "{}: {}".format(faction_table["desc"][faction_index], next_faction_result),
         "package": next_faction_result,
         "pkg_type": "faction",
         "result": faction_package,
     }
Example #2
0
 def step_9_focus(self, select):
     focus_table = self.get_from_target("9.1")
     focus_result, focus_index = self.roll_on_table(focus_table, with_index=True)
     if focus_result["next"] == "prev":
         focuses = self.char.get(6, {"next": "6.1"})
         if focuses["next"] == "6.1":
             branch_table = self.get_from_target("6.1")
             branch_result = self.roll_on_table(branch_table)
             next_focus = self.get_from_target(branch_result["next"])
         else:
             next_focus = self.get_from_target(focuses["next"])
     elif focus_result["next"] == "6.1":
         branch_table = self.get_from_target("6.1")
         branch_result = self.roll_on_table(branch_table)
         next_focus = self.get_from_target(branch_result["next"])
     next_focus_result = self.roll_on_table(next_focus)
     focus_target = self.get_from_target(next_focus["target"])
     focus_package = clear_package(focus_target[next_focus_result], select)
     return {
         "title": focus_table.get("title", ""),
         "desc": "{}: {}".format(focus_table["desc"][focus_index], next_focus_result),
         "package": next_focus_result,
         "pkg_type": "focus",
         "result": focus_package,
         "next": next_focus["next"],
     }
Example #3
0
    def step_11(self, table):
        result = self.roll_on_table(table)
        have_more = result["effect"].pop("next", False)
        result_dict = {
            "title": table.get("title", ""),
            "desc": table.get("desc", ""),
            "result": result["effect"],
            "extra": {},
        }
        if have_more:
            if have_more == "morphs":
                morph = self.get_random_morph()
                result_dict["extra"].update({"morph": morph})
            else:
                next_table = self.get_from_target(have_more)
                next_result = self.roll_on_table(next_table)
                next_have_more = next_result["effect"].pop("next", False)
                next_package = next_result["effect"].pop("package", False)
                next_select = next_result["effect"].pop("select", False)
                if next_have_more:
                    morph = self.get_random_morph()
                    result_dict["extra"].update({"morph": morph})
                if next_package:
                    final_packages = self.char[10]["result"]
                    if len(final_packages) > 0:
                        focus_target = self.get_from_target("focus")
                        focus_package = clear_package(focus_target[next_package], next_select)
                        final_packages[-1] = {
                            "title": next_table.get("title", ""),
                            "package": next_package,
                            "pkg_type": "focus",
                            "result": focus_package,
                        }
                result_dict["extra"].update(
                    {"title": next_table.get("title", ""), "desc": next_table.get("desc", ""), "result": next_result}
                )

        return result_dict
Example #4
0
    def step_4(self, table):
        result = self.roll_on_table(table)
        have_more = result["effect"].pop("next", False)
        result_dict = {
            "title": table.get("title", ""),
            "desc": table.get("desc", ""),
            "result": result["effect"],
            "extra": {},
        }
        if have_more:
            if "change_background":
                next_table = self.get_from_target("3.2")
                next_result = self.get_from_target("background")["street rat"]
                next_index = 5
                backgrounds = self.char[3]["result"]
                pp = get_pp(backgrounds[-1]["result"])
                self.char[3]["result"][-1] = {
                    "title": next_table.get("title", ""),
                    "desc": next_table["desc"][next_index],
                    "package": "street rat",
                    "pkg_type": "background",
                    "result": clear_package(next_result, pp),
                    "morph": next_table["morph"][next_index],
                    "next": next_table["next"][next_index],
                }
            else:
                next_table = self.data[have_more]
                next_result = self.roll_on_table(next_table)
                result_dict["extra"].update(
                    {
                        "title": next_table.get("title", ""),
                        "desc": next_result.get("desc", ""),
                        "result": next_result["effect"],
                    }
                )

        return result_dict
Example #5
0
 def step_6(self, table):
     result, index = self.roll_on_table(table, with_index=True)
     self.pp += 1
     if result["next"] == "prev":
         backgrounds = self.char[3]["result"]
         if backgrounds[-1]["next"] == "6.1":
             branch_table = self.get_from_target("6.1")
             branch_result = self.roll_on_table(branch_table)
             current_table = branch_result["next"]
             next_table = self.get_from_target(branch_result["next"])
         else:
             current_table = backgrounds[-1]["next"]
             next_table = self.get_from_target(backgrounds[-1]["next"])
     elif result["next"] == "6.1":
         branch_table = self.get_from_target("6.1")
         branch_result = self.roll_on_table(branch_table)
         current_table = branch_result["next"]
         next_table = self.get_from_target(branch_result["next"])
     else:
         current_table = result["next"]
         next_table = self.get_from_target(result["next"])
     next_result, next_index = self.roll_on_table(next_table, with_index=True)
     target_table = self.get_from_target(next_table["target"])
     package = clear_package(target_table[next_result], 1)
     return {
         "title": table.get("title", ""),
         "desc": table.get("desc", "")[index],
         "result": {
             "title": next_table.get("title", ""),
             "desc": next_result,
             "package": next_result,
             "pkg_type": next_table["target"],
             "result": package,
         },
         "next": current_table,
     }
Example #6
0
 def step_3(self, table):
     result, index = self.roll_on_table(table, with_index=True)
     backgrounds = []
     ignore_others = False
     agi_uplift = None
     self.pp += int(result["roll"]) * int(result["select"])
     for i in range(result["roll"]):
         next_table = self.get_from_target(result["next"])
         next_result = self.roll_on_table(next_table)
         final_table = self.get_from_target(next_result["next"])
         final_result, final_index = self.roll_on_table(final_table, with_index=True)
         if type(final_result) == dict:
             if final_result.get("next"):
                 final_table = self.get_from_target(final_result["next"])
                 final_result, final_index = self.roll_on_table(final_table, with_index=True)
             else:
                 final_result = self.roll_on_table(final_result)
         target_table = self.get_from_target(final_table["target"])
         background = target_table[final_result]
         morph = final_table["morph"][final_index]
         if type(morph) == dict:
             if "next" in morph:
                 morph = self.get_random_morph(morph.get("ignore"))
             else:
                 morph = self.roll_on_table(morph)
         next = final_table["next"][final_index]
         desc = final_table["desc"][final_index]
         if type(next) == dict:
             next = self.roll_on_table(next)
         if next_result["next"] == "3.9":
             if final_index < 3:
                 agi_uplift = "infolife"
             elif final_index > 3:
                 agi_uplift = "uplift"
             if desc.endswith("*"):
                 roll = roll_d10()
                 if desc.endswith("**"):
                     roll = 1
                 if roll < 4:
                     backgrounds = []
                     ignore_others = True
                     self.next_step = 9
         backgrounds.append(
             {
                 "title": final_table.get("title", ""),
                 "desc": desc,
                 "package": final_result,
                 "result": clear_package(background, result["select"]),
                 "pkg_type": "background",
                 "morph": morph,
                 # ONLY THE FINAL NEXT VALUE COUNTS
                 "next": next,
             }
         )
         if ignore_others:
             break
     return {
         "title": table.get("title", ""),
         "desc": table.get("desc", "")[index],
         "result": backgrounds,
         "agi-uplift": agi_uplift,
     }