def sample_char(char, archetype, race, focus=None): """Loads sample traits onto a character. Args: char (Character): character to load traits archetype (str): name of base archetype race (str): name of race to become focus Optional(str): focus to apply. if None, default is race's first item in foci collection """ archetypes.apply_archetype(char, archetype, reset=True) char.traits.STR.base += 1 char.traits.PER.base += 1 char.traits.INT.base += 1 char.traits.DEX.base += 1 char.traits.CHA.base += 1 char.traits.VIT.base += 2 char.traits.MAG.base += 2 focus = focus or races.load_race(race).foci[0] races.apply_race(char, race, focus) archetypes.calculate_secondary_traits(char.traits) archetypes.finalize_traits(char.traits) tickerhandler.add(char, 6, hook_key='at_turn_start') skills.apply_skills(char) skills.finalize_skills(char.skills)
def test_calculate_secondary_traits(self): """confirm functionality of `calculate_secondary_traits` function""" self.char1.traits.STR.base += 3 self.char1.traits.DEX.base += 2 self.char1.traits.VIT.base += 3 archetypes.calculate_secondary_traits(self.char1.traits) self.assertEqual(self.char1.traits.HP.actual, 9) self.assertEqual(self.char1.traits.SP.actual, 9) self.assertEqual(self.char1.traits.BM.actual, 0) self.assertEqual(self.char1.traits.WM.actual, 0) self.assertEqual(self.char1.traits.BM.max, 0) self.assertEqual(self.char1.traits.WM.max, 0) self.assertEqual(self.char1.traits.FORT.actual, 9) self.assertEqual(self.char1.traits.REFL.actual, 4) self.assertEqual(self.char1.traits.WILL.actual, 1) self.assertEqual(self.char1.traits.ATKM.actual, 9) self.assertEqual(self.char1.traits.ATKR.actual, 1) self.assertEqual(self.char1.traits.ATKU.actual, 6) self.assertEqual(self.char1.traits.DEF.actual, 6) self.assertEqual(self.char1.traits.ENC.max, 180) # if any allocated to MAG, WM and BM have max=10 self.char1.traits.STR.base -= 1 self.char1.traits.MAG.base += 1 archetypes.calculate_secondary_traits(self.char1.traits) self.assertEqual(self.char1.traits.BM.max, 10) self.assertEqual(self.char1.traits.WM.max, 10)
def sample_char(char, archetype, race, focus=None): """Loads sample traits onto a character. Args: char (Character): character to load traits archetype (str): name of base archetype race (str): name of race to become focus Optional(str): focus to apply. if None, default is race's first item in foci collection """ archetypes.apply_archetype(char, archetype, reset=True) char.traits.STR.base += 1 char.traits.PER.base += 1 char.traits.INT.base += 1 char.traits.DEX.base += 1 char.traits.CHA.base += 1 char.traits.VIT.base += 2 char.traits.MAG.base += 2 focus = focus or races.load_race(race).foci[0] races.apply_race(char, race, focus) archetypes.calculate_secondary_traits(char.traits) archetypes.finalize_traits(char.traits) tickerhandler.add(interval=6, callback=char.at_turn_start) skills.apply_skills(char) skills.finalize_skills(char.skills)
def setUp(self): self.character_typeclass = Character super(CharTraitsTestCase, self).setUp() apply_archetype(self.char1, 'warrior') self.char1.traits.STR.base += 3 self.char1.traits.PER.base += 1 self.char1.traits.DEX.base += 1 self.char1.traits.VIT.base += 3 calculate_secondary_traits(self.char1.traits)
def menunode_allocate_mana(caller, raw_string): """Mana point allocation menu node.""" char = caller.new_char tr = char.traits manas = ('WM', 'BM') raw_string = raw_string.strip() if raw_string.isdigit() and int(raw_string) <= len(manas): tr[manas[int(raw_string) - 1]].base += 1 remaining = tr.MAG.actual - sum(tr[m].base for m in manas) if remaining: text = "Your |CMagic|n trait is |w{}|n.\n\n".format(tr.MAG.actual) text += "This allows you to allocate that many points to your\n" text += "|wWhite Mana|n and |xBlack Mana|n counters.\n" text += "You have |w{}|n points remaining. ".format(remaining) text += "Select a mana counter to increase:" help = "Magic users spend Mana points when casting spells. Different\n" help += "colors of magic require different colors of mana. The effects of\n" help += "different magics vary by color.\n\n" help += " White - white magic spells are generally support/healing based\n" help += " Black - black magic spells are generally attack-oriented\n\n" help += "The number of points allocated here determines the number of\n" help += "each color mana that will be spawned each turn of the game." options = [{ "desc": _format_trait_opts(tr[m], '|w' if m == 'WM' else '|x'), "goto": "menunode_allocate_mana" } for m in manas] def reset_mana(s): for m in manas: char.traits[m].base = 0 options.append({ "desc": "Start Over", "exec": reset_mana, "goto": "menunode_allocate_mana" }) return (text, help), options else: if tr.MAG.actual > 0: output = "Final Mana Values:\n" output += " |wWhite Mana|n: |w{}|n\n".format(tr.WM.actual) output += " |xBlack Mana|n: |w{}|n\n".format(tr.BM.actual) else: output = "" # TODO: implement spells; add level 0 spell cmdsets here archetypes.calculate_secondary_traits(char.traits) archetypes.finalize_traits(char.traits) tickerhandler.add(interval=6, callback=char.at_turn_start) skills.apply_skills(char) return menunode_allocate_skills(caller, output)
def setUp(self): self.character_typeclass = Character super(ApplyRaceTestCase, self).setUp() # make sure char1 has traits to give bonuses to apply_archetype(self.char1, 'warrior') self.char1.traits.STR.base += 2 self.char1.traits.PER.base += 1 self.char1.traits.INT.base += 1 self.char1.traits.DEX.base += 1 self.char1.traits.CHA.base += 1 self.char1.traits.VIT.base += 2 calculate_secondary_traits(self.char1.traits)
def menunode_allocate_mana(caller, raw_string): """Mana point allocation menu node.""" char = caller.new_char tr = char.traits manas = ('WM', 'BM') raw_string = raw_string.strip() if raw_string.isdigit() and int(raw_string) <= len(manas): tr[manas[int(raw_string) - 1]].base += 1 remaining = tr.MAG.actual - sum(tr[m].base for m in manas) if remaining: text = "Your |CMagic|n trait is |w{}|n.\n\n".format(tr.MAG.actual) text += "This allows you to allocate that many points to your\n" text += "|wWhite Mana|n and |xBlack Mana|n counters.\n" text += "You have |w{}|n points remaining. ".format(remaining) text += "Select a mana counter to increase:" help = "Magic users spend Mana points when casting spells. Different\n" help += "colors of magic require different colors of mana. The effects of\n" help += "different magics vary by color.\n\n" help += " White - white magic spells are generally support/healing based\n" help += " Black - black magic spells are generally attack-oriented\n\n" help += "The number of points allocated here determines the number of\n" help += "each color mana that will be spawned each turn of the game." options = [{"desc": _format_trait_opts(tr[m], '|w' if m == 'WM' else '|x'), "goto": "menunode_allocate_mana"} for m in manas] def reset_mana(s): for m in manas: char.traits[m].base = 0 options.append({"desc": "Start Over", "exec": reset_mana, "goto": "menunode_allocate_mana"}) return (text, help), options else: if tr.MAG.actual > 0: output = "Final Mana Values:\n" output += " |wWhite Mana|n: |w{}|n\n".format(tr.WM.actual) output += " |xBlack Mana|n: |w{}|n\n".format(tr.BM.actual) else: output = "" # TODO: implement spells; add level 0 spell cmdsets here archetypes.calculate_secondary_traits(char.traits) archetypes.finalize_traits(char.traits) tickerhandler.add(interval=6, callback=char.at_turn_start) skills.apply_skills(char) return menunode_allocate_skills(caller, output)
def setUp(self): super(ItemEncumbranceTestCase, self).setUp() apply_archetype(self.char1, 'warrior') apply_race(self.char1, 'human', 'cunning') self.char1.traits.STR.base += 3 self.char1.traits.VIT.base += 3 self.char1.traits.DEX.base += 2 calculate_secondary_traits(self.char1.traits) self.obj1.db.desc = 'Test Obj' self.obj1.db.damage = 1 self.obj1.db.weight = 1.0 self.obj2.swap_typeclass('typeclasses.armors.Armor', clean_attributes=True, run_start_hooks=True) self.obj2.db.toughness = 1 self.obj2.db.weight = 18.0