pokeemmo/migration_scripts/1.12/update_evo_methods.py
khbsd 971a595e4a
Evolution Refactor (#6556)
Co-authored-by: Eduardo Quezada <eduardo602002@gmail.com>
2025-04-23 16:01:33 +02:00

238 lines
16 KiB
Python

import re
import os
METHOD = 0
CONDTION = 1
SPECIES = 2
def convert_methods(data):
new_data = ""
pattern = r'\{([^{}]+)\}'
# make sure we're in the right directory before anything else
if not os.path.exists("Makefile"):
print("Please run this script from the project's root folder.")
quit()
for line in data:
if "EVO_FRIENDSHIP," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_MIN_FRIENDSHIP, FRIENDSHIP_EVO_THRESHOLD})}", line)
elif "EVO_FRIENDSHIP_DAY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_MIN_FRIENDSHIP, FRIENDSHIP_EVO_THRESHOLD}, {IF_NOT_TIME, TIME_NIGHT})}", line)
elif "EVO_FRIENDSHIP_NIGHT," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_MIN_FRIENDSHIP, FRIENDSHIP_EVO_THRESHOLD}, {IF_TIME, TIME_NIGHT})}", line)
elif "EVO_TRADE_ITEM," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_TRADE, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_HOLD_ITEM, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_LEVEL_ATK_GT_DEF," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_ATK_GT_DEF})}", line)
elif "EVO_LEVEL_ATK_EQ_DEF," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_ATK_EQ_DEF})}", line)
elif "EVO_LEVEL_ATK_LT_DEF," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_ATK_LT_DEF})}", line)
elif "EVO_LEVEL_SILCOON," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_PID_UPPER_MODULO_10_GT, 5})}", line)
elif "EVO_LEVEL_CASCOON," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_PID_UPPER_MODULO_10_LT, 5})}", line)
elif "EVO_LEVEL_NINJASK," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}', line)
# elif "EVO_LEVEL_SHEDINJA," in line:
# match = re.search(pattern, line)
# members = match.group(1).split(",")
# new_data = new_data = re.sub(pattern, " ", line)
elif "EVO_BEAUTY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_MIN_BEAUTY, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_LEVEL_FEMALE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_GENDER, MON_FEMALE})}", line)
elif "EVO_LEVEL_MALE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_GENDER, MON_MALE})}", line)
elif "EVO_LEVEL_NIGHT," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_TIME, TIME_NIGHT})}", line)
elif "EVO_LEVEL_DAY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_NOT_TIME, TIME_NIGHT})}", line)
elif "EVO_LEVEL_DUSK," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_TIME, TIME_EVENING})}", line)
elif "EVO_ITEM_HOLD_DAY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_NOT_TIME, TIME_NIGHT}, {IF_HOLD_ITEM, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_ITEM_HOLD_NIGHT," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_TIME, TIME_NIGHT}, {IF_HOLD_ITEM, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_MOVE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_KNOWS_MOVE, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_FRIENDSHIP_MOVE_TYPE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_MIN_FRIENDSHIP, FRIENDSHIP_EVO_THRESHOLD}, {IF_KNOWS_MOVE_TYPE, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_MAPSEC," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_IN_MAPSEC, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_ITEM_MALE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_ITEM, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_GENDER, MON_MALE})}", line)
elif "EVO_ITEM_FEMALE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_ITEM, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_GENDER, MON_FEMALE})}", line)
elif "EVO_LEVEL_RAIN," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_WEATHER, WEATHER_RAIN})}", line)
elif "EVO_LEVEL_FOG," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_WEATHER, WEATHER_FOG})}", line)
elif "EVO_SPECIFIC_MON_IN_PARTY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_SPECIES_IN_PARTY, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_LEVEL_DARK_TYPE_MON_IN_PARTY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_TYPE_IN_PARTY, TYPE_DARK})}", line)
elif "EVO_TRADE_SPECIFIC_MON," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_TRADE, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_TRADE_PARTNER_SPECIES, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_SPECIFIC_MAP," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_IN_MAP, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_LEVEL_NATURE_AMPED," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_AMPED_NATURE})}", line)
elif "EVO_LEVEL_NATURE_LOW_KEY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_LOW_KEY_NATURE})}", line)
elif "EVO_CRITICAL_HITS," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_BATTLE_END, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_CRITICAL_HITS_GE, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_SCRIPT_TRIGGER_DMG," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_SCRIPT_TRIGGER, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_CURRENT_DAMAGE_GE, " + f'{members[CONDTION].strip()}' + "})}", line)
elif "EVO_DARK_SCROLL," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_SCRIPT_TRIGGER, " + f'0, {members[SPECIES].strip()}' + "}", line)
elif "EVO_WATER_SCROLL," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_SCRIPT_TRIGGER, " + f'1, {members[SPECIES].strip()}' + "}", line)
elif "EVO_ITEM_NIGHT," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_ITEM, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_TIME, TIME_NIGHT})}", line)
elif "EVO_ITEM_DAY," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_ITEM, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_NOT_TIME, TIME_NIGHT})}", line)
elif "EVO_MOVE_TWO_SEGMENT," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_KNOWS_MOVE, " + f'{members[CONDTION].strip()}' + "}, {IF_PID_MODULO_100_LT, 100})}", line)
elif "EVO_MOVE_THREE_SEGMENT," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_KNOWS_MOVE, " + f'{members[CONDTION].strip()}' + "}, {IF_PID_MODULO_100_LT, 1})}", line)
elif "EVO_LEVEL_FAMILY_OF_THREE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_PID_MODULO_100_EQ, 0})}", line)
elif "EVO_LEVEL_FAMILY_OF_FOUR," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'{members[CONDTION].strip()}, {members[SPECIES].strip()}' + ", CONDITIONS({IF_PID_MODULO_100_GT, 0})}", line)
elif "EVO_USE_MOVE_TWENTY_TIMES," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_USED_MOVE_X_TIMES, " + f'{members[CONDTION].strip()}' + ", 20})}", line)
elif "EVO_RECOIL_DAMAGE_MALE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_RECOIL_DAMAGE_GE, " + f'{members[CONDTION].strip()}' + "}, {IF_GENDER, MON_MALE})}", line)
elif "EVO_RECOIL_DAMAGE_FEMALE," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_RECOIL_DAMAGE_GE, " + f'{members[CONDTION].strip()}' + "}, {IF_GENDER, MON_FEMALE})}", line)
elif "EVO_ITEM_COUNT_999," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_BAG_ITEM_COUNT, " + f'{members[CONDTION].strip()}' + ", 999})}", line)
elif "EVO_DEFEAT_THREE_WITH_ITEM," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_DEFEAT_X_WITH_ITEMS, " + "SPECIES_BISHARP, ITEM_LEADERS_CREST, 3})}", line)
elif "EVO_OVERWORLD_STEPS," in line:
match = re.search(pattern, line)
members = match.group(1).split(",")
new_data = new_data + re.sub(pattern, "{EVO_LEVEL, " + f'0, {members[SPECIES].strip()}' + ", CONDITIONS({IF_MIN_OVERWORLD_STEPS, 1000})}", line)
else:
new_data = new_data + line
return new_data
species_files = [
"gen_1_families.h",
"gen_2_families.h",
"gen_3_families.h",
"gen_4_families.h",
"gen_5_families.h",
"gen_6_families.h",
"gen_7_families.h",
"gen_8_families.h",
"gen_9_families.h",
]
PATH = "src/data/pokemon/species_info/"
for source in species_files:
with open(PATH + source, 'r') as file:
data = file.readlines()
with open(PATH + source, 'w') as file:
file.write(convert_methods(data))