def test_stronger_against_specific_entity_kind(self): power = 5 strong_against = [Keyword.LARGE] weapon = random_weapon(atk=power, strong_against=strong_against) normal_foe = random_foe_entity(keywords=[]) self.assertEqual(power, weapon.hit(random_player_entity(), normal_foe)) vulnerable_foe = random_foe_entity(keywords=[Keyword.LARGE]) self.assertEqual(power * 2, weapon.hit(random_player_entity(), vulnerable_foe))
def test_stronger_against_multiple_entity_kinds(self): power = 4 strong_against = [Keyword.LARGE, Keyword.CAVALRY] weapon = random_weapon(atk=power, strong_against=strong_against) non_vulnerable_foe = random_foe_entity(keywords=[Keyword.SMALL]) self.assertEqual(power, weapon.hit(random_player_entity(), non_vulnerable_foe)) vulnerable_foe = random_foe_entity(keywords=[Keyword.LARGE]) self.assertEqual(power * 2, weapon.hit(random_player_entity(), vulnerable_foe)) super_vulnerable_foe = random_foe_entity(keywords=[Keyword.CAVALRY, Keyword.LARGE]) self.assertEqual(power * 3, weapon.hit(random_player_entity(), super_vulnerable_foe))
def test_attack_with_weapon(self): weapon = random_weapon(strong_against=[]) equipments = [weapon] character_test = random_character_entity(equipments=equipments) self.assertEqual(character_test.strength + weapon.atk, character_test.attack(random_foe_entity()))
def test_attacked_while_having_equipments(self): defense = 2 res = 3 equipments = [random_equipment(defense=defense, res=res)] character_test = random_character_entity(equipments=equipments) # Physical attack damage = character_test.defense + 5 character_test.attacked(random_foe_entity(), damage, DamageKind.PHYSICAL, []) self.assertEqual(character_test.hp_max - 3, character_test.hp) character_test.healed() # Mental attack damage = character_test.res + 5 character_test.attacked(random_foe_entity(), damage, DamageKind.SPIRITUAL, []) self.assertEqual(character_test.hp_max - 2, character_test.hp)
def test_no_charge_bonus_for_weapon_with_no_charge(self): power = 4 weapon = random_weapon(atk=power, attack_kind='PHYSICAL', charge=False) player = random_player_entity() player.strength = 5 attacked_ent = random_foe_entity(min_hp=1000, max_hp=1000, max_defense=0, keywords=[]) player.equip(weapon) # No charge bonus even if there is a " charge " player.pos = (player.old_pos[0] + 5 * TILE_SIZE, player.old_pos[1]) self.assertEqual(player.strength + weapon.atk, player.attack(attacked_ent))
def test_charge_bonus(self): power = 4 spear = random_weapon(atk=power, attack_kind='PHYSICAL', charge=True) player = random_player_entity() player.strength = 5 attacked_ent = random_foe_entity(min_hp=1000, max_hp=1000, max_defense=0, keywords=[]) player.equip(spear) # No charge self.assertEqual(player.strength + spear.atk, player.attack(attacked_ent)) # Charge player.pos = (player.old_pos[0] + 5 * TILE_SIZE, player.old_pos[1]) self.assertEqual(player.strength + int(spear.atk * 1.5), player.attack(attacked_ent)) # Stronger charge player.pos = (player.old_pos[0] + 8 * TILE_SIZE, player.old_pos[1]) self.assertEqual(player.strength + int(spear.atk * 2), player.attack(attacked_ent))
def test_save_and_load_foe(self): foe = random_foe_entity(name="skeleton_cobra", reach=[2], keywords=[Keyword.CAVALRY], loot=[(parse_item_file('monster_meat'), rd.random()), (random_gold(), rd.random())]) foe_saved = foe.save('foe') loaded_foe = load_foe(foe_saved, True, 0, 0) self.assertEqual(foe.name, loaded_foe.name) self.assertEqual(foe.pos, loaded_foe.pos) self.assertEqual(foe.hp, loaded_foe.hp) self.assertEqual(foe.defense, loaded_foe.defense) self.assertEqual(foe.res, loaded_foe.res) self.assertEqual(foe.strength, loaded_foe.strength) self.assertEqual(foe.strategy, loaded_foe.strategy) self.assertEqual(foe.lvl, loaded_foe.lvl) self.assertEqual(foe.skills, loaded_foe.skills) self.assertEqual(foe.reach, loaded_foe.reach) self.assertEqual(foe.keywords, loaded_foe.keywords) self.assertEqual(foe.alterations, loaded_foe.alterations) self.assertEqual(foe.potential_loot, loaded_foe.potential_loot)
def test_hit_power(self): power = 3 strong_against = [] weapon = random_weapon(atk=power, strong_against=strong_against) self.assertEqual( power, weapon.hit(random_player_entity(), random_foe_entity()))