Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Usage: node formatter.js --filename.pk7 */
  2.  
  3. var fs = require("fs");
  4.  
  5. function readWriteSync() {
  6.     var path = process.argv[1].substr(0, process.argv[1].lastIndexOf("\\"))
  7.     var fname = process.argv[2].substr(2)
  8.     var filename = path + "/" + fname;
  9.    
  10.     var data = fs.readFileSync(filename);
  11.  
  12.     var pokeIndexNumber = data[0x09].toString(16) + data[0x08].toString(16);
  13.     var dexNum = "#" + parseInt(pokeIndexNumber, 16);
  14.     var pokeSpecies = pokeIndexLookup(pokeIndexNumber);
  15.     var pokeNickname = [];
  16.     var isNN;
  17.     var metGen = data[0xDF];
  18.     var gen = getGen(metGen);
  19.     var baseGender = toPaddedString(data[0x1D].toString(2), 8);
  20.     var gender = (baseGender[7] === "0" ? (baseGender[6] === "0" ? "[COLOR=#0000ff]♂[/COLOR]" : "Ø") : "[COLOR=#ff00ff]♀[/COLOR]");
  21.     var move1 = moveLookup(parseInt(data[0x5B].toString(16) + data[0x5A].toString(16), 16));
  22.     var move2 = moveLookup(parseInt(data[0x5D].toString(16) + data[0x5C].toString(16), 16));
  23.     var move3 = moveLookup(parseInt(data[0x5F].toString(16) + data[0x5E].toString(16), 16));
  24.     var move4 = moveLookup(parseInt(data[0x61].toString(16) + data[0x60].toString(16), 16));
  25.     var moveArr = [move1, move2, move3, move4];
  26.     var relearn1 = moveLookup(parseInt(data[0x6B].toString(16) + data[0x6A].toString(16), 16));
  27.     var relearn2 = moveLookup(parseInt(data[0x6D].toString(16) + data[0x6C].toString(16), 16));
  28.     var relearn3 = moveLookup(parseInt(data[0x6F].toString(16) + data[0x6E].toString(16), 16));
  29.     var relearn4 = moveLookup(parseInt(data[0x71].toString(16) + data[0x70].toString(16), 16));
  30.     var relearnArr = [relearn1, relearn2, relearn3, relearn4];
  31.     var nature = natureLookup(data[0x1C]);
  32.     var ID = toPaddedString(parseInt(toPaddedHexString(data[0x0D], 2).toString(16) + toPaddedHexString(data[0x0C], 2).toString(16), 16), 5);
  33.     var SID = toPaddedString(parseInt(toPaddedHexString(data[0x0F], 2).toString(16) + toPaddedHexString(data[0x0E], 2).toString(16), 16), 5);
  34.     var G7ID = toPaddedString((ID | (SID << 16)) % 1000000, 6);
  35.     var TSV = getTSV(ID, SID);
  36.     var PID = toPaddedHexString(data[0x1B], 2).toString(16) + toPaddedHexString(data[0x1A], 2).toString(16) + toPaddedHexString(data[0x19], 2).toString(16) + toPaddedHexString(data[0x18], 2).toString(16);
  37.     var PSV = getTSV(parseInt(PID, 16) % 65536, Math.floor(parseInt(PID, 16) / 65536));
  38.     var isShiny = TSV === PSV;
  39.     var OTname = [];
  40.     var abilityNumber = data[0x15];
  41.     var isHA = abilityNumber > 2;
  42.     var pokeInfo;
  43.     var ball = ballLookup(data[0xDC]);
  44.     var IVsBlock = data[0x77].toString(16) + data[0x76].toString(16) + data[0x75].toString(16) + data[0x74].toString(16);
  45.     IVsBlock = toPaddedString(parseInt(IVsBlock, 16).toString(2), 32).split("");
  46.     var IVs = [[], [], [], [], [], [], []];
  47.     var EVsBlock = [["", " HP"], ["", " Atk"], ["", " Def"], ["", " Spe"], ["", " Sp. Atk"], ["", " Sp. Def"]];
  48.     var EVs = [];
  49.     var curBlock = 0;
  50.     for (var i = 0; i < 32; i++) {
  51.       IVs[curBlock].push(IVsBlock[i]);
  52.       if (i % 5 === 1) curBlock += 1;
  53.     }
  54.  
  55.     for (var i = 0; i < EVsBlock.length; i++) {
  56.         EVsBlock[i][0] = data[30 + i];
  57.         if (EVsBlock[i][0] !== 0) EVs.push(EVsBlock[i].join(""));
  58.     }
  59.    
  60.     if (!relearn4) relearnArr.pop(4);
  61.     if (!relearn3) relearnArr.pop(3);
  62.     if (!relearn2) relearnArr.pop(2);
  63.     if (!relearn1) relearnArr.pop(1);
  64.  
  65.     var HPIV = parseInt(IVs[6].join(""), 2);
  66.     var ATIV = parseInt(IVs[5].join(""), 2);
  67.     var DFIV = parseInt(IVs[4].join(""), 2);
  68.     var SAIV = parseInt(IVs[2].join(""), 2);
  69.     var SDIV = parseInt(IVs[1].join(""), 2);
  70.     var SPIV = parseInt(IVs[3].join(""), 2);
  71.     var isNN = parseInt(IVs[0][0], 2) === 1;
  72.     IVs[0] = HPIV;
  73.     IVs[1] = ATIV;
  74.     IVs[2] = DFIV;
  75.     IVs[3] = SAIV;
  76.     IVs[4] = SDIV;
  77.     IVs[5] = SPIV;
  78.     IVs.pop(6);
  79.  
  80.     var HPType = calcHiddenPower(IVs);
  81.  
  82.     IVs = parseIVs(IVs);
  83.  
  84.     for (var i = 0; i < 24; i++) {
  85.       var nnPart = toPaddedHexString(data[65 + i].toString(16) + data[64 + i].toString(16), 4);
  86.       if (nnPart === "0000") break;
  87.       pokeNickname.push("\\u" + nnPart);
  88.       i += 1;
  89.     }
  90.     pokeNickname = JSON.parse('"' + pokeNickname.join("") + '"');
  91.  
  92.     for (var i = 0; i < 24; i++) {
  93.       var otPart = toPaddedHexString(data[177 + i].toString(16) + data[176 + i].toString(16), 4);
  94.       if (otPart === "0000") break;
  95.       OTname.push("\\u" + otPart);
  96.       i += 1;
  97.     }
  98.     OTname = JSON.parse('"' + OTname.join("") + '"');
  99.  
  100.     pokeInfo = "[SIZE=3][B](" + dexNum + " - " + OTname + "'s " + (isNN ? "❝" + pokeNickname + "❞" : pokeSpecies) + "[/B] " + gender + (isShiny ? "[COLOR=rgb(255, 0, 0)]★[/COLOR]" : "") + "[B])[/B][/SIZE]\n[SIZE=2]" + (gen === 6 ? "[IMG]https://cdn.bulbagarden.net/upload/a/a5/Blue_pentagon.png[/IMG]" : "") + (gen === 7 ? "[IMG]https://cdn.bulbagarden.net/upload/8/82/Black_clover.png[/IMG]" : "") + (gen === 1 || gen === 2 ? "[IMG]https://cdn.bulbagarden.net/upload/f/f2/GB_icon.png[/IMG]" : "") + " [IMG]https://raw.githubusercontent.com/msikma/pokesprite/master/icons/pokemon/" + (isShiny ? "shiny/" : "" ) + pokeSpecies.toLowerCase() + ".png[/IMG]" + "[IMG]https://raw.githubusercontent.com/msikma/pokesprite/master/icons/ball/" + ball.toLowerCase() + ".png[/IMG]\n[B]OT: [/B]" + OTname + " | [B]ID: [/B]" + (gen >= 7 ? G7ID : ID) + " | Location\n" + nature + " | ability" + abilityNumber + (isHA ? "([B]H[/B])" : "") + " | [B]TSV: [/B]" + TSV + "\n[B]IVs: [/B]" + IVs.join(" | ") + " ([B]HP " + HPType + "[/B])\n" + (relearnArr.length < 1 ? "": "[B]EMs: [/B]" + relearnArr.join(", ") + "\n") + "[B]EV'd: [\B]" + moveArr.join(", ") + "\n" + (EVs.length < 1 ? "" : "{" + EVs.join(" / ") + "}\n") + "_________________________________________";
  101.  
  102.     fs.writeFileSync(`${path}/${fname}.txt`, pokeInfo, "utf-8");
  103.  
  104.     console.log("readFileSync complete");
  105.  
  106.     function toPaddedHexString(num, len) {
  107.         var str = num.toString(16);
  108.         return "0".repeat(len - str.length) + str;
  109.     }
  110.  
  111.     function toPaddedString(num, len) {
  112.         var str = num.toString(10);
  113.         return "0".repeat(len - str.length) + str;
  114.     }
  115.  
  116.     /* thanks to .com for the getTSV function */
  117.     function getTSV(tid, sid) {
  118.         return (tid ^ sid) >> 4;
  119.     }
  120.  
  121.     function pokeIndexLookup(n) {
  122.         var pokeIndexArr = [
  123.             "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", "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", "Wormadam", "Wormadam", "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", "Rotom", "Rotom", "Rotom", "Rotom", "Uxie", "Mesprit", "Azelf", "Dialga", "Palkia", "Heatran", "Regigigas", "Giratina", "Cresselia", "Phione", "Manaphy", "Darkrai", "Shaymin", "Shaymin", "Arceus", "Victini", "Snivy", "Servine", "Serperior", "Tepig", "Pignite", "Emboar", "Oshawott", "Dewott", "Samurott", "Patrat", "Watchog", "Lillipup", "Herdier", "Stoutland", "Purrloin", "Liepard", "Pansage", "Simisage", "Pansear", "Simisear", "Panpour", "Simipour", "Munna", "Musharna", "Pidove", "Tranquill", "Unfezant", "Blitzle", "Zebstrika", "Roggenrola", "Boldore", "Gigalith", "Woobat", "Swoobat", "Drilbur", "Excadrill", "Audino", "Timburr", "Gurdurr", "Conkeldurr", "Tympole", "Palpitoad", "Seismitoad", "Throh", "Sawk", "Sewaddle", "Swadloon", "Leavanny", "Venipede", "Whirlipede", "Scolipede", "Cottonee", "Whimsicott", "Petilil", "Lilligant", "Basculin", "Sandile", "Krokorok", "Krookodile", "Darumaka", "Darmanitan", "Darmanitan", "Maractus", "Dwebble", "Crustle", "Scraggy", "Scrafty", "Sigilyph", "Yamask", "Cofagrigus", "Tirtouga", "Carracosta", "Archen", "Archeops", "Trubbish", "Garbodor", "Zorua", "Zoroark", "Minccino", "Cinccino", "Gothita", "Gothorita", "Gothitelle", "Solosis", "Duosion", "Reuniclus", "Ducklett", "Swanna", "Vanillite", "Vanillish", "Vanilluxe", "Deerling", "Sawsbuck", "Emolga", "Karrablast", "Escavalier", "Foongus", "Amoonguss", "Frillish", "Jellicent", "Alomomola", "Joltik", "Galvantula", "Ferroseed", "Ferrothorn", "Klink", "Klang", "Klinklang", "Tynamo", "Eelektrik", "Eelektross", "Elgyem", "Beheeyem", "Litwick", "Lampent", "Chandelure", "Axew", "Fraxure", "Haxorus", "Cubchoo", "Beartic", "Cryogonal", "Shelmet", "Accelgor", "Stunfisk", "Mienfoo", "Mienshao", "Druddigon", "Golett", "Golurk", "Pawniard", "Bisharp", "Bouffalant", "Rufflet", "Braviary", "Vullaby", "Mandibuzz", "Heatmor", "Durant", "Deino", "Zweilous", "Hydreigon", "Larvesta", "Volcarona", "Cobalion", "Terrakion", "Virizion", "Tornadus", "Thundurus", "Reshiram", "Zekrom", "Landorus", "Kyurem", "Keldeo", "Meloetta", "Meloetta", "Genesect", "Chespin", "Quilladin", "Chesnaught", "Fennekin", "Braixen", "Delphox", "Froakie", "Frogadier", "Greninja", "Bunnelby", "Diggersby", "Fletchling", "Fletchinder", "Talonflame", "Scatterbug", "Spewpa", "Vivillon", "Litleo", "Pyroar", "Flabébé", "Floette", "Florges", "Skiddo", "Gogoat", "Pancham", "Pangoro", "Furfrou", "Espurr", "Meowstic", "Honedge", "Doublade", "Aegislash", "Spritzee", "Aromatisse", "Swirlix", "Slurpuff", "Inkay", "Malamar", "Binacle", "Barbaracle", "Skrelp", "Dragalge", "Clauncher", "Clawitzer", "Helioptile", "Heliolisk", "Tyrunt", "Tyrantrum", "Amaura", "Aurorus", "Sylveon", "Hawlucha", "Dedenne", "Carbink", "Goomy", "Sliggoo", "Goodra", "Klefki", "Phantump", "Trevenant", "Pumpkaboo", "Gourgeist", "Bergmite", "Avalugg", "Noibat", "Noivern", "Xerneas", "Yveltal", "Zygarde", "Diancie", "Hoopa", "Volcanion", "Rowlet", "Dartrix", "Decidueye", "Litten", "Torracat", "Incineroar", "Popplio", "Brionne", "Primarina", "Pikipek", "Trumbeak", "Toucannon", "Yungoos", "Gumshoos", "Grubbin", "Charjabug", "Vikavolt", "Crabrawler", "Crabominable", "Oricorio", "Cutiefly", "Ribombee", "Rockruff", "Lycanroc", "Wishiwashi", "Mareanie", "Toxapex", "Mudbray", "Mudsdale", "Dewpider", "Araquanid", "Fomantis", "Lurantis", "Morelull", "Shiinotic", "Salandit", "Salazzle", "Stufful", "Bewear", "Bounsweet", "Steenee", "Tsareena", "Comfey", "Oranguru", "Passimian", "Wimpod", "Golisopod", "Sandygast", "Palossand", "Pyukumuku", "Type: Null", "Silvally", "Minior", "Komala", "Turtonator", "Togedemaru", "Mimikyu", "Bruxish", "Drampa", "Dhelmise", "Jangmo-o", "Hakamo-o", "Kommo-o", "Tapu Koko", "Tapu Lele", "Tapu Bulu", "Tapu Fini", "Cosmog", "Cosmoem", "Solgaleo", "Lunala", "Nihilego", "Buzzwole", "Pheromosa", "Xurkitree", "Celesteela", "Kartana", "Guzzlord", "Necrozma", "Magearna", "Marshadow", "Poipole", "Naganadel", "Stakataka", "Blacephalon", "Zeraora", "Meltan", "Melmetal"
  124.         ];
  125.         return pokeIndexArr[parseInt(n, 16) - 1];
  126.     }
  127.  
  128.     function natureLookup(n) {
  129.         n += "";
  130.         n = n.substr(-2) % 25;
  131.         var natureList = [
  132.             "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"
  133.         ];
  134.         return natureList[n];
  135.     }
  136.  
  137.     function moveLookup(n) {
  138.         var moveIndexArr = [
  139.             "Pound", "Karate Chop", "Double Slap", "Comet Punch", "Mega Punch", "Pay Day", "Fire Punch", "Ice Punch", "Thunder Punch", "Scratch", "Vice Grip", "Guillotine", "Razor Wind", "Swords Dance", "Cut", "Gust", "Wing Attack", "Whirlwind", "Fly", "Bind", "Slam", "Vine Whip", "Stomp", "Double Kick", "Mega Kick", "Jump Kick", "Rolling Kick", "Sand Attack", "Headbutt", "Horn Attack", "Fury Attack", "Horn Drill", "Tackle", "Body Slam", "Wrap", "Take Down", "Thrash", "Double-Edge", "Tail Whip", "Poison Sting", "Twineedle", "Pin Missile", "Leer", "Bite", "Growl", "Roar", "Sing", "Supersonic", "Sonic Boom", "Disable", "Acid", "Ember", "Flamethrower", "Mist", "Water Gun", "Hydro Pump", "Surf", "Ice Beam", "Blizzard", "Psybeam", "Bubble Beam", "Aurora Beam", "Hyper Beam", "Peck", "Drill Peck", "Submission", "Low Kick", "Counter", "Seismic Toss", "Strength", "Absorb", "Mega Drain", "Leech Seed", "Growth", "Razor Leaf", "Solar Beam", "Poison Powder", "Stun Spore", "Sleep Powder", "Petal Dance", "String Shot", "Dragon Rage", "Fire Spin", "Thunder Shock", "Thunderbolt", "Thunder Wave", "Thunder", "Rock Throw", "Earthquake", "Fissure", "Dig", "Toxic", "Confusion", "Psychic", "Hypnosis", "Meditate", "Agility", "Quick Attack", "Rage", "Teleport", "Night Shade", "Mimic", "Screech", "Double Team", "Recover", "Harden", "Minimize", "Smokescreen", "Confuse Ray", "Withdraw", "Defense Curl", "Barrier", "Light Screen", "Haze", "Reflect", "Focus Energy", "Bide", "Metronome", "Mirror Move", "Self-Destruct", "Egg Bomb", "Lick", "Smog", "Sludge", "Bone Club", "Fire Blast", "Waterfall", "Clamp", "Swift", "Skull Bash", "Spike Cannon", "Constrict", "Amnesia", "Kinesis", "Soft-Boiled", "High Jump Kick", "Glare", "Dream Eater", "Poison Gas", "Barrage", "Leech Life", "Lovely Kiss", "Sky Attack", "Transform", "Bubble", "Dizzy Punch", "Spore", "Flash", "Psywave", "Splash", "Acid Armor", "Crabhammer", "Explosion", "Fury Swipes", "Bonemerang", "Rest", "Rock Slide", "Hyper Fang", "Sharpen", "Conversion", "Tri Attack", "Super Fang", "Slash", "Substitute", "Struggle", "Sketch", "Triple Kick", "Thief", "Spider Web", "Mind Reader", "Nightmare", "Flame Wheel", "Snore", "Curse", "Flail", "Conversion 2", "Aeroblast", "Cotton Spore", "Reversal", "Spite", "Powder Snow", "Protect", "Mach Punch", "Scary Face", "Feint Attack", "Sweet Kiss", "Belly Drum", "Sludge Bomb", "Mud-Slap", "Octazooka", "Spikes", "Zap Cannon", "Foresight", "Destiny Bond", "Perish Song", "Icy Wind", "Detect", "Bone Rush", "Lock-On", "Outrage", "Sandstorm", "Giga Drain", "Endure", "Charm", "Rollout", "False Swipe", "Swagger", "Milk Drink", "Spark", "Fury Cutter", "Steel Wing", "Mean Look", "Attract", "Sleep Talk", "Heal Bell", "Return", "Present", "Frustration", "Safeguard", "Pain Split", "Sacred Fire", "Magnitude", "Dynamic Punch", "Megahorn", "Dragon Breath", "Baton Pass", "Encore", "Pursuit", "Rapid Spin", "Sweet Scent", "Iron Tail", "Metal Claw", "Vital Throw", "Morning Sun", "Synthesis", "Moonlight", "Hidden Power", "Cross Chop", "Twister", "Rain Dance", "Sunny Day", "Crunch", "Mirror Coat", "Psych Up", "Extreme Speed", "Ancient Power", "Shadow Ball", "Future Sight", "Rock Smash", "Whirlpool", "Beat Up", "Fake Out", "Uproar", "Stockpile", "Spit Up", "Swallow", "Heat Wave", "Hail", "Torment", "Flatter", "Will-O-Wisp", "Memento", "Facade", "Focus Punch", "Smelling Salts", "Follow Me", "Nature Power", "Charge", "Taunt", "Helping Hand", "Trick", "Role Play", "Wish", "Assist", "Ingrain", "Superpower", "Magic Coat", "Recycle", "Revenge", "Brick Break", "Yawn", "Knock Off", "Endeavor", "Eruption", "Skill Swap", "Imprison", "Refresh", "Grudge", "Snatch", "Secret Power", "Dive", "Arm Thrust", "Camouflage", "Tail Glow", "Luster Purge", "Mist Ball", "Feather Dance", "Teeter Dance", "Blaze Kick", "Mud Sport", "Ice Ball", "Needle Arm", "Slack Off", "Hyper Voice", "Poison Fang", "Crush Claw", "Blast Burn", "Hydro Cannon", "Meteor Mash", "Astonish", "Weather Ball", "Aromatherapy", "Fake Tears", "Air Cutter", "Overheat", "Odor Sleuth", "Rock Tomb", "Silver Wind", "Metal Sound", "Grass Whistle", "Tickle", "Cosmic Power", "Water Spout", "Signal Beam", "Shadow Punch", "Extrasensory", "Sky Uppercut", "Sand Tomb", "Sheer Cold", "Muddy Water", "Bullet Seed", "Aerial Ace", "Icicle Spear", "Iron Defense", "Block", "Howl", "Dragon Claw", "Frenzy Plant", "Bulk Up", "Bounce", "Mud Shot", "Poison Tail", "Covet", "Volt Tackle", "Magical Leaf", "Water Sport", "Calm Mind", "Leaf Blade", "Dragon Dance", "Rock Blast", "Shock Wave", "Water Pulse", "Doom Desire", "Psycho Boost", "Roost", "Gravity", "Miracle Eye", "Wake-Up Slap", "Hammer Arm", "Gyro Ball", "Healing Wish", "Brine", "Natural Gift", "Feint", "Pluck", "Tailwind", "Acupressure", "Metal Burst", "U-turn", "Close Combat", "Payback", "Assurance", "Embargo", "Fling", "Psycho Shift", "Trump Card", "Heal Block", "Wring Out", "Power Trick", "Gastro Acid", "Lucky Chant", "Me First", "Copycat", "Power Swap", "Guard Swap", "Punishment", "Last Resort", "Worry Seed", "Sucker Punch", "Toxic Spikes", "Heart Swap", "Aqua Ring", "Magnet Rise", "Flare Blitz", "Force Palm", "Aura Sphere", "Rock Polish", "Poison Jab", "Dark Pulse", "Night Slash", "Aqua Tail", "Seed Bomb", "Air Slash", "X-Scissor", "Bug Buzz", "Dragon Pulse", "Dragon Rush", "Power Gem", "Drain Punch", "Vacuum Wave", "Focus Blast", "Energy Ball", "Brave Bird", "Earth Power", "Switcheroo", "Giga Impact", "Nasty Plot", "Bullet Punch", "Avalanche", "Ice Shard", "Shadow Claw", "Thunder Fang", "Ice Fang", "Fire Fang", "Shadow Sneak", "Mud Bomb", "Psycho Cut", "Zen Headbutt", "Mirror Shot", "Flash Cannon", "Rock Climb", "Defog", "Trick Room", "Draco Meteor", "Discharge", "Lava Plume", "Leaf Storm", "Power Whip", "Rock Wrecker", "Cross Poison", "Gunk Shot", "Iron Head", "Magnet Bomb", "Stone Edge", "Captivate", "Stealth Rock", "Grass Knot", "Chatter", "Judgment", "Bug Bite", "Charge Beam", "Wood Hammer", "Aqua Jet", "Attack Order", "Defend Order", "Heal Order", "Head Smash", "Double Hit", "Roar of Time", "Spacial Rend", "Lunar Dance", "Crush Grip", "Magma Storm", "Dark Void", "Seed Flare", "Ominous Wind", "Shadow Force", "Hone Claws", "Wide Guard", "Guard Split", "Power Split", "Wonder Room", "Psyshock", "Venoshock", "Autotomize", "Rage Powder", "Telekinesis", "Magic Room", "Smack Down", "Storm Throw", "Flame Burst", "Sludge Wave", "Quiver Dance", "Heavy Slam", "Synchronoise", "Electro Ball", "Soak", "Flame Charge", "Coil", "Low Sweep", "Acid Spray", "Foul Play", "Simple Beam", "Entrainment", "After You", "Round", "Echoed Voice", "Chip Away", "Clear Smog", "Stored Power", "Quick Guard", "Ally Switch", "Scald", "Shell Smash", "Heal Pulse", "Hex", "Sky Drop", "Shift Gear", "Circle Throw", "Incinerate", "Quash", "Acrobatics", "Reflect Type", "Retaliate", "Final Gambit", "Bestow", "Inferno", "Water Pledge", "Fire Pledge", "Grass Pledge", "Volt Switch", "Struggle Bug", "Bulldoze", "Frost Breath", "Dragon Tail", "Work Up", "Electroweb", "Wild Charge", "Drill Run", "Dual Chop", "Heart Stamp", "Horn Leech", "Sacred Sword", "Razor Shell", "Heat Crash", "Leaf Tornado", "Steamroller", "Cotton Guard", "Night Daze", "Psystrike", "Tail Slap", "Hurricane", "Head Charge", "Gear Grind", "Searing Shot", "Techno Blast", "Relic Song", "Secret Sword", "Glaciate", "Bolt Strike", "Blue Flare", "Fiery Dance", "Freeze Shock", "Ice Burn", "Snarl", "Icicle Crash", "V-create", "Fusion Flare", "Fusion Bolt", "Flying Press", "Mat Block", "Belch", "Rototiller", "Sticky Web", "Fell Stinger", "Phantom Force", "Trick-or-Treat", "Noble Roar", "Ion Deluge", "Parabolic Charge", "Forest's Curse", "Petal Blizzard", "Freeze-Dry", "Disarming Voice", "Parting Shot", "Topsy-Turvy", "Draining Kiss", "Crafty Shield", "Flower Shield", "Grassy Terrain", "Misty Terrain", "Electrify", "Play Rough", "Fairy Wind", "Moonblast", "Boomburst", "Fairy Lock", "King's Shield", "Play Nice", "Confide", "Diamond Storm", "Steam Eruption", "Hyperspace Hole", "Water Shuriken", "Mystical Fire", "Spiky Shield", "Aromatic Mist", "Eerie Impulse", "Venom Drench", "Powder", "Geomancy", "Magnetic Flux", "Happy Hour", "Electric Terrain", "Dazzling Gleam", "Celebrate", "Hold Hands", "Baby-Doll Eyes", "Nuzzle", "Hold Back", "Infestation", "Power-Up Punch", "Oblivion Wing", "Thousand Arrows", "Thousand Waves", "Land's Wrath", "Light of Ruin", "Origin Pulse", "Precipice Blades", "Dragon Ascent", "Hyperspace Fury", "Breakneck Blitz", "Breakneck Blitz", "All-Out Pummeling", "All-Out Pummeling", "Supersonic Skystrike", "Supersonic Skystrike", "Acid Downpour", "Acid Downpour", "Tectonic Rage", "Tectonic Rage", "Continental Crush", "Continental Crush", "Savage Spin-Out", "Savage Spin-Out", "Never-Ending Nightmare", "Never-Ending Nightmare", "Corkscrew Crash", "Corkscrew Crash", "Inferno Overdrive", "Inferno Overdrive", "Hydro Vortex", "Hydro Vortex", "Bloom Doom", "Bloom Doom", "Gigavolt Havoc", "Gigavolt Havoc", "Shattered Psyche", "Shattered Psyche", "Subzero Slammer", "Subzero Slammer", "Devastating Drake", "Devastating Drake", "Black Hole Eclipse", "Black Hole Eclipse", "Twinkle Tackle", "Twinkle Tackle", "Catastropika", "Shore Up", "First Impression", "Baneful Bunker", "Spirit Shackle", "Darkest Lariat", "Sparkling Aria", "Ice Hammer", "Floral Healing", "High Horsepower", "Strength Sap", "Solar Blade", "Leafage", "Spotlight", "Toxic Thread", "Laser Focus", "Gear Up", "Throat Chop", "Pollen Puff", "Anchor Shot", "Psychic Terrain", "Lunge", "Fire Lash", "Power Trip", "Burn Up", "Speed Swap", "Smart Strike", "Purify", "Revelation Dance", "Core Enforcer", "Trop Kick", "Instruct", "Beak Blast", "Clanging Scales", "Dragon Hammer", "Brutal Swing", "Aurora Veil", "Sinister Arrow Raid", "Malicious Moonsault", "Oceanic Operetta", "Guardian of Alola", "Soul-Stealing 7-Star Strike", "Stoked Sparksurfer", "Pulverizing Pancake", "Extreme Evoboost", "Genesis Supernova", "Shell Trap", "Fleur Cannon", "Psychic Fangs", "Stomping Tantrum", "Shadow Bone", "Accelerock", "Liquidation", "Prismatic Laser", "Spectral Thief", "Sunsteel Strike", "Moongeist Beam", "Tearful Look", "Zing Zap", "Nature's Madness", "Multi-Attack", "10,000,000 Volt Thunderbolt", "Mind Blown", "Plasma Fists", "Photon Geyser", "Light That Burns the Sky", "Searing Sunraze Smash", "Menacing Moonraze Maelstrom", "Let's Snuggle Forever", "Splintered Stormshards", "Clangorous Soulblaze", "Zippy Zap", "Splishy Splash", "Floaty Fall", "Pika Papow", "Bouncy Bubble", "Buzzy Buzz", "Sizzly Slide", "Glitzy Glow", "Baddy Bad", "Sappy Seed", "Freezy Frost", "Sparkly Swirl", "Veevee Volley", "Double Iron Bash"
  140.         ];
  141.         return moveIndexArr[n - 1];
  142.     }
  143.  
  144.     function parseIVs(a) {
  145.         for (var i = 0; i < a.length; i++) {
  146.             switch (a[i]) {
  147.             case 0:
  148.                 a[i] = "[U][B]0[/B][/U]";
  149.                 break;
  150.             case 31:
  151.                 a[i] = "[COLOR=#ff0000][B]31[/B][/COLOR]";
  152.                 break;
  153.             default:
  154.                 var isHT = checkIfHT(i);
  155.                 if (isHT) {
  156.                     a[i] = "HT(" + a[i] + ")";
  157.                 }
  158.             }
  159.         }
  160.         return a;
  161.     }
  162.  
  163.     function checkIfHT(index) {
  164.         var htBit = toPaddedHexString(data[0xDE].toString(16), 2);
  165.         htBit = parseInt(htBit, 16).toString(2).split("").reverse();
  166.         if (htBit[index] === "1") return true;
  167.         return false;
  168.     }
  169.  
  170.     function getHiddenPowerType(num) {
  171.         var HPTable = [
  172.             "Fighting", "Flying", "Poison", "Ground", "Rock", "Bug", "Ghost", "Steel", "Fire", "Water", "Grass", "Electric", "Psychic", "Ice", "Dragon", "Dark"
  173.         ];
  174.         return HPTable[num];
  175.     }
  176.  
  177.     function calcHiddenPower(IVs) {
  178.         var HPnum = Math.floor((((IVs[0] % 2) + (2 * (IVs[1] % 2)) + (4 * (IVs[2] % 2)) + (8 * (IVs[5] % 2)) + (16 * (IVs[3] % 2)) + (32 * (IVs[4] % 2))) * 15) / 63);
  179.         return getHiddenPowerType(HPnum);
  180.     }
  181.  
  182.     function ballLookup(val) {
  183.         var balls = [
  184.             "None", "Master", "Ultra", "Great", "Poke", "Safari", "Net", "Dive", "Nest", "Repeat", "Timer", "Luxury", "Premier", "Dusk", "Heal", "Quick", "Cherish", "Fast", "Level", "Lure", "Heavy", "Love", "Friend", "Moon", "Sport", "Dream", "Beast"
  185.         ];
  186.         return balls[val];
  187.     }
  188.    
  189.     function getGen(game) {
  190.         if (game === 24 || game === 25 || game === 26 || game === 27) return 6;
  191.         if (game === 30 || game === 31 || game === 32 || game === 33) return 7;
  192.         if (game === 35 || game === 36 || game === 37 || game === 38) return 1;
  193.         if (game === 39 || game === 40 || game === 41) return 2;
  194.     }
  195. }
  196.  
  197. readWriteSync();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement