Пример #1
0
 def __init__(self, char):
     BaseClass.__init__(self, char.level)
     MagicChr.__init__(self)
     cant_ct = 3
     self.level = int(char.level)
     self.set_magic(self.level, cant_ct, "wizard")
     self.str_mod = char.strength
     self.dex_mod = char.dexterity
     self.wis_mod = char.wisdom
     self.int_mod = char.intelligence
     self.cha_mod = char.charisma
     self.con_mod = char.constitution
     self.level_scores([3, 7, 11, 15, 18])
     all_skills = list({
         "arcana", "history", "insight", "investigation", "medicine",
         "religion"
     } - set(char.race.skills))
     archetype_opts = [
         "Artificer", "Bladeslinging", "Lore Mastery",
         "School of Abjuration", "School of Conjuration",
         "School of Divination", "School of Enchantment",
         "School of Evocation", "School of Illusion", "School of Invention",
         "School of Necromancy", "School of Transmutation", "Technomancy",
         "Theurgy", "War Magic"
     ]
     level_features = [[
         0, ["Ritual Casting", "Spellcasting Focus", "Arcane Recovery"]
     ], [17, "Spell Mastery"], [19, "Signature Spells"]]
     wpn_opts = [["Quarterstaff", "Dagger"]]
     eqp_opts = [["Explorer's Pack", "Scholar's Pack"],
                 ["Component Pouch", "Arcane Focus"]]
     self.saving_throws = ["intelligence", "wisdom"]
     self.magic_throw = "intelligence"
     self.magic_dc = 8 + self.prof_bonus + self.int_mod
     utilities.append_proficiencies(
         self,
         ["daggers", "darts", "slings", "quarterstaffs", "light crossbows"])
     self.set_equip(wpn_opts, True)
     self.set_equip(eqp_opts, False)
     self.equipment.append("Spellbook")
     self.spell_master = []
     self.sig_spells = []
     utilities.set_skills(self, 2, all_skills)
     self.init_hit_dice(6)
     self.init_hp(6, "constitution", 6)
     self.level_features(level_features)
     if self.level > 1:
         arch_choice = self.init_archetype(archetype_opts)
         self.set_arch(arch_choice)
     if self.level > 17:
         one = utilities.get_from_list(self.one[1], 1, "mastered spell")
         self.spell_master.append(one)
         two = utilities.get_from_list(self.two[1], 1, "mastered spell")
         self.spell_master.append(two)
     if self.level > 19:
         three = utilities.get_from_list(self.three[1], 2,
                                         "signature spell")
         self.sig_spells.extend(three)
Пример #2
0
 def set_pact(self):
     self.pact = utilities.get_from_list(
         ["Pact of the Chain", "Pact of the Tome", "Pact of the Blade"], 1,
         "pact")
     if self.pact == "Pact of the Chain":
         self.pact_desc.append(
             "You learn the Find Familiar spell and can cast it as a ritual. The spell doesn't count against your number of spells known. When you cast the spell, you can choose one of the normal forms for your familiar or one of the following special forms: imp, pseudodragon, quasit or sprite. Additionally, when you take the Attack action, you can forgo one of your own attacks to allow your familiar to make one attack of its own with its reaction."
         )
         self.add_spell([[0, "one"], "Find Familiar"], self.level)
     elif self.pact == "Pact of the Tome":
         self.pact_desc.append(
             "Your patron gives you a grimoire called a Book of Shadows. When you gain this feature, choose three cantrips from any class's spell list (the three needn't be from the same list). While the book is on your person, you can cast those cantrips at will. They don't count against your number of cantrips known. If they don't appear on the warlock spell list, they are nonetheless warlock spells for you. If you lose your Book of Shadows, you can perform a 1-hour ceremony to receive a replacement from your patron. This ceremony can be performed during a short or long rest, and it destroys the previous book. The book turns to ash when you die."
         )
         self.cantrips[0] += 3
         self.cantrips[1].extend([
             input(
                 "Pact of the Tome: What cantrip do you want to learn?\n"),
             input(
                 "Pact of the Tome: What cantrip do you want to learn?\n"),
             input("Pact of the Tome: What cantrip do you want to learn?\n")
         ])
     elif self.pact == "Pact of the Blade":
         self.pact_desc.append(
             "You can use your action to create a pact weapon in your empty hand. You can choose the form that this melee weapon takes each time you create it. You are proficient with it while you wield it. This weapon counts as magical for the purpose of overcoming resistance and immunity to non-magical attacks and damage. Your pact weapon disappears if it is more than 5 feet away from you for 1 minute or more. It also disappears if you use this feature again, if you dismiss the weapon (no action required), or if you die.\nYou can transform one magic weapon into your pact weapon by performing a special ritual while you hold the weapon. You perform the ritual over the course of 1 hour, which can be done during a short rest. You can then dismiss the weapon, shunting it into an extra-dimensional space, and it appears whenever you create your pact weapon thereafter. You can't affect an artifact or a sentient weapon in this way. The weapon ceases being your pact weapon if you die, if you perform the 1-hour ritual on a different weapon, or if you use a 1-hour ritual to break your bond to it. The weapon appears at your feet if it is in the extra-dimensional space when the bond breaks."
         )
     else:
         print("Something went wrong @ pact, warlock")
Пример #3
0
 def set_style(self):
     style_opts = list({
         "archery", "defense", "dueling", "two weapon fighting", "mariner",
         "close quarters shooter", "tunnel fighter"
     } - set(self.styles))
     ch = utilities.get_from_list(style_opts, 1, "style")
     self.styles.append(ch.capitalize())
     self.features.append(ch.capitalize())
Пример #4
0
    def __init__(self, char):
        BaseClass.__init__(self, char.level)
        self.level = int(char.level)
        self.str_mod = char.strength
        self.dex_mod = char.dexterity
        self.wis_mod = char.wisdom
        self.int_mod = char.intelligence
        self.cha_mod = char.charisma
        self.con_mod = char.constitution
        self.level_scores([3, 7, 11, 15, 18])
        all_skills = list({"acrobatics", "athletics", "history", "insight", "religion", "stealth"} - set(char.race.skills))
        archetype_opts = ["drunken master", "four elements", "kensei", "long death", "open hand", "shadow", "sun soul", "tranquility"] # base hotel and casino
        level_features = [[0, ["Unarmored Defense", "Martial Arts"]], [1, ["Ki", "Unarmored Movement"]], [2, "Deflect Missiles"],
                          [3, "Slow Fall"],  [4, "Extra Attack"],
                          [5, "Ki-Empowered Strikes"], [6, ["Evasion", "Stillness of Mind"]],
                          [12, "Tongue of the Sun and Moon"], [13, "Diamond Soul"],
                          [14, "Timeless Body"]]
        ki_features = [[1, ["Flurry of Blows", "Patient Defense", "Step of the Wild"]],
                       [4, "Stunning Strike"], [13, "Diamond Soul"], [17, "Empty Body"], [19, "Perfect Self"]]

        for item in ["disease", "poison"]:
            if self.level > 9:
                self.resistances.append(item)
        if self.level > 12:
            self.languages.append("All Languages (Monk Feature)")
        if self.level > 13:
            self.saving_throws = ["strength", "wisdom", "dexterity", "intelligence", "charisma", "constitution"]
        else:
            self.saving_throws = ["strength", "dexterity"]
        self.ki_features = []
        self.ki_dc = 0
        self.elem_feat = []
        wpn_opts = [["shortsword", "any simple weapon (please input)"]]
        eqp_opts = [["dungeoneer's pack", "explorer's pack"]]
        prof = utilities.get_from_list(["artisans tools", "musical instrument"], 1, "proficiency")
        if prof == "musical instrument":
            prof = input("Which instrument do you want to be proficient in?\n")
        utilities.append_proficiencies(self, ["simple weapons", "shortswords", prof])
        self.set_equip(wpn_opts, True)
        self.set_equip(eqp_opts, False)
        utilities.equip(self, "10 darts")
        utilities.set_skills(self, 2, all_skills)
        self.init_hit_dice(8)
        self.init_hp(10, "constitution", 8)
        self.level_features(level_features)
        for item in ki_features:
            lvl = item[0]
            ch = item[1]
            if self.level > int(lvl):
                if isinstance(ch, list):
                    for feat in ch:
                        self.ki_features.append(feat)
                else:
                    self.ki_features.append(ch)
        if self.level > 1:
            self.ki_dc = 8 + self.prof_bonus + self.wis_mod
        arch_choice = self.init_archetype(archetype_opts)
        self.set_arch(arch_choice)
Пример #5
0
 def __init__(self, char):
     BaseClass.__init__(self, char.level)
     MagicChr.__init__(self)
     cant_ct = 0
     self.level = int(char.level)
     self.set_magic(self.level, cant_ct, "ranger")
     self.str_mod = char.strength
     self.dex_mod = char.dexterity
     self.wis_mod = char.wisdom
     self.int_mod = char.intelligence
     self.cha_mod = char.charisma
     self.con_mod = char.constitution
     self.level_scores([3, 7, 11, 15, 18])
     all_skills = list({
         "animal handling", "athletics", "insight", "investigation",
         "nature", "perception", "stealth", "survival"
     } - set(char.race.skills))
     archetype_opts = [
         "Beast Master", "Gloom Stalker", "Horizon Walker", "Hunter",
         "Monster Slayer", "Primeval Guardian"
     ]
     level_features = [[0, ["Favored Enemy", "Natural Explorer"]],
                       [1, "Spellcasting"], [2, "Primeval Awareness"],
                       [4, "Extra Attack"], [7, "Land's Stride"],
                       [9, "Hide in Plain Sight"], [13, "Vanish"],
                       [17, "Feral Senses"], [19, "Foe Slayer"]]
     wpn_opts = [[
         "Two shortswords", "Two simple martial weapons (please input)"
     ]]
     eqp_opts = [["Dungeoneer's Pack", "Explorer's Pack"]]
     amor = utilities.get_from_list(["Scale Mail", "Leather Armor"], 1,
                                    "armor")
     if amor == "Scale Mail":
         self.armor.append(["Scale Mail", "14"])
     else:
         self.armor.append(["Leather Armor", "11"])
     self.saving_throws = ["strength", "dexterity"]
     self.magic_throw = "wisdom"
     self.magic_dc = self.prof_bonus + self.wis_mod + 8
     utilities.set_skills(self, 3, all_skills)
     self.init_hit_dice(10)
     self.init_hp(10, "constitution", 10)
     self.styles = []
     utilities.append_proficiencies(self, [
         "light armor", "medium armor", "shields", "simple weapons",
         "martial weapons"
     ])
     self.set_equip(wpn_opts, True)
     self.set_equip(eqp_opts, False)
     utilities.equip(self, "Longbow and Quiver of 20 arrows")
     self.level_features(level_features)
     if self.level > 1:
         self.set_style()
     if self.level > 2:
         arch_choice = self.init_archetype(archetype_opts)
         self.set_arch(arch_choice)
Пример #6
0
 def __init__(self, char):
     BaseClass.__init__(self, char.level)
     self.level = int(char.level)
     self.str_mod = char.strength
     self.dex_mod = char.dexterity
     self.wis_mod = char.wisdom
     self.int_mod = char.intelligence
     self.cha_mod = char.charisma
     self.con_mod = char.constitution
     self.level_scores([3, 5, 7, 11, 13, 15, 18])
     all_skills = list({
         "acrobatics", "animal handling", "athletics", "history", "insight",
         "intimidation"
     } - set(char.race.skills))
     archetype_opts = [
         "arcane", "battle", "brute", "cavalier", "champion", "eldritch",
         "monster", "purple", "samurai", "scout", "sharpshooter"
     ]
     level_features = [[0, "Second Wind"], [1, "Action Surge"],
                       [4, "Extra Attack"], [8, "Indomitable"]]
     wpn_opts = [["A martial weapon and a shield", "Two martial weapons"],
                 ["A light crossbow and 20 bolts", "Two handaxes"]]
     eqp_opts = [["Dungeoneer's Pack", "Explorer's Pack"]]
     self.saving_throws = ["strength", "constitution"]
     utilities.append_proficiencies(
         self, ["All armors", "All shields", "All weapons"])
     self.set_equip(wpn_opts, True)
     self.set_equip(eqp_opts, False)
     spnch = utilities.get_from_list(
         ["leather armor and longbow", "chain mail"], 1)
     if spnch == "leather armor and longbow":
         utilities.equip(self, "Longbow with 20 arrows")
         self.armor = ["Leather Armor", "11"]
     else:
         self.armor = ["Chain Mail", "16"]
     utilities.set_skills(self, 2, all_skills)
     self.init_hit_dice("10")
     self.init_hp(10, "constitution", "10")
     self.maneuvers = []
     self.styles = []
     self.sup_dice_ct = None
     self.sup_dice = None
     self.level_features(level_features)
     self.set_style()
     if self.level > 2:
         arch_choice = self.init_archetype(archetype_opts)
         self.set_arch(arch_choice, char)
Пример #7
0
    def set_class(self):
        char_class = utilities.get_from_list([
            "Barbarian", "Bard", "Cleric", "Druid", "Fighter", "Necromancer",
            "Monk", "Paladin", "Ranger", "Rogue", "Sorcerer", "Warlock",
            "Wizard"
        ], 1, "class")
        char_class = char_class.strip().lower()
        if char_class == "barbarian":
            char_class = Barbarian(self)
            self.class_name = "Barbarian"
        elif char_class == "bard":
            char_class = Bard(self)
            self.class_name = "Bard"
        elif char_class == "cleric":
            char_class = Cleric(self)
            self.class_name = "Cleric"
            self.divine_ct = char_class.divine_ct
        elif char_class == "druid":
            char_class = Druid(self)
            self.class_name = "Druid"
        elif char_class == "fighter":
            char_class = Fighter(self)
            self.class_name = "Fighter"
            self.maneuvers = char_class.maneuvers
            self.styles = char_class.styles
            self.sup_dice_ct = char_class.sup_dice_ct
            self.sup_dice = char_class.sup_dice
        elif char_class == "necromancer":
            char_class = Necromancer(self)
            self.class_name = "Necromancer"

        elif char_class == "monk":
            char_class = Monk(self)
            self.class_name = "Monk"
            self.ki_features = char_class.ki_features
            self.ki_dc = char_class.ki_dc
            self.elem_feat = char_class.elem_feat
        elif char_class == "paladin":
            char_class = Paladin(self)
            self.class_name = "Paladin"
            self.styles = char_class.styles
        elif char_class == "ranger":
            char_class = Ranger(self)
            self.class_name = "Ranger"
            self.styles = char_class.styles
        elif char_class == "rogue":
            char_class = Rogue(self)
            self.class_name = "Rogue"
            self.sneak_dmg = char_class.sneak_dmg
            self.expert_skills = char_class.expert_skills
        elif char_class == "sorcerer":
            char_class = Sorcerer(self)
            self.class_name = "Sorcerer"
            self.metamagic_features = char_class.metamagic_features
            self.color = char_class.color
            self.fly_speed = char_class.fly_speed
        elif char_class == "warlock":
            char_class = Warlock(self)
            self.class_name = "Warlock"
            self.invocations = char_class.invocations
            self.pact = char_class.pact
            self.pact_desc = char_class.pact_desc
        else:
            char_class = Wizard(self)
            self.spell_master = char_class.spell_master
            self.sig_spells = char_class.sig_spells
        self.clas = char_class
        self.hp += self.clas.hp
        self.strength = self.clas.str_mod
        self.dexterity = self.clas.dex_mod
        self.wisdom = self.clas.wis_mod
        self.intelligence = self.clas.int_mod
        self.charisma = self.clas.cha_mod
        self.constitution = self.clas.con_mod
Пример #8
0
    def set_arch(self, arch_choice, char):
        arch = {}
        if arch_choice == "arcane":
            MagicChr.__init__(self)
            self.magic_throw = "intelligence"
            self.magic_dc = 8 + self.prof_bonus + self.int_mod
            cantrip = utilities.get_from_list(
                ["druidcraft", "prestidigitation"], 1, "cantrip")
            self.add_spell([[0, "cantrip"], [cantrip]], 0)
            utilities.set_skills(self, 1, ["arcana", "nature"])
            self.arcane_choices = []
            self.arcane_shot_desc = []
            for trig in [0, 0, 6, 9, 14, 17]:
                if self.level > trig:
                    self.arcane_shot(1)
            arch['feature'] = [[6, ["Magic Arrow", "Curving Shot"]],
                               [14, "Ever-Ready Shot"]]

        elif arch_choice == "battle":
            self.sup_dice_ct = 6 if self.level > 14 else 5 if self.level > 6 else 4
            self.sup_dice = str(
                self.sup_dice_ct
            ) + "d12" if self.level > 17 else "d10" if self.level > 9 else "d8"
            arch['feature'] = [[0, ["Superiority Dice", "Maneuvers"]],
                               [6, "Know Your Enemy"], [14, "Relentless"]]
            for level in [0, 0, 0, 6, 6, 9, 9, 14, 14]:
                if self.level > level:
                    self.set_maneuver(1)

        elif arch_choice == "brute":
            arch['feature'] = [[0, "Brute Force"], [6, "Brutish Durability"],
                               [14, "Devastating Critical"], [17, "Survivor"]]
            if self.level > 9:
                self.set_style()

        elif arch_choice == "cavalier":
            ch = utilities.get_from_list(["language", "skill"], 1, "option")
            if ch == "language":
                self.languages.append(
                    input("What language do you want to learn?"))
            else:
                utilities.set_skills(self, 1, [
                    "animal handling", "history", "insight", "performance",
                    "persuasion"
                ])
            arch['feature'] = [[
                0, ["Born to the Saddle", "Unwavering Maneuver"]
            ], [6, "Warding Maneuver"], [9, "Hold the Line"],
                               [14, "Ferocious Charger"],
                               [17, "Vigilant Defender"]]

        elif arch_choice == "champion":
            arch['feature'] = [[0, "Improved Critical"],
                               [6, "Remarkable Athlete"],
                               [14, "Superior Critical"], [17, "Survivor"]]
            if self.level > 9:
                self.set_style()

        elif arch_choice == "eldritch":
            MagicChr.set_magic(self, self.level, 2, "eldritch")
            self.magic_dc = 8 + self.prof_bonus + self.int_mod
            self.magic_throw = "intelligence"
            arch['feature'] = [[0, "Weapon Bond"], [6, "War Magic"],
                               [9, "Eldritch Strike"], [14, "Arcane Charge"],
                               [17, "Improved War Magic"]]

        elif arch_choice == "monster":
            ch = utilities.get_from_list(
                ["proficient in a new skill", "proficient in a new tool"], 1)
            if ch == "proficient in a new tool":
                self.proficiencies.append(
                    input("What toolset do you want to be proficient in?"))
            else:
                utilities.set_skills(self, 2, [
                    "arcana", "history", "insight", "investigation", "nature",
                    "perception"
                ])
            self.sup_dice_ct = 6 if self.level > 14 else 5 if self.level > 6 else 4
            self.sup_dice = str(
                self.sup_dice_ct
            ) + "d12" if self.level > 17 else "d10" if self.level > 9 else "d8"
            arch['feature'] = [[0, ["Superiority Dice", "Hunter's Mysticism"]],
                               [6, "Monster Slayer"], [14, "Relentless"]]
        elif arch_choice == "purple":
            arch['feature'] = [[0, "Rallying Cry"], [6, "Royal Envoy"],
                               [9, "Inspiring Surge"], [14, "Bulwark"]]
            if self.level > 6:
                if "persuasion" not in self.skills or char.skills:
                    self.skills.append("persuasion")
                else:
                    utilities.set_skills(self, 1, [
                        "animal handling", "insight", "intimidation",
                        "performance"
                    ])

        elif arch_choice == "samurai":
            arch['feature'] = [[0, "Fighting Spirit"], [6, "Elegant Courtier"],
                               [9, "Tireless Spirit"], [14, "Rapid Strike"],
                               [17, "Strength Before Death"]]
            arch['skill'] = [[
                6,
                utilities.get_from_list(
                    ["history", "insight", "performance", "persuasion"], 1,
                    "skill")
            ]]

        elif arch_choice == "scout":
            utilities.set_skills(self, 3, [
                "acrobatics", "athletics", "investigation", "medicine",
                "nature", "perception", "stealth", "survival"
            ])
            arch['feature'] = [[
                0, ["Natural Explorer (Fighter)", "Superiority Dice"]
            ], [14, "Relentless"]]
            self.sup_dice_ct = 6 if self.level > 14 else 5 if self.level > 6 else 4
            self.sup_dice = str(
                self.sup_dice_ct
            ) + "d12" if self.level > 17 else "d10" if self.level > 9 else "d8"

        else:
            arch_choice = "sharpshooter"
            arch['feature'] = [[0, "Steady Aim"], [6, "Careful Eyes"],
                               [9, "Close-Quarters Shooting"],
                               [14, "Rapid Strike"], [17, "Snap Shot"]]
            arch['skill'] = [[
                6,
                utilities.get_from_list(
                    ["perception", "investigation", "survival"], 1, "skill")
            ]]
        self.level_arch(arch)
Пример #9
0
 def set_arch(self, arch_choice, char):
     arch = {}
     if arch_choice == "divine soul":
         arch['feature'] = [[0, ["Divine Magic", "Favored by the Gods"]],
                            [5, "Empowered Healing"],
                            [13, "Otherworldly Wings"],
                            [17, "Unearthly Recovery"]]
         alignment = char.alignment
         arch['spells'] = [[[0, "one"], []]]
         spell = arch['spells'][0][1]
         if "Good" in alignment:
             spell.append("Cure Wounds")
         elif "Evil" in alignment:
             spell.append("Inflict Wounds")
         if "Lawful" in alignment:
             spell.append("Bless")
         elif "Chaotic" in alignment:
             spell.append("Bane")
         if "Neutral" in alignment:
             spell.append("Protection from Good and Evil")
     elif arch_choice == "draconic bloodline":
         self.color = utilities.get_from_list([
             "black", "blue", "brass", "bronze", "copper", "gold", "green",
             "red", "silver", "white"
         ], 1, "ancestral color")
         arch['language'] = [[0, "Draconic"]]
         arch['feature'] = [[0, ["Dragon Ancestor", "Draconic Resilience"]],
                            [5, "Elemental Affinity"], [13, "Dragon Wings"],
                            [17, "Draconic Presence"]]
         self.hp += self.level
     elif arch_choice == "giant soul":
         self.hp += self.level
         ch = utilities.get_from_list(
             ["cloud", "fire", "frost", "hill", "stone", "storm"], 1,
             "giant type")
         if ch == "cloud":
             arch['spells'] = [[[0, "one"], ["Fog Cloud",
                                             "Minor Illusion"]],
                               [[2, "two"], ["Invisibility"]]]
         elif ch == "fire":
             arch['spells'] = [[[0, "one"], ["Burning Hands", "Fire bolt"]],
                               [[2, "two"], ["Flaming Sphere"]]]
         elif ch == "frost":
             arch['spells'] = [[[0, "one"],
                                ["Armor of Agathys", "Ray of Frost"]],
                               [[2, "two"], ["Hold Person"]]]
         elif ch == "hill":
             arch['spells'] = [[[0, "one"], ["Heroism", "Shillelagh"]],
                               [[2, "two"], ["Enlarge/Reduce"]]]
         elif ch == "stone":
             arch['spells'] = [[[0, "one"], ["Entangle", "Resistance"]],
                               [[2, "two"], ["Spike Growth"]]]
         else:
             ch = "storm"
             arch['spells'] = [[[0, "one"],
                                ["Shocking Grasp", "Thunderwave"]],
                               [[2, "two"], ["Gust of Wind"]]]
         arch['feature'] = [[5, "Soul of Lost Ostoria (" + ch + ")"],
                            [13, "Rage of Fallen Ostoria"],
                            [17, "Blessing of the All Father"]]
         arch['stat'] = [[17, ["constitution", 2]]]
     elif arch_choice == "phoenix sorcery":
         arch['feature'] = [[0, ["Ignite", "Mantle of Flames"]],
                            [5, "Phoenix Spark"], [13, "Nourishing Fire"],
                            [17, "Form of the Phoenix"]]
     elif arch_choice == "sea sorcery":
         arch['feature'] = [[0, ["Soul of the Sea", "Curse of the Sea"]],
                            [5, "Watery Defense"], [13, "Shifting Form"],
                            [17, "Water Soul"]]
         arch['resistance'] = [[5, "Fire damage"],
                               [
                                   17,
                                   [
                                       "Bludgeoning Damage",
                                       "Piercing Damage", "Slashing Damage"
                                   ]
                               ]]
     elif arch_choice == "shadow magic":
         arch['feature'] = [[
             0, ["Darkvision", "Eyes of the Dark", "Strength of the Grave"]
         ], [5, "Hound of Ill Omen"], [13, "Shadow Walk"],
                            [17, "Umbral Form"]]
         arch['spells'] = [[[2, "two"], ["Darkness"]]]
     elif arch_choice == "stone sorcery":
         arch['feature'] = [[0, "Stone's Durability"], [5, "Stone Aegis"],
                            [13, "Stone's Edge"],
                            [17, "Earth Master's Aegis"]]
         arch['proficiency'] = [[
             0, ["shields", "simple weapons", "martial weapons"]
         ]]
         self.hp += self.level
     elif arch_choice == "storm sorcery":
         arch['feature'] = [[0, ["Primordial", "Tempestuous Magic"]],
                            [5, ["Heart of the Storm", "Storm Guide"]],
                            [13, "Storm's Fury"], [17, "Wind Soul"]]
         arch['resistance'] = [[
             5, ["Thunder Damage", "Lightning Damage"]
         ], [17, ["Thunder Damage Immunity", "Lightning Damage Immunity"]]]
         if self.level > 17:
             self.fly_speed = 60
     elif arch_choice == "wild magic":
         arch['feature'] = [[0, ["Wild Magic Surge", "Tides of Chaos"]],
                            [5, "Bend Luck"], [13, "Controlled Chaos"],
                            [17, "Spell Bombardment"]]
     else:
         arch_choice = "Pyromancer"
         arch['feature'] = [[0, "Heart of Fire"], [5, "Fire in the Veins"],
                            [13, "Pyromancer's Fury"], [17, "Fiery Soul"]]
         arch['resistance'] = [[5, "Fire Damage"],
                               [17, "Fire Damage Immunity"]]
     self.level_arch(arch)
Пример #10
0
    def choose_inv(self):
        base_inv = [
            "Armor of Shadows", "Beast Speech", "Beguiling Influence",
            "Devil's Sight", "Eyes of the Rune Keeper", "Fiendish Vigor",
            "Gaze of Two Minds", "Mask of Many Faces", "Misty Visions",
            "Thief of Five Fates"
        ]
        prereq_inv = []
        if self.level > 4:
            prereq_inv.append("Cloak of Flies")
            prereq_inv.append("Gift of the Depths")
            prereq_inv.append("Mire the Mind")
            prereq_inv.append("One with Shadows")
            prereq_inv.append("Sign of Ill Omen")
            prereq_inv.append("Tomb of Levistus")
        if self.level > 6:
            prereq_inv.append("Bewitching Whispers")
            prereq_inv.append("Dreadful Word")
            prereq_inv.append("Ghostly Gaze")
            prereq_inv.append("Sculptor of Flesh")
            prereq_inv.append("Trickster's Escape")
        if self.level > 8:
            prereq_inv.append("Ascendant Step")
            prereq_inv.append("Minions of Chaos")
            prereq_inv.append("Otherworldly Leap")
            prereq_inv.append("Whispers of the Grave")
        if self.level > 14:
            prereq_inv.append("Master of Myriad Forms")
            prereq_inv.append("Shroud of Shadow")
            prereq_inv.append("Visions od Distant Realms")
            prereq_inv.append("Witch Sight")
        if "eldritch blast" in self.cantrips[1]:
            prereq_inv.append("Agonizing Blast")
            prereq_inv.append("Eldritch Spear")
            prereq_inv.append("Grasp of Hadar")
            prereq_inv.append("Lance of Lethargy")
            prereq_inv.append("Repelling Blast")
            if self.level > 4 and self.archetype == "Fiend":
                prereq_inv.append("Kiss of Mephistopheles")
            if self.archetype == "Raven Queen":
                prereq_inv.append("Raven Queen's Blessing")
        if self.pact == "Pact of the Blade":
            prereq_inv.append("Arcane Gunslinger")
            prereq_inv.append("Improved Pact Bringer")
            if self.level > 4:
                prereq_inv.append("Eldritch Smite")
                prereq_inv.append("Thirsting Blade")
            if self.level > 8:
                prereq_inv.append("Superior Pact Weapon")
            if self.level > 11:
                prereq_inv.append("Lifedrinker")
            if self.level > 14:
                prereq_inv.append("Ultimate Pact Weapon")
            if self.archetype == "Great Old One":
                prereq_inv.append("Claw of Acamar")
            if self.archetype == "Hexblade":
                prereq_inv.append("Curse Bringer")
            if self.archetype == "Fiend":
                prereq_inv.append("Mace of Dispater")
            if self.archetype == "Archfey":
                prereq_inv.append("Moon Bow")
        if self.pact == "Pact of the Tome":
            prereq_inv.append("Aspect of the Moon")
            prereq_inv.append("Book of Ancient Secrets")
            if self.archetype == "Raven Queen":
                prereq_inv.append("Chronicle of the Raven Queen")
        if self.pact == "Pact of the Chain":
            prereq_inv.append("Gift of the Ever-Living Ones")
            prereq_inv.append("Voice of the Chain Master")
            if self.level > 14:
                prereq_inv.append("Chains of Carceri")
        if self.archetype == "Hexblade":
            prereq_inv.append("Burning Hex")
            prereq_inv.append("Chilling Hex")
        if self.archetype == "Great Old One":
            prereq_inv.append("Caiphon's Beacon")
            if self.level > 6:
                prereq_inv.append("Gaze of Khirad")
            if self.level > 17:
                prereq_inv.append("Shroud of Ulban")
        if self.archetype == "Fiend":
            prereq_inv.append("Cloak of Baalzebul")
        if self.archetype == "Archfey":
            prereq_inv.append("Green Lord's Gift")
            prereq_inv.append("Sea Twins' Gift")
        if self.archetype == "Seeker":
            prereq_inv.append("Path of the Seeker")
            prereq_inv.append("Seeker's Speech")
        if self.level > 6 and (any("hex" in feat for feat in self.features)
                               or any("hex" in spell
                                      for spell in self.spells)):
            prereq_inv.append("Relentless Hex")

        base = set(base_inv)
        pre = set(prereq_inv)
        invs = set(self.invocations)
        inv_set = (base.union(pre)) - invs
        inv = list(inv_set)
        choice = utilities.get_from_list(inv, 1, "invocation")
        self.invocations.append(choice)
Пример #11
0
 def set_arch(self, arch_choice):
     arch = {}
     if arch_choice == "dreams":
         arch['feature'] = [[0, "Balm of the Summer Court"],
                            [5, "Hearth of Midnight and Shadow"],
                            [9, "Hidden Paths"],
                            [13, "Walker in Dreams"]]
     elif arch_choice == "land":
         arch['spells'] = [[[0, "cantrip"], [input("Circle of the Land: Which Druid cantrip do you want to learn?")]]]
         arch['feature'] = [[0, "Natural Recovery"], [5, "Land's Stride"], [9, "Nature's Ward"], [13, "Nature's Sanctuary"]]
         arch['resistance'] = [[9, ["Poison", "Disease"]]]
         lands = utilities.get_from_list(["arctic", "coast", "desert", "forest", "grassland", "mountain", "swamp", "underdark"], 1)
         if lands == "arctic":
             arch['spells'].extend([[[2, "two"], ["Hold Person", "Spike Growth"]],
                                    [[4, "three"], ["Sleet Storm", "Slow"]],
                                    [[6, "four"], ["Freedom of Movement", "Ice Storm"]],
                                    [[8, "five"], ["Commune with Nature", "Cone of Cold"]]])
         elif lands == "coast":
             arch['spells'].extend([[[2, "two"], ["Mirror Image", "Misty Step"]],
                                    [[4, "three"], ["Water Breathing", "Water Walk"]],
                                    [[6, "four"], ["Control Water", "Freedom of Movement"]],
                                    [[8, "five"], ["Conjure Elemental", "Scrying"]]])
         elif lands == "desert":
             arch['spells'].extend([[[2, "two"], ["Blur", "Silence"]],
                                    [[4, "three"], ["Create Food and Water", "Protection from Energy"]],
                                    [[6, "four"], ["Blight", "Hallucinatory Terrain"]],
                                    [[8, "five"], ["Insect Plague", "Wall of Stone"]]])
         elif lands == "forest":
             arch['spells'].extend([[[2, "two"], ["Barkskin", "Spider Climb"]],
                                    [[4, "three"], ["Call Lightning", "Plant Growth"]],
                                    [[6, "four"], ["Divination", "Freedom of Movement"]],
                                    [[8, "five"], ["Commune with Nature", "Tree Stride"]]])
         elif lands == "grassland":
             arch['spells'].extend([[[2, "two"], ["Invisibility", "Pass Without Trace"]],
                                    [[4, "three"], ["Daylight", "Haste"]],
                                    [[6, "four"], ["Divination", "Freedom of Movement"]],
                                    [[8, "five"], ["Dream", "Insect Plague"]]])
         elif lands == "mountain":
             arch['spells'].extend([[[2, "two"], ["Spider Climb", "Spike Growth"]],
                                    [[4, "three"], ["Lightning Bolt", "Meld into Stone"]],
                                    [[6, "four"], ["Stone Shape", "Stoneskin"]],
                                    [[8, "five"], ["Passwall", "Wall of Stone"]]])
         elif lands == "swamp":
             arch['spells'].extend([[[2, "two"], ["Darkness", "Melf's Acid Arrow"]],
                                    [[4, "three"], ["Water Walk", "Stinking Cloud"]],
                                    [[6, "four"], ["Locate Creature", "Freedom of Movement"]],
                                    [[8, "five"], ["Scrying", "Insect Plague"]]])
         else:
             lands = "underdark"
             arch['spells'].extend([[[2, "two"], ["Spider Climb", "Web"]],
                                    [[4, "three"], ["Gaseous Form", "Stinking Cloud"]],
                                    [[6, "four"], ["Greater Invisibility", "Stone Shape"]],
                                    [[8, "five"], ["Cloudkill", "Insect Plague"]]])
     elif arch_choice == "moon":
         arch['feature'] = [[0, ["Combat Wild Shape", "Circle Forms"]],
                            [5, "Primal Strike"],
                            [9, "Elemental Wild Shape"],
                            [13, "Thousand Forms"]]
     elif arch_choice == "shepherd":
         arch['language'] = [[0, "Sylvan"]]
         arch['feature'] = [[0, ["Speech of the Woods", "Spirit Totem (" + utilities.get_from_list(["bear", "hawk", "unicorn"], 1) + ")"]],
                            [5, "Mighty Summoner"],
                            [9, "Guardian Spirit"],
                            [13, "Faithful Summons"]]
     elif arch_choice == "spores":
         arch['spells'] = [[[0, "cantrip"], ["Chill Touch"]], [[2, "two"], ["Gentle Repose", "Ray of Enfeeblement"]], [[4, "three"], ["Animate Dead", "Gaseous Form"]], [[6, "four"], ["Blight", "Confusion"]], [[8, "five"], ["Cloudkill", "Contagion"]]]
         arch['feature'] = [[0, ["Halo of Spores", "Symbiotic Entity"]],
                            [5, "Fungal Infestation"],
                            [9, "Spreading Spores"],
                            [13, "Fungal Body"]]
         arch['resistance'] = [[13, ["Blindness", "Deafness", "Frightened", "Poison", "Critical hits"]]]
     else:
         arch_choice = "twilight"
         arch['feature'] = [[0, "Harvest's Scythe"],
                            [5, "Speech Beyond the Grave"],
                            [9, "Watcher at the Threshold"],
                            [13, "Paths of the Dead"]]
     self.level_arch(arch)
Пример #12
0
 def set_arch(self, arch_choice):
     arch = {}
     if arch_choice == "Beast Master":
         arch['feature'] = [[0, "Ranger's Companion"],
                            [6, "Exceptional Training"],
                            [10, "Bestial Fury"], [14, "Share Spells"]]
     elif arch_choice == "Gloom Stalker":
         arch['spells'] = [[[0, "one"], ["Disguise Self"]],
                           [[4, "two"], ["Rope Trick"]],
                           [[8, "three"], ["Fear"]],
                           [[12, "four"], ["Greater Invisibility"]],
                           [[16, "five"], ["Seeming"]]]
         arch['feature'] = [[0, ["Dread Ambusher", "Umbral Sight"]],
                            [10, "Stalker's Flurry"], [14, "Shadowy Dodge"]]
         if self.level > 6:
             if "wisdom" in self.saving_throws:
                 self.saving_throws.append(
                     utilities.get_from_list(["charisma", "intelligence"],
                                             1, "saving throw"))
             else:
                 self.saving_throws.append("wisdom")
     elif arch_choice == "Horizon Walker":
         arch['spells'] = [[[0, "one"], ["Protection from Good and Evil"]],
                           [[4, "two"], ["Misty Step"]],
                           [[8, "three"], ["Haste"]],
                           [[12, "four"], ["Banishment"]],
                           [[16, "five"], ["Teleportation Circle"]]]
         arch['feature'] = [[0, ["Detect Portal", "Planar Warrior"]],
                            [6, "Ethereal Step"], [10, "Distant Strike"],
                            [14, "Spectral Defense"]]
     elif arch_choice == "Hunter":
         zero = utilities.get_from_list(
             ["Colossus Slayer", "Giant Killer", "Horde Breaker"], 1,
             "feature")
         six = None
         ten = None
         fourteen = None
         if self.level > 6:
             six = utilities.get_from_list(
                 ["Escape the Horde", "Multiattack Defense", "Steel Will"],
                 1, "feature")
         if self.level > 10:
             ten = utilities.get_from_list(["Volley", "Whirlwind Attack"],
                                           1, "feature")
         if self.level > 14:
             fourteen = utilities.get_from_list(
                 ["Evasion", "Stand Against the Tide", "Uncanny Dodge"], 1,
                 "feature")
         arch['feature'] = [[0, zero], [6, six], [10, ten], [14, fourteen]]
     elif arch_choice == "Monster Slayer":
         arch['spells'] = [[[0, "one"], ["Protection from Good and Evil"]],
                           [[4, "two"], ["Zone of Truth"]],
                           [[8, "three"], ["Magic Circle"]],
                           [[12, "four"], ["Banishment"]],
                           [[16, "five"], ["Hold Monster"]]]
         arch['feature'] = [[0, ["Hunter's Sense", "Slayer's Prey"]],
                            [6, "Supernatural Defense"],
                            [10, "Magic-user's Nemesis"],
                            [14, "Slayer's Counter"]]
     else:
         arch_choice = "Primeval Guardian"
         arch['spells'] = [[[0, "one"], ["Entangle"]],
                           [[4, "two"], ["Enhance Ability"]],
                           [[8, "three"], ["Conjure Animals"]],
                           [[12, "four"], ["Giant Insect"]],
                           [[16, "five"], ["Insect Plague"]]]
         arch['feature'] = [[0, ["Guardian Soul", "Piercing Thorns"]],
                            [6, "Ancient Fortitude"],
                            [10, "Rooted Defense"], [14, "Guardian Aura"]]
     self.level_arch(arch)