''' Author: Dawson Matthews Date: 01/14/26 Takes as input: 1. The directory in which all of the json files are listed in their respective directories seperated by generation from generation1 to generation9 2. The file containing all desired mega pokemon and their target abilities in the format as shown by: Darkrai-Mega: Dark Aura 3. The name of the new directory to put the changed files in Produces as output a new directory with the fixed files in it. ''' import sys import os import json def get_target_abilities(ability_data_path): ''' Reads in the data from the path and converts date from the showdown format to the cobblemon format as a pythyon dictionary i.e. "Darkrai-Mega: Dark Aura" -> {"darkrai": "darkaura"} ''' ability_data = {} with open(ability_data_path, "r", encoding="utf-8") as f: lines = f.readlines() for line in lines: line = (line.strip()).split() # Removing new line characters, as well as leading and trailing spaces. Then split it by the middle space species_name = line[0][:-6].lower() # Removes the "-Mega" suffix and sends the name to lower case ability = (line[1].replace(" ", "")).lower() # Removes the spaces ability_data[species_name] = ability return ability_data def write_augmented_species_data(src_dir, dst_dir, species_data): ''' Takes the new species data in dictionary form and creates the new data ''' gen_dirs = os.listdir(species_additions_dir) # Get a list of all directories in the data path, each corresponding to one generation for gen_dir in gen_dirs: dir_path = os.path.join(data_path, gen_dir) if os.path.isdir(dir_path) == False: # Make sure it's actually a real file path return 1 species_files = os.listdir(dir_path) for species_file_name in species_files: species_file_path = os.path.join(dir_path, species_file_name) with open(species_file_path, "r", encoding="utf-8") as f: species_data = json.load(f) # Edit the ability data (abities is a list of strings, sometimes having an "h:" in front of the name if it's the hidden ability) forms = species_data["forms"] for form in forms: abilities = form["abilities"] for ability in abilities: def main(): program_name = sys.argv[0] usage_string = f"Usage: {program_name} " num_args = len(sys.argv) if num_args != 4: print(usage_string) _, src_dir, dst_dir, data_path = sys.argv # Gets the required information from the program arguments ability_data = get_target_abilities(data_path) write_augmented_species_data(src_dir, dst_dir, ability_data) if __name__ == "__main__": main()