From 6d8366f657dfe0115d176b4c1db6fbd61afb4bdb Mon Sep 17 00:00:00 2001 From: HappyLappy1 <86489014+HappyLappy1@users.noreply.github.com> Date: Wed, 22 Mar 2023 16:38:55 -0400 Subject: [PATCH 1/2] Update Effortless_IV_Calc.py --- Effortless_IV_Calc.py | 817 ++++++++++++++++++++++++++---------------- 1 file changed, 509 insertions(+), 308 deletions(-) diff --git a/Effortless_IV_Calc.py b/Effortless_IV_Calc.py index 6b9a523..a04e733 100644 --- a/Effortless_IV_Calc.py +++ b/Effortless_IV_Calc.py @@ -1,361 +1,562 @@ # -*- coding: utf-8 -*- -print("This tool is only accurate for gens 3-5. Base Stats changed in gen 6+, as did the IV Judge.") -def Stats2TVs(Species, Level, Nature, Stats): - Species_List = ["Bulbasaur", "Ivysaur", "Venusaur", "Charmander", "Charmeleon", "Charizard", "Squirtle", "Wartortle", "Blastoise", "Caterpie", "Metapod", "Butterfree", "Weedle", "Kakuna", "Beedrill", "Pidgey", "Pidgeotto", "Pidgeot", "Rattata", "Raticate", "Spearow", "Fearow", "Ekans", "Arbok", "Pikachu", "Raichu", "Sandshrew", "Sandslash", "Nidoran♀", "Nidorina", "Nidoqueen", "Nidoran♂", "Nidorino", "Nidoking", "Clefairy", "Clefable", "Vulpix", "Ninetales", "Jigglypuff", "Wigglytuff", "Zubat", "Golbat", "Oddish", "Gloom", "Vileplume", "Paras", "Parasect", "Venonat", "Venomoth", "Diglett", "Dugtrio", "Meowth", "Persian", "Psyduck", "Golduck", "Mankey", "Primeape", "Growlithe", "Arcanine", "Poliwag", "Poliwhirl", "Poliwrath", "Abra", "Kadabra", "Alakazam", "Machop", "Machoke", "Machamp", "Bellsprout", "Weepinbell", "Victreebel", "Tentacool", "Tentacruel", "Geodude", "Graveler", "Golem", "Ponyta", "Rapidash", "Slowpoke", "Slowbro", "Magnemite", "Magneton", "Farfetch'd", "Doduo", "Dodrio", "Seel", "Dewgong", "Grimer", "Muk", "Shellder", "Cloyster", "Gastly", "Haunter", "Gengar", "Onix", "Drowzee", "Hypno", "Krabby", "Kingler", "Voltorb", "Electrode", "Exeggcute", "Exeggutor", "Cubone", "Marowak", "Hitmonlee", "Hitmonchan", "Lickitung", "Koffing", "Weezing", "Rhyhorn", "Rhydon", "Chansey", "Tangela", "Kangaskhan", "Horsea", "Seadra", "Goldeen", "Seaking", "Staryu", "Starmie", "Mr. Mime", "Scyther", "Jynx", "Electabuzz", "Magmar", "Pinsir", "Tauros", "Magikarp", "Gyarados", "Lapras", "Ditto", "Eevee", "Vaporeon", "Jolteon", "Flareon", "Porygon", "Omanyte", "Omastar", "Kabuto", "Kabutops", "Aerodactyl", "Snorlax", "Articuno", "Zapdos", "Moltres", "Dratini", "Dragonair", "Dragonite", "Mewtwo", "Mew", "Chikorita", "Bayleef", "Meganium", "Cyndaquil", "Quilava", "Typhlosion", "Totodile", "Croconaw", "Feraligatr", "Sentret", "Furret", "Hoothoot", "Noctowl", "Ledyba", "Ledian", "Spinarak", "Ariados", "Crobat", "Chinchou", "Lanturn", "Pichu", "Cleffa", "Igglybuff", "Togepi", "Togetic", "Natu", "Xatu", "Mareep", "Flaaffy", "Ampharos", "Bellossom", "Marill", "Azumarill", "Sudowoodo", "Politoed", "Hoppip", "Skiploom", "Jumpluff", "Aipom", "Sunkern", "Sunflora", "Yanma", "Wooper", "Quagsire", "Espeon", "Umbreon", "Murkrow", "Slowking", "Misdreavus", "Unown", "Wobbuffet", "Girafarig", "Pineco", "Forretress", "Dunsparce", "Gligar", "Steelix", "Snubbull", "Granbull", "Qwilfish", "Scizor", "Shuckle", "Heracross", "Sneasel", "Teddiursa", "Ursaring", "Slugma", "Magcargo", "Swinub", "Piloswine", "Corsola", "Remoraid", "Octillery", "Delibird", "Mantine", "Skarmory", "Houndour", "Houndoom", "Kingdra", "Phanpy", "Donphan", "Porygon2", "Stantler", "Smeargle", "Tyrogue", "Hitmontop", "Smoochum", "Elekid", "Magby", "Miltank", "Blissey", "Raikou", "Entei", "Suicune", "Larvitar", "Pupitar", "Tyranitar", "Lugia", "Ho-Oh", "Celebi", "Treecko", "Grovyle", "Sceptile", "Torchic", "Combusken", "Blaziken", "Mudkip", "Marshtomp", "Swampert", "Poochyena", "Mightyena", "Zigzagoon", "Linoone", "Wurmple", "Silcoon", "Beautifly", "Cascoon", "Dustox", "Lotad", "Lombre", "Ludicolo", "Seedot", "Nuzleaf", "Shiftry", "Taillow", "Swellow", "Wingull", "Pelipper", "Ralts", "Kirlia", "Gardevoir", "Surskit", "Masquerain", "Shroomish", "Breloom", "Slakoth", "Vigoroth", "Slaking", "Nincada", "Ninjask", "Shedinja", "Whismur", "Loudred", "Exploud", "Makuhita", "Hariyama", "Azurill", "Nosepass", "Skitty", "Delcatty", "Sableye", "Mawile", "Aron", "Lairon", "Aggron", "Meditite", "Medicham", "Electrike", "Manectric", "Plusle", "Minun", "Volbeat", "Illumise", "Roselia", "Gulpin", "Swalot", "Carvanha", "Sharpedo", "Wailmer", "Wailord", "Numel", "Camerupt", "Torkoal", "Spoink", "Grumpig", "Spinda", "Trapinch", "Vibrava", "Flygon", "Cacnea", "Cacturne", "Swablu", "Altaria", "Zangoose", "Seviper", "Lunatone", "Solrock", "Barboach", "Whiscash", "Corphish", "Crawdaunt", "Baltoy", "Claydol", "Lileep", "Cradily", "Anorith", "Armaldo", "Feebas", "Milotic", "Castform", "Kecleon", "Shuppet", "Banette", "Duskull", "Dusclops", "Tropius", "Chimecho", "Absol", "Wynaut", "Snorunt", "Glalie", "Spheal", "Sealeo", "Walrein", "Clamperl", "Huntail", "Gorebyss", "Relicanth", "Luvdisc", "Bagon", "Shelgon", "Salamence", "Beldum", "Metang", "Metagross", "Regirock", "Regice", "Registeel", "Latias", "Latios", "Kyogre", "Groudon", "Rayquaza", "Jirachi", "Deoxys (Normal Forme)", "Deoxys (Attack Forme)", "Deoxys (Defense Forme)", "Deoxys (Speed Forme)", "Turtwig", "Grotle", "Torterra", "Chimchar", "Monferno", "Infernape", "Piplup", "Prinplup", "Empoleon", "Starly", "Staravia", "Staraptor", "Bidoof", "Bibarel", "Kricketot", "Kricketune", "Shinx", "Luxio", "Luxray", "Budew", "Roserade", "Cranidos", "Rampardos", "Shieldon", "Bastiodon", "Burmy", "Wormadam (Plant Cloak)", "Wormadam (Sandy Cloak)", "Wormadam (Trash Cloak)", "Mothim", "Combee", "Vespiquen", "Pachirisu", "Buizel", "Floatzel", "Cherubi", "Cherrim", "Shellos", "Gastrodon", "Ambipom", "Drifloon", "Drifblim", "Buneary", "Lopunny", "Mismagius", "Honchkrow", "Glameow", "Purugly", "Chingling", "Stunky", "Skuntank", "Bronzor", "Bronzong", "Bonsly", "Mime Jr.", "Happiny", "Chatot", "Spiritomb", "Gible", "Gabite", "Garchomp", "Munchlax", "Riolu", "Lucario", "Hippopotas", "Hippowdon", "Skorupi", "Drapion", "Croagunk", "Toxicroak", "Carnivine", "Finneon", "Lumineon", "Mantyke", "Snover", "Abomasnow", "Weavile", "Magnezone", "Lickilicky", "Rhyperior", "Tangrowth", "Electivire", "Magmortar", "Togekiss", "Yanmega", "Leafeon", "Glaceon", "Gliscor", "Mamoswine", "Porygon-Z", "Gallade", "Probopass", "Dusknoir", "Froslass", "Rotom", "Rotom (Heat Rotom)", "Rotom (Wash Rotom)", "Rotom (Frost Rotom)", "Rotom (Fan Rotom)", "Rotom (Mow Rotom)", "Uxie", "Mesprit", "Azelf", "Dialga", "Palkia", "Heatran", "Regigigas", "Giratina (Altered Forme)", "Giratina (Origin Forme)", "Cresselia", "Phione", "Manaphy", "Darkrai", "Shaymin (Land Forme)", "Shaymin (Sky Forme)", "Arceus"] - HP_List = [45, 60, 80, 39, 58, 78, 44, 59, 79, 45, 50, 60, 40, 45, 65, 40, 63, 83, 30, 55, 40, 65, 35, 60, 35, 60, 50, 75, 55, 70, 90, 46, 61, 81, 70, 95, 38, 73, 115, 140, 40, 75, 45, 60, 75, 35, 60, 60, 70, 10, 35, 40, 65, 50, 80, 40, 65, 55, 90, 40, 65, 90, 25, 40, 55, 70, 80, 90, 50, 65, 80, 40, 80, 40, 55, 80, 50, 65, 90, 95, 25, 50, 52, 35, 60, 65, 90, 80, 105, 30, 50, 30, 45, 60, 35, 60, 85, 30, 55, 40, 60, 60, 95, 50, 60, 50, 50, 90, 40, 65, 80, 105, 250, 65, 105, 30, 55, 45, 80, 30, 60, 40, 70, 65, 65, 65, 65, 75, 20, 95, 130, 48, 55, 130, 65, 65, 65, 35, 70, 30, 60, 80, 160, 90, 90, 90, 41, 61, 91, 106, 100, 45, 60, 80, 39, 58, 78, 50, 65, 85, 35, 85, 60, 100, 40, 55, 40, 70, 85, 75, 125, 20, 50, 90, 35, 55, 40, 65, 55, 70, 90, 75, 70, 100, 70, 90, 35, 55, 75, 55, 30, 75, 65, 55, 95, 65, 95, 60, 95, 60, 48, 190, 70, 50, 75, 100, 65, 75, 60, 90, 65, 70, 20, 80, 55, 60, 90, 40, 50, 50, 100, 55, 35, 75, 45, 65, 65, 45, 75, 75, 90, 90, 85, 73, 55, 35, 50, 45, 45, 45, 95, 255, 90, 115, 100, 50, 70, 100, 106, 106, 100, 40, 50, 70, 45, 60, 80, 50, 70, 100, 35, 70, 38, 78, 45, 50, 60, 50, 60, 40, 60, 80, 40, 70, 90, 40, 60, 40, 60, 28, 38, 68, 40, 70, 60, 60, 60, 80, 150, 31, 61, 1, 64, 84, 104, 72, 144, 50, 30, 50, 70, 50, 50, 50, 60, 70, 30, 60, 40, 70, 60, 60, 65, 65, 50, 70, 100, 45, 70, 130, 170, 60, 70, 70, 60, 80, 60, 45, 50, 80, 50, 70, 45, 75, 73, 73, 70, 70, 50, 110, 43, 63, 40, 60, 66, 86, 45, 75, 20, 95, 70, 60, 44, 64, 20, 40, 99, 65, 65, 95, 50, 80, 70, 90, 110, 35, 55, 55, 100, 43, 45, 65, 95, 40, 60, 80, 80, 80, 80, 80, 80, 100, 100, 105, 100, 50, 50, 50, 50, 55, 75, 95, 44, 64, 76, 53, 64, 84, 40, 55, 85, 59, 79, 37, 77, 45, 60, 80, 40, 60, 67, 97, 30, 60, 40, 60, 60, 60, 70, 30, 70, 60, 55, 85, 45, 70, 76, 111, 75, 90, 150, 55, 65, 60, 100, 49, 71, 45, 63, 103, 57, 67, 50, 20, 100, 76, 50, 58, 68, 108, 135, 40, 70, 68, 108, 40, 70, 48, 83, 74, 49, 69, 45, 60, 90, 70, 70, 110, 115, 100, 75, 75, 85, 86, 65, 65, 75, 110, 85, 68, 60, 45, 70, 50, 50, 50, 50, 50, 50, 75, 80, 75, 100, 90, 91, 110, 150, 150, 120, 80, 100, 70, 100, 100, 120] - Atk_List = [49, 62, 82, 52, 64, 84, 48, 63, 83, 30, 20, 45, 35, 25, 80, 45, 60, 80, 56, 81, 60, 90, 60, 85, 55, 90, 75, 100, 47, 62, 82, 57, 72, 92, 45, 70, 41, 76, 45, 70, 45, 80, 50, 65, 80, 70, 95, 55, 65, 55, 80, 45, 70, 52, 82, 80, 105, 70, 110, 50, 65, 85, 20, 35, 50, 80, 100, 130, 75, 90, 105, 40, 70, 80, 95, 110, 85, 100, 65, 75, 35, 60, 65, 85, 110, 45, 70, 80, 105, 65, 95, 35, 50, 65, 45, 48, 73, 105, 130, 30, 50, 40, 95, 50, 80, 120, 105, 55, 65, 90, 85, 130, 5, 55, 95, 40, 65, 67, 92, 45, 75, 45, 110, 50, 83, 95, 125, 100, 10, 125, 85, 48, 55, 65, 65, 130, 60, 40, 60, 80, 115, 105, 110, 85, 90, 100, 64, 84, 134, 110, 100, 49, 62, 82, 52, 64, 84, 65, 80, 105, 46, 76, 30, 50, 20, 35, 60, 90, 90, 38, 58, 40, 25, 30, 20, 40, 50, 75, 40, 55, 75, 80, 20, 50, 100, 75, 35, 45, 55, 70, 30, 75, 65, 45, 85, 65, 65, 85, 75, 60, 72, 33, 80, 65, 90, 70, 75, 85, 80, 120, 95, 130, 10, 125, 95, 80, 130, 40, 50, 50, 100, 55, 65, 105, 55, 40, 80, 60, 90, 95, 60, 120, 80, 95, 20, 35, 95, 30, 63, 75, 80, 10, 85, 115, 75, 64, 84, 134, 90, 130, 100, 45, 65, 85, 60, 85, 120, 70, 85, 110, 55, 90, 30, 70, 45, 35, 70, 35, 50, 30, 50, 70, 40, 70, 100, 55, 85, 30, 50, 25, 35, 65, 30, 60, 40, 130, 60, 80, 160, 45, 90, 90, 51, 71, 91, 60, 120, 20, 45, 45, 65, 75, 85, 70, 90, 110, 40, 60, 45, 75, 50, 40, 73, 47, 60, 43, 73, 90, 120, 70, 90, 60, 100, 85, 25, 45, 60, 100, 70, 100, 85, 115, 40, 70, 115, 100, 55, 95, 48, 78, 80, 120, 40, 70, 41, 81, 95, 125, 15, 60, 70, 90, 75, 115, 40, 70, 68, 50, 130, 23, 50, 80, 40, 60, 80, 64, 104, 84, 90, 30, 75, 95, 135, 55, 75, 135, 100, 50, 75, 80, 90, 100, 150, 150, 100, 150, 180, 70, 95, 68, 89, 109, 58, 78, 104, 51, 66, 86, 55, 75, 120, 45, 85, 25, 85, 65, 85, 120, 30, 70, 125, 165, 42, 52, 29, 59, 79, 69, 94, 30, 80, 45, 65, 105, 35, 60, 48, 83, 100, 50, 80, 66, 76, 60, 125, 55, 82, 30, 63, 93, 24, 89, 80, 25, 5, 65, 92, 70, 90, 130, 85, 70, 110, 72, 112, 50, 90, 61, 106, 100, 49, 69, 20, 62, 92, 120, 70, 85, 140, 100, 123, 95, 50, 76, 110, 60, 95, 130, 80, 125, 55, 100, 80, 50, 65, 65, 65, 65, 65, 75, 105, 125, 120, 120, 90, 160, 100, 120, 70, 80, 100, 90, 100, 103, 120] - Def_List = [49, 63, 83, 43, 58, 78, 65, 80, 100, 35, 55, 50, 30, 50, 40, 40, 55, 75, 35, 60, 30, 65, 44, 69, 30, 55, 85, 110, 52, 67, 87, 40, 57, 77, 48, 73, 40, 75, 20, 45, 35, 70, 55, 70, 85, 55, 80, 50, 60, 25, 50, 35, 60, 48, 78, 35, 60, 45, 80, 40, 65, 95, 15, 30, 45, 50, 70, 80, 35, 50, 65, 35, 65, 100, 115, 130, 55, 70, 65, 110, 70, 95, 55, 45, 70, 55, 80, 50, 75, 100, 180, 30, 45, 60, 160, 45, 70, 90, 115, 50, 70, 80, 85, 95, 110, 53, 79, 75, 95, 120, 95, 120, 5, 115, 80, 70, 95, 60, 65, 55, 85, 65, 80, 35, 57, 57, 100, 95, 55, 79, 80, 48, 50, 60, 60, 60, 70, 100, 125, 90, 105, 65, 65, 100, 85, 90, 45, 65, 95, 90, 100, 65, 80, 100, 43, 58, 78, 64, 80, 100, 34, 64, 30, 50, 30, 50, 40, 70, 80, 38, 58, 15, 28, 15, 65, 85, 45, 70, 40, 55, 75, 85, 50, 80, 115, 75, 40, 50, 70, 55, 30, 55, 45, 45, 85, 60, 110, 42, 80, 60, 48, 58, 65, 90, 140, 70, 105, 200, 50, 75, 75, 100, 230, 75, 55, 50, 75, 40, 120, 40, 80, 85, 35, 75, 45, 70, 140, 30, 50, 95, 60, 120, 90, 62, 35, 35, 95, 15, 37, 37, 105, 10, 75, 85, 115, 50, 70, 110, 130, 90, 100, 35, 45, 65, 40, 60, 70, 50, 70, 90, 35, 70, 41, 61, 35, 55, 50, 55, 70, 30, 50, 70, 50, 40, 60, 30, 60, 30, 100, 25, 35, 65, 32, 62, 60, 80, 60, 80, 100, 90, 45, 45, 23, 43, 63, 30, 60, 40, 135, 45, 65, 75, 85, 100, 140, 180, 55, 75, 40, 60, 40, 50, 55, 55, 45, 53, 83, 20, 40, 35, 45, 40, 70, 140, 35, 65, 60, 45, 50, 80, 40, 60, 60, 90, 60, 60, 65, 85, 43, 73, 65, 85, 55, 105, 77, 97, 50, 100, 20, 79, 70, 70, 35, 65, 90, 130, 83, 70, 60, 48, 50, 80, 50, 70, 90, 85, 105, 105, 130, 55, 60, 100, 80, 80, 100, 130, 200, 100, 150, 90, 80, 90, 140, 90, 100, 50, 20, 160, 90, 64, 85, 105, 44, 52, 71, 53, 68, 88, 30, 50, 70, 40, 60, 41, 51, 34, 49, 79, 35, 55, 40, 60, 118, 168, 45, 85, 105, 95, 50, 42, 102, 70, 35, 55, 45, 70, 48, 68, 66, 34, 44, 44, 84, 60, 52, 42, 64, 50, 47, 67, 86, 116, 95, 45, 5, 45, 108, 45, 65, 95, 40, 40, 70, 78, 118, 90, 110, 40, 65, 72, 56, 76, 50, 50, 75, 65, 115, 95, 130, 125, 67, 67, 95, 86, 130, 110, 125, 80, 70, 65, 145, 135, 70, 77, 107, 107, 107, 107, 107, 130, 105, 70, 120, 100, 106, 110, 120, 100, 120, 80, 100, 90, 100, 75, 120] - Spa_List = [65, 80, 100, 60, 80, 109, 50, 65, 85, 20, 25, 80, 20, 25, 45, 35, 50, 70, 25, 50, 31, 61, 40, 65, 50, 90, 20, 45, 40, 55, 75, 40, 55, 85, 60, 85, 50, 81, 45, 75, 30, 65, 75, 85, 100, 45, 60, 40, 90, 35, 50, 40, 65, 65, 95, 35, 60, 70, 100, 40, 50, 70, 105, 120, 135, 35, 50, 65, 70, 85, 100, 50, 80, 30, 45, 55, 65, 80, 40, 100, 95, 120, 58, 35, 60, 45, 70, 40, 65, 45, 85, 100, 115, 130, 30, 43, 73, 25, 50, 55, 80, 60, 125, 40, 50, 35, 35, 60, 60, 85, 30, 45, 35, 100, 40, 70, 95, 35, 65, 70, 100, 100, 55, 115, 95, 100, 55, 40, 15, 60, 85, 48, 45, 110, 110, 95, 85, 90, 115, 55, 65, 60, 65, 95, 125, 125, 50, 70, 100, 154, 100, 49, 63, 83, 60, 80, 109, 44, 59, 79, 35, 45, 36, 76, 40, 55, 40, 60, 70, 56, 76, 35, 45, 40, 40, 80, 70, 95, 65, 80, 115, 90, 20, 50, 30, 90, 35, 45, 55, 40, 30, 105, 75, 25, 65, 130, 60, 85, 100, 85, 72, 33, 90, 35, 60, 65, 35, 55, 40, 60, 55, 55, 10, 40, 35, 50, 75, 70, 80, 30, 60, 65, 65, 105, 65, 80, 40, 80, 110, 95, 40, 60, 105, 85, 20, 35, 35, 85, 65, 70, 40, 75, 115, 90, 90, 45, 65, 95, 90, 110, 100, 65, 85, 105, 70, 85, 110, 50, 60, 85, 30, 60, 30, 50, 20, 25, 90, 25, 50, 40, 60, 90, 30, 60, 90, 30, 50, 55, 85, 45, 65, 125, 50, 80, 40, 60, 35, 55, 95, 30, 50, 30, 51, 71, 91, 20, 40, 20, 45, 35, 55, 65, 55, 40, 50, 60, 40, 60, 65, 105, 85, 75, 47, 73, 100, 43, 73, 65, 95, 70, 90, 65, 105, 85, 70, 90, 60, 45, 50, 80, 85, 115, 40, 70, 60, 100, 95, 55, 46, 76, 50, 90, 40, 70, 61, 81, 40, 70, 10, 100, 70, 60, 63, 83, 30, 60, 72, 95, 75, 23, 50, 80, 55, 75, 95, 74, 94, 114, 45, 40, 40, 60, 110, 35, 55, 95, 50, 100, 75, 110, 130, 150, 100, 150, 100, 150, 180, 70, 95, 45, 55, 75, 58, 78, 104, 61, 81, 111, 30, 40, 50, 35, 55, 25, 55, 40, 60, 95, 50, 125, 30, 65, 42, 47, 29, 79, 59, 69, 94, 30, 80, 45, 60, 85, 62, 87, 57, 92, 60, 60, 90, 44, 54, 105, 105, 42, 64, 65, 41, 71, 24, 79, 10, 70, 15, 92, 92, 40, 50, 80, 40, 35, 115, 38, 68, 30, 60, 61, 86, 90, 49, 69, 60, 62, 92, 45, 130, 80, 55, 110, 95, 125, 120, 116, 60, 130, 45, 70, 135, 65, 75, 65, 80, 95, 105, 105, 105, 105, 105, 75, 105, 125, 150, 150, 130, 80, 100, 120, 75, 80, 100, 135, 100, 120, 120] - Spd_List = [65, 80, 100, 50, 65, 85, 64, 80, 105, 20, 25, 80, 20, 25, 80, 35, 50, 70, 35, 70, 31, 61, 54, 79, 40, 80, 30, 55, 40, 55, 85, 40, 55, 75, 65, 90, 65, 100, 25, 50, 40, 75, 65, 75, 90, 55, 80, 55, 75, 45, 70, 40, 65, 50, 80, 45, 70, 50, 80, 40, 50, 90, 55, 70, 85, 35, 60, 85, 30, 45, 60, 100, 120, 30, 45, 65, 65, 80, 40, 80, 55, 70, 62, 35, 60, 70, 95, 50, 100, 25, 45, 35, 55, 75, 45, 90, 115, 25, 50, 55, 80, 45, 65, 50, 80, 110, 110, 75, 45, 70, 30, 45, 105, 40, 80, 25, 45, 50, 80, 55, 85, 120, 80, 95, 85, 85, 70, 70, 20, 100, 95, 48, 65, 95, 95, 110, 75, 55, 70, 45, 70, 75, 110, 125, 90, 85, 50, 70, 100, 90, 100, 65, 80, 100, 50, 65, 85, 48, 63, 83, 45, 55, 56, 96, 80, 110, 40, 60, 80, 56, 76, 35, 55, 20, 65, 105, 45, 70, 45, 60, 90, 100, 50, 80, 65, 100, 55, 65, 85, 55, 30, 85, 45, 25, 65, 95, 130, 42, 110, 85, 48, 58, 65, 35, 60, 65, 65, 65, 40, 60, 55, 80, 230, 95, 75, 50, 75, 40, 80, 30, 60, 85, 35, 75, 45, 140, 70, 50, 80, 95, 40, 60, 95, 65, 45, 35, 110, 65, 55, 55, 70, 135, 100, 75, 115, 50, 70, 100, 154, 154, 100, 55, 65, 85, 50, 60, 70, 50, 70, 90, 30, 60, 41, 61, 30, 25, 50, 25, 90, 50, 70, 100, 30, 40, 60, 30, 50, 30, 70, 35, 55, 115, 52, 82, 60, 60, 35, 55, 65, 30, 50, 30, 23, 43, 63, 30, 60, 40, 90, 35, 55, 65, 55, 40, 50, 60, 55, 75, 40, 60, 75, 85, 75, 75, 80, 53, 83, 20, 40, 35, 45, 45, 75, 70, 80, 110, 60, 45, 50, 80, 40, 60, 75, 105, 60, 60, 85, 65, 41, 71, 35, 55, 70, 120, 87, 107, 50, 80, 55, 125, 70, 120, 33, 63, 90, 130, 87, 80, 60, 48, 50, 80, 50, 70, 90, 55, 75, 75, 65, 65, 30, 50, 80, 60, 80, 90, 100, 200, 150, 130, 110, 140, 90, 90, 100, 50, 20, 160, 90, 55, 65, 85, 44, 52, 71, 56, 76, 101, 30, 40, 50, 40, 60, 41, 51, 34, 49, 79, 70, 105, 30, 50, 88, 138, 45, 105, 85, 95, 50, 42, 102, 90, 30, 50, 53, 78, 62, 82, 66, 44, 54, 56, 96, 105, 52, 37, 59, 50, 41, 61, 86, 116, 45, 90, 65, 42, 108, 45, 55, 85, 85, 40, 70, 42, 72, 55, 75, 40, 65, 72, 61, 86, 120, 60, 85, 85, 90, 95, 55, 50, 85, 95, 115, 56, 65, 95, 75, 60, 75, 115, 150, 135, 70, 77, 107, 107, 107, 107, 107, 130, 105, 70, 100, 120, 106, 110, 120, 100, 130, 80, 100, 90, 100, 75, 120] - Spe_List = [45, 60, 80, 65, 80, 100, 43, 58, 78, 45, 30, 70, 50, 35, 75, 56, 71, 91, 72, 97, 70, 100, 55, 80, 90, 100, 40, 65, 41, 56, 76, 50, 65, 85, 35, 60, 65, 100, 20, 45, 55, 90, 30, 40, 50, 25, 30, 45, 90, 95, 120, 90, 115, 55, 85, 70, 95, 60, 95, 90, 90, 70, 90, 105, 120, 35, 45, 55, 40, 55, 70, 70, 100, 20, 35, 45, 90, 105, 15, 30, 45, 70, 60, 75, 100, 45, 70, 25, 50, 40, 70, 80, 95, 110, 70, 42, 67, 50, 75, 100, 140, 40, 55, 35, 45, 87, 76, 30, 35, 60, 25, 40, 50, 60, 90, 60, 85, 63, 68, 85, 115, 90, 105, 95, 105, 93, 85, 110, 80, 81, 60, 48, 55, 65, 130, 65, 40, 35, 55, 55, 80, 130, 30, 85, 100, 90, 50, 70, 80, 130, 100, 45, 60, 80, 65, 80, 100, 43, 58, 78, 20, 90, 50, 70, 55, 85, 30, 40, 130, 67, 67, 60, 15, 15, 20, 40, 70, 95, 35, 45, 55, 50, 40, 50, 30, 70, 50, 80, 110, 85, 30, 30, 95, 15, 35, 110, 65, 91, 30, 85, 48, 33, 85, 15, 40, 45, 85, 30, 30, 45, 85, 65, 5, 85, 115, 40, 55, 20, 30, 50, 50, 35, 65, 45, 75, 70, 70, 65, 95, 85, 40, 50, 60, 85, 75, 35, 70, 65, 95, 83, 100, 55, 115, 100, 85, 41, 51, 61, 110, 90, 100, 70, 95, 120, 45, 55, 80, 40, 50, 60, 35, 70, 60, 100, 20, 15, 65, 15, 65, 30, 50, 70, 30, 60, 80, 85, 125, 85, 65, 40, 50, 80, 65, 60, 35, 70, 30, 90, 100, 40, 160, 40, 28, 48, 68, 25, 50, 20, 30, 50, 70, 50, 50, 30, 40, 50, 60, 80, 65, 105, 95, 95, 85, 85, 65, 40, 55, 65, 95, 60, 60, 35, 40, 20, 60, 80, 60, 10, 70, 100, 35, 55, 50, 80, 90, 65, 70, 70, 60, 60, 35, 55, 55, 75, 23, 43, 75, 45, 80, 81, 70, 40, 45, 65, 25, 25, 51, 65, 75, 23, 50, 80, 25, 45, 65, 32, 52, 52, 55, 97, 50, 50, 100, 30, 50, 70, 50, 50, 50, 110, 110, 90, 90, 95, 100, 150, 150, 90, 180, 31, 36, 56, 61, 81, 108, 40, 50, 60, 60, 80, 100, 31, 71, 25, 65, 45, 60, 70, 55, 90, 58, 58, 30, 30, 36, 36, 36, 36, 66, 70, 40, 95, 85, 115, 35, 85, 34, 39, 115, 70, 80, 85, 105, 105, 71, 85, 112, 45, 74, 84, 23, 33, 10, 60, 30, 91, 35, 42, 82, 102, 5, 60, 90, 32, 47, 65, 95, 50, 85, 46, 66, 91, 50, 40, 60, 125, 60, 50, 40, 50, 95, 83, 80, 95, 95, 65, 95, 80, 90, 80, 40, 45, 110, 91, 86, 86, 86, 86, 86, 95, 80, 115, 90, 100, 77, 100, 90, 90, 85, 80, 100, 125, 100, 127, 120] - for i in range(len(Species_List)): - if Species == Species_List[i]: - Base = [HP_List[i], Atk_List[i], Def_List[i], Spa_List[i], Spd_List[i], Spe_List[i]] - Nature_List = ["Hardy", "Lonely", "Brave", "Adamant", "Naughty", "Bold", "Docile", "Relaxed", "Impish", "Lax", "Timid", "Hasty", "Serious", "Jolly", "Naive", "Modest", "Mild", "Quiet", "Bashful", "Rash", "Calm", "Gentle", "Sassy", "Careful", "Quirky"] - Nature_Atk = [0, 11, 11, 11, 11, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0] - Nature_Def = [0, 9, 0, 0, 0, 11, 0, 11, 11, 11, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0] - Nature_Spa = [0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 11, 11, 11, 0, 11, 0, 0, 0, 9, 0] - Nature_Spd = [0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 11, 11, 11, 11, 0] - Nature_Spe = [0, 0, 9, 0, 0, 0, 0, 9, 0, 0, 11, 11, 0, 11, 11, 0, 0, 9, 0, 0, 0, 0, 9, 0, 0] - for i in range(len(Nature_List)): - if Nature == Nature_List[i]: - Nature_S = [Nature_Atk[i],Nature_Def[i],Nature_Spa[i],Nature_Spd[i],Nature_Spe[i]] - for i in range(len(Nature_List)): - if Nature == Nature_List[i]: - Nature_S = [Nature_Atk[i],Nature_Def[i],Nature_Spa[i],Nature_Spd[i],Nature_Spe[i]] - V_Max = [] - V_Min = [] +print( + "This tool is only accurate for gens 3-5. base stats changed in gen 6+, as did the iv judge." +) + + +def stats_to_ivs(species, level, nature, stats): + file = open("pokemon_stats_reference.txt","r") + file_text = file.read() + file.close() + file_text = file_text.split("\n") + base = [] + for i in file_text: + temp = i.split() + if temp[0].strip() == species: + for j in range(1,7): + base.append(int(temp[j])) + file_1 = open("pokemon_nature_reference.txt","r") + file_1_text = file_1.read() + file_1.close() + file_1_text = file_1_text.split("\n") + nature_s = [] + for i in file_1_text: + temp = i.split() + if temp[0].strip() == nature: + for j in range(1,6): + nature_s.append(int(temp[j])) + print(base) + print(nature_s) + v_max = [] + v_min = [] mini = 94 maxi = 0 for v in range(95): - if Stats[0] == ((((2*Base[0] + v) * Level) // 100) + Level + 10): - mini = min(mini,v) - maxi = max(maxi,v) - V_Max.append(maxi) - V_Min.append(mini) - - for s in range(1,6): + if stats[0] == ((((2 * base[0] + v) * level) // 100) + level + 10): + mini = min(mini, v) + maxi = max(maxi, v) + v_max.append(maxi) + v_min.append(mini) + for s in range(1, 6): mini = 94 maxi = 0 for v in range(95): - if Nature_S[s-1] == 0: - if Stats[s] == ((((2*Base[s] + v) * Level) // 100) + 5): - mini = min(mini,v) - maxi = max(maxi,v) + if nature_s[s - 1] == 0: + if stats[s] == ((((2 * base[s] + v) * level) // 100) + 5): + mini = min(mini, v) + maxi = max(maxi, v) else: - if Stats[s] == ((((((2*Base[s] + v) * Level) // 100) + 5) * Nature_S[s-1]) // 10): - mini = min(mini,v) - maxi = max(maxi,v) - V_Max.append(maxi) - V_Min.append(mini) - print(V_Max,V_Min) - Min_IVs = [0,0,0,0,0,0] - Max_IVs = [31,31,31,31,31,31] - Best_IVs = [0,0,0,0,0,0] - Characteristic = input("Characteristic, leave blank if unknown: ") - Characteristic = Characteristic.lower() - Know_Char = 0 - Char_Stat = 7 - if Characteristic != "": - Know_Char = 1 - Char_txts = ["loves to eat", "often dozes off", "often scatters things", "scatters things often", "likes to relax", "proud of its power", "likes to thrash about", "a little quick tempered", "likes to fight", "quick tempered", "sturdy body", "capable of taking hits", "highly persistent", "good endurance", "good perseverance", "highly curious", "mischievous", "thoroughly cunning", "often lost in thought", "very finicky", "strong willed", "somewhat vain", "strongly defiant", "hates to lose", "somewhat stubborn", "likes to run", "alert to sounds", "impetuous and silly", "somewhat of a clown", "quick to flee", "takes plenty of siestas", "nods off a lot"] - Char_Stats = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 0, 0] - Char_Mod = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 2, 3] - for c in range(len(Char_txts)): - if Characteristic == Char_txts[c]: - Min_IVs[Char_Stats[c]] = Char_Mod[c] - Best_IVs[Char_Stats[c]] = 1 - Char_Stat = Char_Stats[c] + if stats[s] == ( + (((((2 * base[s] + v) * level) // 100) + 5) * nature_s[s - 1]) // 10 + ): + mini = min(mini, v) + maxi = max(maxi, v) + v_max.append(maxi) + v_min.append(mini) + print(v_max, v_min) + min_ivs = [0, 0, 0, 0, 0, 0] + max_ivs = [31, 31, 31, 31, 31, 31] + best_ivs = [0, 0, 0, 0, 0, 0] + characteristic = input("characteristic, leave blank if unknown: ") + characteristic = characteristic.lower() + know_char = 0 + char_stat = 7 + if characteristic != "": + know_char = 1 + char_txts = [ + "loves to eat", + "often dozes off", + "often scatters things", + "scatters things often", + "likes to relax", + "proud of its power", + "likes to thrash about", + "a little quick tempered", + "likes to fight", + "quick tempered", + "sturdy body", + "capable of taking hits", + "highly persistent", + "good endurance", + "good perseverance", + "highly curious", + "mischievous", + "thoroughly cunning", + "often lost in thought", + "very finicky", + "strong willed", + "somewhat vain", + "strongly defiant", + "hates to lose", + "somewhat stubborn", + "likes to run", + "alert to sounds", + "impetuous and silly", + "somewhat of a clown", + "quick to flee", + "takes plenty of siestas", + "nods off a lot", + ] + char_stats = [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 5, + 0, + 0, + ] + char_Mod = [ + 0, + 1, + 2, + 3, + 4, + 0, + 1, + 2, + 3, + 4, + 0, + 1, + 2, + 3, + 4, + 0, + 1, + 2, + 3, + 4, + 0, + 1, + 2, + 3, + 4, + 0, + 1, + 2, + 3, + 4, + 2, + 3, + ] + for c in range(len(char_txts)): + if characteristic == char_txts[c]: + min_ivs[char_stats[c]] = char_Mod[c] + best_ivs[char_stats[c]] = 1 + char_stat = char_stats[c] for m in range(6): - Max_IVs[m] = max((Char_Mod[c] + 30) % 32, (Char_Mod[c] + 25) % 32) - print("MAX", Max_IVs,"MIN",Min_IVs) - #IV Judge - Know_Judge = 0 - if int(input("Do you have access to the IV Judge? 1 = Yes, 0 = No: ")) == 1: - Know_Judge = 1 - BS_String = input("When talking to the IV judge, Which are your best IVs? Submit your answer in a format like this: 0/1/0/1/0/1, where 1 = Yes, 0 = No for the IVs in the order HP/ATK/DEF/SPA/SPD/SPE: ") - Best_Stats = BS_String.split("/") + max_ivs[m] = max((char_Mod[c] + 30) % 32, (char_Mod[c] + 25) % 32) + print("MAX", max_ivs, "MIN", min_ivs) + # iv judge + know_judge = 0 + if int(input("Do you have access to the iv judge? 1 = Yes, 0 = No: ")) == 1: + know_judge = 1 + bs_string = input( + "When talking to the iv judge, Which are your best ivs? Submit your answer in a format like this: 0/1/0/1/0/1, where 1 = Yes, 0 = No for the ivs in the order hp/ATK/DEF/SPA/SPD/SPE: " + ) + best_stats = bs_string.split("/") for i in range(6): - Best_Stats[i] = int(Best_Stats[i]) - Peak_IV = input("How good does the IV Judge say your best IV is? (Using Bulbapedia Stats Judge phrases): ") - Peak_IV = Peak_IV.lower() - Peak_IVs_txt = ["relatively good", "rather decent", "quite impressive", "very good", "good", "outstanding", "fantastic", "flawless", "can't be better", "cant be better", "can't be beat", "cant be beat"] - Peak_IVs_min = [0, 0, 16, 16, 16, 26, 26, 31, 31, 31, 31, 31] - Peak_IVs_max = [15, 15, 25, 25, 25, 30, 30, 31, 31, 31, 31, 31] - for p in range(len(Peak_IVs_txt)): - if Peak_IV == Peak_IVs_txt[p]: + best_stats[i] = int(best_stats[i]) + peak_iv = input( + "How good does the iv judge say your best iv is? (Using Bulbapedia stats judge phrases): " + ) + peak_iv = peak_iv.lower() + peak_ivs_txt = [ + "relatively good", + "rather decent", + "quite impressive", + "very good", + "good", + "outstanding", + "fantastic", + "flawless", + "can't be better", + "cant be better", + "can't be beat", + "cant be beat", + ] + peak_ivs_min = [0, 0, 16, 16, 16, 26, 26, 31, 31, 31, 31, 31] + peak_ivs_max = [15, 15, 25, 25, 25, 30, 30, 31, 31, 31, 31, 31] + for p in range(len(peak_ivs_txt)): + if peak_iv == peak_ivs_txt[p]: for b in range(6): - if Best_Stats[b] == 1: - Min_IVs[b] = Peak_IVs_min[p] + (((Min_IVs[b] % 5) - (Peak_IVs_min[p] % 5)) % 5)*(b == Char_Stat) - Max_IVs[b] = Peak_IVs_max[p] - (((Peak_IVs_max[p] % 5) - (Max_IVs[b] % 5)) % 5)*(Know_Char) + if best_stats[b] == 1: + min_ivs[b] = peak_ivs_min[p] + ( + ((min_ivs[b] % 5) - (peak_ivs_min[p] % 5)) % 5 + ) * (b == char_stat) + max_ivs[b] = peak_ivs_max[p] - ( + ((peak_ivs_max[p] % 5) - (max_ivs[b] % 5)) % 5 + ) * (know_char) else: - Max_IVs[b] = Peak_IVs_max[p] - (((Peak_IVs_max[p] % 5) - (Max_IVs[b] % 5)) % 5)*(Know_Char) - (1-Best_Stats[b]) - print("MAX", Max_IVs,"MIN",Min_IVs) - Sum_IV = input("How good does the IV Judge say your IV total is? (Using Bulbapedia Stats Judge phrases): ") - Sum_IV = Sum_IV.lower() - Sum_IVs_txt = ["average", "rather decent", "better-than-average", "better than average", "above-average", "above average", "quite impressive", "relatively superior", "outstanding"] - Sum_IVs_min = [0, 0, 91, 91, 91, 91, 121, 121, 151] - Sum_IVs_max = [90, 90, 120, 120, 120, 120, 150, 150, 186] - for s in range(len(Sum_IVs_txt)): - if Sum_IV == Sum_IVs_txt[s]: - Sum_IV_Min = Sum_IVs_min[s] - Sum_IV_Max = Sum_IVs_max[s] -# V_Min / Max to IVs - print("MAX", Max_IVs,"MIN",Min_IVs) + max_ivs[b] = ( + peak_ivs_max[p] + - (((peak_ivs_max[p] % 5) - (max_ivs[b] % 5)) % 5) + * (know_char) + - (1 - best_stats[b]) + ) + print("MAX", max_ivs, "MIN", min_ivs) + sum_iv = input( + "How good does the iv judge say your iv total is? (Using Bulbapedia stats judge phrases): " + ) + sum_iv = sum_iv.lower() + sum_ivs_txt = [ + "average", + "rather decent", + "better-than-average", + "better than average", + "above-average", + "above average", + "quite impressive", + "relatively superior", + "outstanding", + ] + sum_ivs_min = [0, 0, 91, 91, 91, 91, 121, 121, 151] + sum_ivs_max = [90, 90, 120, 120, 120, 120, 150, 150, 186] + for s in range(len(sum_ivs_txt)): + if sum_iv == sum_ivs_txt[s]: + sum_iv_min = sum_ivs_min[s] + sum_iv_max = sum_ivs_max[s] + # v_min / max to ivs + print("MAX", max_ivs, "MIN", min_ivs) for o in range(6): - if V_Min[o] > 63: - Min_IVs[o] = max(V_Min[o] - 63, Min_IVs[o], 0) - Max_IVs[o] = min(Max_IVs[o], 31) + if v_min[o] > 63: + min_ivs[o] = max(v_min[o] - 63, min_ivs[o], 0) + max_ivs[o] = min(max_ivs[o], 31) else: - Min_IVs[o] = max(Min_IVs[o], 0) - Max_IVs[o] = min(V_Max[o],Max_IVs[o], 31) - print("MAX", Max_IVs,"MIN",Min_IVs) - Know_Hidden_Power = 0 + min_ivs[o] = max(min_ivs[o], 0) + max_ivs[o] = min(v_max[o], max_ivs[o], 31) + print("MAX", max_ivs, "MIN", min_ivs) + know_hidden_power = 0 if int(input("able to find hidden power type? 1 = Yes, 0 = No: ")) == 1: - Know_Hidden_Power = 1 - Hidden_Power_Type = input("Hidden Power Type: ") - Hidden_Power_Type = Hidden_Power_Type.lower() - Hidden_Power_Types_txt = ["fighting", "flying", "poison", "ground", "rock", "bug", "ghost", "steel", "fire", "water", "grass", "electric", "psychic", "ice", "dragon", "dark"] - Hidden_Power_all_bitfields = [] - for h in range(len(Hidden_Power_Types_txt)): - if Hidden_Power_Type == Hidden_Power_Types_txt[h]: + know_hidden_power = 1 + hidden_power_type = input("hidden power type: ") + hidden_power_type = hidden_power_type.lower() + hidden_power_types_txt = [ + "fighting", + "flying", + "poison", + "ground", + "rock", + "bug", + "ghost", + "steel", + "fire", + "water", + "grass", + "electric", + "psychic", + "ice", + "dragon", + "dark", + ] + hidden_power_all_bitfields = [] + for h in range(len(hidden_power_types_txt)): + if hidden_power_type == hidden_power_types_txt[h]: for H in range(64): if H * 5 // 21 == h: - Hidden_Power_all_bitfields.append(H) - Hidden_Power_XO = [] - Hidden_Power_bitfields = [] - Wack_IV_order = [0, 1, 2, 5, 3, 4] + hidden_power_all_bitfields.append(H) + hidden_power_xo = [] + hidden_power_bitfields = [] + wack_iv_order = [0, 1, 2, 5, 3, 4] for i in range(6): - if Min_IVs[Wack_IV_order[i]] == Max_IVs[Wack_IV_order[i]]: - for j in range(len(Hidden_Power_all_bitfields)): - if (Min_IVs[Wack_IV_order[i]] & 1) == ((Hidden_Power_all_bitfields[j] >> i) & 1): - Hidden_Power_bitfields.append(Hidden_Power_all_bitfields[j]) + if min_ivs[wack_iv_order[i]] == max_ivs[wack_iv_order[i]]: + for j in range(len(hidden_power_all_bitfields)): + if (min_ivs[wack_iv_order[i]] & 1) == ( + (hidden_power_all_bitfields[j] >> i) & 1 + ): + hidden_power_bitfields.append(hidden_power_all_bitfields[j]) for y in range(6): - Unique = [] - for f in range(len(Hidden_Power_bitfields)): - Unique.append((Hidden_Power_bitfields[f] >> y) & 1) - Unique1 = set(Unique) - if len(Unique1) == 1: - Hidden_Power_XO.append(Unique[0]) + unique = [] + for f in range(len(hidden_power_bitfields)): + unique.append((hidden_power_bitfields[f] >> y) & 1) + unique_1 = set(unique) + if len(unique_1) == 1: + hidden_power_xo.append(unique[0]) else: - Hidden_Power_XO.append(2) - # HP, ATK, DEF, SPA, SPE, SPD + hidden_power_xo.append(2) + # hp, ATK, DEF, SPA, SPE, SPD for o in range(6): - if (Min_IVs[Wack_IV_order[o]] & 1 != ((Hidden_Power_XO[o]) & 1)) and (Hidden_Power_XO[o] < 2): - Min_IVs[Wack_IV_order[o]] = (Min_IVs[Wack_IV_order[o]] + 1 + 4*(Best_IVs[Wack_IV_order[o]] or Best_Stats[Wack_IV_order[o]])) - if (Max_IVs[Wack_IV_order[o]] & 1 != ((Hidden_Power_XO[o]) & 1)) and (Hidden_Power_XO[o] < 2): - Max_IVs[Wack_IV_order[o]] = (Max_IVs[Wack_IV_order[o]] - 1 - 4*(Best_IVs[Wack_IV_order[o]] or Best_Stats[Wack_IV_order[o]])) - print(Min_IVs, Max_IVs) - Wack_HP_Order = [0,1,2,4,5,3] - if Know_Judge: + if (min_ivs[wack_iv_order[o]] & 1 != ((hidden_power_xo[o]) & 1)) and ( + hidden_power_xo[o] < 2 + ): + min_ivs[wack_iv_order[o]] = ( + min_ivs[wack_iv_order[o]] + + 1 + + 4 * (best_ivs[wack_iv_order[o]] or best_stats[wack_iv_order[o]]) + ) + if (max_ivs[wack_iv_order[o]] & 1 != ((hidden_power_xo[o]) & 1)) and ( + hidden_power_xo[o] < 2 + ): + max_ivs[wack_iv_order[o]] = ( + max_ivs[wack_iv_order[o]] + - 1 + - 4 * (best_ivs[wack_iv_order[o]] or best_stats[wack_iv_order[o]]) + ) + wack_hp_order = [0, 1, 2, 4, 5, 3] + if know_judge: for i in range(6): - # Check if a Min_IV and 5 Max_IVs is above the Minimum IV total. - if sum(Max_IVs[0:i]+Max_IVs[i+1:6],Min_IVs[i]) < Sum_IV_Min: + # Check if a min_iv and 5 max_ivs is above the minimum iv total. + if sum(max_ivs[0:i] + max_ivs[i + 1 : 6], min_ivs[i]) < sum_iv_min: # If not, raise that minimum. - Temp = Sum_IV_Min - sum(Max_IVs[0:i]+Max_IVs[i+1:6]) - if i == Char_Stat: - if Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Min_IVs[i] = Temp + (((Min_IVs[i] % 10) - (Temp % 10)) % 10) + temp = sum_iv_min - sum(max_ivs[0:i] + max_ivs[i + 1 : 6]) + if i == char_stat: + if know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + min_ivs[i] = temp + (((min_ivs[i] % 10) - (temp % 10)) % 10) else: - Min_IVs[i] = Temp + (((Min_IVs[i] % 5) - (Temp % 5)) % 5) + min_ivs[i] = temp + (((min_ivs[i] % 5) - (temp % 5)) % 5) else: - Min_IVs[i] = Temp + (((Min_IVs[i] % 5) - (Temp % 5)) % 5) - elif Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Min_IVs[i] = Temp + (((Min_IVs[i] % 2) - (Temp % 2)) % 2) + min_ivs[i] = temp + (((min_ivs[i] % 5) - (temp % 5)) % 5) + elif know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + min_ivs[i] = temp + (((min_ivs[i] % 2) - (temp % 2)) % 2) else: - Min_IVs[i] = Temp + min_ivs[i] = temp else: - Min_IVs[i] = Temp - # Check if a Max_IV and 5 Min_IVs is below the Maximum IV total. + min_ivs[i] = temp + # Check if a max_iv and 5 min_ivs is below the maximum iv total. for i in range(6): - if sum(Min_IVs[0:i]+Min_IVs[i+1:6],Max_IVs[i]) > Sum_IV_Max: + if sum(min_ivs[0:i] + min_ivs[i + 1 : 6], max_ivs[i]) > sum_iv_max: # If not, lower that maximum. - Temp = Sum_IV_Max - sum(Min_IVs[0:i]+Min_IVs[i+1:6]) - if i == Char_Stat: - if Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Max_IVs[i] = Temp - (((Max_IVs[i] % 10) - (Temp % 10) % 10)) + temp = sum_iv_max - sum(min_ivs[0:i] + min_ivs[i + 1 : 6]) + if i == char_stat: + if know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + max_ivs[i] = temp - (((max_ivs[i] % 10) - (temp % 10) % 10)) else: - Max_IVs[i] = Temp - (((Max_IVs[i] % 5) - (Temp % 5) % 5)) + max_ivs[i] = temp - (((max_ivs[i] % 5) - (temp % 5) % 5)) else: - Max_IVs[i] = Temp - (((Max_IVs[i] % 5) - (Temp % 5) % 5)) - elif Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Temp = Temp - ((Max_IVs[i] % 2) - (Temp % 2) % 2) - Max_IVs[i] = Max_IVs[i] - (Max_IVs[Char_Stat] < Temp) + max_ivs[i] = temp - (((max_ivs[i] % 5) - (temp % 5) % 5)) + elif know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + temp = temp - ((max_ivs[i] % 2) - (temp % 2) % 2) + max_ivs[i] = max_ivs[i] - (max_ivs[char_stat] < temp) else: - Max_IVs[i] = Temp + max_ivs[i] = temp else: - Max_IVs[i] = Temp - print(Min_IVs, Max_IVs) + max_ivs[i] = temp + print(min_ivs, max_ivs) try: - Effort_Ribbon = int(input("Qualifies for Effort Ribbon? Yes = 1, No = 0, leave blank if unknown: ")) + effort_ribbon = int( + input( + "Qualifies for effort ribbon? Yes = 1, No = 0, leave blank if unknown: " + ) + ) except: - Effort_Ribbon = "" - Min_EVs = [] - Max_EVs = [] - - # Convert IVs to EVs using V_Max and V_Min. - for i in range(6): - Min_EVs.append(max((V_Min[i] - Max_IVs[i])*4, 0)) - Max_EVs.append(min(max(V_Max[i] - Min_IVs[i],0)*4 + 3, 255)) - print(Max_EVs,Min_EVs) - # How much info can we squeeze out of the EVs using Vitamins and the Effort Ribbon? Too much for me to keep straight lmao - print("\nThis next step will require you to buy/use up to 10 vitamins at a time, but you will be able to reset to before you purchased them afterward.") - # If the player cannot buy more than n vitamins, we want to know that before we start calcs. This assumes the player is able to buy vitamins, which might be a bad assumption. - Afford_Vitamin = int(input("How many of a single type of vitamin can you afford, if you sell your items? Please check, and input a number higher than 10 if possible: ")) - # Vitamins fail after their individual EV is at or above 100. They will also fail if the pokemon has Max EVs. - print("For the next step, attempt to feed as many of an EV-boosting of vitamin as you can to your pokemon, and take note of how many it took for the mon to refuse more." + (Effort_Ribbon==0)*" Then, check the effort ribbon again." + " Once you do, reset the game and attempt for the other 5 vitamin types.") - Vitamin_String = input("With the EVs it currently has, how many of each type of vitamin will your pokemon accept (resetting in between types)? \nSubmit your answer if a format like this, \"1/2/3/4/5/6\" \nFor the vitamins HP-Up/Protein/Iron/Calcium/Zinc/Carbos: ") - Vitamins = Vitamin_String.split("/") + effort_ribbon = "" + min_evs = [] + max_evs = [] + + # Convert ivs to evs using v_max and v_min. for i in range(6): - Vitamins[i] = int(Vitamins[i]) - if (Effort_Ribbon==0): - # Effort_Ribbon NOT obtained, therefore Effort Judge available. - # Use Effort_Ribbon to determine if the individual cap triggered, or if the pokemon hit 510 total EVs. - Effort_Vitamin_String = input("Which of the vitamins caused your pokemon to receive the Effort Ribbon?\nSubmit your answer in a format like this, \"0/1/0/1/0/1\", where 1 = Yes, 0 = No. \nFor the vitamins HP-Up/Protein/Iron/Calcium/Zinc/Carbos: ") - Effort_Vitamins = Effort_Vitamin_String.split("/") + min_evs.append(max((v_min[i] - max_ivs[i]) * 4, 0)) + max_evs.append(min(max(v_max[i] - min_ivs[i], 0) * 4 + 3, 255)) + print(max_evs, min_evs) + # How much info can we squeeze out of the evs using vitamins and the effort ribbon? Too much for me to keep straight lmao + if effort_ribbon != 1: + print( + "\nThis next step will require you to buy/use up to 10 vitamins at a time, but you will be able to reset to before you purchased them afterward." + ) + # If the player cannot buy more than n vitamins, we want to know that before we start calcs. This assumes the player is able to buy vitamins, which might be a bad assumption. + afford_vitamin = int( + input( + "How many of a single type of vitamin can you afford, if you sell your items? Please check, and input a number higher than 10 if possible: " + ) + ) + # vitamins fail after their individual ev is at or above 100. They will also fail if the pokemon has max evs. + print( + "For the next step, attempt to feed as many of an ev-boosting of vitamin as you can to your pokemon, and take note of how many it took for the mon to refuse more." + + (effort_ribbon == 0) * " Then, check the effort ribbon again." + + " Once you do, reset the game and attempt for the other 5 vitamin types." + ) + vitamin_string = input( + 'With the evs it currently has, how many of each type of vitamin will your pokemon accept (resetting in between types)? \nSubmit your answer if a format like this, "1/2/3/4/5/6" \nFor the vitamins hp-Up/Protein/Iron/Calcium/Zinc/Carbos: ' + ) + vitamins = vitamin_string.split("/") for i in range(6): - Effort_Vitamins[i] = int(Effort_Vitamins[i]) - print(Effort_Vitamins) - if Effort_Vitamin_String != "0/0/0/0/0/0": - # No need for Cross Vitamins if we already hit the global EV cap. + vitamins[i] = int(vitamins[i]) + if effort_ribbon == 0: + # effort_ribbon NOT obtained, therefore effort judge available. + # Use effort_ribbon to determine if the individual cap triggered, or if the pokemon hit 510 total evs. + effort_vitamin_string = input( + 'Which of the vitamins caused your pokemon to receive the effort ribbon?\nSubmit your answer in a format like this, "0/1/0/1/0/1", where 1 = Yes, 0 = No. \nFor the vitamins hp-Up/Protein/Iron/Calcium/Zinc/Carbos: ' + ) + effort_vitamins = effort_vitamin_string.split("/") for i in range(6): - Cross_Vitamin = 0 - Cross_Vitamin = max(Vitamins[i]*Effort_Vitamins[i],Cross_Vitamin) - - else: - # Can we hit the global EV cap? - Cross_Vitamin = input("Now attempt to feed your pokemon " + str(min(sum(Vitamins),Afford_Vitamin)) + " total vitamins. \nInput the number of total vitamins your pokemon would consume before refusing more. Then check the effort ribbon. \nLeave blank if it gobbled up every single vitamin you could buy and still doesn't qualify for the effort ribbon': ") - - if Cross_Vitamin == "": - # We never hit the global EV cap, and therefore don't know how few total EVs the pokemon could have. - Sum_EV_Min = 0 - Cross_Vitamin = min(sum(Vitamins),Afford_Vitamin) - else: - # We hit the global EV cap, and therefore know the pokemon must have at least this many EVs - Sum_EV_Min = 510-int(Cross_Vitamin)*10 - # Keep in mind, a vitamin will provide less than 10 of an EV to not exceed the individual 100 EV cap. - # Worst-case scenario, this means each unique Vitamin type fed could give +1 once instead of +10. - # This means our Max EV sum is slightly high in most cases, the logic to fix that is rarely necessary and stupidly complicated. - Total = 0 - for i in range(6): - Total = Total + (Vitamins[i]>0) - Sum_EV_Max = 510-int(Cross_Vitamin)*10+9*Total - Uncapped_Vitamins = [] - # Which EVs did we potentially not hit the Individual Cap for? - # This could happen if the Global EV cap is hit first, or if the player can't afford enough vitamins - for i in range(6): - Uncapped_Vitamins.append((Effort_Vitamins[i] or 1*(Vitamins[i]>=Afford_Vitamin))) - elif (Effort_Ribbon==""): - # Effort_Ribbon status unknown, therefore Effort Judge NOT available - # Therefore we always need to do Cross_Vitamins - Cross_Vitamin = input("Now attempt to feed your pokemon " + str(min(sum(Vitamins),Afford_Vitamin)) + " total vitamins of different types. \nInput the number of total vitamins your pokemon would consume before refusing more: ") - Total = 0 - for i in range(6): - Total = Total + (Vitamins[i]>0) - if Cross_Vitamin == "": - # Potentially didn't hit global EV cap. Safe assumption is that we didn't. - Sum_EV_Min = 0 - # Cross Vitamin isn't an int, therefore we use the max vitamins input - Cross_Vitamin = min(sum(Vitamins),Afford_Vitamin) - else: - # We hit the global EV cap! - Sum_EV_Min = 510-int(Cross_Vitamin)*10 - Sum_EV_Max = 510-int(Cross_Vitamin)*10+9*Total - # Unless we hit a global cap with Cross Vitamins, we can only confirm we hit the individual EV cap for some of the EVs. - # The highest Vitamin proves that any EV cap hit below it got hit. - Uncapped_Vitamins = [] - # Python doesn't like it when I multiply lists by constants, or lists by lists... - Vitamin_Max = Cross_Vitamin + 0 - for i in range(6): - Vitamin_Max = max(Vitamins[i],Vitamin_Max) + effort_vitamins[i] = int(effort_vitamins[i]) + print(effort_vitamins) + if effort_vitamin_string != "0/0/0/0/0/0": + # No need for cross vitamins if we already hit the global ev cap. + for i in range(6): + cross_vitamin = 0 + cross_vitamin = max(vitamins[i] * effort_vitamins[i], cross_vitamin) + + else: + # Can we hit the global ev cap? + cross_vitamin = input( + "Now attempt to feed your pokemon " + + str(min(sum(vitamins), afford_vitamin)) + + " total vitamins. \nInput the number of total vitamins your pokemon would consume before refusing more. Then check the effort ribbon. \nLeave blank if it gobbled up every single vitamin you could buy and still doesn't qualify for the effort ribbon': " + ) + if cross_vitamin == "": + # We never hit the global ev cap, and therefore don't know how few total evs the pokemon could have. + sum_ev_min = 0 + cross_vitamin = min(sum(vitamins), afford_vitamin) + else: + # We hit the global ev cap, and therefore know the pokemon must have at least this many evs + sum_ev_min = 510 - int(cross_vitamin) * 10 + # Keep in mind, a vitamin will provide less than 10 of an ev to not exceed the individual 100 ev cap. + # Worst-case scenario, this means each unique vitamin type fed could give +1 once instead of +10. + # This means our max ev sum is slightly high in most cases, the logic to fix that is rarely necessary and stupidly complicated. + total = 0 + for i in range(6): + total = total + (vitamins[i] > 0) + sum_ev_max = 510 - int(cross_vitamin) * 10 + 9 * total + uncapped_vitamins = [] + # Which evs did we potentially not hit the Individual Cap for? + # This could happen if the Global ev cap is hit first, or if the player can't afford enough vitamins + for i in range(6): + uncapped_vitamins.append( + (effort_vitamins[i] or 1 * (vitamins[i] >= afford_vitamin)) + ) + elif effort_ribbon == "": + # effort_ribbon status unknown, therefore effort judge NOT available + # Therefore we always need to do cross_vitamins + cross_vitamin = input( + "Now attempt to feed your pokemon " + + str(min(sum(vitamins), afford_vitamin)) + + " total vitamins of different types. \nInput the number of total vitamins your pokemon would consume before refusing more: " + ) + total = 0 + for i in range(6): + total = total + (vitamins[i] > 0) + if cross_vitamin == "": + # Potentially didn't hit global ev cap. Safe assumption is that we didn't. + sum_ev_min = 0 + # cross vitamin isn't an int, therefore we use the max vitamins input + cross_vitamin = min(sum(vitamins), afford_vitamin) + else: + # We hit the global ev cap! + sum_ev_min = 510 - int(cross_vitamin) * 10 + sum_ev_max = 510 - int(cross_vitamin) * 10 + 9 * total + # Unless we hit a global cap with cross vitamins, we can only confirm we hit the individual ev cap for some of the evs. + # The highest vitamin proves that any ev cap hit below it got hit. + uncapped_vitamins = [] + # Python doesn't like it when I multiply lists by constants, or lists by lists... + vitamin_max = cross_vitamin + 0 + for i in range(6): + vitamin_max = max(vitamins[i], vitamin_max) + for i in range(6): + uncapped_vitamins.append( + (vitamins[i] >= vitamin_max) or (vitamins[i] >= afford_vitamin) + ) for i in range(6): - Uncapped_Vitamins.append((Vitamins[i]>=Vitamin_Max) or (Vitamins[i]>=Afford_Vitamin)) - for i in range(6): - if Vitamins[i]==0: - Max_EVs[i]= min(255,Max_EVs[i]) - else: - Max_EVs[i] = min(109-Vitamins[i]*10,Max_EVs[i]) - if Uncapped_Vitamins[i] == 1: - Min_EVs[i] = max(0,Min_EVs[i]) - else: - Min_EVs[i] = max(100-Vitamins[i]*10,Min_EVs[i]) - if Effort_Ribbon != "": - if Effort_Ribbon == 1: - Sum_EV_Min = 510 - Sum_EV_Max = 510 + if vitamins[i] == 0: + max_evs[i] = min(255, max_evs[i]) + else: + max_evs[i] = min(109 - vitamins[i] * 10, max_evs[i]) + if uncapped_vitamins[i] == 1: + min_evs[i] = max(0, min_evs[i]) + else: + min_evs[i] = max(100 - vitamins[i] * 10, min_evs[i]) + if effort_ribbon != "": + if effort_ribbon == 1: + sum_ev_min = 510 + sum_ev_max = 510 else: - Sum_EV_Min = max(0,Sum_EV_Min) - Sum_EV_Max = min(510,Sum_EV_Max) - - print(Max_EVs, Min_EVs) + sum_ev_min = max(0, sum_ev_min) + sum_ev_max = min(510, sum_ev_max) + print(max_evs, min_evs) for i in range(6): - # Check if a Min_EV and 5 Max_EVs is above the Minimum EV total. - if sum(Max_EVs[0:6],Min_EVs[i])-Max_EVs[i] < Sum_EV_Min: + # Check if a min_ev and 5 max_evs is above the minimum ev total. + if sum(max_evs[0:6], min_evs[i]) - max_evs[i] < sum_ev_min: # If not, raise that minimum. - Temp = Sum_EV_Min - sum(Max_EVs[0:6],-Max_EVs[i]) - Min_EVs[i] = max(Temp,0) - print(Min_EVs) - # Check if a Max_EV and 5 Min_EVs is below the Maximum EV total. + temp = sum_ev_min - sum(max_evs[0:6], -max_evs[i]) + min_evs[i] = max(temp, 0) + print(min_evs) + # Check if a max_ev and 5 min_evs is below the maximum ev total. for i in range(6): - if sum(Min_EVs[0:6],Max_EVs[i])-Min_EVs[i] > Sum_EV_Max: + if sum(min_evs[0:6], max_evs[i]) - min_evs[i] > sum_ev_max: # If not, raise that maximum. - Temp = Sum_EV_Max - sum(Min_EVs[0:6],-Min_EVs[i]) - Max_EVs[i] = min(max(Temp,0),255) - print(Max_EVs) + temp = sum_ev_max - sum(min_evs[0:6], -min_evs[i]) + max_evs[i] = min(max(temp, 0), 255) + print(max_evs) for i in range(6): - Temp = max(V_Min[i] - (Max_EVs[i]//4), Min_IVs[i], 0) - if i == Char_Stat: - if Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Min_IVs[i] = Temp + (((Min_IVs[i] % 10) - (Temp % 10)) % 10) + temp = max(v_min[i] - (max_evs[i] // 4), min_ivs[i], 0) + if i == char_stat: + if know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + min_ivs[i] = temp + (((min_ivs[i] % 10) - (temp % 10)) % 10) else: - Min_IVs[i] = Temp + (((Min_IVs[i] % 5) - (Temp % 5)) % 5) + min_ivs[i] = temp + (((min_ivs[i] % 5) - (temp % 5)) % 5) else: - Min_IVs[i] = Temp + (((Min_IVs[i] % 5) - (Temp % 5)) % 5) - elif Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Min_IVs[i] = Temp + (((Min_IVs[i] % 2) - (Temp % 2)) % 2) + min_ivs[i] = temp + (((min_ivs[i] % 5) - (temp % 5)) % 5) + elif know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + min_ivs[i] = temp + (((min_ivs[i] % 2) - (temp % 2)) % 2) else: - Min_IVs[i] = Temp + min_ivs[i] = temp else: - Min_IVs[i] = Temp - - Temp = min(max(V_Max[i] - (Min_EVs[i]//4),0), Max_IVs[i], 31) - if Temp != Max_IVs[i]: - if i == Char_Stat: - if Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Max_IVs[i] = Temp - (((Max_IVs[i] % 10) - (Temp % 10) % 10)) - else: - Max_IVs[i] = Temp - (((Max_IVs[i] % 5) - (Temp % 5) % 5)) - else: - Max_IVs[i] = Temp - (((Max_IVs[i] % 5) - (Temp % 5) % 5)) - elif Know_Hidden_Power == 1: - if Hidden_Power_XO[Wack_HP_Order[i]] < 2: - Max_IVs[i] = Temp - ((Max_IVs[i] % 2) - (Temp % 2) % 2) + min_ivs[i] = temp + + temp = min(max(v_max[i] - (min_evs[i] // 4), 0), max_ivs[i], 31) + if temp != max_ivs[i]: + if i == char_stat: + if know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + max_ivs[i] = temp - (((max_ivs[i] % 10) - (temp % 10) % 10)) else: - Max_IVs[i] = Temp + max_ivs[i] = temp - (((max_ivs[i] % 5) - (temp % 5) % 5)) else: - Max_IVs[i] = Temp - print(Max_EVs, Min_EVs) - print("Max IVs:", Max_IVs, "Min IVs:", Min_IVs) - - - + max_ivs[i] = temp - (((max_ivs[i] % 5) - (temp % 5) % 5)) + elif know_hidden_power == 1: + if hidden_power_xo[wack_hp_order[i]] < 2: + max_ivs[i] = temp - ((max_ivs[i] % 2) - (temp % 2) % 2) + else: + max_ivs[i] = temp + else: + max_ivs[i] = temp + print(max_evs, min_evs) + print("max ivs:", max_ivs, "min ivs:", min_ivs) +# Ez Test Code +stats = [244, 179, 133, 137, 161, 118] +stats_to_ivs("Swampert", 68, "Gentle", stats) +def FindIVs(species): + stats = [ + int(input("hp stat: ")), + int(input("atk stat: ")), + int(input("def stat: ")), + int(input("spa stat: ")), + int(input("SpD stat: ")), + int(input("spe stat: ")), + ] -#Stats = [133, 99, 91, 117, 86, 119] -#Stats2TVs("Typhlosion", 45, "Bashful", Stats) -Stats = [int(input("HP Stat: ")), - int(input("Atk Stat: ")), - int(input("Def Stat: ")), - int(input("Spa Stat: ")), - int(input("SpD Stat: ")), - int(input("Spe Stat: "))] -Stats2TVs(input("Species: "), - int(input("Level: ")), - input("Nature: "), Stats) \ No newline at end of file + return stats_to_ivs(species, int(input("level: ")), input("nature: "), stats) +# FindIVs() From df2467f46e5ac3153bfb5a88dab1cebf57994806 Mon Sep 17 00:00:00 2001 From: HappyLappy1 <86489014+HappyLappy1@users.noreply.github.com> Date: Wed, 22 Mar 2023 16:41:18 -0400 Subject: [PATCH 2/2] Add files via upload --- pokemon_nature_reference.txt | 25 ++ pokemon_stats_reference.txt | 505 +++++++++++++++++++++++++++++++++++ 2 files changed, 530 insertions(+) create mode 100644 pokemon_nature_reference.txt create mode 100644 pokemon_stats_reference.txt diff --git a/pokemon_nature_reference.txt b/pokemon_nature_reference.txt new file mode 100644 index 0000000..d25c0db --- /dev/null +++ b/pokemon_nature_reference.txt @@ -0,0 +1,25 @@ +Hardy 0 0 0 0 0 +Lonely 11 9 0 0 0 +Brave 11 0 0 0 9 +Adamant 11 0 9 0 0 +Naughty 11 0 0 9 0 +Bold 9 11 0 0 0 +Docile 0 0 0 0 0 +Relaxed 0 11 0 0 9 +Impish 0 11 9 0 0 +Lax 0 11 0 9 0 +Timid 9 0 0 0 11 +Hasty 0 9 0 0 11 +Serious 0 0 0 0 0 +Jolly 0 0 9 0 11 +Naive 0 0 0 9 11 +Modest 9 0 11 0 0 +Mild 0 9 11 0 0 +Quiet 0 0 11 0 9 +Bashful 0 0 0 0 0 +Rash 0 0 11 9 0 +Calm 9 0 0 11 0 +Gentle 0 9 0 11 0 +Sassy 0 0 0 11 9 +Careful 0 0 9 11 0 +Quirky 0 0 0 0 0 \ No newline at end of file diff --git a/pokemon_stats_reference.txt b/pokemon_stats_reference.txt new file mode 100644 index 0000000..be2e543 --- /dev/null +++ b/pokemon_stats_reference.txt @@ -0,0 +1,505 @@ +Bulbasaur 45 49 49 65 65 45 +Ivysaur 60 62 63 80 80 60 +Venusaur 80 82 83 100 100 80 +charmander 39 52 43 60 50 65 +charmeleon 58 64 58 80 65 80 +charizard 78 84 78 109 85 100 +Squirtle 44 48 65 50 64 43 +Wartortle 59 63 80 65 80 58 +Blastoise 79 83 100 85 105 78 +Caterpie 45 30 35 20 20 45 +Metapod 50 20 55 25 25 30 +Butterfree 60 45 50 80 80 70 +Weedle 40 35 30 20 20 50 +Kakuna 45 25 50 25 25 35 +Beedrill 65 80 40 45 80 75 +Pidgey 40 45 40 35 35 56 +Pidgeotto 63 60 55 50 50 71 +Pidgeot 83 80 75 70 70 91 +Rattata 30 56 35 25 35 72 +Raticate 55 81 60 50 70 97 +spearow 40 60 30 31 31 70 +Fearow 65 90 65 61 61 100 +Ekans 35 60 44 40 54 55 +Arbok 60 85 69 65 79 80 +Pikachu 35 55 30 50 40 90 +Raichu 60 90 55 90 80 100 +Sandshrew 50 75 85 20 30 40 +Sandslash 75 100 110 45 55 65 +Nidoran♀ 55 47 52 40 40 41 +Nidorina 70 62 67 55 55 56 +Nidoqueen 90 82 87 75 85 76 +Nidoran♂ 46 57 40 40 40 50 +Nidorino 61 72 57 55 55 65 +Nidoking 81 92 77 85 75 85 +Clefairy 70 45 48 60 65 35 +Clefable 95 70 73 85 90 60 +Vulpix 38 41 40 50 65 65 +Ninetales 73 76 75 81 100 100 +Jigglypuff 115 45 20 45 25 20 +Wigglytuff 140 70 45 75 50 45 +Zubat 40 45 35 30 40 55 +Golbat 75 80 70 65 75 90 +Oddish 45 50 55 75 65 30 +Gloom 60 65 70 85 75 40 +Vileplume 75 80 85 100 90 50 +Paras 35 70 55 45 55 25 +Parasect 60 95 80 60 80 30 +Venonat 60 55 50 40 55 45 +Venomoth 70 65 60 90 75 90 +Diglett 10 55 25 35 45 95 +Dugtrio 35 80 50 50 70 120 +Meowth 40 45 35 40 40 90 +Persian 65 70 60 65 65 115 +Psyduck 50 52 48 65 50 55 +Golduck 80 82 78 95 80 85 +Mankey 40 80 35 35 45 70 +Primeape 65 105 60 60 70 95 +Growlithe 55 70 45 70 50 60 +Arcanine 90 110 80 100 80 95 +Poliwag 40 50 40 40 40 90 +Poliwhirl 65 65 65 50 50 90 +Poliwrath 90 85 95 70 90 70 +Abra 25 20 15 105 55 90 +Kadabra 40 35 30 120 70 105 +Alakazam 55 50 45 135 85 120 +Machop 70 80 50 35 35 35 +Machoke 80 100 70 50 60 45 +Machamp 90 130 80 65 85 55 +Bellsprout 50 75 35 70 30 40 +Weepinbell 65 90 50 85 45 55 +Victreebel 80 105 65 100 60 70 +Tentacool 40 40 35 50 100 70 +Tentacruel 80 70 65 80 120 100 +Geodude 40 80 100 30 30 20 +Graveler 55 95 115 45 45 35 +Golem 80 110 130 55 65 45 +Ponyta 50 85 55 65 65 90 +Rapidash 65 100 70 80 80 105 +Slowpoke 90 65 65 40 40 15 +Slowbro 95 75 110 100 80 30 +Magnemite 25 35 70 95 55 45 +Magneton 50 60 95 120 70 70 +Farfetch'd 52 65 55 58 62 60 +Doduo 35 85 45 35 35 75 +Dodrio 60 110 70 60 60 100 +Seel 65 45 55 45 70 45 +Dewgong 90 70 80 70 95 70 +Grimer 80 80 50 40 50 25 +Muk 105 105 75 65 100 50 +Shellder 30 65 100 45 25 40 +Cloyster 50 95 180 85 45 70 +Gastly 30 35 30 100 35 80 +Haunter 45 50 45 115 55 95 +Gengar 60 65 60 130 75 110 +Onix 35 45 160 30 45 70 +Drowzee 60 48 45 43 90 42 +Hypno 85 73 70 73 115 67 +Krabby 30 105 90 25 25 50 +Kingler 55 130 115 50 50 75 +Voltorb 40 30 50 55 55 100 +Electrode 60 50 70 80 80 140 +Exeggcute 60 40 80 60 45 40 +Exeggutor 95 95 85 125 65 55 +Cubone 50 50 95 40 50 35 +Marowak 60 80 110 50 80 45 +Hitmonlee 50 120 53 35 110 87 +Hitmonchan 50 105 79 35 110 76 +Lickitung 90 55 75 60 75 30 +Koffing 40 65 95 60 45 35 +Weezing 65 90 120 85 70 60 +Rhyhorn 80 85 95 30 30 25 +Rhydon 105 130 120 45 45 40 +Chansey 250 5 5 35 105 50 +Tangela 65 55 115 100 40 60 +Kangaskhan 105 95 80 40 80 90 +Horsea 30 40 70 70 25 60 +Seadra 55 65 95 95 45 85 +Goldeen 45 67 60 35 50 63 +Seaking 80 92 65 65 80 68 +Staryu 30 45 55 70 55 85 +Starmie 60 75 85 100 85 115 +Mr. Mime 40 45 65 100 120 90 +Scyther 70 110 80 55 80 105 +Jynx 65 50 35 115 95 95 +Electabuzz 65 83 57 95 85 105 +Magmar 65 95 57 100 85 93 +Pinsir 65 125 100 55 70 85 +Tauros 75 100 95 40 70 110 +Magikarp 20 10 55 15 20 80 +Gyarados 95 125 79 60 100 81 +Lapras 130 85 80 85 95 60 +Ditto 48 48 48 48 48 48 +Eevee 55 55 50 45 65 55 +Vaporeon 130 65 60 110 95 65 +Jolteon 65 65 60 110 95 130 +Flareon 65 130 60 95 110 65 +Porygon 65 60 70 85 75 40 +Omanyte 35 40 100 90 55 35 +Omastar 70 60 125 115 70 55 +Kabuto 30 80 90 55 45 55 +Kabutops 60 115 105 65 70 80 +Aerodactyl 80 105 65 60 75 130 +Snorlax 160 110 65 65 110 30 +Articuno 90 85 100 95 125 85 +Zapdos 90 90 85 125 90 100 +Moltres 90 100 90 125 85 90 +Dratini 41 64 45 50 50 50 +Dragonair 61 84 65 70 70 70 +Dragonite 91 134 95 100 100 80 +Mewtwo 106 110 90 154 90 130 +Mew 100 100 100 100 100 100 +Chikorita 45 49 65 49 65 45 +Bayleef 60 62 80 63 80 60 +Meganium 80 82 100 83 100 80 +Cyndaquil 39 52 43 60 50 65 +Quilava 58 64 58 80 65 80 +Typhlosion 78 84 78 109 85 100 +Totodile 50 65 64 44 48 43 +Croconaw 65 80 80 59 63 58 +Feraligatr 85 105 100 79 83 78 +Sentret 35 46 34 35 45 20 +Furret 85 76 64 45 55 90 +Hoothoot 60 30 30 36 56 50 +Noctowl 100 50 50 76 96 70 +Ledyba 40 20 30 40 80 55 +Ledian 55 35 50 55 110 85 +Spinarak 40 60 40 40 40 30 +Ariados 70 90 70 60 60 40 +Crobat 85 90 80 70 80 130 +Chinchou 75 38 38 56 56 67 +Lanturn 125 58 58 76 76 67 +Pichu 20 40 15 35 35 60 +Cleffa 50 25 28 45 55 15 +Igglybuff 90 30 15 40 20 15 +Togepi 35 20 65 40 65 20 +Togetic 55 40 85 80 105 40 +Natu 40 50 45 70 45 70 +Xatu 65 75 70 95 70 95 +Mareep 55 40 40 65 45 35 +Flaaffy 70 55 55 80 60 45 +Ampharos 90 75 75 115 90 55 +Bellossom 75 80 85 90 100 50 +Marill 70 20 50 20 50 40 +Azumarill 100 50 80 50 80 50 +Sudowoodo 70 100 115 30 65 30 +Politoed 90 75 75 90 100 70 +Hoppip 35 35 40 35 55 50 +Skiploom 55 45 50 45 65 80 +Jumpluff 75 55 70 55 85 110 +Aipom 55 70 55 40 55 85 +Sunkern 30 30 30 30 30 30 +Sunflora 75 75 55 105 85 30 +Yanma 65 65 45 75 45 95 +Wooper 55 45 45 25 25 15 +Quagsire 95 85 85 65 65 35 +Espeon 65 65 60 130 95 110 +Umbreon 95 65 110 60 130 65 +Murkrow 60 85 42 85 42 91 +Slowking 95 75 80 100 110 30 +Misdreavus 60 60 60 85 85 85 +Unown 48 72 48 72 48 48 +Wobbuffet 190 33 58 33 58 33 +Girafarig 70 80 65 90 65 85 +Pineco 50 65 90 35 35 15 +Forretress 75 90 140 60 60 40 +Dunsparce 100 70 70 65 65 45 +Gligar 65 75 105 35 65 85 +Steelix 75 85 200 55 65 30 +Snubbull 60 80 50 40 40 30 +Granbull 90 120 75 60 60 45 +Qwilfish 65 95 75 55 55 85 +Scizor 70 130 100 55 80 65 +Shuckle 20 10 230 10 230 5 +Heracross 80 125 75 40 95 85 +Sneasel 55 95 55 35 75 115 +Teddiursa 60 80 50 50 50 40 +Ursaring 90 130 75 75 75 55 +Slugma 40 40 40 70 40 20 +Magcargo 50 50 120 80 80 30 +Swinub 50 50 40 30 30 50 +Piloswine 100 100 80 60 60 50 +Corsola 55 55 85 65 85 35 +Remoraid 35 65 35 65 35 65 +Octillery 75 105 75 105 75 45 +Delibird 45 55 45 65 45 75 +Mantine 65 40 70 80 140 70 +Skarmory 65 80 140 40 70 70 +Houndour 45 60 30 80 50 65 +Houndoom 75 90 50 110 80 95 +Kingdra 75 95 95 95 95 85 +Phanpy 90 60 60 40 40 40 +Donphan 90 120 120 60 60 50 +Porygon2 85 80 90 105 95 60 +Stantler 73 95 62 85 65 85 +Smeargle 55 20 35 20 45 75 +Tyrogue 35 35 35 35 35 35 +Hitmontop 50 95 95 35 110 70 +Smoochum 45 30 15 85 65 65 +Elekid 45 63 37 65 55 95 +Magby 45 75 37 70 55 83 +Miltank 95 80 105 40 70 100 +Blissey 255 10 10 75 135 55 +Raikou 90 85 75 115 100 115 +Entei 115 115 85 90 75 100 +Suicune 100 75 115 90 115 85 +Larvitar 50 64 50 45 50 41 +Pupitar 70 84 70 65 70 51 +Tyranitar 100 134 110 95 100 61 +Lugia 106 90 130 90 154 110 +Ho-Oh 106 130 90 110 154 90 +Celebi 100 100 100 100 100 100 +Treecko 40 45 35 65 55 70 +Grovyle 50 65 45 85 65 95 +Sceptile 70 85 65 105 85 120 +Torchic 45 60 40 70 50 45 +Combusken 60 85 60 85 60 55 +Blaziken 80 120 70 110 70 80 +Mudkip 50 70 50 50 50 40 +Marshtomp 70 85 70 60 70 50 +Swampert 100 110 90 85 90 60 +Poochyena 35 55 35 30 30 35 +Mightyena 70 90 70 60 60 70 +Zigzagoon 38 30 41 30 41 60 +Linoone 78 70 61 50 61 100 +Wurmple 45 45 35 20 30 20 +Silcoon 50 35 55 25 25 15 +Beautifly 60 70 50 90 50 65 +Cascoon 50 35 55 25 25 15 +Dustox 60 50 70 50 90 65 +Lotad 40 30 30 40 50 30 +Lombre 60 50 50 60 70 50 +Ludicolo 80 70 70 90 100 70 +Seedot 40 40 50 30 30 30 +Nuzleaf 70 70 40 60 40 60 +Shiftry 90 100 60 90 60 80 +Taillow 40 55 30 30 30 85 +Swellow 60 85 60 50 50 125 +Wingull 40 30 30 55 30 85 +Pelipper 60 50 100 85 70 65 +Ralts 28 25 25 45 35 40 +Kirlia 38 35 35 65 55 50 +Gardevoir 68 65 65 125 115 80 +Surskit 40 30 32 50 52 65 +Masquerain 70 60 62 80 82 60 +Shroomish 60 40 60 40 60 35 +Breloom 60 130 80 60 60 70 +Slakoth 60 60 60 35 35 30 +Vigoroth 80 80 80 55 55 90 +Slaking 150 160 100 95 65 100 +Nincada 31 45 90 30 30 40 +Ninjask 61 90 45 50 50 160 +Shedinja 1 90 45 30 30 40 +Whismur 64 51 23 51 23 28 +Loudred 84 71 43 71 43 48 +Exploud 104 91 63 91 63 68 +Makuhita 72 60 30 20 30 25 +Hariyama 144 120 60 40 60 50 +Azurill 50 20 40 20 40 20 +Nosepass 30 45 135 45 90 30 +Skitty 50 45 45 35 35 50 +Delcatty 70 65 65 55 55 70 +Sableye 50 75 75 65 65 50 +Mawile 50 85 85 55 55 50 +Aron 50 70 100 40 40 30 +Lairon 60 90 140 50 50 40 +Aggron 70 110 180 60 60 50 +Meditite 30 40 55 40 55 60 +Medicham 60 60 75 60 75 80 +Electrike 40 45 40 65 40 65 +Manectric 70 75 60 105 60 105 +Plusle 60 50 40 85 75 95 +minun 60 40 50 75 85 95 +Volbeat 65 73 55 47 75 85 +Illumise 65 47 55 73 75 85 +Roselia 50 60 45 100 80 65 +Gulpin 70 43 53 43 53 40 +Swalot 100 73 83 73 83 55 +Carvanha 45 90 20 65 20 65 +Sharpedo 70 120 40 95 40 95 +Wailmer 130 70 35 70 35 60 +Wailord 170 90 45 90 45 60 +Numel 60 60 40 65 45 35 +Camerupt 70 100 70 105 75 40 +Torkoal 70 85 140 85 70 20 +Spoink 60 25 35 70 80 60 +Grumpig 80 45 65 90 110 80 +Spinda 60 60 60 60 60 60 +Trapinch 45 100 45 45 45 10 +Vibrava 50 70 50 50 50 70 +Flygon 80 100 80 80 80 100 +Cacnea 50 85 40 85 40 35 +Cacturne 70 115 60 115 60 55 +Swablu 45 40 60 40 75 50 +Altaria 75 70 90 70 105 80 +Zangoose 73 115 60 60 60 90 +Seviper 73 100 60 100 60 65 +Lunatone 70 55 65 95 85 70 +Solrock 70 95 85 55 65 70 +Barboach 50 48 43 46 41 60 +Whiscash 110 78 73 76 71 60 +Corphish 43 80 65 50 35 35 +Crawdaunt 63 120 85 90 55 55 +Baltoy 40 40 55 40 70 55 +Claydol 60 70 105 70 120 75 +Lileep 66 41 77 61 87 23 +Cradily 86 81 97 81 107 43 +Anorith 45 95 50 40 50 75 +Armaldo 75 125 100 70 80 45 +Feebas 20 15 20 10 55 80 +Milotic 95 60 79 100 125 81 +Castform 70 70 70 70 70 70 +Kecleon 60 90 70 60 120 40 +Shuppet 44 75 35 63 33 45 +Banette 64 115 65 83 63 65 +Duskull 20 40 90 30 90 25 +Dusclops 40 70 130 60 130 25 +Tropius 99 68 83 72 87 51 +Chimecho 65 50 70 95 80 65 +Absol 65 130 60 75 60 75 +Wynaut 95 23 48 23 48 23 +Snorunt 50 50 50 50 50 50 +Glalie 80 80 80 80 80 80 +Spheal 70 40 50 55 50 25 +Sealeo 90 60 70 75 70 45 +Walrein 110 80 90 95 90 65 +Clamperl 35 64 85 74 55 32 +Huntail 55 104 105 94 75 52 +Gorebyss 55 84 105 114 75 52 +Relicanth 100 90 130 45 65 55 +Luvdisc 43 30 55 40 65 97 +Bagon 45 75 60 40 30 50 +Shelgon 65 95 100 60 50 50 +Salamence 95 135 80 110 80 100 +Beldum 40 55 80 35 60 30 +Metang 60 75 100 55 80 50 +Metagross 80 135 130 95 90 70 +Regirock 80 100 200 50 100 50 +Regice 80 50 100 100 200 50 +Registeel 80 75 150 75 150 50 +Latias 80 80 90 110 130 110 +Latios 80 90 80 130 110 110 +Kyogre 100 100 90 150 140 90 +Groudon 100 150 140 100 90 90 +Rayquaza 105 150 90 150 90 95 +Jirachi 100 100 100 100 100 100 +Deoxys (Normal Forme) 50 150 50 150 50 150 +Deoxys (Attack Forme) 50 180 20 180 20 150 +Deoxys (defense Forme) 50 70 160 70 160 90 +Deoxys (speed Forme) 50 95 90 95 90 180 +Turtwig 55 68 64 45 55 31 +Grotle 75 89 85 55 65 36 +Torterra 95 109 105 75 85 56 +Chimchar 44 58 44 58 44 61 +Monferno 64 78 52 78 52 81 +Infernape 76 104 71 104 71 108 +Piplup 53 51 53 61 56 40 +Prinplup 64 66 68 81 76 50 +Empoleon 84 86 88 111 101 60 +Starly 40 55 30 30 30 60 +Staravia 55 75 50 40 40 80 +Staraptor 85 120 70 50 50 100 +Bidoof 59 45 40 35 40 31 +Bibarel 79 85 60 55 60 71 +Kricketot 37 25 41 25 41 25 +Kricketune 77 85 51 55 51 65 +Shinx 45 65 34 40 34 45 +Luxio 60 85 49 60 49 60 +Luxray 80 120 79 95 79 70 +Budew 40 30 35 50 70 55 +Roserade 60 70 55 125 105 90 +Cranidos 67 125 40 30 30 58 +Rampardos 97 165 60 65 50 58 +Shieldon 30 42 118 42 88 30 +Bastiodon 60 52 168 47 138 30 +Burmy 40 29 45 29 45 36 +Wormadam (Plant Cloak) 60 59 85 79 105 36 +Wormadam (Sandy Cloak) 60 79 105 59 85 36 +Wormadam (Trash Cloak) 60 69 95 69 95 36 +Mothim 70 94 50 94 50 66 +Combee 30 30 42 30 42 70 +Vespiquen 70 80 102 80 102 40 +Pachirisu 60 45 70 45 90 95 +Buizel 55 65 35 60 30 85 +Floatzel 85 105 55 85 50 115 +Cherubi 45 35 45 62 53 35 +Cherrim 70 60 70 87 78 85 +Shellos 76 48 48 57 62 34 +Gastrodon 111 83 68 92 82 39 +Ambipom 75 100 66 60 66 115 +Drifloon 90 50 34 60 44 70 +Drifblim 150 80 44 90 54 80 +Buneary 55 66 44 44 56 85 +Lopunny 65 76 84 54 96 105 +Mismagius 60 60 60 105 105 105 +Honchkrow 100 125 52 105 52 71 +Glameow 49 55 42 42 37 85 +Purugly 71 82 64 64 59 112 +Chingling 45 30 50 65 50 45 +Stunky 63 63 47 41 41 74 +Skuntank 103 93 67 71 61 84 +Bronzor 57 24 86 24 86 23 +Bronzong 67 89 116 79 116 33 +Bonsly 50 80 95 10 45 10 +Mime Jr. 20 25 45 70 90 60 +Happiny 100 5 5 15 65 30 +Chatot 76 65 45 92 42 91 +Spiritomb 50 92 108 92 108 35 +Gible 58 70 45 40 45 42 +Gabite 68 90 65 50 55 82 +Garchomp 108 130 95 80 85 102 +Munchlax 135 85 40 40 85 5 +Riolu 40 70 40 35 40 60 +Lucario 70 110 70 115 70 90 +Hippopotas 68 72 78 38 42 32 +Hippowdon 108 112 118 68 72 47 +Skorupi 40 50 90 30 55 65 +Drapion 70 90 110 60 75 95 +Croagunk 48 61 40 61 40 50 +Toxicroak 83 106 65 86 65 85 +Carnivine 74 100 72 90 72 46 +Finneon 49 49 56 49 61 66 +Lumineon 69 69 76 69 86 91 +Mantyke 45 20 50 60 120 50 +Snover 60 62 50 62 60 40 +Abomasnow 90 92 75 92 85 60 +Weavile 70 120 65 45 85 125 +Magnezone 70 70 115 130 90 60 +Lickilicky 110 85 95 80 95 50 +Rhyperior 115 140 130 55 55 40 +Tangrowth 100 100 125 110 50 50 +Electivire 75 123 67 95 85 95 +Magmortar 75 95 67 125 95 83 +Togekiss 85 50 95 120 115 80 +Yanmega 86 76 86 116 56 95 +Leafeon 65 110 130 60 65 95 +Glaceon 65 60 110 130 95 65 +Gliscor 75 95 125 45 75 95 +Mamoswine 110 130 80 70 60 80 +Porygon-Z 85 80 70 135 75 90 +Gallade 68 125 65 65 115 80 +Probopass 60 55 145 75 150 40 +Dusknoir 45 100 135 65 135 45 +Froslass 70 80 70 80 70 110 +Rotom 50 50 77 95 77 91 +Rotom (Heat Rotom) 50 65 107 105 107 86 +Rotom (Wash Rotom) 50 65 107 105 107 86 +Rotom (Frost Rotom) 50 65 107 105 107 86 +Rotom (Fan Rotom) 50 65 107 105 107 86 +Rotom (Mow Rotom) 50 65 107 105 107 86 +Uxie 75 75 130 75 130 95 +Mesprit 80 105 105 105 105 80 +Azelf 75 125 70 125 70 115 +Dialga 100 120 120 150 100 90 +Palkia 90 120 100 150 120 100 +Heatran 91 90 106 130 106 77 +Regigigas 110 160 110 80 110 100 +Giratina (Altered Forme) 150 100 120 100 120 90 +Giratina (Origin Forme) 150 120 100 120 100 90 +Cresselia 120 70 120 75 130 85 +Phione 80 80 80 80 80 80 +Manaphy 100 100 100 100 100 100 +Darkrai 70 90 90 135 90 125 +Shaymin (Land Forme) 100 100 100 100 100 100 +Shaymin (Sky Forme) 100 103 75 120 75 127 +Arceus 120 120 120 120 120 120 \ No newline at end of file