def generate_vgc_team(): probs = numpy.array([p['usage'] for p in vgc]) probs /= probs.sum() names = numpy.random.choice([o['name'] for o in vgc], 6, False, probs) team = [] for data in [o for o in vgc if o['name'] in names]: pokemon = { 'name': data['name'], 'species': data['name'], 'id': data['id'], 'level': 50 #'gender': '' } pokemon['moves'] = numpy.random.choice( list(data['moves'].keys()), 4, False, numpy.array(list(data['moves'].values())) / numpy.array(list(data['moves'].values())).sum()) pokemon['item'] = numpy.random.choice( list(data['items'].keys()), replace=False, p=numpy.array(list(data['items'].values())) / numpy.array(list(data['items'].values())).sum()) pokemon['ability'] = numpy.random.choice( list(data['abilities'].keys()), replace=False, p=numpy.array(list(data['abilities'].values())) / numpy.array(list(data['abilities'].values())).sum()) pokemon['nature'] = numpy.random.choice( list(data['natures'].keys()), replace=False, p=numpy.array(list(data['natures'].values())) / numpy.array(list(data['natures'].values())).sum()) divs = numpy.sort(numpy.random.randint(128, size=5)).tolist() divs.insert(0, 0) divs.append(127) e = [] for i in range(len(divs) - 1): e.append(252 if 4 * (divs[i + 1] - divs[i]) > 252 else 4 * (divs[i + 1] - divs[i])) pokemon['evs'] = dex.Stats(e[0], e[1], e[2], e[3], e[4], e[5]) pokemon['ivs'] = dex.Stats(31, 31, 31, 31, 31, 31) team.append(pokemon) for i in range(len(pokemon['moves'])): move = re.sub(r'\W+', '', pokemon['moves'][i].lower()) pokemon['moves'][i] = move return team
def maximum_inbattle_speed(self): battle = Battle(debug=False, rng=False) battle.join(0, [{ 'species': 'deoxysspeed', 'ability': 'swiftswim', 'level': 100, 'ivs': dex.Stats(0, 0, 0, 0, 0, 31), 'evs': dex.Stats(0, 0, 0, 0, 0, 252), 'nature': 'jolly', 'item': 'choicescarf' }]) battle.sides[0].pokemon[0].boosts['spe'] = 6 battle.weather = 'rainy' battle.sides[0].volatile_statuses.add('tailwind') self.assertEqual(battle.sides[0].pokemon[0].get_speed(), 12096)
def test_case3(self): battle = Battle(debug=False, rng=False) battle.join(0, [{ 'species': 'mew', 'level': 76, 'ivs': dex.Stats(15, 0, 8, 7, 1, 31), 'evs': dex.Stats(252, 0, 0, 4, 0, 252) }]) stats = battle.sides[0].pokemon[0].stats #stat calcs were checked by smogon self.assertEqual(stats.hp, 297) self.assertEqual(stats.attack, 157) self.assertEqual(stats.defense, 163) self.assertEqual(stats.specialattack, 163) self.assertEqual(stats.specialdefense, 157) self.assertEqual(stats.speed, 228)
def calculate_stats(self): # hp hp = math.floor(((self.pokemon_set['ivs'].hp + (2 * self.template.baseStats.hp) + (self.pokemon_set['evs'].hp / 4)) * (self.level / 100)) + 10 + self.level) stats = [ 'attack', 'defense', 'specialattack', 'specialdefense', 'speed' ] cal = [] for stat in stats: # other stat calculation cal.append( math.floor( math.floor( (((getattr(self.pokemon_set['ivs'], stat) + (2 * getattr(self.template.baseStats, stat)) + (getattr(self.pokemon_set['evs'], stat) / 4)) * (self.level / 100)) + 5)) * dex.nature_dex[self.nature].values[stat])) self.stats = dex.Stats(hp, cal[0], cal[1], cal[2], cal[3], cal[4])
def __init__(self, pokemon_set, side_id, side=None, battle=None): self.side_id = side_id self.side = side self.battle = battle self.pokemon_set = pokemon_set self.species = re.sub(r'\W+', '', pokemon_set['species'].lower()) self.id = self.species self.nature = pokemon_set.get('nature', 'hardy') self.template = dex.pokedex[self.species] self.name = pokemon_set.get('name', self.template.species) self.fullname = "Nic's " if not self.side_id else "Sam's " self.fullname += self.name self.moves = list(pokemon_set.get('moves', ['tackle'] * 4)) self.base_moves = self.moves self.pp = {} for move in self.moves: self.pp[move] = dex.move_dex[move].pp self.fainted = False self.status = '' self.position = 0 self.burned = False self.protect_n = 0 self.toxic_n = 1 self.sleep_n = 0 self.bound_n = 0 self.encore_n = 0 self.perishsong_n = 0 self.taunt_n = 0 self.is_switching = False self.trapped = False self.aqua_ring = False self.stockpile = 0 self.substitute = False self.substitute_hp = 0 self.pokemon_hit_this_turn = 0 self.last_damaging_move = None self.last_used_move = None self.consecutive_move_uses = 0 self.crit_chance = 0 self.boosts = { 'atk': 0, 'def': 0, 'spa': 0, 'spd': 0, 'spe': 0, 'accuracy': 0, 'evasion': 0 } self.volatile_statuses = set() self.active = False self.active_turns = 0 self.level = pokemon_set.get('level', 50) self.base_ability = pokemon_set.get('ability', self.template.abilities.normal0) self.base_ability = re.sub(r'\W+', '', self.base_ability.lower()) self.ability = self.base_ability if self.ability == '': raise ValueError self.item = pokemon_set.get('item', '') self.lost_item = False self.last_used_item = None self.types = self.template.types if 'evs' not in pokemon_set: self.pokemon_set['evs'] = dex.Stats(0, 0, 0, 0, 0, 0) else: self.pokemon_set['evs'] = dex.Stats(pokemon_set['evs'][0], pokemon_set['evs'][1], pokemon_set['evs'][2], pokemon_set['evs'][3], pokemon_set['evs'][4], pokemon_set['evs'][5]) self.pokemon_set['ivs'] = dex.Stats(31, 31, 31, 31, 31, 31) self.calculate_stats() self.hp = self.stats.hp self.maxhp = self.hp