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, }
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"], }
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
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
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, }
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, }