diff --git a/data/generator/gamesave/createnpc.mjs b/data/generator/gamesave/createnpc.mjs index e074129..1699a8e 100644 --- a/data/generator/gamesave/createnpc.mjs +++ b/data/generator/gamesave/createnpc.mjs @@ -26,7 +26,7 @@ const randString = () => { name: trainerName, password: randString() + randString() + randString(), role: "npc", - money: 150 + Math.round(Math.random() * 400) + money: 300 + Math.round(Math.random() * 400) } trainerUsers.push(trainerUser); } @@ -36,7 +36,7 @@ const randString = () => { let j = 0; for(let i = 0; i < trainerUsers.length; i++) { const trainerUser = trainerUsers[i]; - const monsterCount = 1 + Math.floor(Math.random() * 5); + const monsterCount = 3 + Math.floor(Math.random() * 5); for(let k = 0; k < monsterCount; k++) { const monsterType = monsters[Math.floor(Math.random() * monsters.length)]; const trainerMonster = { @@ -45,7 +45,7 @@ const randString = () => { referenceId: monsterType.id, name: monsterType.name, experiencePoints: 30 + Math.round(Math.random() * 600), - healthPoints: monsterType.healthPoints + Math.floor((Math.random() * 2 - 1) * 0.3 * monsterType.healthPoints), + healthPoints: monsterType.healthPoints, attackPower: monsterType.attackPower + Math.floor((Math.random() * 2 - 1) * 0.3 * monsterType.attackPower), defensePower: monsterType.defensePower + Math.floor((Math.random() * 2 - 1) * 0.3 * monsterType.defensePower), activePotions: [] diff --git a/data/generator/gamesave/generatelaboratory.mjs b/data/generator/gamesave/generatelaboratory.mjs index ac0ec10..3422dfb 100644 --- a/data/generator/gamesave/generatelaboratory.mjs +++ b/data/generator/gamesave/generatelaboratory.mjs @@ -23,9 +23,9 @@ const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); continue; } let cost = 0; - cost += (currentMonster.healthPoints - lastMonster.healthPoints) * 2.2; - cost += (currentMonster.attackPower - lastMonster.attackPower) * 14.2; - cost += (currentMonster.defensePower - lastMonster.defensePower) * 11.7; + cost += (currentMonster.healthPoints - lastMonster.healthPoints) * 13.2; + cost += (currentMonster.attackPower - lastMonster.attackPower) * 40.2; + cost += (currentMonster.defensePower - lastMonster.defensePower) * 74.3; cost = Math.round(cost / 75) * 75; cost = Math.max(300, cost); upgradeOptions.push({ diff --git a/data/generator/gamesave/laboratory.csv b/data/generator/gamesave/laboratory.csv deleted file mode 100644 index f7fae44..0000000 --- a/data/generator/gamesave/laboratory.csv +++ /dev/null @@ -1,281 +0,0 @@ -0;0;1;300 -1;1;2;2100 -2;2;3;2100 -3;3;4;2100 -4;5;6;300 -5;6;7;2025 -6;7;8;2025 -7;8;9;2025 -8;10;11;300 -9;11;12;2100 -10;12;13;2025 -11;13;14;2100 -12;15;16;300 -13;16;17;1575 -14;17;18;1575 -15;18;19;1575 -16;20;21;300 -17;21;22;1575 -18;22;23;1575 -19;23;24;1575 -20;25;26;300 -21;26;27;1800 -22;27;28;1800 -23;28;29;1800 -24;30;31;300 -25;31;32;2100 -26;32;33;2175 -27;33;34;2100 -28;35;36;300 -29;36;37;2100 -30;37;38;2100 -31;38;39;2100 -32;40;41;300 -33;41;42;1650 -34;42;43;1650 -35;43;44;1650 -36;45;46;300 -37;46;47;2325 -38;47;48;2325 -39;48;49;2325 -40;50;51;300 -41;51;52;1800 -42;52;53;1800 -43;53;54;1800 -44;55;56;300 -45;56;57;1425 -46;57;58;1425 -47;58;59;1425 -48;60;61;300 -49;61;62;2850 -50;62;63;2850 -51;63;64;2850 -52;65;66;300 -53;66;67;2475 -54;67;68;2475 -55;68;69;2475 -56;70;71;300 -57;71;72;2400 -58;72;73;2400 -59;73;74;2400 -60;75;76;300 -61;76;77;1650 -62;77;78;1650 -63;78;79;1650 -64;80;81;300 -65;81;82;1650 -66;82;83;1650 -67;83;84;1650 -68;85;86;300 -69;86;87;3150 -70;87;88;3150 -71;88;89;3150 -72;90;91;300 -73;91;92;2175 -74;92;93;2175 -75;93;94;2175 -76;95;96;300 -77;96;97;1725 -78;97;98;1725 -79;98;99;1725 -80;100;101;300 -81;101;102;2400 -82;102;103;2400 -83;103;104;2400 -84;105;106;300 -85;106;107;2550 -86;107;108;2550 -87;108;109;2550 -88;110;111;300 -89;111;112;2700 -90;112;113;2775 -91;113;114;2700 -92;115;116;300 -93;116;117;2175 -94;117;118;2175 -95;118;119;2175 -96;120;121;300 -97;121;122;2100 -98;122;123;2100 -99;123;124;2100 -100;125;126;300 -101;126;127;2400 -102;127;128;2400 -103;128;129;2400 -104;130;131;300 -105;131;132;1425 -106;132;133;1425 -107;133;134;1425 -108;135;136;300 -109;136;137;2025 -110;137;138;2025 -111;138;139;2025 -112;140;141;300 -113;141;142;1500 -114;142;143;1500 -115;143;144;1500 -116;145;146;300 -117;146;147;1575 -118;147;148;1650 -119;148;149;1575 -120;150;151;300 -121;151;152;2025 -122;152;153;2025 -123;153;154;2025 -124;155;156;300 -125;156;157;2325 -126;157;158;2325 -127;158;159;2325 -128;160;161;300 -129;161;162;1950 -130;162;163;1950 -131;163;164;1950 -132;165;166;300 -133;166;167;2250 -134;167;168;2250 -135;168;169;2250 -136;170;171;300 -137;171;172;2400 -138;172;173;2400 -139;173;174;2400 -140;175;176;300 -141;176;177;1575 -142;177;178;1575 -143;178;179;1575 -144;180;181;300 -145;181;182;1650 -146;182;183;1650 -147;183;184;1650 -148;185;186;300 -149;186;187;2400 -150;187;188;2400 -151;188;189;2400 -152;190;191;300 -153;191;192;2250 -154;192;193;2250 -155;193;194;2250 -156;195;196;300 -157;196;197;2475 -158;197;198;2475 -159;198;199;2475 -160;200;201;300 -161;201;202;1725 -162;202;203;1725 -163;203;204;1725 -164;205;206;300 -165;206;207;2700 -166;207;208;2700 -167;208;209;2700 -168;210;211;300 -169;211;212;1575 -170;212;213;1575 -171;213;214;1575 -172;215;216;300 -173;216;217;2325 -174;217;218;2325 -175;218;219;2325 -176;220;221;300 -177;221;222;2400 -178;222;223;2400 -179;223;224;2400 -180;225;226;300 -181;226;227;2025 -182;227;228;2100 -183;228;229;2025 -184;230;231;300 -185;231;232;2475 -186;232;233;2475 -187;233;234;2475 -188;235;236;300 -189;236;237;2175 -190;237;238;2175 -191;238;239;2175 -192;240;241;300 -193;241;242;2250 -194;242;243;2250 -195;243;244;2250 -196;245;246;300 -197;246;247;1950 -198;247;248;1950 -199;248;249;1950 -200;250;251;300 -201;251;252;2175 -202;252;253;2175 -203;253;254;2175 -204;255;256;300 -205;260;261;300 -206;261;262;2550 -207;262;263;2550 -208;263;264;2550 -209;265;266;300 -210;266;267;2025 -211;267;268;2025 -212;268;269;2025 -213;270;271;300 -214;271;272;2550 -215;272;273;2550 -216;273;274;2550 -217;275;276;300 -218;276;277;2100 -219;277;278;2175 -220;278;279;2100 -221;280;281;300 -222;281;282;2100 -223;282;283;2100 -224;283;284;2100 -225;285;286;300 -226;286;287;2475 -227;287;288;2550 -228;288;289;2475 -229;290;291;300 -230;291;292;2925 -231;292;293;2925 -232;293;294;2925 -233;295;296;300 -234;296;297;2100 -235;297;298;2100 -236;298;299;2100 -237;300;301;300 -238;301;302;2100 -239;302;303;2175 -240;303;304;2100 -241;305;306;300 -242;306;307;1650 -243;307;308;1650 -244;308;309;1650 -245;310;311;300 -246;311;312;2400 -247;312;313;2400 -248;313;314;2400 -249;315;316;300 -250;316;317;1800 -251;317;318;1800 -252;318;319;1800 -253;320;321;300 -254;321;322;1800 -255;322;323;1800 -256;323;324;1800 -257;325;326;300 -258;326;327;1950 -259;327;328;1950 -260;328;329;1950 -261;330;331;300 -262;331;332;2025 -263;332;333;2100 -264;333;334;2025 -265;335;336;300 -266;336;337;1875 -267;337;338;1950 -268;338;339;1875 -269;340;341;300 -270;341;342;1800 -271;342;343;1800 -272;343;344;1800 -273;345;346;300 -274;346;347;2625 -275;347;348;2625 -276;348;349;2625 -277;350;351;300 -278;351;352;2400 -279;352;353;2400 -280;353;354;2400 \ No newline at end of file diff --git a/data/generator/monsters/generateogmonsters.mjs b/data/generator/monsters/generateogmonsters.mjs index 04a12d0..0c85654 100644 --- a/data/generator/monsters/generateogmonsters.mjs +++ b/data/generator/monsters/generateogmonsters.mjs @@ -18,15 +18,16 @@ const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); for(let i = 0; i < 5; i++) { const m = sameFamilies[i]; if(i == 0) { + m.defensePower = Math.round(m.defensePower / 200 * 100); newMonsters.push(m); continue; } if(m != null) { newMonsters.push({ ...m, - healthPoints: Math.round(baseMonster.healthPoints * i * 1.1), - attackPower: Math.round(baseMonster.attackPower * i * 1.1), - defensePower: Math.round(baseMonster.defensePower * i * 1.1), + healthPoints: Math.round(baseMonster.healthPoints * (1 + i * 0.1)), + attackPower: Math.round(baseMonster.attackPower * (1 + i * 0.1)), + defensePower: Math.min(50, Math.round(baseMonster.defensePower * (1 + i * 0.1))), }); continue; } @@ -36,44 +37,15 @@ const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); strId: `${lastMonster.strId}-${i - sameFamilies.length}`, name: `${lastMonster.name}-${i - sameFamilies.length + 1}`, level: i + 1, - healthPoints: Math.round(baseMonster.healthPoints * i * 1.1), - attackPower: Math.round(baseMonster.attackPower * i * 1.1), - defensePower: Math.round(baseMonster.defensePower * i * 1.1), + healthPoints: Math.round(baseMonster.healthPoints * (1 + i * 0.1)), + attackPower: Math.round(baseMonster.attackPower * (1 + i * 0.1)), + defensePower: Math.min(50, Math.round(baseMonster.defensePower * (1 + i * 0.1))), }); } } newMonsters.forEach((m, i) => m.id = i); monsters.splice(0, monsters.length, ...newMonsters); - const upgradeOptions = []; - for(const family of families) { - let currentLevel = 1; - let lastMonster = null; - while(true) { - const currentMonster = monsters.find(m => m.family == family && m.level == currentLevel); - if(currentMonster == null) - break; - if(lastMonster == null) { - currentLevel++; - lastMonster = currentMonster; - continue; - } - let cost = 0; - cost += (currentMonster.healthPoints - lastMonster.healthPoints) * 2.2; - cost += (currentMonster.attackPower - lastMonster.attackPower) * 14.2; - cost += (currentMonster.defensePower - lastMonster.defensePower) * 11.7; - cost = Math.round(cost / 75) * 75; - cost = Math.max(300, cost); - upgradeOptions.push({ - fromMonsterId: lastMonster.id, - toMonsterId: currentMonster.id, - cost: cost - }); - currentLevel++; - lastMonster = currentMonster; - } - } - await fs.writeFile(path.join(__dirname, "og-database_monster.json"), JSON.stringify(monsters, null, 4)); const csv = monsters.map(m => [ diff --git a/data/saves/default-save/database_inventory_item.csv b/data/saves/default-save/database_inventory_item.csv index e25c754..e69de29 100644 --- a/data/saves/default-save/database_inventory_item.csv +++ b/data/saves/default-save/database_inventory_item.csv @@ -1 +0,0 @@ -0;1;4;2 diff --git a/data/saves/default-save/database_inventory_monster.csv b/data/saves/default-save/database_inventory_monster.csv index 21724ff..e7499cc 100644 --- a/data/saves/default-save/database_inventory_monster.csv +++ b/data/saves/default-save/database_inventory_monster.csv @@ -1,75 +1,145 @@ -0;1;1;My cute monster;0;100;20;650;0`30000`2|0`30000`3 -1;6;260;Gible;219;297;69;86; -2;6;342;Chandelure;89;536;134;57; -3;6;354;Hydreigon-2;324;1214;239;240; -4;7;95;Horsea;184;381;34;40; -5;8;196;Lairon;524;447;51;60; -6;9;66;Weepinbell;276;422;68;68; -7;10;295;Tympole;440;372;41;54; -8;10;122;Meganium;602;543;125;98; -9;11;204;Roserade-2;195;1139;163;156; -10;11;122;Meganium;238;491;98;103; -11;11;95;Horsea;57;220;23;45; -12;11;49;Wigglytuff-2;614;962;416;118; -13;11;125;Totodile;242;371;48;74; -14;12;22;Beedrill;182;464;106;71; -15;12;352;Hydreigon;192;801;127;122; -16;13;96;Seadra;593;300;28;39; -17;14;297;Seismitoad;626;547;103;95; -18;14;226;Metang;192;312;32;76; -19;14;73;Golem-1;373;942;163;185; -20;15;54;Crobat-2;268;1195;180;239; -21;15;102;Electivire;272;896;109;142; -22;15;67;Victreebel;621;514;133;176; -23;15;297;Seismitoad;318;574;116;131; -24;15;182;Shiftry;276;573;111;111; -25;16;277;Stoutland;421;489;80;126; -26;16;192;Exploud;447;432;174;109; -27;16;50;Zubat;141;223;39;53; -28;17;4;Venusaur-2;123;1316;177;263; -29;18;75;Magnemite;265;315;20;33; -30;18;250;Shinx;116;336;49;46; -31;18;65;Bellsprout;164;288;43;88; -32;19;175;Lotad;471;251;34;27; -33;19;279;Stoutland-2;250;959;163;233; -34;19;138;Ampharos-1;206;835;150;149; -35;19;337;Eelektross;103;701;59;125; -36;20;59;Alakazam-2;171;1560;131;66; -37;20;158;Tyranitar-1;591;1154;163;159; -38;20;70;Geodude;354;324;34;88; -39;20;198;Aggron-1;538;810;201;204; -40;21;156;Pupitar;201;402;40;52; -41;21;166;Combusken;359;432;54;81; -42;21;84;Gengar-2;327;1120;111;187; -43;21;7;Charizard;86;510;108;116; -44;22;195;Aron;422;272;58;51; -45;23;327;Vanilluxe;430;508;80;138; -46;23;324;Reuniclus-2;90;1413;165;129; -47;23;42;Clefable;121;446;91;61; -48;23;166;Combusken;499;322;51;82; -49;24;179;Ludicolo-2;173;957;176;162; -50;24;246;Staravia;71;310;40;46; -51;24;318;Gothitelle-1;94;1170;136;103; -52;25;192;Exploud;302;435;142;109; -53;25;241;Prinplup;241;373;62;64; -54;26;199;Aggron-2;248;1149;234;296; -55;26;92;Blissey;239;399;242;11; -56;26;198;Aggron-1;46;837;175;272; -57;26;91;Chansey;606;251;135;5; -58;27;12;Blastoise;60;746;77;118; -59;27;202;Roserade;153;631;74;64; -60;27;39;Nidoking-2;165;1202;182;199; -61;27;159;Tyranitar-2;544;1385;200;234; -62;27;151;Piloswine;310;315;61;42; -63;28;292;Conkeldurr;507;689;170;147; -64;28;253;Luxray-1;260;905;115;168; -65;28;200;Budew;357;284;32;37; -66;29;79;Magnezone-2;237;1616;115;191; -67;30;285;Roggenrola;358;361;67;94; -68;30;108;Magmortar-1;149;952;126;279; -69;31;234;Torterra-2;370;1058;263;290; -70;31;351;Zweilous;213;304;70;64; -71;32;85;Rhyhorn;413;441;81;62; -72;32;298;Seismitoad-1;495;762;197;134; -73;32;31;Nidorina;509;351;68;42; -74;32;350;Deino;205;238;41;70; +0;1;1;My cute monster;0.0;350.0;50.0;28.0; +1;6;340;Litwick;288;275;58;18; +2;6;258;Mothim-1;543;291;46;19; +3;6;298;Seismitoad-1;239;382;55;29; +4;7;324;Reuniclus-2;529;406;70;19; +5;7;185;Slakoth;338;280;44;21; +6;7;33;Nidoqueen-1;403;358;78;38; +7;7;221;Shelgon;621;330;47;50; +8;7;246;Staravia;525;270;47;38; +9;7;47;Wigglytuff;262;252;77;14; +10;7;134;Togekiss-2;476;343;52;10; +11;8;346;Fraxure;438;352;46;56; +12;8;333;Klinklang-1;312;390;49;33; +13;8;67;Victreebel;537;360;73;55; +14;8;107;Magmortar;336;438;58;53; +15;8;50;Zubat;292;245;42;17; +16;9;16;Metapod;314;215;54;20; +17;9;101;Electabuzz;117;396;49;29; +18;9;277;Stoutland;414;330;52;34; +19;9;74;Golem-2;73;420;60;36; +20;9;244;Empoleon-2;593;440;68;38; +21;10;272;Emboar;144;370;84;33; +22;10;330;Klink;579;300;51;24; +23;10;347;Haxorus;612;384;62;58; +24;10;317;Gothitelle;165;348;68;17; +25;10;45;Igglybuff;221;210;98;19; +26;10;63;Machamp-1;428;397;81;61; +27;10;84;Gengar-2;479;434;48;27; +28;11;335;Tynamo;133;275;35;24; +29;11;314;Krookodile-2;446;409;59;45; +30;11;17;Butterfree;169;234;56;16; +31;11;143;Azumarill-1;560;247;67;13; +32;11;119;Dragonite-2;151;420;41;42; +33;11;212;Dusknoir;543;354;23;17; +34;12;202;Roserade;137;336;37;20; +35;12;218;Walrein-1;38;377;110;30; +36;12;308;Scolipede-1;408;338;33;29; +37;12;145;Hoppip;142;250;36;18; +38;13;31;Nidorina;75;303;47;20; +39;13;243;Empoleon-1;584;408;53;23; +40;13;202;Roserade;180;336;49;18; +41;13;285;Roggenrola;206;280;41;36; +42;13;161;Grovyle;452;341;51;31; +43;13;22;Beedrill;322;234;50;25; +44;13;225;Beldum;197;300;49;36; +45;14;255;Burmy;186;224;40;16; +46;14;237;Infernape;297;371;44;28; +47;14;47;Wigglytuff;207;252;83;12; +48;14;195;Aron;367;330;41;42; +49;15;4;Venusaur-2;210;445;67;30; +50;15;333;Klinklang-1;200;390;58;27; +51;15;142;Azumarill;287;228;57;15; +52;15;316;Gothorita;38;319;44;19; +53;15;257;Mothim;598;269;37;17; +54;15;273;Emboar-1;412;400;65;35; +55;16;264;Garchomp-2;453;420;59;55; +56;16;279;Stoutland-2;542;385;49;33; +57;16;148;Jumpluff-1;206;325;46;27; +58;17;26;Pidgeotto;629;276;38;27; +59;17;20;Weedle;315;195;42;16; +60;17;351;Zweilous;592;330;65;34; +61;17;87;Rhyperior;97;414;113;53; +62;17;294;Conkeldurr-2;230;427;105;49; +63;17;70;Geodude;605;300;30;38; +64;18;219;Walrein-2;277;406;99;24; +65;18;237;Infernape;361;371;51;28; +66;18;121;Bayleef;581;350;58;20; +67;18;331;Klang;78;330;45;37; +68;18;174;Swampert-2;237;434;56;53; +69;18;165;Torchic;52;310;58;36; +70;18;341;Lampent;283;303;52;21; +71;19;61;Machoke;186;336;69;35; +72;19;227;Metagross;275;360;58;38; +73;19;307;Scolipede;375;312;37;34; +74;19;250;Shinx;614;263;46;29; +75;19;206;Vibrava;140;319;53;56; +76;19;144;Azumarill-2;488;266;59;14; +77;20;225;Beldum;298;300;43;27; +78;20;272;Emboar;513;370;100;34; +79;20;341;Lampent;46;303;43;14; +80;20;279;Stoutland-2;365;385;45;31; +81;20;155;Larvitar;491;300;40;38; +82;20;138;Ampharos-1;288;364;80;31; +83;20;30;Nidoran♀;562;275;58;21; +84;21;293;Conkeldurr-1;91;397;106;37; +85;21;354;Hydreigon-2;523;420;82;39; +86;21;305;Venipede;257;260;37;27; +87;21;321;Duosion;386;319;50;15; +88;21;103;Electivire-1;328;468;70;35; +89;21;182;Shiftry;456;264;41;24; +90;22;279;Stoutland-2;346;385;50;54; +91;22;255;Burmy;252;224;43;12; +92;22;331;Klang;124;330;34;24; +93;22;32;Nidoqueen;67;330;50;22; +94;22;171;Marshtomp;445;341;58;44; +95;23;206;Vibrava;406;319;43;38; +96;23;271;Pignite;304;339;83;26; +97;23;218;Walrein-1;615;377;69;32; +98;23;228;Metagross-1;263;390;45;29; +99;23;73;Golem-1;502;390;38;50; +100;24;67;Victreebel;463;360;56;58; +101;24;248;Staraptor-1;189;319;46;46; +102;24;236;Monferno;563;340;42;36; +103;24;133;Togekiss-1;268;319;40;12; +104;24;15;Caterpie;466;195;44;13; +105;24;170;Mudkip;141;310;59;34; +106;25;223;Salamence-1;258;390;48;35; +107;25;127;Feraligatr;431;377;42;45; +108;25;273;Emboar-1;443;400;64;41; +109;25;99;Kingdra-2;559;413;44;27; +110;25;284;Unfezant-2;239;370;87;50; +111;26;94;Blissey-2;576;308;139;4; +112;26;346;Fraxure;95;352;48;49; +113;26;171;Marshtomp;198;341;54;42; +114;26;52;Crobat;34;294;45;20; +115;26;281;Tranquill;218;290;47;27; +116;27;286;Boldore;410;308;62;48; +117;27;69;Victreebel-2;479;420;81;35; +118;27;56;Kadabra;613;341;20;9; +119;28;253;Luxray-1;403;342;60;47; +120;28;198;Aggron-1;99;429;54;52; +121;28;39;Nidoking-2;281;382;52;50; +122;28;345;Axew;161;320;35;38; +123;29;201;Roselia;345;308;34;13; +124;29;231;Grotle;524;350;72;43; +125;29;173;Swampert-1;398;403;68;33; +126;29;284;Unfezant-2;392;370;57;29; +127;29;69;Victreebel-2;346;420;54;55; +128;29;19;Butterfree-2;296;273;54;20; +129;29;266;Servine;326;339;52;17; +130;30;164;Sceptile-2;266;434;51;23; +131;30;128;Feraligatr-1;587;408;77;55; +132;30;226;Metang;242;330;32;30; +133;31;252;Luxray;308;316;56;37; +134;31;39;Nidoking-2;175;382;79;40; +135;31;337;Eelektross;551;330;44;27; +136;31;291;Gurdurr;356;336;101;47; +137;31;322;Reuniclus;68;348;49;22; +138;31;303;Leavanny-1;569;403;75;30; +139;32;205;Trapinch;40;290;35;62; +140;32;242;Empoleon;175;377;45;28; +141;32;319;Gothitelle-2;124;406;50;16; +142;32;299;Seismitoad-2;283;412;51;40; +143;32;14;Blastoise-2;195;440;61;40; +144;32;345;Axew;211;320;32;53; diff --git a/data/saves/default-save/database_laboratory.csv b/data/saves/default-save/database_laboratory.csv index ad61180..d3dd3d9 100644 --- a/data/saves/default-save/database_laboratory.csv +++ b/data/saves/default-save/database_laboratory.csv @@ -1,281 +1,281 @@ -0;0;1;300 -1;1;2;2100 -2;2;3;2100 -3;3;4;2100 -4;5;6;300 -5;6;7;2025 -6;7;8;2025 -7;8;9;2025 -8;10;11;300 -9;11;12;2100 -10;12;13;2025 -11;13;14;2100 -12;15;16;300 -13;16;17;1575 -14;17;18;1575 -15;18;19;1575 -16;20;21;300 -17;21;22;1575 -18;22;23;1575 -19;23;24;1575 -20;25;26;300 -21;26;27;1800 -22;27;28;1800 -23;28;29;1800 -24;30;31;300 -25;31;32;2100 -26;32;33;2175 -27;33;34;2100 -28;35;36;300 -29;36;37;2100 -30;37;38;2100 -31;38;39;2100 -32;40;41;300 -33;41;42;1650 -34;42;43;1650 -35;43;44;1650 -36;45;46;300 -37;46;47;2325 -38;47;48;2325 -39;48;49;2325 -40;50;51;300 -41;51;52;1800 -42;52;53;1800 -43;53;54;1800 -44;55;56;300 -45;56;57;1425 -46;57;58;1425 -47;58;59;1425 -48;60;61;300 -49;61;62;2850 -50;62;63;2850 -51;63;64;2850 -52;65;66;300 -53;66;67;2475 -54;67;68;2475 -55;68;69;2475 -56;70;71;300 -57;71;72;2400 -58;72;73;2400 -59;73;74;2400 -60;75;76;300 -61;76;77;1650 -62;77;78;1650 -63;78;79;1650 -64;80;81;300 -65;81;82;1650 -66;82;83;1650 -67;83;84;1650 -68;85;86;300 -69;86;87;3150 -70;87;88;3150 -71;88;89;3150 -72;90;91;300 -73;91;92;2175 -74;92;93;2175 -75;93;94;2175 -76;95;96;300 -77;96;97;1725 -78;97;98;1725 -79;98;99;1725 -80;100;101;300 -81;101;102;2400 -82;102;103;2400 -83;103;104;2400 -84;105;106;300 -85;106;107;2550 -86;107;108;2550 -87;108;109;2550 -88;110;111;300 -89;111;112;2700 -90;112;113;2775 -91;113;114;2700 -92;115;116;300 -93;116;117;2175 -94;117;118;2175 -95;118;119;2175 -96;120;121;300 -97;121;122;2100 -98;122;123;2100 -99;123;124;2100 -100;125;126;300 -101;126;127;2400 -102;127;128;2400 -103;128;129;2400 -104;130;131;300 -105;131;132;1425 -106;132;133;1425 -107;133;134;1425 -108;135;136;300 -109;136;137;2025 -110;137;138;2025 -111;138;139;2025 -112;140;141;300 -113;141;142;1500 -114;142;143;1500 -115;143;144;1500 -116;145;146;300 -117;146;147;1575 -118;147;148;1650 -119;148;149;1575 -120;150;151;300 -121;151;152;2025 -122;152;153;2025 -123;153;154;2025 -124;155;156;300 -125;156;157;2325 -126;157;158;2325 -127;158;159;2325 -128;160;161;300 -129;161;162;1950 -130;162;163;1950 -131;163;164;1950 -132;165;166;300 -133;166;167;2250 -134;167;168;2250 -135;168;169;2250 -136;170;171;300 -137;171;172;2400 -138;172;173;2400 -139;173;174;2400 -140;175;176;300 -141;176;177;1575 -142;177;178;1575 -143;178;179;1575 -144;180;181;300 -145;181;182;1650 -146;182;183;1650 -147;183;184;1650 -148;185;186;300 -149;186;187;2400 -150;187;188;2400 -151;188;189;2400 -152;190;191;300 -153;191;192;2250 -154;192;193;2250 -155;193;194;2250 -156;195;196;300 -157;196;197;2475 -158;197;198;2475 -159;198;199;2475 -160;200;201;300 -161;201;202;1725 -162;202;203;1725 -163;203;204;1725 -164;205;206;300 -165;206;207;2700 -166;207;208;2700 -167;208;209;2700 -168;210;211;300 -169;211;212;1575 -170;212;213;1575 -171;213;214;1575 -172;215;216;300 -173;216;217;2325 -174;217;218;2325 -175;218;219;2325 -176;220;221;300 -177;221;222;2400 -178;222;223;2400 -179;223;224;2400 -180;225;226;300 -181;226;227;2025 -182;227;228;2100 -183;228;229;2025 -184;230;231;300 -185;231;232;2475 -186;232;233;2475 -187;233;234;2475 -188;235;236;300 -189;236;237;2175 -190;237;238;2175 -191;238;239;2175 -192;240;241;300 -193;241;242;2250 -194;242;243;2250 -195;243;244;2250 -196;245;246;300 -197;246;247;1950 -198;247;248;1950 -199;248;249;1950 -200;250;251;300 -201;251;252;2175 -202;252;253;2175 -203;253;254;2175 -204;255;256;300 -205;260;261;300 -206;261;262;2550 -207;262;263;2550 -208;263;264;2550 -209;265;266;300 -210;266;267;2025 -211;267;268;2025 -212;268;269;2025 -213;270;271;300 -214;271;272;2550 -215;272;273;2550 -216;273;274;2550 -217;275;276;300 -218;276;277;2100 -219;277;278;2175 -220;278;279;2100 -221;280;281;300 -222;281;282;2100 -223;282;283;2100 -224;283;284;2100 -225;285;286;300 -226;286;287;2475 -227;287;288;2550 -228;288;289;2475 -229;290;291;300 -230;291;292;2925 -231;292;293;2925 -232;293;294;2925 -233;295;296;300 -234;296;297;2100 -235;297;298;2100 -236;298;299;2100 -237;300;301;300 -238;301;302;2100 -239;302;303;2175 -240;303;304;2100 -241;305;306;300 -242;306;307;1650 -243;307;308;1650 -244;308;309;1650 -245;310;311;300 -246;311;312;2400 -247;312;313;2400 -248;313;314;2400 -249;315;316;300 -250;316;317;1800 -251;317;318;1800 -252;318;319;1800 -253;320;321;300 -254;321;322;1800 -255;322;323;1800 -256;323;324;1800 -257;325;326;300 -258;326;327;1950 -259;327;328;1950 -260;328;329;1950 -261;330;331;300 -262;331;332;2025 -263;332;333;2100 -264;333;334;2025 -265;335;336;300 -266;336;337;1875 -267;337;338;1950 -268;338;339;1875 -269;340;341;300 -270;341;342;1800 -271;342;343;1800 -272;343;344;1800 -273;345;346;300 -274;346;347;2625 -275;347;348;2625 -276;348;349;2625 -277;350;351;300 -278;351;352;2400 -279;352;353;2400 -280;353;354;2400 +0;0;1;825.0 +1;1;2;750.0 +2;2;3;825.0 +3;3;4;750.0 +4;5;6;825.0 +5;6;7;750.0 +6;7;8;825.0 +7;8;9;750.0 +8;10;11;750.0 +9;11;12;825.0 +10;12;13;750.0 +11;13;14;825.0 +12;15;16;600.0 +13;16;17;450.0 +14;17;18;600.0 +15;18;19;450.0 +16;20;21;600.0 +17;21;22;525.0 +18;22;23;525.0 +19;23;24;525.0 +20;25;26;675.0 +21;26;27;750.0 +22;27;28;675.0 +23;28;29;675.0 +24;30;31;750.0 +25;31;32;750.0 +26;32;33;750.0 +27;33;34;750.0 +28;35;36;750.0 +29;36;37;750.0 +30;37;38;675.0 +31;38;39;750.0 +32;40;41;600.0 +33;41;42;675.0 +34;42;43;525.0 +35;43;44;600.0 +36;45;46;825.0 +37;46;47;750.0 +38;47;48;825.0 +39;48;49;750.0 +40;50;51;675.0 +41;51;52;675.0 +42;52;53;675.0 +43;53;54;600.0 +44;55;56;600.0 +45;56;57;600.0 +46;57;58;600.0 +47;58;59;600.0 +48;60;61;975.0 +49;61;62;975.0 +50;62;63;825.0 +51;63;64;675.0 +52;65;66;900.0 +53;66;67;900.0 +54;67;68;825.0 +55;68;69;675.0 +56;70;71;825.0 +57;71;72;825.0 +58;72;73;675.0 +59;73;74;525.0 +60;75;76;675.0 +61;76;77;675.0 +62;77;78;600.0 +63;78;79;675.0 +64;80;81;675.0 +65;81;82;675.0 +66;82;83;600.0 +67;83;84;675.0 +68;85;86;1050.0 +69;86;87;975.0 +70;87;88;750.0 +71;88;89;750.0 +72;90;91;675.0 +73;91;92;750.0 +74;92;93;675.0 +75;93;94;675.0 +76;95;96;675.0 +77;96;97;675.0 +78;97;98;675.0 +79;98;99;675.0 +80;100;101;900.0 +81;101;102;825.0 +82;102;103;975.0 +83;103;104;825.0 +84;105;106;975.0 +85;106;107;900.0 +86;107;108;900.0 +87;108;109;675.0 +88;110;111;1050.0 +89;111;112;975.0 +90;112;113;1050.0 +91;113;114;975.0 +92;115;116;750.0 +93;116;117;750.0 +94;117;118;825.0 +95;118;119;750.0 +96;120;121;825.0 +97;121;122;750.0 +98;122;123;825.0 +99;123;124;750.0 +100;125;126;825.0 +101;126;127;900.0 +102;127;128;825.0 +103;128;129;825.0 +104;130;131;600.0 +105;131;132;525.0 +106;132;133;600.0 +107;133;134;525.0 +108;135;136;750.0 +109;136;137;750.0 +110;137;138;750.0 +111;138;139;750.0 +112;140;141;525.0 +113;141;142;525.0 +114;142;143;525.0 +115;143;144;525.0 +116;145;146;675.0 +117;146;147;600.0 +118;147;148;600.0 +119;148;149;600.0 +120;150;151;750.0 +121;151;152;675.0 +122;152;153;750.0 +123;153;154;675.0 +124;155;156;825.0 +125;156;157;825.0 +126;157;158;900.0 +127;158;159;825.0 +128;160;161;750.0 +129;161;162;825.0 +130;162;163;750.0 +131;163;164;750.0 +132;165;166;825.0 +133;166;167;825.0 +134;167;168;825.0 +135;168;169;825.0 +136;170;171;900.0 +137;171;172;825.0 +138;172;173;900.0 +139;173;174;825.0 +140;175;176;600.0 +141;176;177;525.0 +142;177;178;600.0 +143;178;179;525.0 +144;180;181;600.0 +145;181;182;600.0 +146;182;183;600.0 +147;183;184;600.0 +148;185;186;825.0 +149;186;187;825.0 +150;187;188;825.0 +151;188;189;825.0 +152;190;191;750.0 +153;191;192;750.0 +154;192;193;750.0 +155;193;194;750.0 +156;195;196;900.0 +157;196;197;825.0 +158;197;198;900.0 +159;198;199;825.0 +160;200;201;675.0 +161;201;202;600.0 +162;202;203;675.0 +163;203;204;600.0 +164;205;206;600.0 +165;206;207;525.0 +166;207;208;600.0 +167;208;209;525.0 +168;210;211;600.0 +169;211;212;600.0 +170;212;213;600.0 +171;213;214;600.0 +172;215;216;825.0 +173;216;217;825.0 +174;217;218;825.0 +175;218;219;825.0 +176;220;221;900.0 +177;221;222;825.0 +178;222;223;825.0 +179;223;224;600.0 +180;225;226;750.0 +181;226;227;750.0 +182;227;228;675.0 +183;228;229;750.0 +184;230;231;900.0 +185;231;232;900.0 +186;232;233;900.0 +187;233;234;900.0 +188;235;236;825.0 +189;236;237;825.0 +190;237;238;825.0 +191;238;239;825.0 +192;240;241;825.0 +193;241;242;825.0 +194;242;243;825.0 +195;243;244;750.0 +196;245;246;750.0 +197;246;247;675.0 +198;247;248;675.0 +199;248;249;675.0 +200;250;251;750.0 +201;251;252;825.0 +202;252;253;750.0 +203;253;254;750.0 +204;255;256;525.0 +205;260;261;900.0 +206;261;262;825.0 +207;262;263;900.0 +208;263;264;825.0 +209;265;266;750.0 +210;266;267;825.0 +211;267;268;750.0 +212;268;269;750.0 +213;270;271;900.0 +214;271;272;900.0 +215;272;273;975.0 +216;273;274;900.0 +217;275;276;825.0 +218;276;277;750.0 +219;277;278;825.0 +220;278;279;750.0 +221;280;281;750.0 +222;281;282;750.0 +223;282;283;675.0 +224;283;284;750.0 +225;285;286;900.0 +226;286;287;900.0 +227;287;288;825.0 +228;288;289;675.0 +229;290;291;1050.0 +230;291;292;975.0 +231;292;293;900.0 +232;293;294;675.0 +233;295;296;825.0 +234;296;297;750.0 +235;297;298;825.0 +236;298;299;750.0 +237;300;301;825.0 +238;301;302;750.0 +239;302;303;825.0 +240;303;304;825.0 +241;305;306;600.0 +242;306;307;675.0 +243;307;308;600.0 +244;308;309;600.0 +245;310;311;900.0 +246;311;312;825.0 +247;312;313;900.0 +248;313;314;825.0 +249;315;316;750.0 +250;316;317;600.0 +251;317;318;750.0 +252;318;319;600.0 +253;320;321;750.0 +254;321;322;600.0 +255;322;323;750.0 +256;323;324;600.0 +257;325;326;825.0 +258;326;327;675.0 +259;327;328;825.0 +260;328;329;675.0 +261;330;331;750.0 +262;331;332;750.0 +263;332;333;675.0 +264;333;334;750.0 +265;335;336;750.0 +266;336;337;675.0 +267;337;338;675.0 +268;338;339;675.0 +269;340;341;750.0 +270;341;342;600.0 +271;342;343;750.0 +272;343;344;600.0 +273;345;346;900.0 +274;346;347;750.0 +275;347;348;600.0 +276;348;349;600.0 +277;350;351;825.0 +278;351;352;900.0 +279;352;353;825.0 +280;353;354;825.0 \ No newline at end of file diff --git a/data/saves/default-save/database_monster.csv b/data/saves/default-save/database_monster.csv index 69df9aa..39f40f9 100644 --- a/data/saves/default-save/database_monster.csv +++ b/data/saves/default-save/database_monster.csv @@ -1,355 +1,355 @@ -0;Bulbasaur;"Bulbasaur is a Grass/Poison type Pokémon introduced in Generation 1.\nBulbasaur is a small, mainly turquoise amphibian Pokémon with red eyes and a green bulb on its back. It is based on a frog/toad, with the bulb resembling a plant bulb that grows into a flower as it evolves.\nBulbasaur is notable for being the very first Pokémon in the National Pokédex. It is one of the three choices for a starter Pokémon in the original Game Boy games, Pokémon Red & Blue (Red & Green in Japan), along with Charmander and Squirtle.";bulbasaur;1;318;45;49;monsters/bulbasaur.png.txt;monsters/bulbasaur_normal.gif.txt;monsters/bulbasaur_back.gif.txt -1;Ivysaur;"Ivysaur is a Grass/Poison type Pokémon introduced in Generation 1.";bulbasaur;2;350;50;54;monsters/ivysaur.png.txt;monsters/ivysaur_normal.gif.txt;monsters/ivysaur_back.gif.txt -2;Venusaur;"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1.\nVenusaur is a large, quadrupedal Pokémon with a turquoise body. It has small red eyes and several large ferns on its back and head. The plant bulb that was on the back of its previous evolutions, Bulbasaur and Ivysaur, has now bloomed into a large flower with large pink petals and a yellow center. The female has a seed in the center.\nVenusaur is inspired by toads and the horned frog. The large flower is similar to the Rafflesia arnoldii, a parasitic plant with an unpleasant odor, referencing the Pokémon's Poison type.\nVenusaur is notable for being the final evolution stage of one of the original starter Pokémon, along with Charizard and Blastoise. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Vine Lash.";bulbasaur;3;700;99;108;monsters/venusaur.png.txt;monsters/venusaur_normal.gif.txt;monsters/venusaur_back.gif.txt -3;Venusaur-1;"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1.\nVenusaur is a large, quadrupedal Pokémon with a turquoise body. It has small red eyes and several large ferns on its back and head. The plant bulb that was on the back of its previous evolutions, Bulbasaur and Ivysaur, has now bloomed into a large flower with large pink petals and a yellow center. The female has a seed in the center.\nVenusaur is inspired by toads and the horned frog. The large flower is similar to the Rafflesia arnoldii, a parasitic plant with an unpleasant odor, referencing the Pokémon's Poison type.\nVenusaur is notable for being the final evolution stage of one of the original starter Pokémon, along with Charizard and Blastoise. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Vine Lash.";bulbasaur;4;1049;149;162;monsters/venusaur.png.txt;monsters/venusaur_normal.gif.txt;monsters/venusaur_back.gif.txt -4;Venusaur-2;"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1.\nVenusaur is a large, quadrupedal Pokémon with a turquoise body. It has small red eyes and several large ferns on its back and head. The plant bulb that was on the back of its previous evolutions, Bulbasaur and Ivysaur, has now bloomed into a large flower with large pink petals and a yellow center. The female has a seed in the center.\nVenusaur is inspired by toads and the horned frog. The large flower is similar to the Rafflesia arnoldii, a parasitic plant with an unpleasant odor, referencing the Pokémon's Poison type.\nVenusaur is notable for being the final evolution stage of one of the original starter Pokémon, along with Charizard and Blastoise. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Vine Lash.";bulbasaur;5;1399;198;216;monsters/venusaur.png.txt;monsters/venusaur_normal.gif.txt;monsters/venusaur_back.gif.txt -5;Charmander;"Charmander is a Fire type Pokémon introduced in Generation 1.\nCharmander is a bipedal, reptilian Pokémon. Most of its body is colored orange, while its underbelly is light yellow and it has blue eyes. It has a flame at the end of its tail, which is said to signify its health.\nCharmander's design is based on a lizard, however as its name suggests it may also have been inspired by salamanders, which in mythology have an affinity with fire.\nCharmander is notable for being one of the three choices for a starter Pokémon in the original Game Boy games, Pokémon Red & Blue (Red & Green in Japan), along with Bulbasaur and Squirtle.";charmander;1;309;39;52;monsters/charmander.png.txt;monsters/charmander_normal.gif.txt;monsters/charmander_back.gif.txt -6;Charmeleon;"Charmeleon is a Fire type Pokémon introduced in Generation 1.";charmander;2;340;43;57;monsters/charmeleon.png.txt;monsters/charmeleon_normal.gif.txt;monsters/charmeleon_back.gif.txt -7;Charizard;"Charizard is a Fire/Flying type Pokémon introduced in Generation 1.\nCharizard is a large dragon-like Pokémon, mainly orange in color. It has two large wings, the underside of which are turquoise. Like Charmander and Charmeleon, it has a flame at the end of its tail.\nThe design of Charizard appears to draw inspiration from dragons of European folklore, with its large wings, horned head, and fiery breath.\nCharizard is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Blastoise. Although it looks like a dragon, it doesn't have the Dragon typing. However it has two Mega Evolutions, available in Generation 6 games and Pokémon Go, one of which replaces its Flying type with Dragon. Charizard also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Wildfire.";charmander;3;680;86;114;monsters/charizard.png.txt;monsters/charizard_normal.gif.txt;monsters/charizard_back.gif.txt -8;Charizard-1;"Charizard is a Fire/Flying type Pokémon introduced in Generation 1.\nCharizard is a large dragon-like Pokémon, mainly orange in color. It has two large wings, the underside of which are turquoise. Like Charmander and Charmeleon, it has a flame at the end of its tail.\nThe design of Charizard appears to draw inspiration from dragons of European folklore, with its large wings, horned head, and fiery breath.\nCharizard is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Blastoise. Although it looks like a dragon, it doesn't have the Dragon typing. However it has two Mega Evolutions, available in Generation 6 games and Pokémon Go, one of which replaces its Flying type with Dragon. Charizard also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Wildfire.";charmander;4;1020;129;172;monsters/charizard.png.txt;monsters/charizard_normal.gif.txt;monsters/charizard_back.gif.txt -9;Charizard-2;"Charizard is a Fire/Flying type Pokémon introduced in Generation 1.\nCharizard is a large dragon-like Pokémon, mainly orange in color. It has two large wings, the underside of which are turquoise. Like Charmander and Charmeleon, it has a flame at the end of its tail.\nThe design of Charizard appears to draw inspiration from dragons of European folklore, with its large wings, horned head, and fiery breath.\nCharizard is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Blastoise. Although it looks like a dragon, it doesn't have the Dragon typing. However it has two Mega Evolutions, available in Generation 6 games and Pokémon Go, one of which replaces its Flying type with Dragon. Charizard also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Wildfire.";charmander;5;1360;172;229;monsters/charizard.png.txt;monsters/charizard_normal.gif.txt;monsters/charizard_back.gif.txt -10;Squirtle;"Squirtle is a Water type Pokémon introduced in Generation 1.\nSquirtle is a bipedal, reptilian Pokémon. It has a blue body with purple eyes, a light brown belly, and a tough red-brown shell on its back. It has a long tail that curls into a spiral.\nSquirtle is primarily based on a turtle, taking inspiration from both land-dwelling and sea-dwelling varieties. The curly tail resembles a crashing wave.\nSquirtle is notable for being one of the three choices for a starter Pokémon in the original Game Boy games, Pokémon Red & Blue (Red & Green in Japan), along with Bulbasaur and Charmander.";squirtle;1;314;44;48;monsters/squirtle.png.txt;monsters/squirtle_normal.gif.txt;monsters/squirtle_back.gif.txt -11;Wartortle;"Wartortle is a Water type Pokémon introduced in Generation 1.";squirtle;2;345;48;53;monsters/wartortle.png.txt;monsters/wartortle_normal.gif.txt;monsters/wartortle_back.gif.txt -12;Blastoise;"Blastoise is a Water type Pokémon introduced in Generation 1.\nBlastoise is a large, bipedal, reptilian Pokémon. It has a blue body with small purple eyes, a light brown belly, and a stubby tail. It has a large brown shell with two powerful water cannons on either side, which can be withdrawn.\nBlastoise's design is heavily influenced by turtles and tortoises. The cannons likely draw inspiration from the concept of a mobile tank or battleship.\nBlastoise is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Charizard. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Cannonade.";squirtle;3;691;97;106;monsters/blastoise.png.txt;monsters/blastoise_normal.gif.txt;monsters/blastoise_back.gif.txt -13;Blastoise-1;"Blastoise is a Water type Pokémon introduced in Generation 1.\nBlastoise is a large, bipedal, reptilian Pokémon. It has a blue body with small purple eyes, a light brown belly, and a stubby tail. It has a large brown shell with two powerful water cannons on either side, which can be withdrawn.\nBlastoise's design is heavily influenced by turtles and tortoises. The cannons likely draw inspiration from the concept of a mobile tank or battleship.\nBlastoise is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Charizard. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Cannonade.";squirtle;4;1036;145;158;monsters/blastoise.png.txt;monsters/blastoise_normal.gif.txt;monsters/blastoise_back.gif.txt -14;Blastoise-2;"Blastoise is a Water type Pokémon introduced in Generation 1.\nBlastoise is a large, bipedal, reptilian Pokémon. It has a blue body with small purple eyes, a light brown belly, and a stubby tail. It has a large brown shell with two powerful water cannons on either side, which can be withdrawn.\nBlastoise's design is heavily influenced by turtles and tortoises. The cannons likely draw inspiration from the concept of a mobile tank or battleship.\nBlastoise is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Charizard. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Cannonade.";squirtle;5;1382;194;211;monsters/blastoise.png.txt;monsters/blastoise_normal.gif.txt;monsters/blastoise_back.gif.txt -15;Caterpie;"Caterpie is a Bug type Pokémon introduced in Generation 1.";caterpie;1;195;45;30;monsters/caterpie.png.txt;monsters/caterpie_normal.gif.txt;monsters/caterpie_back.gif.txt -16;Metapod;"Metapod is a Bug type Pokémon introduced in Generation 1.";caterpie;2;215;50;33;monsters/metapod.png.txt;monsters/metapod_normal.gif.txt;monsters/metapod_back.gif.txt -17;Butterfree;"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1.\nButterfree has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Befuddle.";caterpie;3;429;99;66;monsters/butterfree.png.txt;monsters/butterfree_normal.gif.txt;monsters/butterfree_back.gif.txt -18;Butterfree-1;"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1.\nButterfree has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Befuddle.";caterpie;4;644;149;99;monsters/butterfree.png.txt;monsters/butterfree_normal.gif.txt;monsters/butterfree_back.gif.txt -19;Butterfree-2;"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1.\nButterfree has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Befuddle.";caterpie;5;858;198;132;monsters/butterfree.png.txt;monsters/butterfree_normal.gif.txt;monsters/butterfree_back.gif.txt -20;Weedle;"Weedle is a Bug/Poison type Pokémon introduced in Generation 1.";weedle;1;195;40;35;monsters/weedle.png.txt;monsters/weedle_normal.gif.txt;monsters/weedle_back.gif.txt -21;Kakuna;"Kakuna is a Bug/Poison type Pokémon introduced in Generation 1.";weedle;2;215;44;39;monsters/kakuna.png.txt;monsters/kakuna_normal.gif.txt;monsters/kakuna_back.gif.txt -22;Beedrill;"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1.\nBeedrill has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";weedle;3;429;88;77;monsters/beedrill.png.txt;monsters/beedrill_normal.gif.txt;monsters/beedrill_back.gif.txt -23;Beedrill-1;"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1.\nBeedrill has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";weedle;4;644;132;116;monsters/beedrill.png.txt;monsters/beedrill_normal.gif.txt;monsters/beedrill_back.gif.txt -24;Beedrill-2;"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1.\nBeedrill has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";weedle;5;858;176;154;monsters/beedrill.png.txt;monsters/beedrill_normal.gif.txt;monsters/beedrill_back.gif.txt -25;Pidgey;"Pidgey is a Normal/Flying type Pokémon introduced in Generation 1.";pidgey;1;251;40;45;monsters/pidgey.png.txt;monsters/pidgey_normal.gif.txt;monsters/pidgey_back.gif.txt -26;Pidgeotto;"Pidgeotto is a Normal/Flying type Pokémon introduced in Generation 1.";pidgey;2;276;44;50;monsters/pidgeotto.png.txt;monsters/pidgeotto_normal.gif.txt;monsters/pidgeotto_back.gif.txt -27;Pidgeot;"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1.\nPidgeot has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";pidgey;3;552;88;99;monsters/pidgeot.png.txt;monsters/pidgeot_normal.gif.txt;monsters/pidgeot_back.gif.txt -28;Pidgeot-1;"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1.\nPidgeot has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";pidgey;4;828;132;149;monsters/pidgeot.png.txt;monsters/pidgeot_normal.gif.txt;monsters/pidgeot_back.gif.txt -29;Pidgeot-2;"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1.\nPidgeot has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";pidgey;5;1104;176;198;monsters/pidgeot.png.txt;monsters/pidgeot_normal.gif.txt;monsters/pidgeot_back.gif.txt -30;Nidoran♀;"Nidoran♀ is a Poison type Pokémon introduced in Generation 1.";nidoran-f;1;275;55;47;monsters/nidoran-f.png.txt;monsters/nidoran-f_normal.gif.txt;monsters/nidoran-f_back.gif.txt -31;Nidorina;"Nidorina is a Poison type Pokémon introduced in Generation 1.";nidoran-f;2;303;61;52;monsters/nidorina.png.txt;monsters/nidorina_normal.gif.txt;monsters/nidorina_back.gif.txt -32;Nidoqueen;"Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1.";nidoran-f;3;605;121;103;monsters/nidoqueen.png.txt;monsters/nidoqueen_normal.gif.txt;monsters/nidoqueen_back.gif.txt -33;Nidoqueen-1;"Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1.";nidoran-f;4;908;182;155;monsters/nidoqueen.png.txt;monsters/nidoqueen_normal.gif.txt;monsters/nidoqueen_back.gif.txt -34;Nidoqueen-2;"Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1.";nidoran-f;5;1210;242;207;monsters/nidoqueen.png.txt;monsters/nidoqueen_normal.gif.txt;monsters/nidoqueen_back.gif.txt -35;Nidoran♂;"Nidoran♂ is a Poison type Pokémon introduced in Generation 1.";nidoran-m;1;273;46;57;monsters/nidoran-m.png.txt;monsters/nidoran-m_normal.gif.txt;monsters/nidoran-m_back.gif.txt -36;Nidorino;"Nidorino is a Poison type Pokémon introduced in Generation 1.";nidoran-m;2;300;51;63;monsters/nidorino.png.txt;monsters/nidorino_normal.gif.txt;monsters/nidorino_back.gif.txt -37;Nidoking;"Nidoking is a Poison/Ground type Pokémon introduced in Generation 1.";nidoran-m;3;601;101;125;monsters/nidoking.png.txt;monsters/nidoking_normal.gif.txt;monsters/nidoking_back.gif.txt -38;Nidoking-1;"Nidoking is a Poison/Ground type Pokémon introduced in Generation 1.";nidoran-m;4;901;152;188;monsters/nidoking.png.txt;monsters/nidoking_normal.gif.txt;monsters/nidoking_back.gif.txt -39;Nidoking-2;"Nidoking is a Poison/Ground type Pokémon introduced in Generation 1.";nidoran-m;5;1201;202;251;monsters/nidoking.png.txt;monsters/nidoking_normal.gif.txt;monsters/nidoking_back.gif.txt -40;Cleffa;"Cleffa is a Fairy type Pokémon introduced in Generation 2.";cleffa;1;218;50;25;monsters/cleffa.png.txt;monsters/cleffa_normal.gif.txt;monsters/cleffa_back.gif.txt -41;Clefairy;"Clefairy is a Fairy type Pokémon introduced in Generation 1.";cleffa;2;240;55;28;monsters/clefairy.png.txt;monsters/clefairy_normal.gif.txt;monsters/clefairy_back.gif.txt -42;Clefable;"Clefable is a Fairy type Pokémon introduced in Generation 1.";cleffa;3;480;110;55;monsters/clefable.png.txt;monsters/clefable_normal.gif.txt;monsters/clefable_back.gif.txt -43;Clefable-1;"Clefable is a Fairy type Pokémon introduced in Generation 1.";cleffa;4;719;165;83;monsters/clefable.png.txt;monsters/clefable_normal.gif.txt;monsters/clefable_back.gif.txt -44;Clefable-2;"Clefable is a Fairy type Pokémon introduced in Generation 1.";cleffa;5;959;220;110;monsters/clefable.png.txt;monsters/clefable_normal.gif.txt;monsters/clefable_back.gif.txt -45;Igglybuff;"Igglybuff is a Normal/Fairy type Pokémon introduced in Generation 2.";igglybuff;1;210;90;30;monsters/igglybuff.png.txt;monsters/igglybuff_normal.gif.txt;monsters/igglybuff_back.gif.txt -46;Jigglypuff;"Jigglypuff is a Normal/Fairy type Pokémon introduced in Generation 1.\nIn Generation 9, a Paradox Pokémon Scream Tail was discovered, which bears a striking resemblance to Jigglypuff.";igglybuff;2;231;99;33;monsters/jigglypuff.png.txt;monsters/jigglypuff_normal.gif.txt;monsters/jigglypuff_back.gif.txt -47;Wigglytuff;"Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1.";igglybuff;3;462;198;66;monsters/wigglytuff.png.txt;monsters/wigglytuff_normal.gif.txt;monsters/wigglytuff_back.gif.txt -48;Wigglytuff-1;"Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1.";igglybuff;4;693;297;99;monsters/wigglytuff.png.txt;monsters/wigglytuff_normal.gif.txt;monsters/wigglytuff_back.gif.txt -49;Wigglytuff-2;"Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1.";igglybuff;5;924;396;132;monsters/wigglytuff.png.txt;monsters/wigglytuff_normal.gif.txt;monsters/wigglytuff_back.gif.txt -50;Zubat;"Zubat is a Poison/Flying type Pokémon introduced in Generation 1.";zubat;1;245;40;45;monsters/zubat.png.txt;monsters/zubat_normal.gif.txt;monsters/zubat_back.gif.txt -51;Golbat;"Golbat is a Poison/Flying type Pokémon introduced in Generation 1.";zubat;2;270;44;50;monsters/golbat.png.txt;monsters/golbat_normal.gif.txt;monsters/golbat_back.gif.txt -52;Crobat;"Crobat is a Poison/Flying type Pokémon introduced in Generation 2.";zubat;3;539;88;99;monsters/crobat.png.txt;monsters/crobat_normal.gif.txt;monsters/crobat_back.gif.txt -53;Crobat-1;"Crobat is a Poison/Flying type Pokémon introduced in Generation 2.";zubat;4;809;132;149;monsters/crobat.png.txt;monsters/crobat_normal.gif.txt;monsters/crobat_back.gif.txt -54;Crobat-2;"Crobat is a Poison/Flying type Pokémon introduced in Generation 2.";zubat;5;1078;176;198;monsters/crobat.png.txt;monsters/crobat_normal.gif.txt;monsters/crobat_back.gif.txt -55;Abra;"Abra is a Psychic type Pokémon introduced in Generation 1.";abra;1;310;25;20;monsters/abra.png.txt;monsters/abra_normal.gif.txt;monsters/abra_back.gif.txt -56;Kadabra;"Kadabra is a Psychic type Pokémon introduced in Generation 1.";abra;2;341;28;22;monsters/kadabra.png.txt;monsters/kadabra_normal.gif.txt;monsters/kadabra_back.gif.txt -57;Alakazam;"Alakazam is a Psychic type Pokémon introduced in Generation 1.\nAlakazam has a Mega Evolution, available in Generation 6 games and Pokémon Go.";abra;3;682;55;44;monsters/alakazam.png.txt;monsters/alakazam_normal.gif.txt;monsters/alakazam_back.gif.txt -58;Alakazam-1;"Alakazam is a Psychic type Pokémon introduced in Generation 1.\nAlakazam has a Mega Evolution, available in Generation 6 games and Pokémon Go.";abra;4;1023;83;66;monsters/alakazam.png.txt;monsters/alakazam_normal.gif.txt;monsters/alakazam_back.gif.txt -59;Alakazam-2;"Alakazam is a Psychic type Pokémon introduced in Generation 1.\nAlakazam has a Mega Evolution, available in Generation 6 games and Pokémon Go.";abra;5;1364;110;88;monsters/alakazam.png.txt;monsters/alakazam_normal.gif.txt;monsters/alakazam_back.gif.txt -60;Machop;"Machop is a Fighting type Pokémon introduced in Generation 1.";machop;1;305;70;80;monsters/machop.png.txt;monsters/machop_normal.gif.txt;monsters/machop_back.gif.txt -61;Machoke;"Machoke is a Fighting type Pokémon introduced in Generation 1.";machop;2;336;77;88;monsters/machoke.png.txt;monsters/machoke_normal.gif.txt;monsters/machoke_back.gif.txt -62;Machamp;"Machamp is a Fighting type Pokémon introduced in Generation 1.\nMachamp has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Chi Strike.";machop;3;671;154;176;monsters/machamp.png.txt;monsters/machamp_normal.gif.txt;monsters/machamp_back.gif.txt -63;Machamp-1;"Machamp is a Fighting type Pokémon introduced in Generation 1.\nMachamp has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Chi Strike.";machop;4;1007;231;264;monsters/machamp.png.txt;monsters/machamp_normal.gif.txt;monsters/machamp_back.gif.txt -64;Machamp-2;"Machamp is a Fighting type Pokémon introduced in Generation 1.\nMachamp has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Chi Strike.";machop;5;1342;308;352;monsters/machamp.png.txt;monsters/machamp_normal.gif.txt;monsters/machamp_back.gif.txt -65;Bellsprout;"Bellsprout is a Grass/Poison type Pokémon introduced in Generation 1.";bellsprout;1;300;50;75;monsters/bellsprout.png.txt;monsters/bellsprout_normal.gif.txt;monsters/bellsprout_back.gif.txt -66;Weepinbell;"Weepinbell is a Grass/Poison type Pokémon introduced in Generation 1.";bellsprout;2;330;55;83;monsters/weepinbell.png.txt;monsters/weepinbell_normal.gif.txt;monsters/weepinbell_back.gif.txt -67;Victreebel;"Victreebel is a Grass/Poison type Pokémon introduced in Generation 1.";bellsprout;3;660;110;165;monsters/victreebel.png.txt;monsters/victreebel_normal.gif.txt;monsters/victreebel_back.gif.txt -68;Victreebel-1;"Victreebel is a Grass/Poison type Pokémon introduced in Generation 1.";bellsprout;4;990;165;248;monsters/victreebel.png.txt;monsters/victreebel_normal.gif.txt;monsters/victreebel_back.gif.txt -69;Victreebel-2;"Victreebel is a Grass/Poison type Pokémon introduced in Generation 1.";bellsprout;5;1320;220;330;monsters/victreebel.png.txt;monsters/victreebel_normal.gif.txt;monsters/victreebel_back.gif.txt -70;Geodude;"Geodude is a Rock/Ground type Pokémon introduced in Generation 1.\nGeodude has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;1;300;40;80;monsters/geodude.png.txt;monsters/geodude_normal.gif.txt;monsters/geodude_back.gif.txt -71;Graveler;"Graveler is a Rock/Ground type Pokémon introduced in Generation 1.\nGraveler has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;2;330;44;88;monsters/graveler.png.txt;monsters/graveler_normal.gif.txt;monsters/graveler_back.gif.txt -72;Golem;"Golem is a Rock/Ground type Pokémon introduced in Generation 1.\nGolem has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;3;660;88;176;monsters/golem.png.txt;monsters/golem_normal.gif.txt;monsters/golem_back.gif.txt -73;Golem-1;"Golem is a Rock/Ground type Pokémon introduced in Generation 1.\nGolem has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;4;990;132;264;monsters/golem.png.txt;monsters/golem_normal.gif.txt;monsters/golem_back.gif.txt -74;Golem-2;"Golem is a Rock/Ground type Pokémon introduced in Generation 1.\nGolem has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;5;1320;176;352;monsters/golem.png.txt;monsters/golem_normal.gif.txt;monsters/golem_back.gif.txt -75;Magnemite;"Magnemite is an Electric/Steel type Pokémon introduced in Generation 1.";magnemite;1;325;25;35;monsters/magnemite.png.txt;monsters/magnemite_normal.gif.txt;monsters/magnemite_back.gif.txt -76;Magneton;"Magneton is an Electric/Steel type Pokémon introduced in Generation 1.\nIn Generation 9, a Paradox Pokémon Sandy Shocks was discovered, which bears a striking resemblance to Magneton.";magnemite;2;358;28;39;monsters/magneton.png.txt;monsters/magneton_normal.gif.txt;monsters/magneton_back.gif.txt -77;Magnezone;"Magnezone is an Electric/Steel type Pokémon introduced in Generation 4.";magnemite;3;715;55;77;monsters/magnezone.png.txt;monsters/magnezone_normal.gif.txt;monsters/magnezone_back.gif.txt -78;Magnezone-1;"Magnezone is an Electric/Steel type Pokémon introduced in Generation 4.";magnemite;4;1073;83;116;monsters/magnezone.png.txt;monsters/magnezone_normal.gif.txt;monsters/magnezone_back.gif.txt -79;Magnezone-2;"Magnezone is an Electric/Steel type Pokémon introduced in Generation 4.";magnemite;5;1430;110;154;monsters/magnezone.png.txt;monsters/magnezone_normal.gif.txt;monsters/magnezone_back.gif.txt -80;Gastly;"Gastly is a Ghost/Poison type Pokémon introduced in Generation 1.";gastly;1;310;30;35;monsters/gastly.png.txt;monsters/gastly_normal.gif.txt;monsters/gastly_back.gif.txt -81;Haunter;"Haunter is a Ghost/Poison type Pokémon introduced in Generation 1.";gastly;2;341;33;39;monsters/haunter.png.txt;monsters/haunter_normal.gif.txt;monsters/haunter_back.gif.txt -82;Gengar;"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1.\nGengar has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Terror.";gastly;3;682;66;77;monsters/gengar.png.txt;monsters/gengar_normal.gif.txt;monsters/gengar_back.gif.txt -83;Gengar-1;"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1.\nGengar has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Terror.";gastly;4;1023;99;116;monsters/gengar.png.txt;monsters/gengar_normal.gif.txt;monsters/gengar_back.gif.txt -84;Gengar-2;"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1.\nGengar has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Terror.";gastly;5;1364;132;154;monsters/gengar.png.txt;monsters/gengar_normal.gif.txt;monsters/gengar_back.gif.txt -85;Rhyhorn;"Rhyhorn is a Ground/Rock type Pokémon introduced in Generation 1.";rhyhorn;1;345;80;85;monsters/rhyhorn.png.txt;monsters/rhyhorn_normal.gif.txt;monsters/rhyhorn_back.gif.txt -86;Rhydon;"Rhydon is a Ground/Rock type Pokémon introduced in Generation 1.";rhyhorn;2;380;88;94;monsters/rhydon.png.txt;monsters/rhydon_normal.gif.txt;monsters/rhydon_back.gif.txt -87;Rhyperior;"Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4.";rhyhorn;3;759;176;187;monsters/rhyperior.png.txt;monsters/rhyperior_normal.gif.txt;monsters/rhyperior_back.gif.txt -88;Rhyperior-1;"Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4.";rhyhorn;4;1139;264;281;monsters/rhyperior.png.txt;monsters/rhyperior_normal.gif.txt;monsters/rhyperior_back.gif.txt -89;Rhyperior-2;"Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4.";rhyhorn;5;1518;352;374;monsters/rhyperior.png.txt;monsters/rhyperior_normal.gif.txt;monsters/rhyperior_back.gif.txt -90;Happiny;"Happiny is a Normal type Pokémon introduced in Generation 4.";happiny;1;220;100;5;monsters/happiny.png.txt;monsters/happiny_normal.gif.txt;monsters/happiny_back.gif.txt -91;Chansey;"Chansey is a Normal type Pokémon introduced in Generation 1.";happiny;2;242;110;6;monsters/chansey.png.txt;monsters/chansey_normal.gif.txt;monsters/chansey_back.gif.txt -92;Blissey;"Blissey is a Normal type Pokémon introduced in Generation 2.";happiny;3;484;220;11;monsters/blissey.png.txt;monsters/blissey_normal.gif.txt;monsters/blissey_back.gif.txt -93;Blissey-1;"Blissey is a Normal type Pokémon introduced in Generation 2.";happiny;4;726;330;17;monsters/blissey.png.txt;monsters/blissey_normal.gif.txt;monsters/blissey_back.gif.txt -94;Blissey-2;"Blissey is a Normal type Pokémon introduced in Generation 2.";happiny;5;968;440;22;monsters/blissey.png.txt;monsters/blissey_normal.gif.txt;monsters/blissey_back.gif.txt -95;Horsea;"Horsea is a Water type Pokémon introduced in Generation 1.";horsea;1;295;30;40;monsters/horsea.png.txt;monsters/horsea_normal.gif.txt;monsters/horsea_back.gif.txt -96;Seadra;"Seadra is a Water type Pokémon introduced in Generation 1.";horsea;2;325;33;44;monsters/seadra.png.txt;monsters/seadra_normal.gif.txt;monsters/seadra_back.gif.txt -97;Kingdra;"Kingdra is a Water/Dragon type Pokémon introduced in Generation 2.";horsea;3;649;66;88;monsters/kingdra.png.txt;monsters/kingdra_normal.gif.txt;monsters/kingdra_back.gif.txt -98;Kingdra-1;"Kingdra is a Water/Dragon type Pokémon introduced in Generation 2.";horsea;4;974;99;132;monsters/kingdra.png.txt;monsters/kingdra_normal.gif.txt;monsters/kingdra_back.gif.txt -99;Kingdra-2;"Kingdra is a Water/Dragon type Pokémon introduced in Generation 2.";horsea;5;1298;132;176;monsters/kingdra.png.txt;monsters/kingdra_normal.gif.txt;monsters/kingdra_back.gif.txt -100;Elekid;"Elekid is an Electric type Pokémon introduced in Generation 2.";elekid;1;360;45;63;monsters/elekid.png.txt;monsters/elekid_normal.gif.txt;monsters/elekid_back.gif.txt -101;Electabuzz;"Electabuzz is an Electric type Pokémon introduced in Generation 1.";elekid;2;396;50;69;monsters/electabuzz.png.txt;monsters/electabuzz_normal.gif.txt;monsters/electabuzz_back.gif.txt -102;Electivire;"Electivire is an Electric type Pokémon introduced in Generation 4.";elekid;3;792;99;139;monsters/electivire.png.txt;monsters/electivire_normal.gif.txt;monsters/electivire_back.gif.txt -103;Electivire-1;"Electivire is an Electric type Pokémon introduced in Generation 4.";elekid;4;1188;149;208;monsters/electivire.png.txt;monsters/electivire_normal.gif.txt;monsters/electivire_back.gif.txt -104;Electivire-2;"Electivire is an Electric type Pokémon introduced in Generation 4.";elekid;5;1584;198;277;monsters/electivire.png.txt;monsters/electivire_normal.gif.txt;monsters/electivire_back.gif.txt -105;Magby;"Magby is a Fire type Pokémon introduced in Generation 2.";magby;1;365;45;75;monsters/magby.png.txt;monsters/magby_normal.gif.txt;monsters/magby_back.gif.txt -106;Magmar;"Magmar is a Fire type Pokémon introduced in Generation 1.";magby;2;402;50;83;monsters/magmar.png.txt;monsters/magmar_normal.gif.txt;monsters/magmar_back.gif.txt -107;Magmortar;"Magmortar is a Fire type Pokémon introduced in Generation 4.";magby;3;803;99;165;monsters/magmortar.png.txt;monsters/magmortar_normal.gif.txt;monsters/magmortar_back.gif.txt -108;Magmortar-1;"Magmortar is a Fire type Pokémon introduced in Generation 4.";magby;4;1205;149;248;monsters/magmortar.png.txt;monsters/magmortar_normal.gif.txt;monsters/magmortar_back.gif.txt -109;Magmortar-2;"Magmortar is a Fire type Pokémon introduced in Generation 4.";magby;5;1606;198;330;monsters/magmortar.png.txt;monsters/magmortar_normal.gif.txt;monsters/magmortar_back.gif.txt -110;Porygon;"Porygon is a Normal type Pokémon introduced in Generation 1.";porygon;1;395;65;60;monsters/porygon.png.txt;monsters/porygon_normal.gif.txt;monsters/porygon_back.gif.txt -111;Porygon2;"Porygon2 is a Normal type Pokémon introduced in Generation 2.";porygon;2;435;72;66;monsters/porygon2.png.txt;monsters/porygon2_normal.gif.txt;monsters/porygon2_back.gif.txt -112;Porygon-Z;"Porygon-Z is a Normal type Pokémon introduced in Generation 4.";porygon;3;869;143;132;monsters/porygon-z.png.txt;monsters/porygon-z_normal.gif.txt;monsters/porygon-z_back.gif.txt -113;Porygon-Z-1;"Porygon-Z is a Normal type Pokémon introduced in Generation 4.";porygon;4;1304;215;198;monsters/porygon-z.png.txt;monsters/porygon-z_normal.gif.txt;monsters/porygon-z_back.gif.txt -114;Porygon-Z-2;"Porygon-Z is a Normal type Pokémon introduced in Generation 4.";porygon;5;1738;286;264;monsters/porygon-z.png.txt;monsters/porygon-z_normal.gif.txt;monsters/porygon-z_back.gif.txt -115;Dratini;"Dratini is a Dragon type Pokémon introduced in Generation 1.";dratini;1;300;41;64;monsters/dratini.png.txt;monsters/dratini_normal.gif.txt;monsters/dratini_back.gif.txt -116;Dragonair;"Dragonair is a Dragon type Pokémon introduced in Generation 1.";dratini;2;330;45;70;monsters/dragonair.png.txt;monsters/dragonair_normal.gif.txt;monsters/dragonair_back.gif.txt -117;Dragonite;"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1.\nDragonite is a pseudo-legendary Pokémon. Its evolution line were the only Dragon type Pokémon in the first generation of games (Red/Blue/Yellow).";dratini;3;660;90;141;monsters/dragonite.png.txt;monsters/dragonite_normal.gif.txt;monsters/dragonite_back.gif.txt -118;Dragonite-1;"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1.\nDragonite is a pseudo-legendary Pokémon. Its evolution line were the only Dragon type Pokémon in the first generation of games (Red/Blue/Yellow).";dratini;4;990;135;211;monsters/dragonite.png.txt;monsters/dragonite_normal.gif.txt;monsters/dragonite_back.gif.txt -119;Dragonite-2;"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1.\nDragonite is a pseudo-legendary Pokémon. Its evolution line were the only Dragon type Pokémon in the first generation of games (Red/Blue/Yellow).";dratini;5;1320;180;282;monsters/dragonite.png.txt;monsters/dragonite_normal.gif.txt;monsters/dragonite_back.gif.txt -120;Chikorita;"Chikorita is a Grass type Pokémon introduced in Generation 2.";chikorita;1;318;45;49;monsters/chikorita.png.txt;monsters/chikorita_normal.gif.txt;monsters/chikorita_back.gif.txt -121;Bayleef;"Bayleef is a Grass type Pokémon introduced in Generation 2.";chikorita;2;350;50;54;monsters/bayleef.png.txt;monsters/bayleef_normal.gif.txt;monsters/bayleef_back.gif.txt -122;Meganium;"Meganium is a Grass type Pokémon introduced in Generation 2.";chikorita;3;700;99;108;monsters/meganium.png.txt;monsters/meganium_normal.gif.txt;monsters/meganium_back.gif.txt -123;Meganium-1;"Meganium is a Grass type Pokémon introduced in Generation 2.";chikorita;4;1049;149;162;monsters/meganium.png.txt;monsters/meganium_normal.gif.txt;monsters/meganium_back.gif.txt -124;Meganium-2;"Meganium is a Grass type Pokémon introduced in Generation 2.";chikorita;5;1399;198;216;monsters/meganium.png.txt;monsters/meganium_normal.gif.txt;monsters/meganium_back.gif.txt -125;Totodile;"Totodile is a Water type Pokémon introduced in Generation 2.";totodile;1;314;50;65;monsters/totodile.png.txt;monsters/totodile_normal.gif.txt;monsters/totodile_back.gif.txt -126;Croconaw;"Croconaw is a Water type Pokémon introduced in Generation 2.";totodile;2;345;55;72;monsters/croconaw.png.txt;monsters/croconaw_normal.gif.txt;monsters/croconaw_back.gif.txt -127;Feraligatr;"Feraligatr is a Water type Pokémon introduced in Generation 2.";totodile;3;691;110;143;monsters/feraligatr.png.txt;monsters/feraligatr_normal.gif.txt;monsters/feraligatr_back.gif.txt -128;Feraligatr-1;"Feraligatr is a Water type Pokémon introduced in Generation 2.";totodile;4;1036;165;215;monsters/feraligatr.png.txt;monsters/feraligatr_normal.gif.txt;monsters/feraligatr_back.gif.txt -129;Feraligatr-2;"Feraligatr is a Water type Pokémon introduced in Generation 2.";totodile;5;1382;220;286;monsters/feraligatr.png.txt;monsters/feraligatr_normal.gif.txt;monsters/feraligatr_back.gif.txt -130;Togepi;"Togepi is a Fairy type Pokémon introduced in Generation 2.";togepi;1;245;35;20;monsters/togepi.png.txt;monsters/togepi_normal.gif.txt;monsters/togepi_back.gif.txt -131;Togetic;"Togetic is a Fairy/Flying type Pokémon introduced in Generation 2.";togepi;2;270;39;22;monsters/togetic.png.txt;monsters/togetic_normal.gif.txt;monsters/togetic_back.gif.txt -132;Togekiss;"Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4.";togepi;3;539;77;44;monsters/togekiss.png.txt;monsters/togekiss_normal.gif.txt;monsters/togekiss_back.gif.txt -133;Togekiss-1;"Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4.";togepi;4;809;116;66;monsters/togekiss.png.txt;monsters/togekiss_normal.gif.txt;monsters/togekiss_back.gif.txt -134;Togekiss-2;"Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4.";togepi;5;1078;154;88;monsters/togekiss.png.txt;monsters/togekiss_normal.gif.txt;monsters/togekiss_back.gif.txt -135;Mareep;"Mareep is an Electric type Pokémon introduced in Generation 2.";mareep;1;280;55;40;monsters/mareep.png.txt;monsters/mareep_normal.gif.txt;monsters/mareep_back.gif.txt -136;Flaaffy;"Flaaffy is an Electric type Pokémon introduced in Generation 2.";mareep;2;308;61;44;monsters/flaaffy.png.txt;monsters/flaaffy_normal.gif.txt;monsters/flaaffy_back.gif.txt -137;Ampharos;"Ampharos is an Electric type Pokémon introduced in Generation 2.";mareep;3;616;121;88;monsters/ampharos.png.txt;monsters/ampharos_normal.gif.txt;monsters/ampharos_back.gif.txt -138;Ampharos-1;"Ampharos is an Electric type Pokémon introduced in Generation 2.";mareep;4;924;182;132;monsters/ampharos.png.txt;monsters/ampharos_normal.gif.txt;monsters/ampharos_back.gif.txt -139;Ampharos-2;"Ampharos is an Electric type Pokémon introduced in Generation 2.";mareep;5;1232;242;176;monsters/ampharos.png.txt;monsters/ampharos_normal.gif.txt;monsters/ampharos_back.gif.txt -140;Azurill;"Azurill is a Normal/Fairy type Pokémon introduced in Generation 3.";azurill;1;190;50;20;monsters/azurill.png.txt;monsters/azurill_normal.gif.txt;monsters/azurill_back.gif.txt -141;Marill;"Marill is a Water/Fairy type Pokémon introduced in Generation 2.";azurill;2;209;55;22;monsters/marill.png.txt;monsters/marill_normal.gif.txt;monsters/marill_back.gif.txt -142;Azumarill;"Azumarill is a Water/Fairy type Pokémon introduced in Generation 2.";azurill;3;418;110;44;monsters/azumarill.png.txt;monsters/azumarill_normal.gif.txt;monsters/azumarill_back.gif.txt -143;Azumarill-1;"Azumarill is a Water/Fairy type Pokémon introduced in Generation 2.";azurill;4;627;165;66;monsters/azumarill.png.txt;monsters/azumarill_normal.gif.txt;monsters/azumarill_back.gif.txt -144;Azumarill-2;"Azumarill is a Water/Fairy type Pokémon introduced in Generation 2.";azurill;5;836;220;88;monsters/azumarill.png.txt;monsters/azumarill_normal.gif.txt;monsters/azumarill_back.gif.txt -145;Hoppip;"Hoppip is a Grass/Flying type Pokémon introduced in Generation 2.";hoppip;1;250;35;35;monsters/hoppip.png.txt;monsters/hoppip_normal.gif.txt;monsters/hoppip_back.gif.txt -146;Skiploom;"Skiploom is a Grass/Flying type Pokémon introduced in Generation 2.";hoppip;2;275;39;39;monsters/skiploom.png.txt;monsters/skiploom_normal.gif.txt;monsters/skiploom_back.gif.txt -147;Jumpluff;"Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2.";hoppip;3;550;77;77;monsters/jumpluff.png.txt;monsters/jumpluff_normal.gif.txt;monsters/jumpluff_back.gif.txt -148;Jumpluff-1;"Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2.";hoppip;4;825;116;116;monsters/jumpluff.png.txt;monsters/jumpluff_normal.gif.txt;monsters/jumpluff_back.gif.txt -149;Jumpluff-2;"Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2.";hoppip;5;1100;154;154;monsters/jumpluff.png.txt;monsters/jumpluff_normal.gif.txt;monsters/jumpluff_back.gif.txt -150;Swinub;"Swinub is an Ice/Ground type Pokémon introduced in Generation 2.";swinub;1;250;50;50;monsters/swinub.png.txt;monsters/swinub_normal.gif.txt;monsters/swinub_back.gif.txt -151;Piloswine;"Piloswine is an Ice/Ground type Pokémon introduced in Generation 2.";swinub;2;275;55;55;monsters/piloswine.png.txt;monsters/piloswine_normal.gif.txt;monsters/piloswine_back.gif.txt -152;Mamoswine;"Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4.";swinub;3;550;110;110;monsters/mamoswine.png.txt;monsters/mamoswine_normal.gif.txt;monsters/mamoswine_back.gif.txt -153;Mamoswine-1;"Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4.";swinub;4;825;165;165;monsters/mamoswine.png.txt;monsters/mamoswine_normal.gif.txt;monsters/mamoswine_back.gif.txt -154;Mamoswine-2;"Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4.";swinub;5;1100;220;220;monsters/mamoswine.png.txt;monsters/mamoswine_normal.gif.txt;monsters/mamoswine_back.gif.txt -155;Larvitar;"Larvitar is a Rock/Ground type Pokémon introduced in Generation 2.";larvitar;1;300;50;64;monsters/larvitar.png.txt;monsters/larvitar_normal.gif.txt;monsters/larvitar_back.gif.txt -156;Pupitar;"Pupitar is a Rock/Ground type Pokémon introduced in Generation 2.";larvitar;2;330;55;70;monsters/pupitar.png.txt;monsters/pupitar_normal.gif.txt;monsters/pupitar_back.gif.txt -157;Tyranitar;"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2.\nTyranitar is a large, bipedal, dinosaur-like Pokémon. It is mostly green, with a grey diamond-shaped patch on its front. It is covered in armor and has a spiky ridge around its back and tail.\nAlthough Tyranitar is Rock/Dark type, it evolves from Pupitar which is Rock/Ground type, thus loses its Ground type upon evolution - a rare occurrence for Pokémon. Tyranitar is a pseudo-legendary Pokémon, and has a Mega Evolution, available in Generation 6 games and Pokémon Go. In Generation 9, a Paradox Pokémon Iron Thorns was discovered, which bears a striking resemblance to Tyranitar.";larvitar;3;660;110;141;monsters/tyranitar.png.txt;monsters/tyranitar_normal.gif.txt;monsters/tyranitar_back.gif.txt -158;Tyranitar-1;"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2.\nTyranitar is a large, bipedal, dinosaur-like Pokémon. It is mostly green, with a grey diamond-shaped patch on its front. It is covered in armor and has a spiky ridge around its back and tail.\nAlthough Tyranitar is Rock/Dark type, it evolves from Pupitar which is Rock/Ground type, thus loses its Ground type upon evolution - a rare occurrence for Pokémon. Tyranitar is a pseudo-legendary Pokémon, and has a Mega Evolution, available in Generation 6 games and Pokémon Go. In Generation 9, a Paradox Pokémon Iron Thorns was discovered, which bears a striking resemblance to Tyranitar.";larvitar;4;990;165;211;monsters/tyranitar.png.txt;monsters/tyranitar_normal.gif.txt;monsters/tyranitar_back.gif.txt -159;Tyranitar-2;"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2.\nTyranitar is a large, bipedal, dinosaur-like Pokémon. It is mostly green, with a grey diamond-shaped patch on its front. It is covered in armor and has a spiky ridge around its back and tail.\nAlthough Tyranitar is Rock/Dark type, it evolves from Pupitar which is Rock/Ground type, thus loses its Ground type upon evolution - a rare occurrence for Pokémon. Tyranitar is a pseudo-legendary Pokémon, and has a Mega Evolution, available in Generation 6 games and Pokémon Go. In Generation 9, a Paradox Pokémon Iron Thorns was discovered, which bears a striking resemblance to Tyranitar.";larvitar;5;1320;220;282;monsters/tyranitar.png.txt;monsters/tyranitar_normal.gif.txt;monsters/tyranitar_back.gif.txt -160;Treecko;"Treecko is a Grass type Pokémon introduced in Generation 3.";treecko;1;310;40;45;monsters/treecko.png.txt;monsters/treecko_normal.gif.txt;monsters/treecko_back.gif.txt -161;Grovyle;"Grovyle is a Grass type Pokémon introduced in Generation 3.";treecko;2;341;44;50;monsters/grovyle.png.txt;monsters/grovyle_normal.gif.txt;monsters/grovyle_back.gif.txt -162;Sceptile;"Sceptile is a Grass type Pokémon introduced in Generation 3.\nSceptile has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";treecko;3;682;88;99;monsters/sceptile.png.txt;monsters/sceptile_normal.gif.txt;monsters/sceptile_back.gif.txt -163;Sceptile-1;"Sceptile is a Grass type Pokémon introduced in Generation 3.\nSceptile has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";treecko;4;1023;132;149;monsters/sceptile.png.txt;monsters/sceptile_normal.gif.txt;monsters/sceptile_back.gif.txt -164;Sceptile-2;"Sceptile is a Grass type Pokémon introduced in Generation 3.\nSceptile has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";treecko;5;1364;176;198;monsters/sceptile.png.txt;monsters/sceptile_normal.gif.txt;monsters/sceptile_back.gif.txt -165;Torchic;"Torchic is a Fire type Pokémon introduced in Generation 3.";torchic;1;310;45;60;monsters/torchic.png.txt;monsters/torchic_normal.gif.txt;monsters/torchic_back.gif.txt -166;Combusken;"Combusken is a Fire/Fighting type Pokémon introduced in Generation 3.";torchic;2;341;50;66;monsters/combusken.png.txt;monsters/combusken_normal.gif.txt;monsters/combusken_back.gif.txt -167;Blaziken;"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3.\nBlaziken has a Mega Evolution, available in Generation 6 games and Pokémon Go.";torchic;3;682;99;132;monsters/blaziken.png.txt;monsters/blaziken_normal.gif.txt;monsters/blaziken_back.gif.txt -168;Blaziken-1;"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3.\nBlaziken has a Mega Evolution, available in Generation 6 games and Pokémon Go.";torchic;4;1023;149;198;monsters/blaziken.png.txt;monsters/blaziken_normal.gif.txt;monsters/blaziken_back.gif.txt -169;Blaziken-2;"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3.\nBlaziken has a Mega Evolution, available in Generation 6 games and Pokémon Go.";torchic;5;1364;198;264;monsters/blaziken.png.txt;monsters/blaziken_normal.gif.txt;monsters/blaziken_back.gif.txt -170;Mudkip;"Mudkip is a Water type Pokémon introduced in Generation 3.";mudkip;1;310;50;70;monsters/mudkip.png.txt;monsters/mudkip_normal.gif.txt;monsters/mudkip_back.gif.txt -171;Marshtomp;"Marshtomp is a Water/Ground type Pokémon introduced in Generation 3.";mudkip;2;341;55;77;monsters/marshtomp.png.txt;monsters/marshtomp_normal.gif.txt;monsters/marshtomp_back.gif.txt -172;Swampert;"Swampert is a Water/Ground type Pokémon introduced in Generation 3.\nSwampert has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";mudkip;3;682;110;154;monsters/swampert.png.txt;monsters/swampert_normal.gif.txt;monsters/swampert_back.gif.txt -173;Swampert-1;"Swampert is a Water/Ground type Pokémon introduced in Generation 3.\nSwampert has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";mudkip;4;1023;165;231;monsters/swampert.png.txt;monsters/swampert_normal.gif.txt;monsters/swampert_back.gif.txt -174;Swampert-2;"Swampert is a Water/Ground type Pokémon introduced in Generation 3.\nSwampert has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";mudkip;5;1364;220;308;monsters/swampert.png.txt;monsters/swampert_normal.gif.txt;monsters/swampert_back.gif.txt -175;Lotad;"Lotad is a Water/Grass type Pokémon introduced in Generation 3.";lotad;1;220;40;30;monsters/lotad.png.txt;monsters/lotad_normal.gif.txt;monsters/lotad_back.gif.txt -176;Lombre;"Lombre is a Water/Grass type Pokémon introduced in Generation 3.";lotad;2;242;44;33;monsters/lombre.png.txt;monsters/lombre_normal.gif.txt;monsters/lombre_back.gif.txt -177;Ludicolo;"Ludicolo is a Water/Grass type Pokémon introduced in Generation 3.";lotad;3;484;88;66;monsters/ludicolo.png.txt;monsters/ludicolo_normal.gif.txt;monsters/ludicolo_back.gif.txt -178;Ludicolo-1;"Ludicolo is a Water/Grass type Pokémon introduced in Generation 3.";lotad;4;726;132;99;monsters/ludicolo.png.txt;monsters/ludicolo_normal.gif.txt;monsters/ludicolo_back.gif.txt -179;Ludicolo-2;"Ludicolo is a Water/Grass type Pokémon introduced in Generation 3.";lotad;5;968;176;132;monsters/ludicolo.png.txt;monsters/ludicolo_normal.gif.txt;monsters/ludicolo_back.gif.txt -180;Seedot;"Seedot is a Grass type Pokémon introduced in Generation 3.";seedot;1;220;40;40;monsters/seedot.png.txt;monsters/seedot_normal.gif.txt;monsters/seedot_back.gif.txt -181;Nuzleaf;"Nuzleaf is a Grass/Dark type Pokémon introduced in Generation 3.";seedot;2;242;44;44;monsters/nuzleaf.png.txt;monsters/nuzleaf_normal.gif.txt;monsters/nuzleaf_back.gif.txt -182;Shiftry;"Shiftry is a Grass/Dark type Pokémon introduced in Generation 3.";seedot;3;484;88;88;monsters/shiftry.png.txt;monsters/shiftry_normal.gif.txt;monsters/shiftry_back.gif.txt -183;Shiftry-1;"Shiftry is a Grass/Dark type Pokémon introduced in Generation 3.";seedot;4;726;132;132;monsters/shiftry.png.txt;monsters/shiftry_normal.gif.txt;monsters/shiftry_back.gif.txt -184;Shiftry-2;"Shiftry is a Grass/Dark type Pokémon introduced in Generation 3.";seedot;5;968;176;176;monsters/shiftry.png.txt;monsters/shiftry_normal.gif.txt;monsters/shiftry_back.gif.txt -185;Slakoth;"Slakoth is a Normal type Pokémon introduced in Generation 3.";slakoth;1;280;60;60;monsters/slakoth.png.txt;monsters/slakoth_normal.gif.txt;monsters/slakoth_back.gif.txt -186;Vigoroth;"Vigoroth is a Normal type Pokémon introduced in Generation 3.";slakoth;2;308;66;66;monsters/vigoroth.png.txt;monsters/vigoroth_normal.gif.txt;monsters/vigoroth_back.gif.txt -187;Slaking;"Slaking is a Normal type Pokémon introduced in Generation 3.";slakoth;3;616;132;132;monsters/slaking.png.txt;monsters/slaking_normal.gif.txt;monsters/slaking_back.gif.txt -188;Slaking-1;"Slaking is a Normal type Pokémon introduced in Generation 3.";slakoth;4;924;198;198;monsters/slaking.png.txt;monsters/slaking_normal.gif.txt;monsters/slaking_back.gif.txt -189;Slaking-2;"Slaking is a Normal type Pokémon introduced in Generation 3.";slakoth;5;1232;264;264;monsters/slaking.png.txt;monsters/slaking_normal.gif.txt;monsters/slaking_back.gif.txt -190;Whismur;"Whismur is a Normal type Pokémon introduced in Generation 3.";whismur;1;240;64;51;monsters/whismur.png.txt;monsters/whismur_normal.gif.txt;monsters/whismur_back.gif.txt -191;Loudred;"Loudred is a Normal type Pokémon introduced in Generation 3.";whismur;2;264;70;56;monsters/loudred.png.txt;monsters/loudred_normal.gif.txt;monsters/loudred_back.gif.txt -192;Exploud;"Exploud is a Normal type Pokémon introduced in Generation 3.";whismur;3;528;141;112;monsters/exploud.png.txt;monsters/exploud_normal.gif.txt;monsters/exploud_back.gif.txt -193;Exploud-1;"Exploud is a Normal type Pokémon introduced in Generation 3.";whismur;4;792;211;168;monsters/exploud.png.txt;monsters/exploud_normal.gif.txt;monsters/exploud_back.gif.txt -194;Exploud-2;"Exploud is a Normal type Pokémon introduced in Generation 3.";whismur;5;1056;282;224;monsters/exploud.png.txt;monsters/exploud_normal.gif.txt;monsters/exploud_back.gif.txt -195;Aron;"Aron is a Steel/Rock type Pokémon introduced in Generation 3.";aron;1;330;50;70;monsters/aron.png.txt;monsters/aron_normal.gif.txt;monsters/aron_back.gif.txt -196;Lairon;"Lairon is a Steel/Rock type Pokémon introduced in Generation 3.";aron;2;363;55;77;monsters/lairon.png.txt;monsters/lairon_normal.gif.txt;monsters/lairon_back.gif.txt -197;Aggron;"Aggron is a Steel/Rock type Pokémon introduced in Generation 3.\nAggron is a large, bipedal, dinosaur-like Pokémon with a steel-plated body. Its head is topped with a pair of curved, pointed horns. It has blue eyes, a large tail, and claws on its hands and feet. It is described as a very territorial Pokemon; it claims an entire mountain as its own.\nAggron appears to be based on various prehistoric creatures, including dinosaurs of the Ceratopsidae family, like the Triceratops, as well as Ankylosaurus, an armored dinosaur.\nAggron has a Mega Evolution, available in Generation 6 games and Pokémon Go. Mega Aggron is pure Steel type, making it the only Mega Evolution to lose a type upon evolving.";aron;3;726;110;154;monsters/aggron.png.txt;monsters/aggron_normal.gif.txt;monsters/aggron_back.gif.txt -198;Aggron-1;"Aggron is a Steel/Rock type Pokémon introduced in Generation 3.\nAggron is a large, bipedal, dinosaur-like Pokémon with a steel-plated body. Its head is topped with a pair of curved, pointed horns. It has blue eyes, a large tail, and claws on its hands and feet. It is described as a very territorial Pokemon; it claims an entire mountain as its own.\nAggron appears to be based on various prehistoric creatures, including dinosaurs of the Ceratopsidae family, like the Triceratops, as well as Ankylosaurus, an armored dinosaur.\nAggron has a Mega Evolution, available in Generation 6 games and Pokémon Go. Mega Aggron is pure Steel type, making it the only Mega Evolution to lose a type upon evolving.";aron;4;1089;165;231;monsters/aggron.png.txt;monsters/aggron_normal.gif.txt;monsters/aggron_back.gif.txt -199;Aggron-2;"Aggron is a Steel/Rock type Pokémon introduced in Generation 3.\nAggron is a large, bipedal, dinosaur-like Pokémon with a steel-plated body. Its head is topped with a pair of curved, pointed horns. It has blue eyes, a large tail, and claws on its hands and feet. It is described as a very territorial Pokemon; it claims an entire mountain as its own.\nAggron appears to be based on various prehistoric creatures, including dinosaurs of the Ceratopsidae family, like the Triceratops, as well as Ankylosaurus, an armored dinosaur.\nAggron has a Mega Evolution, available in Generation 6 games and Pokémon Go. Mega Aggron is pure Steel type, making it the only Mega Evolution to lose a type upon evolving.";aron;5;1452;220;308;monsters/aggron.png.txt;monsters/aggron_normal.gif.txt;monsters/aggron_back.gif.txt -200;Budew;"Budew is a Grass/Poison type Pokémon introduced in Generation 4.";budew;1;280;40;30;monsters/budew.png.txt;monsters/budew_normal.gif.txt;monsters/budew_back.gif.txt -201;Roselia;"Roselia is a Grass/Poison type Pokémon introduced in Generation 3.";budew;2;308;44;33;monsters/roselia.png.txt;monsters/roselia_normal.gif.txt;monsters/roselia_back.gif.txt -202;Roserade;"Roserade is a Grass/Poison type Pokémon introduced in Generation 4.";budew;3;616;88;66;monsters/roserade.png.txt;monsters/roserade_normal.gif.txt;monsters/roserade_back.gif.txt -203;Roserade-1;"Roserade is a Grass/Poison type Pokémon introduced in Generation 4.";budew;4;924;132;99;monsters/roserade.png.txt;monsters/roserade_normal.gif.txt;monsters/roserade_back.gif.txt -204;Roserade-2;"Roserade is a Grass/Poison type Pokémon introduced in Generation 4.";budew;5;1232;176;132;monsters/roserade.png.txt;monsters/roserade_normal.gif.txt;monsters/roserade_back.gif.txt -205;Trapinch;"Trapinch is a Ground type Pokémon introduced in Generation 3.";trapinch;1;290;45;100;monsters/trapinch.png.txt;monsters/trapinch_normal.gif.txt;monsters/trapinch_back.gif.txt -206;Vibrava;"Vibrava is a Ground/Dragon type Pokémon introduced in Generation 3.";trapinch;2;319;50;110;monsters/vibrava.png.txt;monsters/vibrava_normal.gif.txt;monsters/vibrava_back.gif.txt -207;Flygon;"Flygon is a Ground/Dragon type Pokémon introduced in Generation 3.";trapinch;3;638;99;220;monsters/flygon.png.txt;monsters/flygon_normal.gif.txt;monsters/flygon_back.gif.txt -208;Flygon-1;"Flygon is a Ground/Dragon type Pokémon introduced in Generation 3.";trapinch;4;957;149;330;monsters/flygon.png.txt;monsters/flygon_normal.gif.txt;monsters/flygon_back.gif.txt -209;Flygon-2;"Flygon is a Ground/Dragon type Pokémon introduced in Generation 3.";trapinch;5;1276;198;440;monsters/flygon.png.txt;monsters/flygon_normal.gif.txt;monsters/flygon_back.gif.txt -210;Duskull;"Duskull is a Ghost type Pokémon introduced in Generation 3.";duskull;1;295;20;40;monsters/duskull.png.txt;monsters/duskull_normal.gif.txt;monsters/duskull_back.gif.txt -211;Dusclops;"Dusclops is a Ghost type Pokémon introduced in Generation 3.";duskull;2;325;22;44;monsters/dusclops.png.txt;monsters/dusclops_normal.gif.txt;monsters/dusclops_back.gif.txt -212;Dusknoir;"Dusknoir is a Ghost type Pokémon introduced in Generation 4.";duskull;3;649;44;88;monsters/dusknoir.png.txt;monsters/dusknoir_normal.gif.txt;monsters/dusknoir_back.gif.txt -213;Dusknoir-1;"Dusknoir is a Ghost type Pokémon introduced in Generation 4.";duskull;4;974;66;132;monsters/dusknoir.png.txt;monsters/dusknoir_normal.gif.txt;monsters/dusknoir_back.gif.txt -214;Dusknoir-2;"Dusknoir is a Ghost type Pokémon introduced in Generation 4.";duskull;5;1298;88;176;monsters/dusknoir.png.txt;monsters/dusknoir_normal.gif.txt;monsters/dusknoir_back.gif.txt -215;Spheal;"Spheal is an Ice/Water type Pokémon introduced in Generation 3.";spheal;1;290;70;40;monsters/spheal.png.txt;monsters/spheal_normal.gif.txt;monsters/spheal_back.gif.txt -216;Sealeo;"Sealeo is an Ice/Water type Pokémon introduced in Generation 3.";spheal;2;319;77;44;monsters/sealeo.png.txt;monsters/sealeo_normal.gif.txt;monsters/sealeo_back.gif.txt -217;Walrein;"Walrein is an Ice/Water type Pokémon introduced in Generation 3.";spheal;3;638;154;88;monsters/walrein.png.txt;monsters/walrein_normal.gif.txt;monsters/walrein_back.gif.txt -218;Walrein-1;"Walrein is an Ice/Water type Pokémon introduced in Generation 3.";spheal;4;957;231;132;monsters/walrein.png.txt;monsters/walrein_normal.gif.txt;monsters/walrein_back.gif.txt -219;Walrein-2;"Walrein is an Ice/Water type Pokémon introduced in Generation 3.";spheal;5;1276;308;176;monsters/walrein.png.txt;monsters/walrein_normal.gif.txt;monsters/walrein_back.gif.txt -220;Bagon;"Bagon is a Dragon type Pokémon introduced in Generation 3.";bagon;1;300;45;75;monsters/bagon.png.txt;monsters/bagon_normal.gif.txt;monsters/bagon_back.gif.txt -221;Shelgon;"Shelgon is a Dragon type Pokémon introduced in Generation 3.";bagon;2;330;50;83;monsters/shelgon.png.txt;monsters/shelgon_normal.gif.txt;monsters/shelgon_back.gif.txt -222;Salamence;"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3.\nSalamence is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.\nIn Generation 9, a Paradox Pokémon Roaring Moon was discovered, which bears a striking resemblance to Salamence.";bagon;3;660;99;165;monsters/salamence.png.txt;monsters/salamence_normal.gif.txt;monsters/salamence_back.gif.txt -223;Salamence-1;"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3.\nSalamence is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.\nIn Generation 9, a Paradox Pokémon Roaring Moon was discovered, which bears a striking resemblance to Salamence.";bagon;4;990;149;248;monsters/salamence.png.txt;monsters/salamence_normal.gif.txt;monsters/salamence_back.gif.txt -224;Salamence-2;"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3.\nSalamence is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.\nIn Generation 9, a Paradox Pokémon Roaring Moon was discovered, which bears a striking resemblance to Salamence.";bagon;5;1320;198;330;monsters/salamence.png.txt;monsters/salamence_normal.gif.txt;monsters/salamence_back.gif.txt -225;Beldum;"Beldum is a Steel/Psychic type Pokémon introduced in Generation 3.";beldum;1;300;40;55;monsters/beldum.png.txt;monsters/beldum_normal.gif.txt;monsters/beldum_back.gif.txt -226;Metang;"Metang is a Steel/Psychic type Pokémon introduced in Generation 3.";beldum;2;330;44;61;monsters/metang.png.txt;monsters/metang_normal.gif.txt;monsters/metang_back.gif.txt -227;Metagross;"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3.\nMetagross is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire.";beldum;3;660;88;121;monsters/metagross.png.txt;monsters/metagross_normal.gif.txt;monsters/metagross_back.gif.txt -228;Metagross-1;"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3.\nMetagross is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire.";beldum;4;990;132;182;monsters/metagross.png.txt;monsters/metagross_normal.gif.txt;monsters/metagross_back.gif.txt -229;Metagross-2;"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3.\nMetagross is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire.";beldum;5;1320;176;242;monsters/metagross.png.txt;monsters/metagross_normal.gif.txt;monsters/metagross_back.gif.txt -230;Turtwig;"Turtwig is a Grass type Pokémon introduced in Generation 4.";turtwig;1;318;55;68;monsters/turtwig.png.txt;monsters/turtwig_normal.gif.txt;monsters/turtwig_back.gif.txt -231;Grotle;"Grotle is a Grass type Pokémon introduced in Generation 4.";turtwig;2;350;61;75;monsters/grotle.png.txt;monsters/grotle_normal.gif.txt;monsters/grotle_back.gif.txt -232;Torterra;"Torterra is a Grass/Ground type Pokémon introduced in Generation 4.";turtwig;3;700;121;150;monsters/torterra.png.txt;monsters/torterra_normal.gif.txt;monsters/torterra_back.gif.txt -233;Torterra-1;"Torterra is a Grass/Ground type Pokémon introduced in Generation 4.";turtwig;4;1049;182;224;monsters/torterra.png.txt;monsters/torterra_normal.gif.txt;monsters/torterra_back.gif.txt -234;Torterra-2;"Torterra is a Grass/Ground type Pokémon introduced in Generation 4.";turtwig;5;1399;242;299;monsters/torterra.png.txt;monsters/torterra_normal.gif.txt;monsters/torterra_back.gif.txt -235;Chimchar;"Chimchar is a Fire type Pokémon introduced in Generation 4.";chimchar;1;309;44;58;monsters/chimchar.png.txt;monsters/chimchar_normal.gif.txt;monsters/chimchar_back.gif.txt -236;Monferno;"Monferno is a Fire/Fighting type Pokémon introduced in Generation 4.";chimchar;2;340;48;64;monsters/monferno.png.txt;monsters/monferno_normal.gif.txt;monsters/monferno_back.gif.txt -237;Infernape;"Infernape is a Fire/Fighting type Pokémon introduced in Generation 4.";chimchar;3;680;97;128;monsters/infernape.png.txt;monsters/infernape_normal.gif.txt;monsters/infernape_back.gif.txt -238;Infernape-1;"Infernape is a Fire/Fighting type Pokémon introduced in Generation 4.";chimchar;4;1020;145;191;monsters/infernape.png.txt;monsters/infernape_normal.gif.txt;monsters/infernape_back.gif.txt -239;Infernape-2;"Infernape is a Fire/Fighting type Pokémon introduced in Generation 4.";chimchar;5;1360;194;255;monsters/infernape.png.txt;monsters/infernape_normal.gif.txt;monsters/infernape_back.gif.txt -240;Piplup;"Piplup is a Water type Pokémon introduced in Generation 4.";piplup;1;314;53;51;monsters/piplup.png.txt;monsters/piplup_normal.gif.txt;monsters/piplup_back.gif.txt -241;Prinplup;"Prinplup is a Water type Pokémon introduced in Generation 4.";piplup;2;345;58;56;monsters/prinplup.png.txt;monsters/prinplup_normal.gif.txt;monsters/prinplup_back.gif.txt -242;Empoleon;"Empoleon is a Water/Steel type Pokémon introduced in Generation 4.";piplup;3;691;117;112;monsters/empoleon.png.txt;monsters/empoleon_normal.gif.txt;monsters/empoleon_back.gif.txt -243;Empoleon-1;"Empoleon is a Water/Steel type Pokémon introduced in Generation 4.";piplup;4;1036;175;168;monsters/empoleon.png.txt;monsters/empoleon_normal.gif.txt;monsters/empoleon_back.gif.txt -244;Empoleon-2;"Empoleon is a Water/Steel type Pokémon introduced in Generation 4.";piplup;5;1382;233;224;monsters/empoleon.png.txt;monsters/empoleon_normal.gif.txt;monsters/empoleon_back.gif.txt -245;Starly;"Starly is a Normal/Flying type Pokémon introduced in Generation 4.";starly;1;245;40;55;monsters/starly.png.txt;monsters/starly_normal.gif.txt;monsters/starly_back.gif.txt -246;Staravia;"Staravia is a Normal/Flying type Pokémon introduced in Generation 4.";starly;2;270;44;61;monsters/staravia.png.txt;monsters/staravia_normal.gif.txt;monsters/staravia_back.gif.txt -247;Staraptor;"Staraptor is a Normal/Flying type Pokémon introduced in Generation 4.";starly;3;539;88;121;monsters/staraptor.png.txt;monsters/staraptor_normal.gif.txt;monsters/staraptor_back.gif.txt -248;Staraptor-1;"Staraptor is a Normal/Flying type Pokémon introduced in Generation 4.";starly;4;809;132;182;monsters/staraptor.png.txt;monsters/staraptor_normal.gif.txt;monsters/staraptor_back.gif.txt -249;Staraptor-2;"Staraptor is a Normal/Flying type Pokémon introduced in Generation 4.";starly;5;1078;176;242;monsters/staraptor.png.txt;monsters/staraptor_normal.gif.txt;monsters/staraptor_back.gif.txt -250;Shinx;"Shinx is an Electric type Pokémon introduced in Generation 4.";shinx;1;263;45;65;monsters/shinx.png.txt;monsters/shinx_normal.gif.txt;monsters/shinx_back.gif.txt -251;Luxio;"Luxio is an Electric type Pokémon introduced in Generation 4.";shinx;2;289;50;72;monsters/luxio.png.txt;monsters/luxio_normal.gif.txt;monsters/luxio_back.gif.txt -252;Luxray;"Luxray is an Electric type Pokémon introduced in Generation 4.";shinx;3;579;99;143;monsters/luxray.png.txt;monsters/luxray_normal.gif.txt;monsters/luxray_back.gif.txt -253;Luxray-1;"Luxray is an Electric type Pokémon introduced in Generation 4.";shinx;4;868;149;215;monsters/luxray.png.txt;monsters/luxray_normal.gif.txt;monsters/luxray_back.gif.txt -254;Luxray-2;"Luxray is an Electric type Pokémon introduced in Generation 4.";shinx;5;1157;198;286;monsters/luxray.png.txt;monsters/luxray_normal.gif.txt;monsters/luxray_back.gif.txt -255;Burmy;"Burmy is a Bug type Pokémon introduced in Generation 4.";burmy;1;224;40;29;monsters/burmy.png.txt;monsters/burmy_normal.gif.txt;monsters/burmy_back.gif.txt -256;Wormadam;"Wormadam is a Bug/Grass type Pokémon introduced in Generation 4.";burmy;2;246;44;32;monsters/wormadam.png.txt;monsters/wormadam_normal.gif.txt;monsters/wormadam_back.gif.txt -257;Mothim;"Mothim is a Bug/Flying type Pokémon introduced in Generation 4.";burmy;2;493;88;64;monsters/mothim.png.txt;monsters/mothim_normal.gif.txt;monsters/mothim_back.gif.txt -258;Mothim-1;"Mothim is a Bug/Flying type Pokémon introduced in Generation 4.";burmy;4;739;132;96;monsters/mothim.png.txt;monsters/mothim_normal.gif.txt;monsters/mothim_back.gif.txt -259;Mothim-2;"Mothim is a Bug/Flying type Pokémon introduced in Generation 4.";burmy;5;986;176;128;monsters/mothim.png.txt;monsters/mothim_normal.gif.txt;monsters/mothim_back.gif.txt -260;Gible;"Gible is a Dragon/Ground type Pokémon introduced in Generation 4.";gible;1;300;58;70;monsters/gible.png.txt;monsters/gible_normal.gif.txt;monsters/gible_back.gif.txt -261;Gabite;"Gabite is a Dragon/Ground type Pokémon introduced in Generation 4.";gible;2;330;64;77;monsters/gabite.png.txt;monsters/gabite_normal.gif.txt;monsters/gabite_back.gif.txt -262;Garchomp;"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4.\nGarchomp is a large, bipedal, dragon-like Pokémon. Its body is mainly navy blue in color with some red and gold accents. It has a shark-like head with appendages on either side. It has long triangular fins protruding from its arms, and smaller fins on its tail.\nGarchomp draws its inspiration from several sources, including the hammerhead shark, elements of jet aircraft, and classic dragons from mythology.\nGarchomp is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Generation 6 games.";gible;3;660;128;154;monsters/garchomp.png.txt;monsters/garchomp_normal.gif.txt;monsters/garchomp_back.gif.txt -263;Garchomp-1;"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4.\nGarchomp is a large, bipedal, dragon-like Pokémon. Its body is mainly navy blue in color with some red and gold accents. It has a shark-like head with appendages on either side. It has long triangular fins protruding from its arms, and smaller fins on its tail.\nGarchomp draws its inspiration from several sources, including the hammerhead shark, elements of jet aircraft, and classic dragons from mythology.\nGarchomp is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Generation 6 games.";gible;4;990;191;231;monsters/garchomp.png.txt;monsters/garchomp_normal.gif.txt;monsters/garchomp_back.gif.txt -264;Garchomp-2;"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4.\nGarchomp is a large, bipedal, dragon-like Pokémon. Its body is mainly navy blue in color with some red and gold accents. It has a shark-like head with appendages on either side. It has long triangular fins protruding from its arms, and smaller fins on its tail.\nGarchomp draws its inspiration from several sources, including the hammerhead shark, elements of jet aircraft, and classic dragons from mythology.\nGarchomp is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Generation 6 games.";gible;5;1320;255;308;monsters/garchomp.png.txt;monsters/garchomp_normal.gif.txt;monsters/garchomp_back.gif.txt -265;Snivy;"Snivy is a Grass type Pokémon introduced in Generation 5.";snivy;1;308;45;45;monsters/snivy.png.txt;monsters/snivy_normal.gif.txt;monsters/snivy_back.gif.txt -266;Servine;"Servine is a Grass type Pokémon introduced in Generation 5.";snivy;2;339;50;50;monsters/servine.png.txt;monsters/servine_normal.gif.txt;monsters/servine_back.gif.txt -267;Serperior;"Serperior is a Grass type Pokémon introduced in Generation 5.";snivy;3;678;99;99;monsters/serperior.png.txt;monsters/serperior_normal.gif.txt;monsters/serperior_back.gif.txt -268;Serperior-1;"Serperior is a Grass type Pokémon introduced in Generation 5.";snivy;4;1016;149;149;monsters/serperior.png.txt;monsters/serperior_normal.gif.txt;monsters/serperior_back.gif.txt -269;Serperior-2;"Serperior is a Grass type Pokémon introduced in Generation 5.";snivy;5;1355;198;198;monsters/serperior.png.txt;monsters/serperior_normal.gif.txt;monsters/serperior_back.gif.txt -270;Tepig;"Tepig is a Fire type Pokémon introduced in Generation 5.";tepig;1;308;65;63;monsters/tepig.png.txt;monsters/tepig_normal.gif.txt;monsters/tepig_back.gif.txt -271;Pignite;"Pignite is a Fire/Fighting type Pokémon introduced in Generation 5.";tepig;2;339;72;69;monsters/pignite.png.txt;monsters/pignite_normal.gif.txt;monsters/pignite_back.gif.txt -272;Emboar;"Emboar is a Fire/Fighting type Pokémon introduced in Generation 5.";tepig;3;678;143;139;monsters/emboar.png.txt;monsters/emboar_normal.gif.txt;monsters/emboar_back.gif.txt -273;Emboar-1;"Emboar is a Fire/Fighting type Pokémon introduced in Generation 5.";tepig;4;1016;215;208;monsters/emboar.png.txt;monsters/emboar_normal.gif.txt;monsters/emboar_back.gif.txt -274;Emboar-2;"Emboar is a Fire/Fighting type Pokémon introduced in Generation 5.";tepig;5;1355;286;277;monsters/emboar.png.txt;monsters/emboar_normal.gif.txt;monsters/emboar_back.gif.txt -275;Lillipup;"Lillipup is a Normal type Pokémon introduced in Generation 5.";lillipup;1;275;45;60;monsters/lillipup.png.txt;monsters/lillipup_normal.gif.txt;monsters/lillipup_back.gif.txt -276;Herdier;"Herdier is a Normal type Pokémon introduced in Generation 5.";lillipup;2;303;50;66;monsters/herdier.png.txt;monsters/herdier_normal.gif.txt;monsters/herdier_back.gif.txt -277;Stoutland;"Stoutland is a Normal type Pokémon introduced in Generation 5.";lillipup;3;605;99;132;monsters/stoutland.png.txt;monsters/stoutland_normal.gif.txt;monsters/stoutland_back.gif.txt -278;Stoutland-1;"Stoutland is a Normal type Pokémon introduced in Generation 5.";lillipup;4;908;149;198;monsters/stoutland.png.txt;monsters/stoutland_normal.gif.txt;monsters/stoutland_back.gif.txt -279;Stoutland-2;"Stoutland is a Normal type Pokémon introduced in Generation 5.";lillipup;5;1210;198;264;monsters/stoutland.png.txt;monsters/stoutland_normal.gif.txt;monsters/stoutland_back.gif.txt -280;Pidove;"Pidove is a Normal/Flying type Pokémon introduced in Generation 5.";pidove;1;264;50;55;monsters/pidove.png.txt;monsters/pidove_normal.gif.txt;monsters/pidove_back.gif.txt -281;Tranquill;"Tranquill is a Normal/Flying type Pokémon introduced in Generation 5.";pidove;2;290;55;61;monsters/tranquill.png.txt;monsters/tranquill_normal.gif.txt;monsters/tranquill_back.gif.txt -282;Unfezant;"Unfezant is a Normal/Flying type Pokémon introduced in Generation 5.";pidove;3;581;110;121;monsters/unfezant.png.txt;monsters/unfezant_normal.gif.txt;monsters/unfezant_back.gif.txt -283;Unfezant-1;"Unfezant is a Normal/Flying type Pokémon introduced in Generation 5.";pidove;4;871;165;182;monsters/unfezant.png.txt;monsters/unfezant_normal.gif.txt;monsters/unfezant_back.gif.txt -284;Unfezant-2;"Unfezant is a Normal/Flying type Pokémon introduced in Generation 5.";pidove;5;1162;220;242;monsters/unfezant.png.txt;monsters/unfezant_normal.gif.txt;monsters/unfezant_back.gif.txt -285;Roggenrola;"Roggenrola is a Rock type Pokémon introduced in Generation 5.";roggenrola;1;280;55;75;monsters/roggenrola.png.txt;monsters/roggenrola_normal.gif.txt;monsters/roggenrola_back.gif.txt -286;Boldore;"Boldore is a Rock type Pokémon introduced in Generation 5.";roggenrola;2;308;61;83;monsters/boldore.png.txt;monsters/boldore_normal.gif.txt;monsters/boldore_back.gif.txt -287;Gigalith;"Gigalith is a Rock type Pokémon introduced in Generation 5.";roggenrola;3;616;121;165;monsters/gigalith.png.txt;monsters/gigalith_normal.gif.txt;monsters/gigalith_back.gif.txt -288;Gigalith-1;"Gigalith is a Rock type Pokémon introduced in Generation 5.";roggenrola;4;924;182;248;monsters/gigalith.png.txt;monsters/gigalith_normal.gif.txt;monsters/gigalith_back.gif.txt -289;Gigalith-2;"Gigalith is a Rock type Pokémon introduced in Generation 5.";roggenrola;5;1232;242;330;monsters/gigalith.png.txt;monsters/gigalith_normal.gif.txt;monsters/gigalith_back.gif.txt -290;Timburr;"Timburr is a Fighting type Pokémon introduced in Generation 5.";timburr;1;305;75;80;monsters/timburr.png.txt;monsters/timburr_normal.gif.txt;monsters/timburr_back.gif.txt -291;Gurdurr;"Gurdurr is a Fighting type Pokémon introduced in Generation 5.";timburr;2;336;83;88;monsters/gurdurr.png.txt;monsters/gurdurr_normal.gif.txt;monsters/gurdurr_back.gif.txt -292;Conkeldurr;"Conkeldurr is a Fighting type Pokémon introduced in Generation 5.";timburr;3;671;165;176;monsters/conkeldurr.png.txt;monsters/conkeldurr_normal.gif.txt;monsters/conkeldurr_back.gif.txt -293;Conkeldurr-1;"Conkeldurr is a Fighting type Pokémon introduced in Generation 5.";timburr;4;1007;248;264;monsters/conkeldurr.png.txt;monsters/conkeldurr_normal.gif.txt;monsters/conkeldurr_back.gif.txt -294;Conkeldurr-2;"Conkeldurr is a Fighting type Pokémon introduced in Generation 5.";timburr;5;1342;330;352;monsters/conkeldurr.png.txt;monsters/conkeldurr_normal.gif.txt;monsters/conkeldurr_back.gif.txt -295;Tympole;"Tympole is a Water type Pokémon introduced in Generation 5.";tympole;1;294;50;50;monsters/tympole.png.txt;monsters/tympole_normal.gif.txt;monsters/tympole_back.gif.txt -296;Palpitoad;"Palpitoad is a Water/Ground type Pokémon introduced in Generation 5.";tympole;2;323;55;55;monsters/palpitoad.png.txt;monsters/palpitoad_normal.gif.txt;monsters/palpitoad_back.gif.txt -297;Seismitoad;"Seismitoad is a Water/Ground type Pokémon introduced in Generation 5.";tympole;3;647;110;110;monsters/seismitoad.png.txt;monsters/seismitoad_normal.gif.txt;monsters/seismitoad_back.gif.txt -298;Seismitoad-1;"Seismitoad is a Water/Ground type Pokémon introduced in Generation 5.";tympole;4;970;165;165;monsters/seismitoad.png.txt;monsters/seismitoad_normal.gif.txt;monsters/seismitoad_back.gif.txt -299;Seismitoad-2;"Seismitoad is a Water/Ground type Pokémon introduced in Generation 5.";tympole;5;1294;220;220;monsters/seismitoad.png.txt;monsters/seismitoad_normal.gif.txt;monsters/seismitoad_back.gif.txt -300;Sewaddle;"Sewaddle is a Bug/Grass type Pokémon introduced in Generation 5.";sewaddle;1;310;45;53;monsters/sewaddle.png.txt;monsters/sewaddle_normal.gif.txt;monsters/sewaddle_back.gif.txt -301;Swadloon;"Swadloon is a Bug/Grass type Pokémon introduced in Generation 5.";sewaddle;2;341;50;58;monsters/swadloon.png.txt;monsters/swadloon_normal.gif.txt;monsters/swadloon_back.gif.txt -302;Leavanny;"Leavanny is a Bug/Grass type Pokémon introduced in Generation 5.";sewaddle;3;682;99;117;monsters/leavanny.png.txt;monsters/leavanny_normal.gif.txt;monsters/leavanny_back.gif.txt -303;Leavanny-1;"Leavanny is a Bug/Grass type Pokémon introduced in Generation 5.";sewaddle;4;1023;149;175;monsters/leavanny.png.txt;monsters/leavanny_normal.gif.txt;monsters/leavanny_back.gif.txt -304;Leavanny-2;"Leavanny is a Bug/Grass type Pokémon introduced in Generation 5.";sewaddle;5;1364;198;233;monsters/leavanny.png.txt;monsters/leavanny_normal.gif.txt;monsters/leavanny_back.gif.txt -305;Venipede;"Venipede is a Bug/Poison type Pokémon introduced in Generation 5.";venipede;1;260;30;45;monsters/venipede.png.txt;monsters/venipede_normal.gif.txt;monsters/venipede_back.gif.txt -306;Whirlipede;"Whirlipede is a Bug/Poison type Pokémon introduced in Generation 5.";venipede;2;286;33;50;monsters/whirlipede.png.txt;monsters/whirlipede_normal.gif.txt;monsters/whirlipede_back.gif.txt -307;Scolipede;"Scolipede is a Bug/Poison type Pokémon introduced in Generation 5.";venipede;3;572;66;99;monsters/scolipede.png.txt;monsters/scolipede_normal.gif.txt;monsters/scolipede_back.gif.txt -308;Scolipede-1;"Scolipede is a Bug/Poison type Pokémon introduced in Generation 5.";venipede;4;858;99;149;monsters/scolipede.png.txt;monsters/scolipede_normal.gif.txt;monsters/scolipede_back.gif.txt -309;Scolipede-2;"Scolipede is a Bug/Poison type Pokémon introduced in Generation 5.";venipede;5;1144;132;198;monsters/scolipede.png.txt;monsters/scolipede_normal.gif.txt;monsters/scolipede_back.gif.txt -310;Sandile;"Sandile is a Ground/Dark type Pokémon introduced in Generation 5.";sandile;1;292;50;72;monsters/sandile.png.txt;monsters/sandile_normal.gif.txt;monsters/sandile_back.gif.txt -311;Krokorok;"Krokorok is a Ground/Dark type Pokémon introduced in Generation 5.";sandile;2;321;55;79;monsters/krokorok.png.txt;monsters/krokorok_normal.gif.txt;monsters/krokorok_back.gif.txt -312;Krookodile;"Krookodile is a Ground/Dark type Pokémon introduced in Generation 5.";sandile;3;642;110;158;monsters/krookodile.png.txt;monsters/krookodile_normal.gif.txt;monsters/krookodile_back.gif.txt -313;Krookodile-1;"Krookodile is a Ground/Dark type Pokémon introduced in Generation 5.";sandile;4;964;165;238;monsters/krookodile.png.txt;monsters/krookodile_normal.gif.txt;monsters/krookodile_back.gif.txt -314;Krookodile-2;"Krookodile is a Ground/Dark type Pokémon introduced in Generation 5.";sandile;5;1285;220;317;monsters/krookodile.png.txt;monsters/krookodile_normal.gif.txt;monsters/krookodile_back.gif.txt -315;Gothita;"Gothita is a Psychic type Pokémon introduced in Generation 5.";gothita;1;290;45;30;monsters/gothita.png.txt;monsters/gothita_normal.gif.txt;monsters/gothita_back.gif.txt -316;Gothorita;"Gothorita is a Psychic type Pokémon introduced in Generation 5.";gothita;2;319;50;33;monsters/gothorita.png.txt;monsters/gothorita_normal.gif.txt;monsters/gothorita_back.gif.txt -317;Gothitelle;"Gothitelle is a Psychic type Pokémon introduced in Generation 5.";gothita;3;638;99;66;monsters/gothitelle.png.txt;monsters/gothitelle_normal.gif.txt;monsters/gothitelle_back.gif.txt -318;Gothitelle-1;"Gothitelle is a Psychic type Pokémon introduced in Generation 5.";gothita;4;957;149;99;monsters/gothitelle.png.txt;monsters/gothitelle_normal.gif.txt;monsters/gothitelle_back.gif.txt -319;Gothitelle-2;"Gothitelle is a Psychic type Pokémon introduced in Generation 5.";gothita;5;1276;198;132;monsters/gothitelle.png.txt;monsters/gothitelle_normal.gif.txt;monsters/gothitelle_back.gif.txt -320;Solosis;"Solosis is a Psychic type Pokémon introduced in Generation 5.";solosis;1;290;45;30;monsters/solosis.png.txt;monsters/solosis_normal.gif.txt;monsters/solosis_back.gif.txt -321;Duosion;"Duosion is a Psychic type Pokémon introduced in Generation 5.";solosis;2;319;50;33;monsters/duosion.png.txt;monsters/duosion_normal.gif.txt;monsters/duosion_back.gif.txt -322;Reuniclus;"Reuniclus is a Psychic type Pokémon introduced in Generation 5.";solosis;3;638;99;66;monsters/reuniclus.png.txt;monsters/reuniclus_normal.gif.txt;monsters/reuniclus_back.gif.txt -323;Reuniclus-1;"Reuniclus is a Psychic type Pokémon introduced in Generation 5.";solosis;4;957;149;99;monsters/reuniclus.png.txt;monsters/reuniclus_normal.gif.txt;monsters/reuniclus_back.gif.txt -324;Reuniclus-2;"Reuniclus is a Psychic type Pokémon introduced in Generation 5.";solosis;5;1276;198;132;monsters/reuniclus.png.txt;monsters/reuniclus_normal.gif.txt;monsters/reuniclus_back.gif.txt -325;Vanillite;"Vanillite is an Ice type Pokémon introduced in Generation 5.";vanillite;1;305;36;50;monsters/vanillite.png.txt;monsters/vanillite_normal.gif.txt;monsters/vanillite_back.gif.txt -326;Vanillish;"Vanillish is an Ice type Pokémon introduced in Generation 5.";vanillite;2;336;40;55;monsters/vanillish.png.txt;monsters/vanillish_normal.gif.txt;monsters/vanillish_back.gif.txt -327;Vanilluxe;"Vanilluxe is an Ice type Pokémon introduced in Generation 5.";vanillite;3;671;79;110;monsters/vanilluxe.png.txt;monsters/vanilluxe_normal.gif.txt;monsters/vanilluxe_back.gif.txt -328;Vanilluxe-1;"Vanilluxe is an Ice type Pokémon introduced in Generation 5.";vanillite;4;1007;119;165;monsters/vanilluxe.png.txt;monsters/vanilluxe_normal.gif.txt;monsters/vanilluxe_back.gif.txt -329;Vanilluxe-2;"Vanilluxe is an Ice type Pokémon introduced in Generation 5.";vanillite;5;1342;158;220;monsters/vanilluxe.png.txt;monsters/vanilluxe_normal.gif.txt;monsters/vanilluxe_back.gif.txt -330;Klink;"Klink is a Steel type Pokémon introduced in Generation 5.";klink;1;300;40;55;monsters/klink.png.txt;monsters/klink_normal.gif.txt;monsters/klink_back.gif.txt -331;Klang;"Klang is a Steel type Pokémon introduced in Generation 5.";klink;2;330;44;61;monsters/klang.png.txt;monsters/klang_normal.gif.txt;monsters/klang_back.gif.txt -332;Klinklang;"Klinklang is a Steel type Pokémon introduced in Generation 5.";klink;3;660;88;121;monsters/klinklang.png.txt;monsters/klinklang_normal.gif.txt;monsters/klinklang_back.gif.txt -333;Klinklang-1;"Klinklang is a Steel type Pokémon introduced in Generation 5.";klink;4;990;132;182;monsters/klinklang.png.txt;monsters/klinklang_normal.gif.txt;monsters/klinklang_back.gif.txt -334;Klinklang-2;"Klinklang is a Steel type Pokémon introduced in Generation 5.";klink;5;1320;176;242;monsters/klinklang.png.txt;monsters/klinklang_normal.gif.txt;monsters/klinklang_back.gif.txt -335;Tynamo;"Tynamo is an Electric type Pokémon introduced in Generation 5.";tynamo;1;275;35;55;monsters/tynamo.png.txt;monsters/tynamo_normal.gif.txt;monsters/tynamo_back.gif.txt -336;Eelektrik;"Eelektrik is an Electric type Pokémon introduced in Generation 5.";tynamo;2;303;39;61;monsters/eelektrik.png.txt;monsters/eelektrik_normal.gif.txt;monsters/eelektrik_back.gif.txt -337;Eelektross;"Eelektross is an Electric type Pokémon introduced in Generation 5.";tynamo;3;605;77;121;monsters/eelektross.png.txt;monsters/eelektross_normal.gif.txt;monsters/eelektross_back.gif.txt -338;Eelektross-1;"Eelektross is an Electric type Pokémon introduced in Generation 5.";tynamo;4;908;116;182;monsters/eelektross.png.txt;monsters/eelektross_normal.gif.txt;monsters/eelektross_back.gif.txt -339;Eelektross-2;"Eelektross is an Electric type Pokémon introduced in Generation 5.";tynamo;5;1210;154;242;monsters/eelektross.png.txt;monsters/eelektross_normal.gif.txt;monsters/eelektross_back.gif.txt -340;Litwick;"Litwick is a Ghost/Fire type Pokémon introduced in Generation 5.";litwick;1;275;50;30;monsters/litwick.png.txt;monsters/litwick_normal.gif.txt;monsters/litwick_back.gif.txt -341;Lampent;"Lampent is a Ghost/Fire type Pokémon introduced in Generation 5.";litwick;2;303;55;33;monsters/lampent.png.txt;monsters/lampent_normal.gif.txt;monsters/lampent_back.gif.txt -342;Chandelure;"Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5.";litwick;3;605;110;66;monsters/chandelure.png.txt;monsters/chandelure_normal.gif.txt;monsters/chandelure_back.gif.txt -343;Chandelure-1;"Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5.";litwick;4;908;165;99;monsters/chandelure.png.txt;monsters/chandelure_normal.gif.txt;monsters/chandelure_back.gif.txt -344;Chandelure-2;"Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5.";litwick;5;1210;220;132;monsters/chandelure.png.txt;monsters/chandelure_normal.gif.txt;monsters/chandelure_back.gif.txt -345;Axew;"Axew is a Dragon type Pokémon introduced in Generation 5.";axew;1;320;46;87;monsters/axew.png.txt;monsters/axew_normal.gif.txt;monsters/axew_back.gif.txt -346;Fraxure;"Fraxure is a Dragon type Pokémon introduced in Generation 5.";axew;2;352;51;96;monsters/fraxure.png.txt;monsters/fraxure_normal.gif.txt;monsters/fraxure_back.gif.txt -347;Haxorus;"Haxorus is a Dragon type Pokémon introduced in Generation 5.";axew;3;704;101;191;monsters/haxorus.png.txt;monsters/haxorus_normal.gif.txt;monsters/haxorus_back.gif.txt -348;Haxorus-1;"Haxorus is a Dragon type Pokémon introduced in Generation 5.";axew;4;1056;152;287;monsters/haxorus.png.txt;monsters/haxorus_normal.gif.txt;monsters/haxorus_back.gif.txt -349;Haxorus-2;"Haxorus is a Dragon type Pokémon introduced in Generation 5.";axew;5;1408;202;383;monsters/haxorus.png.txt;monsters/haxorus_normal.gif.txt;monsters/haxorus_back.gif.txt -350;Deino;"Deino is a Dark/Dragon type Pokémon introduced in Generation 5.";deino;1;300;52;65;monsters/deino.png.txt;monsters/deino_normal.gif.txt;monsters/deino_back.gif.txt -351;Zweilous;"Zweilous is a Dark/Dragon type Pokémon introduced in Generation 5.";deino;2;330;57;72;monsters/zweilous.png.txt;monsters/zweilous_normal.gif.txt;monsters/zweilous_back.gif.txt -352;Hydreigon;"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5.\nHydreigon is a pseudo-legendary Pokémon. In Generation 9, a Paradox Pokémon Iron Jugulis was discovered, which bears a striking resemblance to Hydreigon.";deino;3;660;114;143;monsters/hydreigon.png.txt;monsters/hydreigon_normal.gif.txt;monsters/hydreigon_back.gif.txt -353;Hydreigon-1;"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5.\nHydreigon is a pseudo-legendary Pokémon. In Generation 9, a Paradox Pokémon Iron Jugulis was discovered, which bears a striking resemblance to Hydreigon.";deino;4;990;172;215;monsters/hydreigon.png.txt;monsters/hydreigon_normal.gif.txt;monsters/hydreigon_back.gif.txt -354;Hydreigon-2;"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5.\nHydreigon is a pseudo-legendary Pokémon. In Generation 9, a Paradox Pokémon Iron Jugulis was discovered, which bears a striking resemblance to Hydreigon.";deino;5;1320;229;286;monsters/hydreigon.png.txt;monsters/hydreigon_normal.gif.txt;monsters/hydreigon_back.gif.txt +0;Bulbasaur;"Bulbasaur is a Grass/Poison type Pokémon introduced in Generation 1.\nBulbasaur is a small, mainly turquoise amphibian Pokémon with red eyes and a green bulb on its back. It is based on a frog/toad, with the bulb resembling a plant bulb that grows into a flower as it evolves.\nBulbasaur is notable for being the very first Pokémon in the National Pokédex. It is one of the three choices for a starter Pokémon in the original Game Boy games, Pokémon Red & Blue (Red & Green in Japan), along with Charmander and Squirtle.";bulbasaur;1;318.0;45.0;25.0;monsters/bulbasaur.png.txt;monsters/bulbasaur_normal.gif.txt;monsters/bulbasaur_back.gif.txt +1;Ivysaur;Ivysaur is a Grass/Poison type Pokémon introduced in Generation 1.;bulbasaur;2;350.0;50.0;28.0;monsters/ivysaur.png.txt;monsters/ivysaur_normal.gif.txt;monsters/ivysaur_back.gif.txt +2;Venusaur;"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1.\nVenusaur is a large, quadrupedal Pokémon with a turquoise body. It has small red eyes and several large ferns on its back and head. The plant bulb that was on the back of its previous evolutions, Bulbasaur and Ivysaur, has now bloomed into a large flower with large pink petals and a yellow center. The female has a seed in the center.\nVenusaur is inspired by toads and the horned frog. The large flower is similar to the Rafflesia arnoldii, a parasitic plant with an unpleasant odor, referencing the Pokémon's Poison type.\nVenusaur is notable for being the final evolution stage of one of the original starter Pokémon, along with Charizard and Blastoise. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Vine Lash.";bulbasaur;3;382.0;54.0;30.0;monsters/venusaur.png.txt;monsters/venusaur_normal.gif.txt;monsters/venusaur_back.gif.txt +3;Venusaur-1;"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1.\nVenusaur is a large, quadrupedal Pokémon with a turquoise body. It has small red eyes and several large ferns on its back and head. The plant bulb that was on the back of its previous evolutions, Bulbasaur and Ivysaur, has now bloomed into a large flower with large pink petals and a yellow center. The female has a seed in the center.\nVenusaur is inspired by toads and the horned frog. The large flower is similar to the Rafflesia arnoldii, a parasitic plant with an unpleasant odor, referencing the Pokémon's Poison type.\nVenusaur is notable for being the final evolution stage of one of the original starter Pokémon, along with Charizard and Blastoise. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Vine Lash.";bulbasaur;4;413.0;59.0;33.0;monsters/venusaur.png.txt;monsters/venusaur_normal.gif.txt;monsters/venusaur_back.gif.txt +4;Venusaur-2;"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1.\nVenusaur is a large, quadrupedal Pokémon with a turquoise body. It has small red eyes and several large ferns on its back and head. The plant bulb that was on the back of its previous evolutions, Bulbasaur and Ivysaur, has now bloomed into a large flower with large pink petals and a yellow center. The female has a seed in the center.\nVenusaur is inspired by toads and the horned frog. The large flower is similar to the Rafflesia arnoldii, a parasitic plant with an unpleasant odor, referencing the Pokémon's Poison type.\nVenusaur is notable for being the final evolution stage of one of the original starter Pokémon, along with Charizard and Blastoise. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Vine Lash.";bulbasaur;5;445.0;63.0;35.0;monsters/venusaur.png.txt;monsters/venusaur_normal.gif.txt;monsters/venusaur_back.gif.txt +5;Charmander;"Charmander is a Fire type Pokémon introduced in Generation 1.\nCharmander is a bipedal, reptilian Pokémon. Most of its body is colored orange, while its underbelly is light yellow and it has blue eyes. It has a flame at the end of its tail, which is said to signify its health.\nCharmander's design is based on a lizard, however as its name suggests it may also have been inspired by salamanders, which in mythology have an affinity with fire.\nCharmander is notable for being one of the three choices for a starter Pokémon in the original Game Boy games, Pokémon Red & Blue (Red & Green in Japan), along with Bulbasaur and Squirtle.";charmander;1;309.0;39.0;26.0;monsters/charmander.png.txt;monsters/charmander_normal.gif.txt;monsters/charmander_back.gif.txt +6;Charmeleon;Charmeleon is a Fire type Pokémon introduced in Generation 1.;charmander;2;340.0;43.0;29.0;monsters/charmeleon.png.txt;monsters/charmeleon_normal.gif.txt;monsters/charmeleon_back.gif.txt +7;Charizard;"Charizard is a Fire/Flying type Pokémon introduced in Generation 1.\nCharizard is a large dragon-like Pokémon, mainly orange in color. It has two large wings, the underside of which are turquoise. Like Charmander and Charmeleon, it has a flame at the end of its tail.\nThe design of Charizard appears to draw inspiration from dragons of European folklore, with its large wings, horned head, and fiery breath.\nCharizard is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Blastoise. Although it looks like a dragon, it doesn't have the Dragon typing. However it has two Mega Evolutions, available in Generation 6 games and Pokémon Go, one of which replaces its Flying type with Dragon. Charizard also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Wildfire.";charmander;3;371.0;47.0;31.0;monsters/charizard.png.txt;monsters/charizard_normal.gif.txt;monsters/charizard_back.gif.txt +8;Charizard-1;"Charizard is a Fire/Flying type Pokémon introduced in Generation 1.\nCharizard is a large dragon-like Pokémon, mainly orange in color. It has two large wings, the underside of which are turquoise. Like Charmander and Charmeleon, it has a flame at the end of its tail.\nThe design of Charizard appears to draw inspiration from dragons of European folklore, with its large wings, horned head, and fiery breath.\nCharizard is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Blastoise. Although it looks like a dragon, it doesn't have the Dragon typing. However it has two Mega Evolutions, available in Generation 6 games and Pokémon Go, one of which replaces its Flying type with Dragon. Charizard also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Wildfire.";charmander;4;402.0;51.0;34.0;monsters/charizard.png.txt;monsters/charizard_normal.gif.txt;monsters/charizard_back.gif.txt +9;Charizard-2;"Charizard is a Fire/Flying type Pokémon introduced in Generation 1.\nCharizard is a large dragon-like Pokémon, mainly orange in color. It has two large wings, the underside of which are turquoise. Like Charmander and Charmeleon, it has a flame at the end of its tail.\nThe design of Charizard appears to draw inspiration from dragons of European folklore, with its large wings, horned head, and fiery breath.\nCharizard is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Blastoise. Although it looks like a dragon, it doesn't have the Dragon typing. However it has two Mega Evolutions, available in Generation 6 games and Pokémon Go, one of which replaces its Flying type with Dragon. Charizard also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Wildfire.";charmander;5;433.0;55.0;36.0;monsters/charizard.png.txt;monsters/charizard_normal.gif.txt;monsters/charizard_back.gif.txt +10;Squirtle;"Squirtle is a Water type Pokémon introduced in Generation 1.\nSquirtle is a bipedal, reptilian Pokémon. It has a blue body with purple eyes, a light brown belly, and a tough red-brown shell on its back. It has a long tail that curls into a spiral.\nSquirtle is primarily based on a turtle, taking inspiration from both land-dwelling and sea-dwelling varieties. The curly tail resembles a crashing wave.\nSquirtle is notable for being one of the three choices for a starter Pokémon in the original Game Boy games, Pokémon Red & Blue (Red & Green in Japan), along with Bulbasaur and Charmander.";squirtle;1;314.0;44.0;24.0;monsters/squirtle.png.txt;monsters/squirtle_normal.gif.txt;monsters/squirtle_back.gif.txt +11;Wartortle;Wartortle is a Water type Pokémon introduced in Generation 1.;squirtle;2;345.0;48.0;26.0;monsters/wartortle.png.txt;monsters/wartortle_normal.gif.txt;monsters/wartortle_back.gif.txt +12;Blastoise;"Blastoise is a Water type Pokémon introduced in Generation 1.\nBlastoise is a large, bipedal, reptilian Pokémon. It has a blue body with small purple eyes, a light brown belly, and a stubby tail. It has a large brown shell with two powerful water cannons on either side, which can be withdrawn.\nBlastoise's design is heavily influenced by turtles and tortoises. The cannons likely draw inspiration from the concept of a mobile tank or battleship.\nBlastoise is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Charizard. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Cannonade.";squirtle;3;377.0;53.0;29.0;monsters/blastoise.png.txt;monsters/blastoise_normal.gif.txt;monsters/blastoise_back.gif.txt +13;Blastoise-1;"Blastoise is a Water type Pokémon introduced in Generation 1.\nBlastoise is a large, bipedal, reptilian Pokémon. It has a blue body with small purple eyes, a light brown belly, and a stubby tail. It has a large brown shell with two powerful water cannons on either side, which can be withdrawn.\nBlastoise's design is heavily influenced by turtles and tortoises. The cannons likely draw inspiration from the concept of a mobile tank or battleship.\nBlastoise is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Charizard. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Cannonade.";squirtle;4;408.0;57.0;31.0;monsters/blastoise.png.txt;monsters/blastoise_normal.gif.txt;monsters/blastoise_back.gif.txt +14;Blastoise-2;"Blastoise is a Water type Pokémon introduced in Generation 1.\nBlastoise is a large, bipedal, reptilian Pokémon. It has a blue body with small purple eyes, a light brown belly, and a stubby tail. It has a large brown shell with two powerful water cannons on either side, which can be withdrawn.\nBlastoise's design is heavily influenced by turtles and tortoises. The cannons likely draw inspiration from the concept of a mobile tank or battleship.\nBlastoise is notable for being the final evolution stage of one of the original starter Pokémon, along with Venusaur and Charizard. It has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Cannonade.";squirtle;5;440.0;62.0;34.0;monsters/blastoise.png.txt;monsters/blastoise_normal.gif.txt;monsters/blastoise_back.gif.txt +15;Caterpie;Caterpie is a Bug type Pokémon introduced in Generation 1.;caterpie;1;195.0;45.0;15.0;monsters/caterpie.png.txt;monsters/caterpie_normal.gif.txt;monsters/caterpie_back.gif.txt +16;Metapod;Metapod is a Bug type Pokémon introduced in Generation 1.;caterpie;2;215.0;50.0;17.0;monsters/metapod.png.txt;monsters/metapod_normal.gif.txt;monsters/metapod_back.gif.txt +17;Butterfree;"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1.\nButterfree has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Befuddle.";caterpie;3;234.0;54.0;18.0;monsters/butterfree.png.txt;monsters/butterfree_normal.gif.txt;monsters/butterfree_back.gif.txt +18;Butterfree-1;"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1.\nButterfree has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Befuddle.";caterpie;4;254.0;59.0;20.0;monsters/butterfree.png.txt;monsters/butterfree_normal.gif.txt;monsters/butterfree_back.gif.txt +19;Butterfree-2;"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1.\nButterfree has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Befuddle.";caterpie;5;273.0;63.0;21.0;monsters/butterfree.png.txt;monsters/butterfree_normal.gif.txt;monsters/butterfree_back.gif.txt +20;Weedle;Weedle is a Bug/Poison type Pokémon introduced in Generation 1.;weedle;1;195.0;40.0;18.0;monsters/weedle.png.txt;monsters/weedle_normal.gif.txt;monsters/weedle_back.gif.txt +21;Kakuna;Kakuna is a Bug/Poison type Pokémon introduced in Generation 1.;weedle;2;215.0;44.0;20.0;monsters/kakuna.png.txt;monsters/kakuna_normal.gif.txt;monsters/kakuna_back.gif.txt +22;Beedrill;"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1.\nBeedrill has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";weedle;3;234.0;48.0;22.0;monsters/beedrill.png.txt;monsters/beedrill_normal.gif.txt;monsters/beedrill_back.gif.txt +23;Beedrill-1;"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1.\nBeedrill has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";weedle;4;254.0;52.0;23.0;monsters/beedrill.png.txt;monsters/beedrill_normal.gif.txt;monsters/beedrill_back.gif.txt +24;Beedrill-2;"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1.\nBeedrill has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";weedle;5;273.0;56.0;25.0;monsters/beedrill.png.txt;monsters/beedrill_normal.gif.txt;monsters/beedrill_back.gif.txt +25;Pidgey;Pidgey is a Normal/Flying type Pokémon introduced in Generation 1.;pidgey;1;251.0;40.0;23.0;monsters/pidgey.png.txt;monsters/pidgey_normal.gif.txt;monsters/pidgey_back.gif.txt +26;Pidgeotto;Pidgeotto is a Normal/Flying type Pokémon introduced in Generation 1.;pidgey;2;276.0;44.0;25.0;monsters/pidgeotto.png.txt;monsters/pidgeotto_normal.gif.txt;monsters/pidgeotto_back.gif.txt +27;Pidgeot;"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1.\nPidgeot has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";pidgey;3;301.0;48.0;28.0;monsters/pidgeot.png.txt;monsters/pidgeot_normal.gif.txt;monsters/pidgeot_back.gif.txt +28;Pidgeot-1;"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1.\nPidgeot has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";pidgey;4;326.0;52.0;30.0;monsters/pidgeot.png.txt;monsters/pidgeot_normal.gif.txt;monsters/pidgeot_back.gif.txt +29;Pidgeot-2;"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1.\nPidgeot has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";pidgey;5;351.0;56.0;32.0;monsters/pidgeot.png.txt;monsters/pidgeot_normal.gif.txt;monsters/pidgeot_back.gif.txt +30;Nidoran♀;Nidoran♀ is a Poison type Pokémon introduced in Generation 1.;nidoran-f;1;275.0;55.0;24.0;monsters/nidoran-f.png.txt;monsters/nidoran-f_normal.gif.txt;monsters/nidoran-f_back.gif.txt +31;Nidorina;Nidorina is a Poison type Pokémon introduced in Generation 1.;nidoran-f;2;303.0;61.0;26.0;monsters/nidorina.png.txt;monsters/nidorina_normal.gif.txt;monsters/nidorina_back.gif.txt +32;Nidoqueen;Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1.;nidoran-f;3;330.0;66.0;29.0;monsters/nidoqueen.png.txt;monsters/nidoqueen_normal.gif.txt;monsters/nidoqueen_back.gif.txt +33;Nidoqueen-1;Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1.;nidoran-f;4;358.0;72.0;31.0;monsters/nidoqueen.png.txt;monsters/nidoqueen_normal.gif.txt;monsters/nidoqueen_back.gif.txt +34;Nidoqueen-2;Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1.;nidoran-f;5;385.0;77.0;34.0;monsters/nidoqueen.png.txt;monsters/nidoqueen_normal.gif.txt;monsters/nidoqueen_back.gif.txt +35;Nidoran♂;Nidoran♂ is a Poison type Pokémon introduced in Generation 1.;nidoran-m;1;273.0;46.0;28.0;monsters/nidoran-m.png.txt;monsters/nidoran-m_normal.gif.txt;monsters/nidoran-m_back.gif.txt +36;Nidorino;Nidorino is a Poison type Pokémon introduced in Generation 1.;nidoran-m;2;300.0;51.0;31.0;monsters/nidorino.png.txt;monsters/nidorino_normal.gif.txt;monsters/nidorino_back.gif.txt +37;Nidoking;Nidoking is a Poison/Ground type Pokémon introduced in Generation 1.;nidoran-m;3;328.0;55.0;34.0;monsters/nidoking.png.txt;monsters/nidoking_normal.gif.txt;monsters/nidoking_back.gif.txt +38;Nidoking-1;Nidoking is a Poison/Ground type Pokémon introduced in Generation 1.;nidoran-m;4;355.0;60.0;36.0;monsters/nidoking.png.txt;monsters/nidoking_normal.gif.txt;monsters/nidoking_back.gif.txt +39;Nidoking-2;Nidoking is a Poison/Ground type Pokémon introduced in Generation 1.;nidoran-m;5;382.0;64.0;39.0;monsters/nidoking.png.txt;monsters/nidoking_normal.gif.txt;monsters/nidoking_back.gif.txt +40;Cleffa;Cleffa is a Fairy type Pokémon introduced in Generation 2.;cleffa;1;218.0;50.0;13.0;monsters/cleffa.png.txt;monsters/cleffa_normal.gif.txt;monsters/cleffa_back.gif.txt +41;Clefairy;Clefairy is a Fairy type Pokémon introduced in Generation 1.;cleffa;2;240.0;55.0;14.0;monsters/clefairy.png.txt;monsters/clefairy_normal.gif.txt;monsters/clefairy_back.gif.txt +42;Clefable;Clefable is a Fairy type Pokémon introduced in Generation 1.;cleffa;3;262.0;60.0;16.0;monsters/clefable.png.txt;monsters/clefable_normal.gif.txt;monsters/clefable_back.gif.txt +43;Clefable-1;Clefable is a Fairy type Pokémon introduced in Generation 1.;cleffa;4;283.0;65.0;17.0;monsters/clefable.png.txt;monsters/clefable_normal.gif.txt;monsters/clefable_back.gif.txt +44;Clefable-2;Clefable is a Fairy type Pokémon introduced in Generation 1.;cleffa;5;305.0;70.0;18.0;monsters/clefable.png.txt;monsters/clefable_normal.gif.txt;monsters/clefable_back.gif.txt +45;Igglybuff;Igglybuff is a Normal/Fairy type Pokémon introduced in Generation 2.;igglybuff;1;210.0;90.0;15.0;monsters/igglybuff.png.txt;monsters/igglybuff_normal.gif.txt;monsters/igglybuff_back.gif.txt +46;Jigglypuff;"Jigglypuff is a Normal/Fairy type Pokémon introduced in Generation 1.\nIn Generation 9, a Paradox Pokémon Scream Tail was discovered, which bears a striking resemblance to Jigglypuff.";igglybuff;2;231.0;99.0;17.0;monsters/jigglypuff.png.txt;monsters/jigglypuff_normal.gif.txt;monsters/jigglypuff_back.gif.txt +47;Wigglytuff;Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1.;igglybuff;3;252.0;108.0;18.0;monsters/wigglytuff.png.txt;monsters/wigglytuff_normal.gif.txt;monsters/wigglytuff_back.gif.txt +48;Wigglytuff-1;Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1.;igglybuff;4;273.0;117.0;20.0;monsters/wigglytuff.png.txt;monsters/wigglytuff_normal.gif.txt;monsters/wigglytuff_back.gif.txt +49;Wigglytuff-2;Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1.;igglybuff;5;294.0;126.0;21.0;monsters/wigglytuff.png.txt;monsters/wigglytuff_normal.gif.txt;monsters/wigglytuff_back.gif.txt +50;Zubat;Zubat is a Poison/Flying type Pokémon introduced in Generation 1.;zubat;1;245.0;40.0;23.0;monsters/zubat.png.txt;monsters/zubat_normal.gif.txt;monsters/zubat_back.gif.txt +51;Golbat;Golbat is a Poison/Flying type Pokémon introduced in Generation 1.;zubat;2;270.0;44.0;25.0;monsters/golbat.png.txt;monsters/golbat_normal.gif.txt;monsters/golbat_back.gif.txt +52;Crobat;Crobat is a Poison/Flying type Pokémon introduced in Generation 2.;zubat;3;294.0;48.0;28.0;monsters/crobat.png.txt;monsters/crobat_normal.gif.txt;monsters/crobat_back.gif.txt +53;Crobat-1;Crobat is a Poison/Flying type Pokémon introduced in Generation 2.;zubat;4;319.0;52.0;30.0;monsters/crobat.png.txt;monsters/crobat_normal.gif.txt;monsters/crobat_back.gif.txt +54;Crobat-2;Crobat is a Poison/Flying type Pokémon introduced in Generation 2.;zubat;5;343.0;56.0;32.0;monsters/crobat.png.txt;monsters/crobat_normal.gif.txt;monsters/crobat_back.gif.txt +55;Abra;Abra is a Psychic type Pokémon introduced in Generation 1.;abra;1;310.0;25.0;10.0;monsters/abra.png.txt;monsters/abra_normal.gif.txt;monsters/abra_back.gif.txt +56;Kadabra;Kadabra is a Psychic type Pokémon introduced in Generation 1.;abra;2;341.0;28.0;11.0;monsters/kadabra.png.txt;monsters/kadabra_normal.gif.txt;monsters/kadabra_back.gif.txt +57;Alakazam;"Alakazam is a Psychic type Pokémon introduced in Generation 1.\nAlakazam has a Mega Evolution, available in Generation 6 games and Pokémon Go.";abra;3;372.0;30.0;12.0;monsters/alakazam.png.txt;monsters/alakazam_normal.gif.txt;monsters/alakazam_back.gif.txt +58;Alakazam-1;"Alakazam is a Psychic type Pokémon introduced in Generation 1.\nAlakazam has a Mega Evolution, available in Generation 6 games and Pokémon Go.";abra;4;403.0;33.0;13.0;monsters/alakazam.png.txt;monsters/alakazam_normal.gif.txt;monsters/alakazam_back.gif.txt +59;Alakazam-2;"Alakazam is a Psychic type Pokémon introduced in Generation 1.\nAlakazam has a Mega Evolution, available in Generation 6 games and Pokémon Go.";abra;5;434.0;35.0;14.0;monsters/alakazam.png.txt;monsters/alakazam_normal.gif.txt;monsters/alakazam_back.gif.txt +60;Machop;Machop is a Fighting type Pokémon introduced in Generation 1.;machop;1;305.0;70.0;40.0;monsters/machop.png.txt;monsters/machop_normal.gif.txt;monsters/machop_back.gif.txt +61;Machoke;Machoke is a Fighting type Pokémon introduced in Generation 1.;machop;2;336.0;77.0;44.0;monsters/machoke.png.txt;monsters/machoke_normal.gif.txt;monsters/machoke_back.gif.txt +62;Machamp;"Machamp is a Fighting type Pokémon introduced in Generation 1.\nMachamp has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Chi Strike.";machop;3;366.0;84.0;48.0;monsters/machamp.png.txt;monsters/machamp_normal.gif.txt;monsters/machamp_back.gif.txt +63;Machamp-1;"Machamp is a Fighting type Pokémon introduced in Generation 1.\nMachamp has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Chi Strike.";machop;4;397.0;91.0;50.0;monsters/machamp.png.txt;monsters/machamp_normal.gif.txt;monsters/machamp_back.gif.txt +64;Machamp-2;"Machamp is a Fighting type Pokémon introduced in Generation 1.\nMachamp has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Chi Strike.";machop;5;427.0;98.0;50.0;monsters/machamp.png.txt;monsters/machamp_normal.gif.txt;monsters/machamp_back.gif.txt +65;Bellsprout;Bellsprout is a Grass/Poison type Pokémon introduced in Generation 1.;bellsprout;1;300.0;50.0;38.0;monsters/bellsprout.png.txt;monsters/bellsprout_normal.gif.txt;monsters/bellsprout_back.gif.txt +66;Weepinbell;Weepinbell is a Grass/Poison type Pokémon introduced in Generation 1.;bellsprout;2;330.0;55.0;42.0;monsters/weepinbell.png.txt;monsters/weepinbell_normal.gif.txt;monsters/weepinbell_back.gif.txt +67;Victreebel;Victreebel is a Grass/Poison type Pokémon introduced in Generation 1.;bellsprout;3;360.0;60.0;46.0;monsters/victreebel.png.txt;monsters/victreebel_normal.gif.txt;monsters/victreebel_back.gif.txt +68;Victreebel-1;Victreebel is a Grass/Poison type Pokémon introduced in Generation 1.;bellsprout;4;390.0;65.0;49.0;monsters/victreebel.png.txt;monsters/victreebel_normal.gif.txt;monsters/victreebel_back.gif.txt +69;Victreebel-2;Victreebel is a Grass/Poison type Pokémon introduced in Generation 1.;bellsprout;5;420.0;70.0;50.0;monsters/victreebel.png.txt;monsters/victreebel_normal.gif.txt;monsters/victreebel_back.gif.txt +70;Geodude;"Geodude is a Rock/Ground type Pokémon introduced in Generation 1.\nGeodude has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;1;300.0;40.0;40.0;monsters/geodude.png.txt;monsters/geodude_normal.gif.txt;monsters/geodude_back.gif.txt +71;Graveler;"Graveler is a Rock/Ground type Pokémon introduced in Generation 1.\nGraveler has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;2;330.0;44.0;44.0;monsters/graveler.png.txt;monsters/graveler_normal.gif.txt;monsters/graveler_back.gif.txt +72;Golem;"Golem is a Rock/Ground type Pokémon introduced in Generation 1.\nGolem has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;3;360.0;48.0;48.0;monsters/golem.png.txt;monsters/golem_normal.gif.txt;monsters/golem_back.gif.txt +73;Golem-1;"Golem is a Rock/Ground type Pokémon introduced in Generation 1.\nGolem has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;4;390.0;52.0;50.0;monsters/golem.png.txt;monsters/golem_normal.gif.txt;monsters/golem_back.gif.txt +74;Golem-2;"Golem is a Rock/Ground type Pokémon introduced in Generation 1.\nGolem has an Alolan Form, introduced in Pokémon Sun/Moon.";geodude;5;420.0;56.0;50.0;monsters/golem.png.txt;monsters/golem_normal.gif.txt;monsters/golem_back.gif.txt +75;Magnemite;Magnemite is an Electric/Steel type Pokémon introduced in Generation 1.;magnemite;1;325.0;25.0;18.0;monsters/magnemite.png.txt;monsters/magnemite_normal.gif.txt;monsters/magnemite_back.gif.txt +76;Magneton;"Magneton is an Electric/Steel type Pokémon introduced in Generation 1.\nIn Generation 9, a Paradox Pokémon Sandy Shocks was discovered, which bears a striking resemblance to Magneton.";magnemite;2;358.0;28.0;20.0;monsters/magneton.png.txt;monsters/magneton_normal.gif.txt;monsters/magneton_back.gif.txt +77;Magnezone;Magnezone is an Electric/Steel type Pokémon introduced in Generation 4.;magnemite;3;390.0;30.0;22.0;monsters/magnezone.png.txt;monsters/magnezone_normal.gif.txt;monsters/magnezone_back.gif.txt +78;Magnezone-1;Magnezone is an Electric/Steel type Pokémon introduced in Generation 4.;magnemite;4;423.0;33.0;23.0;monsters/magnezone.png.txt;monsters/magnezone_normal.gif.txt;monsters/magnezone_back.gif.txt +79;Magnezone-2;Magnezone is an Electric/Steel type Pokémon introduced in Generation 4.;magnemite;5;455.0;35.0;25.0;monsters/magnezone.png.txt;monsters/magnezone_normal.gif.txt;monsters/magnezone_back.gif.txt +80;Gastly;Gastly is a Ghost/Poison type Pokémon introduced in Generation 1.;gastly;1;310.0;30.0;18.0;monsters/gastly.png.txt;monsters/gastly_normal.gif.txt;monsters/gastly_back.gif.txt +81;Haunter;Haunter is a Ghost/Poison type Pokémon introduced in Generation 1.;gastly;2;341.0;33.0;20.0;monsters/haunter.png.txt;monsters/haunter_normal.gif.txt;monsters/haunter_back.gif.txt +82;Gengar;"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1.\nGengar has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Terror.";gastly;3;372.0;36.0;22.0;monsters/gengar.png.txt;monsters/gengar_normal.gif.txt;monsters/gengar_back.gif.txt +83;Gengar-1;"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1.\nGengar has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Terror.";gastly;4;403.0;39.0;23.0;monsters/gengar.png.txt;monsters/gengar_normal.gif.txt;monsters/gengar_back.gif.txt +84;Gengar-2;"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1.\nGengar has a Mega Evolution, available in Generation 6 games and Pokémon Go; it also has a Gigantamax form available in Pokémon Sword/Shield, with an exclusive G-Max move, G-Max Terror.";gastly;5;434.0;42.0;25.0;monsters/gengar.png.txt;monsters/gengar_normal.gif.txt;monsters/gengar_back.gif.txt +85;Rhyhorn;Rhyhorn is a Ground/Rock type Pokémon introduced in Generation 1.;rhyhorn;1;345.0;80.0;43.0;monsters/rhyhorn.png.txt;monsters/rhyhorn_normal.gif.txt;monsters/rhyhorn_back.gif.txt +86;Rhydon;Rhydon is a Ground/Rock type Pokémon introduced in Generation 1.;rhyhorn;2;380.0;88.0;47.0;monsters/rhydon.png.txt;monsters/rhydon_normal.gif.txt;monsters/rhydon_back.gif.txt +87;Rhyperior;Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4.;rhyhorn;3;414.0;96.0;50.0;monsters/rhyperior.png.txt;monsters/rhyperior_normal.gif.txt;monsters/rhyperior_back.gif.txt +88;Rhyperior-1;Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4.;rhyhorn;4;449.0;104.0;50.0;monsters/rhyperior.png.txt;monsters/rhyperior_normal.gif.txt;monsters/rhyperior_back.gif.txt +89;Rhyperior-2;Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4.;rhyhorn;5;483.0;112.0;50.0;monsters/rhyperior.png.txt;monsters/rhyperior_normal.gif.txt;monsters/rhyperior_back.gif.txt +90;Happiny;Happiny is a Normal type Pokémon introduced in Generation 4.;happiny;1;220.0;100.0;3.0;monsters/happiny.png.txt;monsters/happiny_normal.gif.txt;monsters/happiny_back.gif.txt +91;Chansey;Chansey is a Normal type Pokémon introduced in Generation 1.;happiny;2;242.0;110.0;3.0;monsters/chansey.png.txt;monsters/chansey_normal.gif.txt;monsters/chansey_back.gif.txt +92;Blissey;Blissey is a Normal type Pokémon introduced in Generation 2.;happiny;3;264.0;120.0;4.0;monsters/blissey.png.txt;monsters/blissey_normal.gif.txt;monsters/blissey_back.gif.txt +93;Blissey-1;Blissey is a Normal type Pokémon introduced in Generation 2.;happiny;4;286.0;130.0;4.0;monsters/blissey.png.txt;monsters/blissey_normal.gif.txt;monsters/blissey_back.gif.txt +94;Blissey-2;Blissey is a Normal type Pokémon introduced in Generation 2.;happiny;5;308.0;140.0;4.0;monsters/blissey.png.txt;monsters/blissey_normal.gif.txt;monsters/blissey_back.gif.txt +95;Horsea;Horsea is a Water type Pokémon introduced in Generation 1.;horsea;1;295.0;30.0;20.0;monsters/horsea.png.txt;monsters/horsea_normal.gif.txt;monsters/horsea_back.gif.txt +96;Seadra;Seadra is a Water type Pokémon introduced in Generation 1.;horsea;2;325.0;33.0;22.0;monsters/seadra.png.txt;monsters/seadra_normal.gif.txt;monsters/seadra_back.gif.txt +97;Kingdra;Kingdra is a Water/Dragon type Pokémon introduced in Generation 2.;horsea;3;354.0;36.0;24.0;monsters/kingdra.png.txt;monsters/kingdra_normal.gif.txt;monsters/kingdra_back.gif.txt +98;Kingdra-1;Kingdra is a Water/Dragon type Pokémon introduced in Generation 2.;horsea;4;384.0;39.0;26.0;monsters/kingdra.png.txt;monsters/kingdra_normal.gif.txt;monsters/kingdra_back.gif.txt +99;Kingdra-2;Kingdra is a Water/Dragon type Pokémon introduced in Generation 2.;horsea;5;413.0;42.0;28.0;monsters/kingdra.png.txt;monsters/kingdra_normal.gif.txt;monsters/kingdra_back.gif.txt +100;Elekid;Elekid is an Electric type Pokémon introduced in Generation 2.;elekid;1;360.0;45.0;32.0;monsters/elekid.png.txt;monsters/elekid_normal.gif.txt;monsters/elekid_back.gif.txt +101;Electabuzz;Electabuzz is an Electric type Pokémon introduced in Generation 1.;elekid;2;396.0;50.0;35.0;monsters/electabuzz.png.txt;monsters/electabuzz_normal.gif.txt;monsters/electabuzz_back.gif.txt +102;Electivire;Electivire is an Electric type Pokémon introduced in Generation 4.;elekid;3;432.0;54.0;38.0;monsters/electivire.png.txt;monsters/electivire_normal.gif.txt;monsters/electivire_back.gif.txt +103;Electivire-1;Electivire is an Electric type Pokémon introduced in Generation 4.;elekid;4;468.0;59.0;42.0;monsters/electivire.png.txt;monsters/electivire_normal.gif.txt;monsters/electivire_back.gif.txt +104;Electivire-2;Electivire is an Electric type Pokémon introduced in Generation 4.;elekid;5;504.0;63.0;45.0;monsters/electivire.png.txt;monsters/electivire_normal.gif.txt;monsters/electivire_back.gif.txt +105;Magby;Magby is a Fire type Pokémon introduced in Generation 2.;magby;1;365.0;45.0;38.0;monsters/magby.png.txt;monsters/magby_normal.gif.txt;monsters/magby_back.gif.txt +106;Magmar;Magmar is a Fire type Pokémon introduced in Generation 1.;magby;2;402.0;50.0;42.0;monsters/magmar.png.txt;monsters/magmar_normal.gif.txt;monsters/magmar_back.gif.txt +107;Magmortar;Magmortar is a Fire type Pokémon introduced in Generation 4.;magby;3;438.0;54.0;46.0;monsters/magmortar.png.txt;monsters/magmortar_normal.gif.txt;monsters/magmortar_back.gif.txt +108;Magmortar-1;Magmortar is a Fire type Pokémon introduced in Generation 4.;magby;4;475.0;59.0;49.0;monsters/magmortar.png.txt;monsters/magmortar_normal.gif.txt;monsters/magmortar_back.gif.txt +109;Magmortar-2;Magmortar is a Fire type Pokémon introduced in Generation 4.;magby;5;511.0;63.0;50.0;monsters/magmortar.png.txt;monsters/magmortar_normal.gif.txt;monsters/magmortar_back.gif.txt +110;Porygon;Porygon is a Normal type Pokémon introduced in Generation 1.;porygon;1;395.0;65.0;30.0;monsters/porygon.png.txt;monsters/porygon_normal.gif.txt;monsters/porygon_back.gif.txt +111;Porygon2;Porygon2 is a Normal type Pokémon introduced in Generation 2.;porygon;2;435.0;72.0;33.0;monsters/porygon2.png.txt;monsters/porygon2_normal.gif.txt;monsters/porygon2_back.gif.txt +112;Porygon-Z;Porygon-Z is a Normal type Pokémon introduced in Generation 4.;porygon;3;474.0;78.0;36.0;monsters/porygon-z.png.txt;monsters/porygon-z_normal.gif.txt;monsters/porygon-z_back.gif.txt +113;Porygon-Z-1;Porygon-Z is a Normal type Pokémon introduced in Generation 4.;porygon;4;514.0;85.0;39.0;monsters/porygon-z.png.txt;monsters/porygon-z_normal.gif.txt;monsters/porygon-z_back.gif.txt +114;Porygon-Z-2;Porygon-Z is a Normal type Pokémon introduced in Generation 4.;porygon;5;553.0;91.0;42.0;monsters/porygon-z.png.txt;monsters/porygon-z_normal.gif.txt;monsters/porygon-z_back.gif.txt +115;Dratini;Dratini is a Dragon type Pokémon introduced in Generation 1.;dratini;1;300.0;41.0;32.0;monsters/dratini.png.txt;monsters/dratini_normal.gif.txt;monsters/dratini_back.gif.txt +116;Dragonair;Dragonair is a Dragon type Pokémon introduced in Generation 1.;dratini;2;330.0;45.0;35.0;monsters/dragonair.png.txt;monsters/dragonair_normal.gif.txt;monsters/dragonair_back.gif.txt +117;Dragonite;"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1.\nDragonite is a pseudo-legendary Pokémon. Its evolution line were the only Dragon type Pokémon in the first generation of games (Red/Blue/Yellow).";dratini;3;360.0;49.0;38.0;monsters/dragonite.png.txt;monsters/dragonite_normal.gif.txt;monsters/dragonite_back.gif.txt +118;Dragonite-1;"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1.\nDragonite is a pseudo-legendary Pokémon. Its evolution line were the only Dragon type Pokémon in the first generation of games (Red/Blue/Yellow).";dratini;4;390.0;53.0;42.0;monsters/dragonite.png.txt;monsters/dragonite_normal.gif.txt;monsters/dragonite_back.gif.txt +119;Dragonite-2;"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1.\nDragonite is a pseudo-legendary Pokémon. Its evolution line were the only Dragon type Pokémon in the first generation of games (Red/Blue/Yellow).";dratini;5;420.0;57.0;45.0;monsters/dragonite.png.txt;monsters/dragonite_normal.gif.txt;monsters/dragonite_back.gif.txt +120;Chikorita;Chikorita is a Grass type Pokémon introduced in Generation 2.;chikorita;1;318.0;45.0;25.0;monsters/chikorita.png.txt;monsters/chikorita_normal.gif.txt;monsters/chikorita_back.gif.txt +121;Bayleef;Bayleef is a Grass type Pokémon introduced in Generation 2.;chikorita;2;350.0;50.0;28.0;monsters/bayleef.png.txt;monsters/bayleef_normal.gif.txt;monsters/bayleef_back.gif.txt +122;Meganium;Meganium is a Grass type Pokémon introduced in Generation 2.;chikorita;3;382.0;54.0;30.0;monsters/meganium.png.txt;monsters/meganium_normal.gif.txt;monsters/meganium_back.gif.txt +123;Meganium-1;Meganium is a Grass type Pokémon introduced in Generation 2.;chikorita;4;413.0;59.0;33.0;monsters/meganium.png.txt;monsters/meganium_normal.gif.txt;monsters/meganium_back.gif.txt +124;Meganium-2;Meganium is a Grass type Pokémon introduced in Generation 2.;chikorita;5;445.0;63.0;35.0;monsters/meganium.png.txt;monsters/meganium_normal.gif.txt;monsters/meganium_back.gif.txt +125;Totodile;Totodile is a Water type Pokémon introduced in Generation 2.;totodile;1;314.0;50.0;33.0;monsters/totodile.png.txt;monsters/totodile_normal.gif.txt;monsters/totodile_back.gif.txt +126;Croconaw;Croconaw is a Water type Pokémon introduced in Generation 2.;totodile;2;345.0;55.0;36.0;monsters/croconaw.png.txt;monsters/croconaw_normal.gif.txt;monsters/croconaw_back.gif.txt +127;Feraligatr;Feraligatr is a Water type Pokémon introduced in Generation 2.;totodile;3;377.0;60.0;40.0;monsters/feraligatr.png.txt;monsters/feraligatr_normal.gif.txt;monsters/feraligatr_back.gif.txt +128;Feraligatr-1;Feraligatr is a Water type Pokémon introduced in Generation 2.;totodile;4;408.0;65.0;43.0;monsters/feraligatr.png.txt;monsters/feraligatr_normal.gif.txt;monsters/feraligatr_back.gif.txt +129;Feraligatr-2;Feraligatr is a Water type Pokémon introduced in Generation 2.;totodile;5;440.0;70.0;46.0;monsters/feraligatr.png.txt;monsters/feraligatr_normal.gif.txt;monsters/feraligatr_back.gif.txt +130;Togepi;Togepi is a Fairy type Pokémon introduced in Generation 2.;togepi;1;245.0;35.0;10.0;monsters/togepi.png.txt;monsters/togepi_normal.gif.txt;monsters/togepi_back.gif.txt +131;Togetic;Togetic is a Fairy/Flying type Pokémon introduced in Generation 2.;togepi;2;270.0;39.0;11.0;monsters/togetic.png.txt;monsters/togetic_normal.gif.txt;monsters/togetic_back.gif.txt +132;Togekiss;Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4.;togepi;3;294.0;42.0;12.0;monsters/togekiss.png.txt;monsters/togekiss_normal.gif.txt;monsters/togekiss_back.gif.txt +133;Togekiss-1;Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4.;togepi;4;319.0;46.0;13.0;monsters/togekiss.png.txt;monsters/togekiss_normal.gif.txt;monsters/togekiss_back.gif.txt +134;Togekiss-2;Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4.;togepi;5;343.0;49.0;14.0;monsters/togekiss.png.txt;monsters/togekiss_normal.gif.txt;monsters/togekiss_back.gif.txt +135;Mareep;Mareep is an Electric type Pokémon introduced in Generation 2.;mareep;1;280.0;55.0;20.0;monsters/mareep.png.txt;monsters/mareep_normal.gif.txt;monsters/mareep_back.gif.txt +136;Flaaffy;Flaaffy is an Electric type Pokémon introduced in Generation 2.;mareep;2;308.0;61.0;22.0;monsters/flaaffy.png.txt;monsters/flaaffy_normal.gif.txt;monsters/flaaffy_back.gif.txt +137;Ampharos;Ampharos is an Electric type Pokémon introduced in Generation 2.;mareep;3;336.0;66.0;24.0;monsters/ampharos.png.txt;monsters/ampharos_normal.gif.txt;monsters/ampharos_back.gif.txt +138;Ampharos-1;Ampharos is an Electric type Pokémon introduced in Generation 2.;mareep;4;364.0;72.0;26.0;monsters/ampharos.png.txt;monsters/ampharos_normal.gif.txt;monsters/ampharos_back.gif.txt +139;Ampharos-2;Ampharos is an Electric type Pokémon introduced in Generation 2.;mareep;5;392.0;77.0;28.0;monsters/ampharos.png.txt;monsters/ampharos_normal.gif.txt;monsters/ampharos_back.gif.txt +140;Azurill;Azurill is a Normal/Fairy type Pokémon introduced in Generation 3.;azurill;1;190.0;50.0;10.0;monsters/azurill.png.txt;monsters/azurill_normal.gif.txt;monsters/azurill_back.gif.txt +141;Marill;Marill is a Water/Fairy type Pokémon introduced in Generation 2.;azurill;2;209.0;55.0;11.0;monsters/marill.png.txt;monsters/marill_normal.gif.txt;monsters/marill_back.gif.txt +142;Azumarill;Azumarill is a Water/Fairy type Pokémon introduced in Generation 2.;azurill;3;228.0;60.0;12.0;monsters/azumarill.png.txt;monsters/azumarill_normal.gif.txt;monsters/azumarill_back.gif.txt +143;Azumarill-1;Azumarill is a Water/Fairy type Pokémon introduced in Generation 2.;azurill;4;247.0;65.0;13.0;monsters/azumarill.png.txt;monsters/azumarill_normal.gif.txt;monsters/azumarill_back.gif.txt +144;Azumarill-2;Azumarill is a Water/Fairy type Pokémon introduced in Generation 2.;azurill;5;266.0;70.0;14.0;monsters/azumarill.png.txt;monsters/azumarill_normal.gif.txt;monsters/azumarill_back.gif.txt +145;Hoppip;Hoppip is a Grass/Flying type Pokémon introduced in Generation 2.;hoppip;1;250.0;35.0;18.0;monsters/hoppip.png.txt;monsters/hoppip_normal.gif.txt;monsters/hoppip_back.gif.txt +146;Skiploom;Skiploom is a Grass/Flying type Pokémon introduced in Generation 2.;hoppip;2;275.0;39.0;20.0;monsters/skiploom.png.txt;monsters/skiploom_normal.gif.txt;monsters/skiploom_back.gif.txt +147;Jumpluff;Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2.;hoppip;3;300.0;42.0;22.0;monsters/jumpluff.png.txt;monsters/jumpluff_normal.gif.txt;monsters/jumpluff_back.gif.txt +148;Jumpluff-1;Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2.;hoppip;4;325.0;46.0;23.0;monsters/jumpluff.png.txt;monsters/jumpluff_normal.gif.txt;monsters/jumpluff_back.gif.txt +149;Jumpluff-2;Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2.;hoppip;5;350.0;49.0;25.0;monsters/jumpluff.png.txt;monsters/jumpluff_normal.gif.txt;monsters/jumpluff_back.gif.txt +150;Swinub;Swinub is an Ice/Ground type Pokémon introduced in Generation 2.;swinub;1;250.0;50.0;25.0;monsters/swinub.png.txt;monsters/swinub_normal.gif.txt;monsters/swinub_back.gif.txt +151;Piloswine;Piloswine is an Ice/Ground type Pokémon introduced in Generation 2.;swinub;2;275.0;55.0;28.0;monsters/piloswine.png.txt;monsters/piloswine_normal.gif.txt;monsters/piloswine_back.gif.txt +152;Mamoswine;Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4.;swinub;3;300.0;60.0;30.0;monsters/mamoswine.png.txt;monsters/mamoswine_normal.gif.txt;monsters/mamoswine_back.gif.txt +153;Mamoswine-1;Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4.;swinub;4;325.0;65.0;33.0;monsters/mamoswine.png.txt;monsters/mamoswine_normal.gif.txt;monsters/mamoswine_back.gif.txt +154;Mamoswine-2;Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4.;swinub;5;350.0;70.0;35.0;monsters/mamoswine.png.txt;monsters/mamoswine_normal.gif.txt;monsters/mamoswine_back.gif.txt +155;Larvitar;Larvitar is a Rock/Ground type Pokémon introduced in Generation 2.;larvitar;1;300.0;50.0;32.0;monsters/larvitar.png.txt;monsters/larvitar_normal.gif.txt;monsters/larvitar_back.gif.txt +156;Pupitar;Pupitar is a Rock/Ground type Pokémon introduced in Generation 2.;larvitar;2;330.0;55.0;35.0;monsters/pupitar.png.txt;monsters/pupitar_normal.gif.txt;monsters/pupitar_back.gif.txt +157;Tyranitar;"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2.\nTyranitar is a large, bipedal, dinosaur-like Pokémon. It is mostly green, with a grey diamond-shaped patch on its front. It is covered in armor and has a spiky ridge around its back and tail.\nAlthough Tyranitar is Rock/Dark type, it evolves from Pupitar which is Rock/Ground type, thus loses its Ground type upon evolution - a rare occurrence for Pokémon. Tyranitar is a pseudo-legendary Pokémon, and has a Mega Evolution, available in Generation 6 games and Pokémon Go. In Generation 9, a Paradox Pokémon Iron Thorns was discovered, which bears a striking resemblance to Tyranitar.";larvitar;3;360.0;60.0;38.0;monsters/tyranitar.png.txt;monsters/tyranitar_normal.gif.txt;monsters/tyranitar_back.gif.txt +158;Tyranitar-1;"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2.\nTyranitar is a large, bipedal, dinosaur-like Pokémon. It is mostly green, with a grey diamond-shaped patch on its front. It is covered in armor and has a spiky ridge around its back and tail.\nAlthough Tyranitar is Rock/Dark type, it evolves from Pupitar which is Rock/Ground type, thus loses its Ground type upon evolution - a rare occurrence for Pokémon. Tyranitar is a pseudo-legendary Pokémon, and has a Mega Evolution, available in Generation 6 games and Pokémon Go. In Generation 9, a Paradox Pokémon Iron Thorns was discovered, which bears a striking resemblance to Tyranitar.";larvitar;4;390.0;65.0;42.0;monsters/tyranitar.png.txt;monsters/tyranitar_normal.gif.txt;monsters/tyranitar_back.gif.txt +159;Tyranitar-2;"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2.\nTyranitar is a large, bipedal, dinosaur-like Pokémon. It is mostly green, with a grey diamond-shaped patch on its front. It is covered in armor and has a spiky ridge around its back and tail.\nAlthough Tyranitar is Rock/Dark type, it evolves from Pupitar which is Rock/Ground type, thus loses its Ground type upon evolution - a rare occurrence for Pokémon. Tyranitar is a pseudo-legendary Pokémon, and has a Mega Evolution, available in Generation 6 games and Pokémon Go. In Generation 9, a Paradox Pokémon Iron Thorns was discovered, which bears a striking resemblance to Tyranitar.";larvitar;5;420.0;70.0;45.0;monsters/tyranitar.png.txt;monsters/tyranitar_normal.gif.txt;monsters/tyranitar_back.gif.txt +160;Treecko;Treecko is a Grass type Pokémon introduced in Generation 3.;treecko;1;310.0;40.0;23.0;monsters/treecko.png.txt;monsters/treecko_normal.gif.txt;monsters/treecko_back.gif.txt +161;Grovyle;Grovyle is a Grass type Pokémon introduced in Generation 3.;treecko;2;341.0;44.0;25.0;monsters/grovyle.png.txt;monsters/grovyle_normal.gif.txt;monsters/grovyle_back.gif.txt +162;Sceptile;"Sceptile is a Grass type Pokémon introduced in Generation 3.\nSceptile has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";treecko;3;372.0;48.0;28.0;monsters/sceptile.png.txt;monsters/sceptile_normal.gif.txt;monsters/sceptile_back.gif.txt +163;Sceptile-1;"Sceptile is a Grass type Pokémon introduced in Generation 3.\nSceptile has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";treecko;4;403.0;52.0;30.0;monsters/sceptile.png.txt;monsters/sceptile_normal.gif.txt;monsters/sceptile_back.gif.txt +164;Sceptile-2;"Sceptile is a Grass type Pokémon introduced in Generation 3.\nSceptile has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";treecko;5;434.0;56.0;32.0;monsters/sceptile.png.txt;monsters/sceptile_normal.gif.txt;monsters/sceptile_back.gif.txt +165;Torchic;Torchic is a Fire type Pokémon introduced in Generation 3.;torchic;1;310.0;45.0;30.0;monsters/torchic.png.txt;monsters/torchic_normal.gif.txt;monsters/torchic_back.gif.txt +166;Combusken;Combusken is a Fire/Fighting type Pokémon introduced in Generation 3.;torchic;2;341.0;50.0;33.0;monsters/combusken.png.txt;monsters/combusken_normal.gif.txt;monsters/combusken_back.gif.txt +167;Blaziken;"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3.\nBlaziken has a Mega Evolution, available in Generation 6 games and Pokémon Go.";torchic;3;372.0;54.0;36.0;monsters/blaziken.png.txt;monsters/blaziken_normal.gif.txt;monsters/blaziken_back.gif.txt +168;Blaziken-1;"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3.\nBlaziken has a Mega Evolution, available in Generation 6 games and Pokémon Go.";torchic;4;403.0;59.0;39.0;monsters/blaziken.png.txt;monsters/blaziken_normal.gif.txt;monsters/blaziken_back.gif.txt +169;Blaziken-2;"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3.\nBlaziken has a Mega Evolution, available in Generation 6 games and Pokémon Go.";torchic;5;434.0;63.0;42.0;monsters/blaziken.png.txt;monsters/blaziken_normal.gif.txt;monsters/blaziken_back.gif.txt +170;Mudkip;Mudkip is a Water type Pokémon introduced in Generation 3.;mudkip;1;310.0;50.0;35.0;monsters/mudkip.png.txt;monsters/mudkip_normal.gif.txt;monsters/mudkip_back.gif.txt +171;Marshtomp;Marshtomp is a Water/Ground type Pokémon introduced in Generation 3.;mudkip;2;341.0;55.0;39.0;monsters/marshtomp.png.txt;monsters/marshtomp_normal.gif.txt;monsters/marshtomp_back.gif.txt +172;Swampert;"Swampert is a Water/Ground type Pokémon introduced in Generation 3.\nSwampert has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";mudkip;3;372.0;60.0;42.0;monsters/swampert.png.txt;monsters/swampert_normal.gif.txt;monsters/swampert_back.gif.txt +173;Swampert-1;"Swampert is a Water/Ground type Pokémon introduced in Generation 3.\nSwampert has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";mudkip;4;403.0;65.0;46.0;monsters/swampert.png.txt;monsters/swampert_normal.gif.txt;monsters/swampert_back.gif.txt +174;Swampert-2;"Swampert is a Water/Ground type Pokémon introduced in Generation 3.\nSwampert has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.";mudkip;5;434.0;70.0;49.0;monsters/swampert.png.txt;monsters/swampert_normal.gif.txt;monsters/swampert_back.gif.txt +175;Lotad;Lotad is a Water/Grass type Pokémon introduced in Generation 3.;lotad;1;220.0;40.0;15.0;monsters/lotad.png.txt;monsters/lotad_normal.gif.txt;monsters/lotad_back.gif.txt +176;Lombre;Lombre is a Water/Grass type Pokémon introduced in Generation 3.;lotad;2;242.0;44.0;17.0;monsters/lombre.png.txt;monsters/lombre_normal.gif.txt;monsters/lombre_back.gif.txt +177;Ludicolo;Ludicolo is a Water/Grass type Pokémon introduced in Generation 3.;lotad;3;264.0;48.0;18.0;monsters/ludicolo.png.txt;monsters/ludicolo_normal.gif.txt;monsters/ludicolo_back.gif.txt +178;Ludicolo-1;Ludicolo is a Water/Grass type Pokémon introduced in Generation 3.;lotad;4;286.0;52.0;20.0;monsters/ludicolo.png.txt;monsters/ludicolo_normal.gif.txt;monsters/ludicolo_back.gif.txt +179;Ludicolo-2;Ludicolo is a Water/Grass type Pokémon introduced in Generation 3.;lotad;5;308.0;56.0;21.0;monsters/ludicolo.png.txt;monsters/ludicolo_normal.gif.txt;monsters/ludicolo_back.gif.txt +180;Seedot;Seedot is a Grass type Pokémon introduced in Generation 3.;seedot;1;220.0;40.0;20.0;monsters/seedot.png.txt;monsters/seedot_normal.gif.txt;monsters/seedot_back.gif.txt +181;Nuzleaf;Nuzleaf is a Grass/Dark type Pokémon introduced in Generation 3.;seedot;2;242.0;44.0;22.0;monsters/nuzleaf.png.txt;monsters/nuzleaf_normal.gif.txt;monsters/nuzleaf_back.gif.txt +182;Shiftry;Shiftry is a Grass/Dark type Pokémon introduced in Generation 3.;seedot;3;264.0;48.0;24.0;monsters/shiftry.png.txt;monsters/shiftry_normal.gif.txt;monsters/shiftry_back.gif.txt +183;Shiftry-1;Shiftry is a Grass/Dark type Pokémon introduced in Generation 3.;seedot;4;286.0;52.0;26.0;monsters/shiftry.png.txt;monsters/shiftry_normal.gif.txt;monsters/shiftry_back.gif.txt +184;Shiftry-2;Shiftry is a Grass/Dark type Pokémon introduced in Generation 3.;seedot;5;308.0;56.0;28.0;monsters/shiftry.png.txt;monsters/shiftry_normal.gif.txt;monsters/shiftry_back.gif.txt +185;Slakoth;Slakoth is a Normal type Pokémon introduced in Generation 3.;slakoth;1;280.0;60.0;30.0;monsters/slakoth.png.txt;monsters/slakoth_normal.gif.txt;monsters/slakoth_back.gif.txt +186;Vigoroth;Vigoroth is a Normal type Pokémon introduced in Generation 3.;slakoth;2;308.0;66.0;33.0;monsters/vigoroth.png.txt;monsters/vigoroth_normal.gif.txt;monsters/vigoroth_back.gif.txt +187;Slaking;Slaking is a Normal type Pokémon introduced in Generation 3.;slakoth;3;336.0;72.0;36.0;monsters/slaking.png.txt;monsters/slaking_normal.gif.txt;monsters/slaking_back.gif.txt +188;Slaking-1;Slaking is a Normal type Pokémon introduced in Generation 3.;slakoth;4;364.0;78.0;39.0;monsters/slaking.png.txt;monsters/slaking_normal.gif.txt;monsters/slaking_back.gif.txt +189;Slaking-2;Slaking is a Normal type Pokémon introduced in Generation 3.;slakoth;5;392.0;84.0;42.0;monsters/slaking.png.txt;monsters/slaking_normal.gif.txt;monsters/slaking_back.gif.txt +190;Whismur;Whismur is a Normal type Pokémon introduced in Generation 3.;whismur;1;240.0;64.0;26.0;monsters/whismur.png.txt;monsters/whismur_normal.gif.txt;monsters/whismur_back.gif.txt +191;Loudred;Loudred is a Normal type Pokémon introduced in Generation 3.;whismur;2;264.0;70.0;29.0;monsters/loudred.png.txt;monsters/loudred_normal.gif.txt;monsters/loudred_back.gif.txt +192;Exploud;Exploud is a Normal type Pokémon introduced in Generation 3.;whismur;3;288.0;77.0;31.0;monsters/exploud.png.txt;monsters/exploud_normal.gif.txt;monsters/exploud_back.gif.txt +193;Exploud-1;Exploud is a Normal type Pokémon introduced in Generation 3.;whismur;4;312.0;83.0;34.0;monsters/exploud.png.txt;monsters/exploud_normal.gif.txt;monsters/exploud_back.gif.txt +194;Exploud-2;Exploud is a Normal type Pokémon introduced in Generation 3.;whismur;5;336.0;90.0;36.0;monsters/exploud.png.txt;monsters/exploud_normal.gif.txt;monsters/exploud_back.gif.txt +195;Aron;Aron is a Steel/Rock type Pokémon introduced in Generation 3.;aron;1;330.0;50.0;35.0;monsters/aron.png.txt;monsters/aron_normal.gif.txt;monsters/aron_back.gif.txt +196;Lairon;Lairon is a Steel/Rock type Pokémon introduced in Generation 3.;aron;2;363.0;55.0;39.0;monsters/lairon.png.txt;monsters/lairon_normal.gif.txt;monsters/lairon_back.gif.txt +197;Aggron;"Aggron is a Steel/Rock type Pokémon introduced in Generation 3.\nAggron is a large, bipedal, dinosaur-like Pokémon with a steel-plated body. Its head is topped with a pair of curved, pointed horns. It has blue eyes, a large tail, and claws on its hands and feet. It is described as a very territorial Pokemon; it claims an entire mountain as its own.\nAggron appears to be based on various prehistoric creatures, including dinosaurs of the Ceratopsidae family, like the Triceratops, as well as Ankylosaurus, an armored dinosaur.\nAggron has a Mega Evolution, available in Generation 6 games and Pokémon Go. Mega Aggron is pure Steel type, making it the only Mega Evolution to lose a type upon evolving.";aron;3;396.0;60.0;42.0;monsters/aggron.png.txt;monsters/aggron_normal.gif.txt;monsters/aggron_back.gif.txt +198;Aggron-1;"Aggron is a Steel/Rock type Pokémon introduced in Generation 3.\nAggron is a large, bipedal, dinosaur-like Pokémon with a steel-plated body. Its head is topped with a pair of curved, pointed horns. It has blue eyes, a large tail, and claws on its hands and feet. It is described as a very territorial Pokemon; it claims an entire mountain as its own.\nAggron appears to be based on various prehistoric creatures, including dinosaurs of the Ceratopsidae family, like the Triceratops, as well as Ankylosaurus, an armored dinosaur.\nAggron has a Mega Evolution, available in Generation 6 games and Pokémon Go. Mega Aggron is pure Steel type, making it the only Mega Evolution to lose a type upon evolving.";aron;4;429.0;65.0;46.0;monsters/aggron.png.txt;monsters/aggron_normal.gif.txt;monsters/aggron_back.gif.txt +199;Aggron-2;"Aggron is a Steel/Rock type Pokémon introduced in Generation 3.\nAggron is a large, bipedal, dinosaur-like Pokémon with a steel-plated body. Its head is topped with a pair of curved, pointed horns. It has blue eyes, a large tail, and claws on its hands and feet. It is described as a very territorial Pokemon; it claims an entire mountain as its own.\nAggron appears to be based on various prehistoric creatures, including dinosaurs of the Ceratopsidae family, like the Triceratops, as well as Ankylosaurus, an armored dinosaur.\nAggron has a Mega Evolution, available in Generation 6 games and Pokémon Go. Mega Aggron is pure Steel type, making it the only Mega Evolution to lose a type upon evolving.";aron;5;462.0;70.0;49.0;monsters/aggron.png.txt;monsters/aggron_normal.gif.txt;monsters/aggron_back.gif.txt +200;Budew;Budew is a Grass/Poison type Pokémon introduced in Generation 4.;budew;1;280.0;40.0;15.0;monsters/budew.png.txt;monsters/budew_normal.gif.txt;monsters/budew_back.gif.txt +201;Roselia;Roselia is a Grass/Poison type Pokémon introduced in Generation 3.;budew;2;308.0;44.0;17.0;monsters/roselia.png.txt;monsters/roselia_normal.gif.txt;monsters/roselia_back.gif.txt +202;Roserade;Roserade is a Grass/Poison type Pokémon introduced in Generation 4.;budew;3;336.0;48.0;18.0;monsters/roserade.png.txt;monsters/roserade_normal.gif.txt;monsters/roserade_back.gif.txt +203;Roserade-1;Roserade is a Grass/Poison type Pokémon introduced in Generation 4.;budew;4;364.0;52.0;20.0;monsters/roserade.png.txt;monsters/roserade_normal.gif.txt;monsters/roserade_back.gif.txt +204;Roserade-2;Roserade is a Grass/Poison type Pokémon introduced in Generation 4.;budew;5;392.0;56.0;21.0;monsters/roserade.png.txt;monsters/roserade_normal.gif.txt;monsters/roserade_back.gif.txt +205;Trapinch;Trapinch is a Ground type Pokémon introduced in Generation 3.;trapinch;1;290.0;45.0;50.0;monsters/trapinch.png.txt;monsters/trapinch_normal.gif.txt;monsters/trapinch_back.gif.txt +206;Vibrava;Vibrava is a Ground/Dragon type Pokémon introduced in Generation 3.;trapinch;2;319.0;50.0;50.0;monsters/vibrava.png.txt;monsters/vibrava_normal.gif.txt;monsters/vibrava_back.gif.txt +207;Flygon;Flygon is a Ground/Dragon type Pokémon introduced in Generation 3.;trapinch;3;348.0;54.0;50.0;monsters/flygon.png.txt;monsters/flygon_normal.gif.txt;monsters/flygon_back.gif.txt +208;Flygon-1;Flygon is a Ground/Dragon type Pokémon introduced in Generation 3.;trapinch;4;377.0;59.0;50.0;monsters/flygon.png.txt;monsters/flygon_normal.gif.txt;monsters/flygon_back.gif.txt +209;Flygon-2;Flygon is a Ground/Dragon type Pokémon introduced in Generation 3.;trapinch;5;406.0;63.0;50.0;monsters/flygon.png.txt;monsters/flygon_normal.gif.txt;monsters/flygon_back.gif.txt +210;Duskull;Duskull is a Ghost type Pokémon introduced in Generation 3.;duskull;1;295.0;20.0;20.0;monsters/duskull.png.txt;monsters/duskull_normal.gif.txt;monsters/duskull_back.gif.txt +211;Dusclops;Dusclops is a Ghost type Pokémon introduced in Generation 3.;duskull;2;325.0;22.0;22.0;monsters/dusclops.png.txt;monsters/dusclops_normal.gif.txt;monsters/dusclops_back.gif.txt +212;Dusknoir;Dusknoir is a Ghost type Pokémon introduced in Generation 4.;duskull;3;354.0;24.0;24.0;monsters/dusknoir.png.txt;monsters/dusknoir_normal.gif.txt;monsters/dusknoir_back.gif.txt +213;Dusknoir-1;Dusknoir is a Ghost type Pokémon introduced in Generation 4.;duskull;4;384.0;26.0;26.0;monsters/dusknoir.png.txt;monsters/dusknoir_normal.gif.txt;monsters/dusknoir_back.gif.txt +214;Dusknoir-2;Dusknoir is a Ghost type Pokémon introduced in Generation 4.;duskull;5;413.0;28.0;28.0;monsters/dusknoir.png.txt;monsters/dusknoir_normal.gif.txt;monsters/dusknoir_back.gif.txt +215;Spheal;Spheal is an Ice/Water type Pokémon introduced in Generation 3.;spheal;1;290.0;70.0;20.0;monsters/spheal.png.txt;monsters/spheal_normal.gif.txt;monsters/spheal_back.gif.txt +216;Sealeo;Sealeo is an Ice/Water type Pokémon introduced in Generation 3.;spheal;2;319.0;77.0;22.0;monsters/sealeo.png.txt;monsters/sealeo_normal.gif.txt;monsters/sealeo_back.gif.txt +217;Walrein;Walrein is an Ice/Water type Pokémon introduced in Generation 3.;spheal;3;348.0;84.0;24.0;monsters/walrein.png.txt;monsters/walrein_normal.gif.txt;monsters/walrein_back.gif.txt +218;Walrein-1;Walrein is an Ice/Water type Pokémon introduced in Generation 3.;spheal;4;377.0;91.0;26.0;monsters/walrein.png.txt;monsters/walrein_normal.gif.txt;monsters/walrein_back.gif.txt +219;Walrein-2;Walrein is an Ice/Water type Pokémon introduced in Generation 3.;spheal;5;406.0;98.0;28.0;monsters/walrein.png.txt;monsters/walrein_normal.gif.txt;monsters/walrein_back.gif.txt +220;Bagon;Bagon is a Dragon type Pokémon introduced in Generation 3.;bagon;1;300.0;45.0;38.0;monsters/bagon.png.txt;monsters/bagon_normal.gif.txt;monsters/bagon_back.gif.txt +221;Shelgon;Shelgon is a Dragon type Pokémon introduced in Generation 3.;bagon;2;330.0;50.0;42.0;monsters/shelgon.png.txt;monsters/shelgon_normal.gif.txt;monsters/shelgon_back.gif.txt +222;Salamence;"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3.\nSalamence is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.\nIn Generation 9, a Paradox Pokémon Roaring Moon was discovered, which bears a striking resemblance to Salamence.";bagon;3;360.0;54.0;46.0;monsters/salamence.png.txt;monsters/salamence_normal.gif.txt;monsters/salamence_back.gif.txt +223;Salamence-1;"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3.\nSalamence is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.\nIn Generation 9, a Paradox Pokémon Roaring Moon was discovered, which bears a striking resemblance to Salamence.";bagon;4;390.0;59.0;49.0;monsters/salamence.png.txt;monsters/salamence_normal.gif.txt;monsters/salamence_back.gif.txt +224;Salamence-2;"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3.\nSalamence is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire and Pokémon Go.\nIn Generation 9, a Paradox Pokémon Roaring Moon was discovered, which bears a striking resemblance to Salamence.";bagon;5;420.0;63.0;50.0;monsters/salamence.png.txt;monsters/salamence_normal.gif.txt;monsters/salamence_back.gif.txt +225;Beldum;Beldum is a Steel/Psychic type Pokémon introduced in Generation 3.;beldum;1;300.0;40.0;28.0;monsters/beldum.png.txt;monsters/beldum_normal.gif.txt;monsters/beldum_back.gif.txt +226;Metang;Metang is a Steel/Psychic type Pokémon introduced in Generation 3.;beldum;2;330.0;44.0;31.0;monsters/metang.png.txt;monsters/metang_normal.gif.txt;monsters/metang_back.gif.txt +227;Metagross;"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3.\nMetagross is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire.";beldum;3;360.0;48.0;34.0;monsters/metagross.png.txt;monsters/metagross_normal.gif.txt;monsters/metagross_back.gif.txt +228;Metagross-1;"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3.\nMetagross is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire.";beldum;4;390.0;52.0;36.0;monsters/metagross.png.txt;monsters/metagross_normal.gif.txt;monsters/metagross_back.gif.txt +229;Metagross-2;"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3.\nMetagross is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Omega Ruby/Alpha Sapphire.";beldum;5;420.0;56.0;39.0;monsters/metagross.png.txt;monsters/metagross_normal.gif.txt;monsters/metagross_back.gif.txt +230;Turtwig;Turtwig is a Grass type Pokémon introduced in Generation 4.;turtwig;1;318.0;55.0;34.0;monsters/turtwig.png.txt;monsters/turtwig_normal.gif.txt;monsters/turtwig_back.gif.txt +231;Grotle;Grotle is a Grass type Pokémon introduced in Generation 4.;turtwig;2;350.0;61.0;37.0;monsters/grotle.png.txt;monsters/grotle_normal.gif.txt;monsters/grotle_back.gif.txt +232;Torterra;Torterra is a Grass/Ground type Pokémon introduced in Generation 4.;turtwig;3;382.0;66.0;41.0;monsters/torterra.png.txt;monsters/torterra_normal.gif.txt;monsters/torterra_back.gif.txt +233;Torterra-1;Torterra is a Grass/Ground type Pokémon introduced in Generation 4.;turtwig;4;413.0;72.0;44.0;monsters/torterra.png.txt;monsters/torterra_normal.gif.txt;monsters/torterra_back.gif.txt +234;Torterra-2;Torterra is a Grass/Ground type Pokémon introduced in Generation 4.;turtwig;5;445.0;77.0;48.0;monsters/torterra.png.txt;monsters/torterra_normal.gif.txt;monsters/torterra_back.gif.txt +235;Chimchar;Chimchar is a Fire type Pokémon introduced in Generation 4.;chimchar;1;309.0;44.0;29.0;monsters/chimchar.png.txt;monsters/chimchar_normal.gif.txt;monsters/chimchar_back.gif.txt +236;Monferno;Monferno is a Fire/Fighting type Pokémon introduced in Generation 4.;chimchar;2;340.0;48.0;32.0;monsters/monferno.png.txt;monsters/monferno_normal.gif.txt;monsters/monferno_back.gif.txt +237;Infernape;Infernape is a Fire/Fighting type Pokémon introduced in Generation 4.;chimchar;3;371.0;53.0;35.0;monsters/infernape.png.txt;monsters/infernape_normal.gif.txt;monsters/infernape_back.gif.txt +238;Infernape-1;Infernape is a Fire/Fighting type Pokémon introduced in Generation 4.;chimchar;4;402.0;57.0;38.0;monsters/infernape.png.txt;monsters/infernape_normal.gif.txt;monsters/infernape_back.gif.txt +239;Infernape-2;Infernape is a Fire/Fighting type Pokémon introduced in Generation 4.;chimchar;5;433.0;62.0;41.0;monsters/infernape.png.txt;monsters/infernape_normal.gif.txt;monsters/infernape_back.gif.txt +240;Piplup;Piplup is a Water type Pokémon introduced in Generation 4.;piplup;1;314.0;53.0;26.0;monsters/piplup.png.txt;monsters/piplup_normal.gif.txt;monsters/piplup_back.gif.txt +241;Prinplup;Prinplup is a Water type Pokémon introduced in Generation 4.;piplup;2;345.0;58.0;29.0;monsters/prinplup.png.txt;monsters/prinplup_normal.gif.txt;monsters/prinplup_back.gif.txt +242;Empoleon;Empoleon is a Water/Steel type Pokémon introduced in Generation 4.;piplup;3;377.0;64.0;31.0;monsters/empoleon.png.txt;monsters/empoleon_normal.gif.txt;monsters/empoleon_back.gif.txt +243;Empoleon-1;Empoleon is a Water/Steel type Pokémon introduced in Generation 4.;piplup;4;408.0;69.0;34.0;monsters/empoleon.png.txt;monsters/empoleon_normal.gif.txt;monsters/empoleon_back.gif.txt +244;Empoleon-2;Empoleon is a Water/Steel type Pokémon introduced in Generation 4.;piplup;5;440.0;74.0;36.0;monsters/empoleon.png.txt;monsters/empoleon_normal.gif.txt;monsters/empoleon_back.gif.txt +245;Starly;Starly is a Normal/Flying type Pokémon introduced in Generation 4.;starly;1;245.0;40.0;28.0;monsters/starly.png.txt;monsters/starly_normal.gif.txt;monsters/starly_back.gif.txt +246;Staravia;Staravia is a Normal/Flying type Pokémon introduced in Generation 4.;starly;2;270.0;44.0;31.0;monsters/staravia.png.txt;monsters/staravia_normal.gif.txt;monsters/staravia_back.gif.txt +247;Staraptor;Staraptor is a Normal/Flying type Pokémon introduced in Generation 4.;starly;3;294.0;48.0;34.0;monsters/staraptor.png.txt;monsters/staraptor_normal.gif.txt;monsters/staraptor_back.gif.txt +248;Staraptor-1;Staraptor is a Normal/Flying type Pokémon introduced in Generation 4.;starly;4;319.0;52.0;36.0;monsters/staraptor.png.txt;monsters/staraptor_normal.gif.txt;monsters/staraptor_back.gif.txt +249;Staraptor-2;Staraptor is a Normal/Flying type Pokémon introduced in Generation 4.;starly;5;343.0;56.0;39.0;monsters/staraptor.png.txt;monsters/staraptor_normal.gif.txt;monsters/staraptor_back.gif.txt +250;Shinx;Shinx is an Electric type Pokémon introduced in Generation 4.;shinx;1;263.0;45.0;33.0;monsters/shinx.png.txt;monsters/shinx_normal.gif.txt;monsters/shinx_back.gif.txt +251;Luxio;Luxio is an Electric type Pokémon introduced in Generation 4.;shinx;2;289.0;50.0;36.0;monsters/luxio.png.txt;monsters/luxio_normal.gif.txt;monsters/luxio_back.gif.txt +252;Luxray;Luxray is an Electric type Pokémon introduced in Generation 4.;shinx;3;316.0;54.0;40.0;monsters/luxray.png.txt;monsters/luxray_normal.gif.txt;monsters/luxray_back.gif.txt +253;Luxray-1;Luxray is an Electric type Pokémon introduced in Generation 4.;shinx;4;342.0;59.0;43.0;monsters/luxray.png.txt;monsters/luxray_normal.gif.txt;monsters/luxray_back.gif.txt +254;Luxray-2;Luxray is an Electric type Pokémon introduced in Generation 4.;shinx;5;368.0;63.0;46.0;monsters/luxray.png.txt;monsters/luxray_normal.gif.txt;monsters/luxray_back.gif.txt +255;Burmy;Burmy is a Bug type Pokémon introduced in Generation 4.;burmy;1;224.0;40.0;14.0;monsters/burmy.png.txt;monsters/burmy_normal.gif.txt;monsters/burmy_back.gif.txt +256;Wormadam;Wormadam is a Bug/Grass type Pokémon introduced in Generation 4.;burmy;2;246.0;44.0;15.0;monsters/wormadam.png.txt;monsters/wormadam_normal.gif.txt;monsters/wormadam_back.gif.txt +257;Mothim;Mothim is a Bug/Flying type Pokémon introduced in Generation 4.;burmy;2;269.0;48.0;17.0;monsters/mothim.png.txt;monsters/mothim_normal.gif.txt;monsters/mothim_back.gif.txt +258;Mothim-1;Mothim is a Bug/Flying type Pokémon introduced in Generation 4.;burmy;4;291.0;52.0;18.0;monsters/mothim.png.txt;monsters/mothim_normal.gif.txt;monsters/mothim_back.gif.txt +259;Mothim-2;Mothim is a Bug/Flying type Pokémon introduced in Generation 4.;burmy;5;314.0;56.0;20.0;monsters/mothim.png.txt;monsters/mothim_normal.gif.txt;monsters/mothim_back.gif.txt +260;Gible;Gible is a Dragon/Ground type Pokémon introduced in Generation 4.;gible;1;300.0;58.0;35.0;monsters/gible.png.txt;monsters/gible_normal.gif.txt;monsters/gible_back.gif.txt +261;Gabite;Gabite is a Dragon/Ground type Pokémon introduced in Generation 4.;gible;2;330.0;64.0;39.0;monsters/gabite.png.txt;monsters/gabite_normal.gif.txt;monsters/gabite_back.gif.txt +262;Garchomp;"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4.\nGarchomp is a large, bipedal, dragon-like Pokémon. Its body is mainly navy blue in color with some red and gold accents. It has a shark-like head with appendages on either side. It has long triangular fins protruding from its arms, and smaller fins on its tail.\nGarchomp draws its inspiration from several sources, including the hammerhead shark, elements of jet aircraft, and classic dragons from mythology.\nGarchomp is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Generation 6 games.";gible;3;360.0;70.0;42.0;monsters/garchomp.png.txt;monsters/garchomp_normal.gif.txt;monsters/garchomp_back.gif.txt +263;Garchomp-1;"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4.\nGarchomp is a large, bipedal, dragon-like Pokémon. Its body is mainly navy blue in color with some red and gold accents. It has a shark-like head with appendages on either side. It has long triangular fins protruding from its arms, and smaller fins on its tail.\nGarchomp draws its inspiration from several sources, including the hammerhead shark, elements of jet aircraft, and classic dragons from mythology.\nGarchomp is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Generation 6 games.";gible;4;390.0;75.0;46.0;monsters/garchomp.png.txt;monsters/garchomp_normal.gif.txt;monsters/garchomp_back.gif.txt +264;Garchomp-2;"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4.\nGarchomp is a large, bipedal, dragon-like Pokémon. Its body is mainly navy blue in color with some red and gold accents. It has a shark-like head with appendages on either side. It has long triangular fins protruding from its arms, and smaller fins on its tail.\nGarchomp draws its inspiration from several sources, including the hammerhead shark, elements of jet aircraft, and classic dragons from mythology.\nGarchomp is a pseudo-legendary Pokémon. It has a Mega Evolution, available in Generation 6 games.";gible;5;420.0;81.0;49.0;monsters/garchomp.png.txt;monsters/garchomp_normal.gif.txt;monsters/garchomp_back.gif.txt +265;Snivy;Snivy is a Grass type Pokémon introduced in Generation 5.;snivy;1;308.0;45.0;23.0;monsters/snivy.png.txt;monsters/snivy_normal.gif.txt;monsters/snivy_back.gif.txt +266;Servine;Servine is a Grass type Pokémon introduced in Generation 5.;snivy;2;339.0;50.0;25.0;monsters/servine.png.txt;monsters/servine_normal.gif.txt;monsters/servine_back.gif.txt +267;Serperior;Serperior is a Grass type Pokémon introduced in Generation 5.;snivy;3;370.0;54.0;28.0;monsters/serperior.png.txt;monsters/serperior_normal.gif.txt;monsters/serperior_back.gif.txt +268;Serperior-1;Serperior is a Grass type Pokémon introduced in Generation 5.;snivy;4;400.0;59.0;30.0;monsters/serperior.png.txt;monsters/serperior_normal.gif.txt;monsters/serperior_back.gif.txt +269;Serperior-2;Serperior is a Grass type Pokémon introduced in Generation 5.;snivy;5;431.0;63.0;32.0;monsters/serperior.png.txt;monsters/serperior_normal.gif.txt;monsters/serperior_back.gif.txt +270;Tepig;Tepig is a Fire type Pokémon introduced in Generation 5.;tepig;1;308.0;65.0;32.0;monsters/tepig.png.txt;monsters/tepig_normal.gif.txt;monsters/tepig_back.gif.txt +271;Pignite;Pignite is a Fire/Fighting type Pokémon introduced in Generation 5.;tepig;2;339.0;72.0;35.0;monsters/pignite.png.txt;monsters/pignite_normal.gif.txt;monsters/pignite_back.gif.txt +272;Emboar;Emboar is a Fire/Fighting type Pokémon introduced in Generation 5.;tepig;3;370.0;78.0;38.0;monsters/emboar.png.txt;monsters/emboar_normal.gif.txt;monsters/emboar_back.gif.txt +273;Emboar-1;Emboar is a Fire/Fighting type Pokémon introduced in Generation 5.;tepig;4;400.0;85.0;42.0;monsters/emboar.png.txt;monsters/emboar_normal.gif.txt;monsters/emboar_back.gif.txt +274;Emboar-2;Emboar is a Fire/Fighting type Pokémon introduced in Generation 5.;tepig;5;431.0;91.0;45.0;monsters/emboar.png.txt;monsters/emboar_normal.gif.txt;monsters/emboar_back.gif.txt +275;Lillipup;Lillipup is a Normal type Pokémon introduced in Generation 5.;lillipup;1;275.0;45.0;30.0;monsters/lillipup.png.txt;monsters/lillipup_normal.gif.txt;monsters/lillipup_back.gif.txt +276;Herdier;Herdier is a Normal type Pokémon introduced in Generation 5.;lillipup;2;303.0;50.0;33.0;monsters/herdier.png.txt;monsters/herdier_normal.gif.txt;monsters/herdier_back.gif.txt +277;Stoutland;Stoutland is a Normal type Pokémon introduced in Generation 5.;lillipup;3;330.0;54.0;36.0;monsters/stoutland.png.txt;monsters/stoutland_normal.gif.txt;monsters/stoutland_back.gif.txt +278;Stoutland-1;Stoutland is a Normal type Pokémon introduced in Generation 5.;lillipup;4;358.0;59.0;39.0;monsters/stoutland.png.txt;monsters/stoutland_normal.gif.txt;monsters/stoutland_back.gif.txt +279;Stoutland-2;Stoutland is a Normal type Pokémon introduced in Generation 5.;lillipup;5;385.0;63.0;42.0;monsters/stoutland.png.txt;monsters/stoutland_normal.gif.txt;monsters/stoutland_back.gif.txt +280;Pidove;Pidove is a Normal/Flying type Pokémon introduced in Generation 5.;pidove;1;264.0;50.0;28.0;monsters/pidove.png.txt;monsters/pidove_normal.gif.txt;monsters/pidove_back.gif.txt +281;Tranquill;Tranquill is a Normal/Flying type Pokémon introduced in Generation 5.;pidove;2;290.0;55.0;31.0;monsters/tranquill.png.txt;monsters/tranquill_normal.gif.txt;monsters/tranquill_back.gif.txt +282;Unfezant;Unfezant is a Normal/Flying type Pokémon introduced in Generation 5.;pidove;3;317.0;60.0;34.0;monsters/unfezant.png.txt;monsters/unfezant_normal.gif.txt;monsters/unfezant_back.gif.txt +283;Unfezant-1;Unfezant is a Normal/Flying type Pokémon introduced in Generation 5.;pidove;4;343.0;65.0;36.0;monsters/unfezant.png.txt;monsters/unfezant_normal.gif.txt;monsters/unfezant_back.gif.txt +284;Unfezant-2;Unfezant is a Normal/Flying type Pokémon introduced in Generation 5.;pidove;5;370.0;70.0;39.0;monsters/unfezant.png.txt;monsters/unfezant_normal.gif.txt;monsters/unfezant_back.gif.txt +285;Roggenrola;Roggenrola is a Rock type Pokémon introduced in Generation 5.;roggenrola;1;280.0;55.0;38.0;monsters/roggenrola.png.txt;monsters/roggenrola_normal.gif.txt;monsters/roggenrola_back.gif.txt +286;Boldore;Boldore is a Rock type Pokémon introduced in Generation 5.;roggenrola;2;308.0;61.0;42.0;monsters/boldore.png.txt;monsters/boldore_normal.gif.txt;monsters/boldore_back.gif.txt +287;Gigalith;Gigalith is a Rock type Pokémon introduced in Generation 5.;roggenrola;3;336.0;66.0;46.0;monsters/gigalith.png.txt;monsters/gigalith_normal.gif.txt;monsters/gigalith_back.gif.txt +288;Gigalith-1;Gigalith is a Rock type Pokémon introduced in Generation 5.;roggenrola;4;364.0;72.0;49.0;monsters/gigalith.png.txt;monsters/gigalith_normal.gif.txt;monsters/gigalith_back.gif.txt +289;Gigalith-2;Gigalith is a Rock type Pokémon introduced in Generation 5.;roggenrola;5;392.0;77.0;50.0;monsters/gigalith.png.txt;monsters/gigalith_normal.gif.txt;monsters/gigalith_back.gif.txt +290;Timburr;Timburr is a Fighting type Pokémon introduced in Generation 5.;timburr;1;305.0;75.0;40.0;monsters/timburr.png.txt;monsters/timburr_normal.gif.txt;monsters/timburr_back.gif.txt +291;Gurdurr;Gurdurr is a Fighting type Pokémon introduced in Generation 5.;timburr;2;336.0;83.0;44.0;monsters/gurdurr.png.txt;monsters/gurdurr_normal.gif.txt;monsters/gurdurr_back.gif.txt +292;Conkeldurr;Conkeldurr is a Fighting type Pokémon introduced in Generation 5.;timburr;3;366.0;90.0;48.0;monsters/conkeldurr.png.txt;monsters/conkeldurr_normal.gif.txt;monsters/conkeldurr_back.gif.txt +293;Conkeldurr-1;Conkeldurr is a Fighting type Pokémon introduced in Generation 5.;timburr;4;397.0;98.0;50.0;monsters/conkeldurr.png.txt;monsters/conkeldurr_normal.gif.txt;monsters/conkeldurr_back.gif.txt +294;Conkeldurr-2;Conkeldurr is a Fighting type Pokémon introduced in Generation 5.;timburr;5;427.0;105.0;50.0;monsters/conkeldurr.png.txt;monsters/conkeldurr_normal.gif.txt;monsters/conkeldurr_back.gif.txt +295;Tympole;Tympole is a Water type Pokémon introduced in Generation 5.;tympole;1;294.0;50.0;25.0;monsters/tympole.png.txt;monsters/tympole_normal.gif.txt;monsters/tympole_back.gif.txt +296;Palpitoad;Palpitoad is a Water/Ground type Pokémon introduced in Generation 5.;tympole;2;323.0;55.0;28.0;monsters/palpitoad.png.txt;monsters/palpitoad_normal.gif.txt;monsters/palpitoad_back.gif.txt +297;Seismitoad;Seismitoad is a Water/Ground type Pokémon introduced in Generation 5.;tympole;3;353.0;60.0;30.0;monsters/seismitoad.png.txt;monsters/seismitoad_normal.gif.txt;monsters/seismitoad_back.gif.txt +298;Seismitoad-1;Seismitoad is a Water/Ground type Pokémon introduced in Generation 5.;tympole;4;382.0;65.0;33.0;monsters/seismitoad.png.txt;monsters/seismitoad_normal.gif.txt;monsters/seismitoad_back.gif.txt +299;Seismitoad-2;Seismitoad is a Water/Ground type Pokémon introduced in Generation 5.;tympole;5;412.0;70.0;35.0;monsters/seismitoad.png.txt;monsters/seismitoad_normal.gif.txt;monsters/seismitoad_back.gif.txt +300;Sewaddle;Sewaddle is a Bug/Grass type Pokémon introduced in Generation 5.;sewaddle;1;310.0;45.0;27.0;monsters/sewaddle.png.txt;monsters/sewaddle_normal.gif.txt;monsters/sewaddle_back.gif.txt +301;Swadloon;Swadloon is a Bug/Grass type Pokémon introduced in Generation 5.;sewaddle;2;341.0;50.0;30.0;monsters/swadloon.png.txt;monsters/swadloon_normal.gif.txt;monsters/swadloon_back.gif.txt +302;Leavanny;Leavanny is a Bug/Grass type Pokémon introduced in Generation 5.;sewaddle;3;372.0;54.0;32.0;monsters/leavanny.png.txt;monsters/leavanny_normal.gif.txt;monsters/leavanny_back.gif.txt +303;Leavanny-1;Leavanny is a Bug/Grass type Pokémon introduced in Generation 5.;sewaddle;4;403.0;59.0;35.0;monsters/leavanny.png.txt;monsters/leavanny_normal.gif.txt;monsters/leavanny_back.gif.txt +304;Leavanny-2;Leavanny is a Bug/Grass type Pokémon introduced in Generation 5.;sewaddle;5;434.0;63.0;38.0;monsters/leavanny.png.txt;monsters/leavanny_normal.gif.txt;monsters/leavanny_back.gif.txt +305;Venipede;Venipede is a Bug/Poison type Pokémon introduced in Generation 5.;venipede;1;260.0;30.0;23.0;monsters/venipede.png.txt;monsters/venipede_normal.gif.txt;monsters/venipede_back.gif.txt +306;Whirlipede;Whirlipede is a Bug/Poison type Pokémon introduced in Generation 5.;venipede;2;286.0;33.0;25.0;monsters/whirlipede.png.txt;monsters/whirlipede_normal.gif.txt;monsters/whirlipede_back.gif.txt +307;Scolipede;Scolipede is a Bug/Poison type Pokémon introduced in Generation 5.;venipede;3;312.0;36.0;28.0;monsters/scolipede.png.txt;monsters/scolipede_normal.gif.txt;monsters/scolipede_back.gif.txt +308;Scolipede-1;Scolipede is a Bug/Poison type Pokémon introduced in Generation 5.;venipede;4;338.0;39.0;30.0;monsters/scolipede.png.txt;monsters/scolipede_normal.gif.txt;monsters/scolipede_back.gif.txt +309;Scolipede-2;Scolipede is a Bug/Poison type Pokémon introduced in Generation 5.;venipede;5;364.0;42.0;32.0;monsters/scolipede.png.txt;monsters/scolipede_normal.gif.txt;monsters/scolipede_back.gif.txt +310;Sandile;Sandile is a Ground/Dark type Pokémon introduced in Generation 5.;sandile;1;292.0;50.0;36.0;monsters/sandile.png.txt;monsters/sandile_normal.gif.txt;monsters/sandile_back.gif.txt +311;Krokorok;Krokorok is a Ground/Dark type Pokémon introduced in Generation 5.;sandile;2;321.0;55.0;40.0;monsters/krokorok.png.txt;monsters/krokorok_normal.gif.txt;monsters/krokorok_back.gif.txt +312;Krookodile;Krookodile is a Ground/Dark type Pokémon introduced in Generation 5.;sandile;3;350.0;60.0;43.0;monsters/krookodile.png.txt;monsters/krookodile_normal.gif.txt;monsters/krookodile_back.gif.txt +313;Krookodile-1;Krookodile is a Ground/Dark type Pokémon introduced in Generation 5.;sandile;4;380.0;65.0;47.0;monsters/krookodile.png.txt;monsters/krookodile_normal.gif.txt;monsters/krookodile_back.gif.txt +314;Krookodile-2;Krookodile is a Ground/Dark type Pokémon introduced in Generation 5.;sandile;5;409.0;70.0;50.0;monsters/krookodile.png.txt;monsters/krookodile_normal.gif.txt;monsters/krookodile_back.gif.txt +315;Gothita;Gothita is a Psychic type Pokémon introduced in Generation 5.;gothita;1;290.0;45.0;15.0;monsters/gothita.png.txt;monsters/gothita_normal.gif.txt;monsters/gothita_back.gif.txt +316;Gothorita;Gothorita is a Psychic type Pokémon introduced in Generation 5.;gothita;2;319.0;50.0;17.0;monsters/gothorita.png.txt;monsters/gothorita_normal.gif.txt;monsters/gothorita_back.gif.txt +317;Gothitelle;Gothitelle is a Psychic type Pokémon introduced in Generation 5.;gothita;3;348.0;54.0;18.0;monsters/gothitelle.png.txt;monsters/gothitelle_normal.gif.txt;monsters/gothitelle_back.gif.txt +318;Gothitelle-1;Gothitelle is a Psychic type Pokémon introduced in Generation 5.;gothita;4;377.0;59.0;20.0;monsters/gothitelle.png.txt;monsters/gothitelle_normal.gif.txt;monsters/gothitelle_back.gif.txt +319;Gothitelle-2;Gothitelle is a Psychic type Pokémon introduced in Generation 5.;gothita;5;406.0;63.0;21.0;monsters/gothitelle.png.txt;monsters/gothitelle_normal.gif.txt;monsters/gothitelle_back.gif.txt +320;Solosis;Solosis is a Psychic type Pokémon introduced in Generation 5.;solosis;1;290.0;45.0;15.0;monsters/solosis.png.txt;monsters/solosis_normal.gif.txt;monsters/solosis_back.gif.txt +321;Duosion;Duosion is a Psychic type Pokémon introduced in Generation 5.;solosis;2;319.0;50.0;17.0;monsters/duosion.png.txt;monsters/duosion_normal.gif.txt;monsters/duosion_back.gif.txt +322;Reuniclus;Reuniclus is a Psychic type Pokémon introduced in Generation 5.;solosis;3;348.0;54.0;18.0;monsters/reuniclus.png.txt;monsters/reuniclus_normal.gif.txt;monsters/reuniclus_back.gif.txt +323;Reuniclus-1;Reuniclus is a Psychic type Pokémon introduced in Generation 5.;solosis;4;377.0;59.0;20.0;monsters/reuniclus.png.txt;monsters/reuniclus_normal.gif.txt;monsters/reuniclus_back.gif.txt +324;Reuniclus-2;Reuniclus is a Psychic type Pokémon introduced in Generation 5.;solosis;5;406.0;63.0;21.0;monsters/reuniclus.png.txt;monsters/reuniclus_normal.gif.txt;monsters/reuniclus_back.gif.txt +325;Vanillite;Vanillite is an Ice type Pokémon introduced in Generation 5.;vanillite;1;305.0;36.0;25.0;monsters/vanillite.png.txt;monsters/vanillite_normal.gif.txt;monsters/vanillite_back.gif.txt +326;Vanillish;Vanillish is an Ice type Pokémon introduced in Generation 5.;vanillite;2;336.0;40.0;28.0;monsters/vanillish.png.txt;monsters/vanillish_normal.gif.txt;monsters/vanillish_back.gif.txt +327;Vanilluxe;Vanilluxe is an Ice type Pokémon introduced in Generation 5.;vanillite;3;366.0;43.0;30.0;monsters/vanilluxe.png.txt;monsters/vanilluxe_normal.gif.txt;monsters/vanilluxe_back.gif.txt +328;Vanilluxe-1;Vanilluxe is an Ice type Pokémon introduced in Generation 5.;vanillite;4;397.0;47.0;33.0;monsters/vanilluxe.png.txt;monsters/vanilluxe_normal.gif.txt;monsters/vanilluxe_back.gif.txt +329;Vanilluxe-2;Vanilluxe is an Ice type Pokémon introduced in Generation 5.;vanillite;5;427.0;50.0;35.0;monsters/vanilluxe.png.txt;monsters/vanilluxe_normal.gif.txt;monsters/vanilluxe_back.gif.txt +330;Klink;Klink is a Steel type Pokémon introduced in Generation 5.;klink;1;300.0;40.0;28.0;monsters/klink.png.txt;monsters/klink_normal.gif.txt;monsters/klink_back.gif.txt +331;Klang;Klang is a Steel type Pokémon introduced in Generation 5.;klink;2;330.0;44.0;31.0;monsters/klang.png.txt;monsters/klang_normal.gif.txt;monsters/klang_back.gif.txt +332;Klinklang;Klinklang is a Steel type Pokémon introduced in Generation 5.;klink;3;360.0;48.0;34.0;monsters/klinklang.png.txt;monsters/klinklang_normal.gif.txt;monsters/klinklang_back.gif.txt +333;Klinklang-1;Klinklang is a Steel type Pokémon introduced in Generation 5.;klink;4;390.0;52.0;36.0;monsters/klinklang.png.txt;monsters/klinklang_normal.gif.txt;monsters/klinklang_back.gif.txt +334;Klinklang-2;Klinklang is a Steel type Pokémon introduced in Generation 5.;klink;5;420.0;56.0;39.0;monsters/klinklang.png.txt;monsters/klinklang_normal.gif.txt;monsters/klinklang_back.gif.txt +335;Tynamo;Tynamo is an Electric type Pokémon introduced in Generation 5.;tynamo;1;275.0;35.0;28.0;monsters/tynamo.png.txt;monsters/tynamo_normal.gif.txt;monsters/tynamo_back.gif.txt +336;Eelektrik;Eelektrik is an Electric type Pokémon introduced in Generation 5.;tynamo;2;303.0;39.0;31.0;monsters/eelektrik.png.txt;monsters/eelektrik_normal.gif.txt;monsters/eelektrik_back.gif.txt +337;Eelektross;Eelektross is an Electric type Pokémon introduced in Generation 5.;tynamo;3;330.0;42.0;34.0;monsters/eelektross.png.txt;monsters/eelektross_normal.gif.txt;monsters/eelektross_back.gif.txt +338;Eelektross-1;Eelektross is an Electric type Pokémon introduced in Generation 5.;tynamo;4;358.0;46.0;36.0;monsters/eelektross.png.txt;monsters/eelektross_normal.gif.txt;monsters/eelektross_back.gif.txt +339;Eelektross-2;Eelektross is an Electric type Pokémon introduced in Generation 5.;tynamo;5;385.0;49.0;39.0;monsters/eelektross.png.txt;monsters/eelektross_normal.gif.txt;monsters/eelektross_back.gif.txt +340;Litwick;Litwick is a Ghost/Fire type Pokémon introduced in Generation 5.;litwick;1;275.0;50.0;15.0;monsters/litwick.png.txt;monsters/litwick_normal.gif.txt;monsters/litwick_back.gif.txt +341;Lampent;Lampent is a Ghost/Fire type Pokémon introduced in Generation 5.;litwick;2;303.0;55.0;17.0;monsters/lampent.png.txt;monsters/lampent_normal.gif.txt;monsters/lampent_back.gif.txt +342;Chandelure;Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5.;litwick;3;330.0;60.0;18.0;monsters/chandelure.png.txt;monsters/chandelure_normal.gif.txt;monsters/chandelure_back.gif.txt +343;Chandelure-1;Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5.;litwick;4;358.0;65.0;20.0;monsters/chandelure.png.txt;monsters/chandelure_normal.gif.txt;monsters/chandelure_back.gif.txt +344;Chandelure-2;Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5.;litwick;5;385.0;70.0;21.0;monsters/chandelure.png.txt;monsters/chandelure_normal.gif.txt;monsters/chandelure_back.gif.txt +345;Axew;Axew is a Dragon type Pokémon introduced in Generation 5.;axew;1;320.0;46.0;44.0;monsters/axew.png.txt;monsters/axew_normal.gif.txt;monsters/axew_back.gif.txt +346;Fraxure;Fraxure is a Dragon type Pokémon introduced in Generation 5.;axew;2;352.0;51.0;48.0;monsters/fraxure.png.txt;monsters/fraxure_normal.gif.txt;monsters/fraxure_back.gif.txt +347;Haxorus;Haxorus is a Dragon type Pokémon introduced in Generation 5.;axew;3;384.0;55.0;50.0;monsters/haxorus.png.txt;monsters/haxorus_normal.gif.txt;monsters/haxorus_back.gif.txt +348;Haxorus-1;Haxorus is a Dragon type Pokémon introduced in Generation 5.;axew;4;416.0;60.0;50.0;monsters/haxorus.png.txt;monsters/haxorus_normal.gif.txt;monsters/haxorus_back.gif.txt +349;Haxorus-2;Haxorus is a Dragon type Pokémon introduced in Generation 5.;axew;5;448.0;64.0;50.0;monsters/haxorus.png.txt;monsters/haxorus_normal.gif.txt;monsters/haxorus_back.gif.txt +350;Deino;Deino is a Dark/Dragon type Pokémon introduced in Generation 5.;deino;1;300.0;52.0;33.0;monsters/deino.png.txt;monsters/deino_normal.gif.txt;monsters/deino_back.gif.txt +351;Zweilous;Zweilous is a Dark/Dragon type Pokémon introduced in Generation 5.;deino;2;330.0;57.0;36.0;monsters/zweilous.png.txt;monsters/zweilous_normal.gif.txt;monsters/zweilous_back.gif.txt +352;Hydreigon;"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5.\nHydreigon is a pseudo-legendary Pokémon. In Generation 9, a Paradox Pokémon Iron Jugulis was discovered, which bears a striking resemblance to Hydreigon.";deino;3;360.0;62.0;40.0;monsters/hydreigon.png.txt;monsters/hydreigon_normal.gif.txt;monsters/hydreigon_back.gif.txt +353;Hydreigon-1;"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5.\nHydreigon is a pseudo-legendary Pokémon. In Generation 9, a Paradox Pokémon Iron Jugulis was discovered, which bears a striking resemblance to Hydreigon.";deino;4;390.0;68.0;43.0;monsters/hydreigon.png.txt;monsters/hydreigon_normal.gif.txt;monsters/hydreigon_back.gif.txt +354;Hydreigon-2;"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5.\nHydreigon is a pseudo-legendary Pokémon. In Generation 9, a Paradox Pokémon Iron Jugulis was discovered, which bears a striking resemblance to Hydreigon.";deino;5;420.0;73.0;46.0;monsters/hydreigon.png.txt;monsters/hydreigon_normal.gif.txt;monsters/hydreigon_back.gif.txt \ No newline at end of file diff --git a/data/saves/default-save/database_potion.csv b/data/saves/default-save/database_potion.csv index 26c7821..9e72464 100644 --- a/data/saves/default-save/database_potion.csv +++ b/data/saves/default-save/database_potion.csv @@ -1,9 +1,9 @@ -0;Temporary Healing Potion;Gives your monster extra health for temporarily;HealingDefinite;5;1;60000;1;potions/default_potion.png.txt; -1;Permanent Healing Potion;Gives your monster permanent extra health;HealingIndefinite;3;1;1;1;potions/default_potion.png.txt; -2;Jack's Mix Potion;Gives +30% resilience and strength +20% at the same time!;ResilienceDefinite;0;1.3;30000;0;potions/default_potion.png.txt;3 -3;Jack's Mix Potion-1;--internal use only--;StrengthDefinite;0;1.2;30000;0;potions/default_potion.png.txt; -4;Devil's Weakness;Gives your monster weakness by -10%;StrengthDefinite;0;0.9;15000;1;potions/default_potion.png.txt; -5;OG Healing Potion;Restores Health;HealingIndefinite;0;0;1;1;potions/default_potion.png.txt; -6;OG Strength Potion;Increases ATK Power;StrengthIndefinite;0;0;1;1;potions/default_potion.png.txt; -7;OG Resilience Potion;Increases DEF Power;ResilienceIndefinite;0;0;1;1;potions/default_potion.png.txt; -8;Monster Ball;Bola untuk menangkap monster liar!;Monster Bollocks;0;0;1;1;potions/pokebollocks.png.txt; +0;OG Healing Potion;Restores Health;HealingIndefinite;0.0;0.0;1.0;1;potions/default_potion.png.txt; +1;OG Strength Potion;Increases ATK Power;StrengthIndefinite;0.0;0.0;1.0;1;potions/default_potion.png.txt; +2;OG Resilience Potion;Increases DEF Power;ResilienceIndefinite;0.0;0.0;1.0;1;potions/default_potion.png.txt; +3;Monster Ball;Bola untuk menangkap monster liar!;Monster Bollocks;0.0;0.0;1.0;1;potions/pokebollocks.png.txt; +4;Temporary Healing Potion;Gives your monster extra health for temporarily;HealingDefinite;5.0;1.0;60000.0;1;potions/default_potion.png.txt; +5;Permanent Healing Potion;Gives your monster permanent extra health;HealingIndefinite;3.0;1.0;1.0;1;potions/default_potion.png.txt; +6;Jack's Mix Potion;Gives +30% resilience and strength +20% at the same time!;ResilienceDefinite;0.0;1.3;30000.0;0;potions/default_potion.png.txt;3 +7;Jack's Mix Potion-1;--internal use only--;StrengthDefinite;0.0;1.2;30000.0;0;potions/default_potion.png.txt; +8;Devil's Weakness;Gives your monster weakness by -10%;StrengthDefinite;0.0;0.9;15000.0;1;potions/default_potion.png.txt; \ No newline at end of file diff --git a/data/saves/default-save/database_shop.csv b/data/saves/default-save/database_shop.csv index 07bdc74..44e6aae 100644 --- a/data/saves/default-save/database_shop.csv +++ b/data/saves/default-save/database_shop.csv @@ -1,7 +1,7 @@ -0;monster;7;5;3000 -1;item;2;5;200 -2;item;4;5;100 -3;item;5;100;100 -4;item;6;100;100 -5;item;7;100;100 -6;item;8;100;100 +0;monster;7;5;3000.0 +1;item;2;100;100 +2;item;4;100;100.0 +3;item;5;100;100.0 +4;item;6;0;0 +5;item;7;0;0 +6;item;8;0;0 \ No newline at end of file diff --git a/data/saves/default-save/database_user.csv b/data/saves/default-save/database_user.csv index 934b666..3f8cd97 100644 --- a/data/saves/default-save/database_user.csv +++ b/data/saves/default-save/database_user.csv @@ -1,33 +1,33 @@ -0;system;prg73g65wjz92s;system;0 -1;Mr_Monogram;monogrammer77;admin;9999 -2;Asep_Spakbor;asepwow123;agent;9999 -3;Agen_P;platypus123;agent;0 -4;B4ngk1dd0ssss;bangkitganteng;agent;1337 -5;Kenny_agen_rahasia;kribogeming55;agent;6699 -6;Mina;z25o1oeib9oatl5;npc;543 -7;Calaba;3nvjh48btbooiao;npc;167 -8;Katy;f6k49umwem8ka0j;npc;263 -9;Darach;pbj340ezh2a926n;npc;189 -10;Anabel;1arsrvw7m6tr6hf;npc;464 -11;Fantina;jmmc8zswwmn68ts;npc;266 -12;Blaine;j09st53sydn28pl;npc;253 -13;Jacq;zi9h91got971v71;npc;371 -14;Hop;d3lxuqa8t78jhx8;npc;248 -15;Ash Ketchum;mg3i625mgd05hw5;npc;200 -16;Clemont;7p4yzer79hdxbyn;npc;491 -17;Glacia;4dgemnhjke77eoh;npc;460 -18;Falkner;1hypcfowkbf2jng;npc;202 -19;Brawly;tkdadr7a127salx;npc;253 -20;Janine;wjq1kev7i66utv5;npc;490 -21;Klara;ny6f0jmpieec4ao;npc;380 -22;Gorigan;wveizndsjuze8hi;npc;435 -23;Hassel;f0vjp8jtdj8q4su;npc;503 -24;Dendra;1llybjwlg8q438e;npc;424 -25;Kiawe;7hze37a9gbyefy9;npc;504 -26;Lacey;nh2wl6vnjuex5sz;npc;269 -27;Juliana;x0ys8wcs8rzp1dr;npc;474 -28;Grant;gcfwkzaft994drr;npc;218 -29;Cyllene;2k65e0k7gttrcul;npc;414 -30;Brassius;yvjuyh2qkqtna45;npc;351 -31;Akari;gc4u3j336bygsl1;npc;196 -32;Liko;7h4mk7ffboogtd1;npc;160 +0;system;prg73g65wjz92s;system;0.0 +1;Mr_Monogram;monogrammer77;admin;9999.0 +2;Asep_Spakbor;asepwow123;agent;9999.0 +3;Agen_P;platypus123;agent;0.0 +4;B4ngk1dd0ssss;bangkitganteng;agent;1337.0 +5;Kenny_agen_rahasia;kribogeming55;agent;6699.0 +6;Ariana;n7rj5e9uth81f4g;npc;314 +7;John;3vjep6namaqszzo;npc;674 +8;Kali;vhej4mdlb2dh281;npc;626 +9;Eldes;u4wh49s6ed8wzc4;npc;358 +10;Falkner;mx3qhx9dr74fp3a;npc;334 +11;Florian;97fv16gxuvhb9v9;npc;557 +12;Gordie;gpeeq4du2wry2vc;npc;450 +13;Faba;m5nrm8txbyuqny5;npc;543 +14;Eri;oiuy5hefwm5889x;npc;691 +15;Greta;ulewpdfa1un2w9z;npc;615 +16;Klara;ff9nqu703eso5p8;npc;503 +17;Ash Ketchum;3h5jn097q2zrj57;npc;340 +18;Clemont;9yb753xmkfx61pi;npc;383 +19;Byron;5xagu7wxqk4mt5v;npc;605 +20;Kiawe;vv1s9g7cid6imaw;npc;336 +21;Buck;7wnwlkq1w3pxx15;npc;392 +22;Calaba;cwav4z9qkegrmoi;npc;663 +23;Lacey;sy80170hqieny9m;npc;419 +24;Bertha;ntia7rqdw7ce8d4;npc;557 +25;Cyndy;781sb1o7mhilbmw;npc;311 +26;Juliana;fh8soii4rqg27ci;npc;374 +27;Guzma;vl46nuw80hj3m2n;npc;488 +28;Lovrina;0pwdsyq7mi7mhrl;npc;442 +29;Kofu;nrsvefi7grvxw7v;npc;428 +30;Brawly;lbmlub9qxof92rx;npc;670 +31;Aarune;wzkmws4qdkqu6gj;npc;442 +32;Gardenia;s43ffnhp96h6p3z;npc;689 diff --git a/main.py b/main.py index 53ce0a6..511193c 100644 --- a/main.py +++ b/main.py @@ -41,8 +41,9 @@ def tick(): selection = meta(action="select") return -1, selection gamestate_load(gameState) + gamestate_set_user_id(gameState, 1) promise = promise_from_suspendable(menu_show_loading_initial, gameState) - return "loading", gameState, promise + return "menuInit", gameState, promise if state == "loading": gameState, *_ = args promise = promise_from_suspendable(menu_show_loading_splash, gameState, [("menu splash", "menu_background.gif.txt")]) @@ -50,9 +51,9 @@ def tick(): if state == "menuInit": gameState, *_ = args visual = gamestate_get_visual(gameState) - # menuBackground = None - menuBackground = visual_show_splash(visual, "menu_background.gif.txt") - menuBackground["play"](60, True) + menuBackground = None + # menuBackground = visual_show_splash(visual, "menu_background.gif.txt") + # menuBackground["play"](60, True) menuView = visual_show_simple_dialog(visual, parent=menuBackground) console = visual_with_mock(visual, menuView, keySpeed=120, hasTitle=True) return "menu", gameState, console @@ -73,10 +74,12 @@ def tick(): return "menu", gameState, console, promise_from_suspendable(menu_show_debug_battle, gameState) if menu == "agent:battle_arena": return "menu", gameState, console, promise_from_suspendable(menu_show_debug_arena, gameState) - if menu == "agent:inventory": - return "menu", gameState, console, promise_from_suspendable(menu_show_debug_inventory, gameState) if menu == "agent:shop": return "menu", gameState, console, promise_from_suspendable(menu_show_debug_shop, gameState) + if menu == "agent:laboratory": + return "menu", gameState, console, promise_from_suspendable(menu_show_debug_laboratory, gameState) + if menu == "agent:inventory": + return "menu", gameState, console, promise_from_suspendable(menu_show_debug_inventory, gameState) if menu == "admin:shop_management": return "menu", gameState, console, promise_from_suspendable(menu_show_debug_shop_management, gameState) if menu == "admin:monster_management": diff --git a/src/game/arena/ui_logic.py b/src/game/arena/ui_logic.py index 36e173e..3d42570 100644 --- a/src/game/arena/ui_logic.py +++ b/src/game/arena/ui_logic.py @@ -77,13 +77,13 @@ def _arena_ui_handler_default(state, args): description = "" for monster in monsters: monsterType = monster_get(gameState, monster.referenceId) - description += f"F: {monsterType.family}, " - description += f"L: {monsterType.level}, " - description += f"HP: {monster.healthPoints:.1f}, " # TODO: These properties do not include potion effects - description += f"ATK: {monster.attackPower:.1f}, " - description += f"DEF: {monster.defensePower:.1f} | " + description += txtkv("F: ", monsterType.family) + " " + description += txtkv("L: ", monsterType.level) + " " + description += txtkv("HP: ", f"{monster.healthPoints:.1f}") + " " # TODO: These properties do not include potion effects + description += txtkv("ATK: ", f"{monster.attackPower:.1f}") + " " + description += txtkv("DEF: ", f"{monster.defensePower:.1f}") + " | " description = string_slice(description, 0, -len(" | ")) - input(f"{trainer.username}", description, id=trainer.id, selectable=True) + input(txtplnm(trainer.username), description, id=trainer.id, selectable=True) print("Selamat datang di arena! Pilih trainer di bawah untuk mulai bertarung!") selection = meta(action="select", signal=cache.abortSignal) return SuspendableReturn, "arena:start_menu_choose", selection @@ -220,13 +220,13 @@ def printStats(cache: __MenuArenaCache, won): description = "" for monster in monsters: monsterType = monster_get(gameState, monster.referenceId) - description += f"F: {monsterType.family}, " - description += f"L: {monsterType.level}, " - description += f"HP: {monster.healthPoints:.1f}, " # TODO: These properties do not include potion effects - description += f"ATK: {monster.attackPower:.1f}, " - description += f"DEF: {monster.defensePower:.1f} | " + description += txtkv("F: ", monsterType.family) + " " + description += txtkv("L: ", monsterType.level) + " " + description += txtkv("HP: ", f"{monster.healthPoints:.1f}") + " " # TODO: These properties do not include potion effects + description += txtkv("ATK: ", f"{monster.attackPower:.1f}") + " " + description += txtkv("DEF: ", f"{monster.defensePower:.1f}") + " | " description = string_slice(description, 0, -len(" | ")) - input(f"{trainer.username}", description, id=trainer.id, selectable=True) + input(txtplnm(trainer.username), description, id=trainer.id, selectable=True) selection = meta(action="select", signal=cache.abortSignal) return SuspendableReturn, "arena:next_stage_new_trainer", selection if state == "arena:next_stage_new_trainer": diff --git a/src/game/battle/battle.py b/src/game/battle/battle.py index 9880cf3..e9a9045 100644 --- a/src/game/battle/battle.py +++ b/src/game/battle/battle.py @@ -57,10 +57,13 @@ def _battle_action_attack(gameState: GameState, battle: BattleSchemaType) -> tup selfMonster = inventory_monster_get(gameState, selfMonsterId) opponentMonster = inventory_monster_get(gameState, opponentMonsterId) selfMonsterAttack = inventory_monster_get_calculated_attack_power(gameState, selfMonster) - selfMonsterAttack = selfMonsterAttack * 1.5 + selfMonsterAttack * 0.3 * (gamestate_rand(gameState) * 2 - 1) + # THIS IS A HACK TO CONFORM THE RULES. Respect original attack/defense calculation + # selfMonsterAttack = selfMonsterAttack * 1.5 + selfMonsterAttack * 0.3 * (gamestate_rand(gameState) * 2 - 1) + selfMonsterAttack = selfMonsterAttack + selfMonsterAttack * 0.3 * (gamestate_rand(gameState) * 2 - 1) opponentMonsterDefense = inventory_monster_get_calculated_defense_power(gameState, opponentMonster) - opponentMonsterDefense = opponentMonsterDefense * 0.2 + opponentMonsterDefense * 0.2 * (gamestate_rand(gameState) * 2 - 1) - selfMonsterAttack = max(0, selfMonsterAttack - opponentMonsterDefense) + # opponentMonsterDefense = opponentMonsterDefense * 0.2 + opponentMonsterDefense * 0.2 * (gamestate_rand(gameState) * 2 - 1) + # selfMonsterAttack = max(0, selfMonsterAttack - opponentMonsterDefense) + selfMonsterAttack = selfMonsterAttack * (1 - opponentMonsterDefense / 100) opponentMonsterHealth = max(0, opponentMonster.healthPoints - selfMonsterAttack) inventory_monster_set(gameState, opponentMonsterId, namedtuple_with(opponentMonster, healthPoints=opponentMonsterHealth)) # THIS IS A HACK TO CONFORM THE RULES. Count the damage given. diff --git a/src/game/battle/ui_logic.py b/src/game/battle/ui_logic.py index 0839982..4223563 100644 --- a/src/game/battle/ui_logic.py +++ b/src/game/battle/ui_logic.py @@ -327,11 +327,11 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: print("Pilih monstermu yang ingin digunakan") for userMonster in userMonsters: monsterType = monster_get(gameState, userMonster.referenceId) - description = f"F: {monsterType.family}, " - description += f"L: {monsterType.level}, " - description += f"HP: {userMonster.healthPoints:.1f}, " # TODO: These properties do not include potion effects - description += f"ATK: {userMonster.attackPower:.1f}, " - description += f"DEF: {userMonster.defensePower:.1f}" + description = txtkv("F: ", monsterType.family) + " " + description += txtkv("L: ", monsterType.level) + " " + description += txtkv("HP: ", f"{userMonster.healthPoints:.1f}") + " " # TODO: These properties do not include potion effects + description += txtkv("ATK: ", f"{userMonster.attackPower:.1f}") + " " + description += txtkv("DEF: ", f"{userMonster.defensePower:.1f}") + "" input(f"{userMonster.name}", description, id=userMonster.id, selectable=True) selection = meta(action="select", signal=cache.abortSignal) # Purposefuly undefined behaviour: We expect the database to not change between selection. @@ -366,7 +366,7 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: meta(action="clear") userId = battle.player1Id if cache.turn == 1 else battle.player2Id if cache.turn == 2 else None userMonsterBall = inventory_item_get_user_items(gameState, userId) - userMonsterBall = array_find(userMonsterBall, lambda i, *_: i.referenceId == 8 and i.quantity > 0) # ID 8 is for monster ball + userMonsterBall = array_find(userMonsterBall, lambda i, *_: i.referenceId == 3 and i.quantity > 0) # ID 3 is for monster ball if userMonsterBall is None: print("Kamu ga ada monster ball yang bisa dipake!") input("Lanjut", selectable=True) @@ -392,7 +392,7 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: if not captureSuccess: print("BAM! Kamu mengeluarkan monster ball!") print("Tapi kayaknya monsternya ga ketangkep deh:(") - print(f"Sisa monster ball: {userMonsterBall.quantity}") + print(f"Sisa monster ball: {txtqty(userMonsterBall.quantity)}") input("Lanjut", selectable=True) selection = meta(action="select", signal=cache.abortSignal) return SuspendableReturn, "battle:main", selection @@ -411,7 +411,7 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: meta(action="clear") print("BAM! Kamu mengeluarkan monster ball!") print("Yesss. Monsternya berhasil ketangkep!") - print(f"Sisa monster ball: {quantity}") + print(f"Sisa monster ball: {txtqty(quantity)}") input("Lanjut", selectable=True) selection = meta(action="select", signal=cache.abortSignal) return SuspendableReturn, "battle:end", selection @@ -443,7 +443,7 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: print("Pilih potion yang ingin digunakan") for userItem in userMonsterBall: potion = potion_get(gameState, userItem.referenceId) - description = f"Stok: {userItem.quantity} | {potion.description}" + description = txtkv("Stok: ", txtqty(userItem.quantity)) + f" | {potion.description}" input(f"{potion.name}", description, id=userItem.id, selectable=True) selection = meta(action="select", signal=cache.abortSignal) # Purposefuly undefined behaviour: We expect the database to not change between selection. @@ -476,7 +476,7 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: # My original plan was to change the battle schema type to be append-only history logs. # But it will take more time. This is the most economically-advantage time. __battleMonsterUsedPotionId = f"__battle-{battle.id}-monster{selfMonster.id}-used-potion-{potion.id}" - if __battleMonsterUsedPotionId in gameState and gameState[__battleMonsterUsedPotionId] > 0 and potion.id != 5: + if __battleMonsterUsedPotionId in gameState and gameState[__battleMonsterUsedPotionId] > 0: print("Aduh!! Monstermu gamau sama potion ini:(") input("Lanjut", selectable=True) selection = meta(action="select", signal=cache.abortSignal) @@ -486,30 +486,30 @@ def getArenaFromBattle(cache: __MenuBattleCache) -> ArenaSchemaType: else: gameState[__battleMonsterUsedPotionId] = 1 # THIS IS A HACK TO CONFORM THE RULES. The way the rule's potion is designed conflicts with my potion design. - if potion.id == 5: + if potion.id == 0: monsterType = monster_get(gameState, selfMonster.referenceId) newHealthPoints = selfMonster.healthPoints + 0.25 * monsterType.healthPoints newHealthPoints = min(monsterType.healthPoints, newHealthPoints) selfMonster = inventory_monster_set(gameState, selfMonster.id, namedtuple_with(selfMonster, healthPoints=newHealthPoints )) - elif potion.id == 6: + elif potion.id == 1: selfMonster = inventory_monster_set(gameState, selfMonster.id, namedtuple_with(selfMonster, attackPower=selfMonster.attackPower * 1.05 )) - elif potion.id == 7: + elif potion.id == 2: selfMonster = inventory_monster_set(gameState, selfMonster.id, namedtuple_with(selfMonster, defensePower=selfMonster.defensePower * 1.05 )) else: selfMonster = inventory_monster_use_potion(gameState, selfMonster, potion) - print(f"Kamu memakai potion '{potion.name}'") + print(f"Kamu memakai potion {ptncl(potion.name)}") # THIS IS A HACK TO CONFORM THE RULES. Print the potion affect message - if potion.id == 5: + if potion.id == 0: print("Setelah meminum ramuan ini, luka-luka yang ada di dalam tubuh Pikachow sembuh dengan cepat. Dalam sekejap, Pikachow terlihat kembali prima dan siap melanjutkan pertempuran.") - elif potion.id == 6: + elif potion.id == 1: print("Setelah meminum ramuan ini, aura kekuatan terlihat mengelilingi Pikachow dan gerakannya menjadi lebih cepat dan mematikan.") - elif potion.id == 7: + elif potion.id == 2: print("Setelah meminum ramuan ini, muncul sebuah energi pelindung di sekitar Pikachow yang membuatnya terlihat semakin tangguh dan sulit dilukai.") input("Lanjut", selectable=True) selection = meta(action="select", signal=cache.abortSignal) diff --git a/src/game/menu/menu.py b/src/game/menu/menu.py index 6671f8d..70ca4a3 100644 --- a/src/game/menu/menu.py +++ b/src/game/menu/menu.py @@ -82,11 +82,12 @@ def _menu_show_main_menu(state, args): if state == 4: gameState, console, user = args print, input, meta = console - print(f"Halo Agent {user.username}. Kamu memanggil command HELP. Kamu memilih jalan yang benar, semoga kamu tidak sesat kemudian. Berikut adalah hal-hal yang dapat kamu lakukan sekarang:") + print(f"Halo Agent {txtplnm(user.username)}. Kamu memanggil command HELP. Kamu memilih jalan yang benar, semoga kamu tidak sesat kemudian. Berikut adalah hal-hal yang dapat kamu lakukan sekarang:") input("Battle Wild Monster", "Memulai battle dengan monster liar", selectable=True) input("Battle Arena", "Memulai battle dengan trainer", selectable=True) - input("Inventory", "Melihat isi inventory mu", selectable=True) input("Shop", "Membuka shop untuk beli monster/item", selectable=True) + input("Laboratory", "Membuka laboratory untuk upgrade monster", selectable=True) + input("Inventory", "Melihat isi inventory mu", selectable=True) input("Save", "Menyimpan save game", selectable=True) input("Logout", "Keluar dari akun yang sedang digunakan", selectable=True) input("Exit", selectable=True) @@ -100,10 +101,12 @@ def _menu_show_main_menu(state, args): return SuspendableReturn, "agent:battle_wild_monster" if selection == "Battle Arena": return SuspendableReturn, "agent:battle_arena" - if selection == "Inventory": - return SuspendableReturn, "agent:inventory" if selection == "Shop": return SuspendableReturn, "agent:shop" + if selection == "Laboratory": + return SuspendableReturn, "agent:laboratory" + if selection == "Inventory": + return SuspendableReturn, "agent:inventory" if selection == "Save": return SuspendableReturn, "agent:save" if selection == "Logout": @@ -152,8 +155,8 @@ def _menu_show_exit(state, args): print, input, meta = console print("Yakin mau keluar?") input("Kembali", selectable=True) - input(f"{fg('e63131')}Keluar dan save{fg()}", selectable=True) - input(f"{fg('e63131')}Keluar{fg()}", selectable=True) + input(txtdngr("Keluar dan save"), selectable=True) + input(txtdngr("Keluar"), selectable=True) selection = meta(action="select") return 2, gameState, console, selection if state == 2: diff --git a/src/game/menu/ui_battle.py b/src/game/menu/ui_battle.py index 0132545..c2907c2 100644 --- a/src/game/menu/ui_battle.py +++ b/src/game/menu/ui_battle.py @@ -263,40 +263,36 @@ def formatString(string): return string if selfMonster is not None: selfStatView = cache.selfStatView + monsterType = monster_get(gameState, selfMonster.referenceId) hpCalculated = inventory_monster_get_calculated_health_points(gameState, selfMonster) atkCalculated = inventory_monster_get_calculated_attack_power(gameState, selfMonster) defCalculated = inventory_monster_get_calculated_defense_power(gameState, selfMonster) hpRatio = (hpCalculated - selfMonster.healthPoints) / selfMonster.healthPoints if selfMonster.healthPoints != 0 else 0 atkRatio = (atkCalculated - selfMonster.attackPower) / selfMonster.attackPower if selfMonster.attackPower != 0 else 0 defRatio = (defCalculated - selfMonster.defensePower) / selfMonster.defensePower if selfMonster.defensePower != 0 else 0 - potionNames = array_map(selfMonster.activePotions, lambda p, i, *_: f"\t{i + 1}. {potion_get(gameState, p[2]).name}") - newLine = "\n" # OMFG. I hate python. - selfStatView["setContent"](formatString(f""" - Nama: {selfMonster.name} - Level: {monster_get(gameState, selfMonster.referenceId).level} - HP: {selfMonster.healthPoints:.1f}{f"{'+' if hpRatio >= 0 else ''}{hpRatio * 100:.2f}%" if hpRatio != 0 else ""} - Attack: {selfMonster.attackPower}{f"{'+' if atkRatio >= 0 else ''}{atkRatio * 100:.2f}%" if atkRatio != 0 else ""} - Defense: {selfMonster.defensePower}{f"{'+' if defRatio >= 0 else ''}{defRatio * 100:.2f}%" if defRatio != 0 else ""} - Potions: {"-" if len(potionNames) == 0 else f"{newLine}{array_join(potionNames, newLine)}"} - """)) + # potionNames = array_map(selfMonster.activePotions, lambda p, i, *_: f"\t{i + 1}. {ptncl(potion_get(gameState, p[2]).name)}") + description = txtkv("Nama: ", selfMonster.name) + "\n" + description += txtkv("Level: ", monsterType.level) + "\n" + description += txtkv("HP: ", "") + "\n" + stbar(selfMonster.healthPoints, monsterType.healthPoints, f"{selfMonster.healthPoints:.2f}/{monsterType.healthPoints:.2f}{ratmod(hpRatio) if hpRatio != 0 else ''}", selfStatView) + "\n" + description += txtkv("Attack: ", f"{selfMonster.attackPower:.2f}" + (ratmod(atkRatio) if atkRatio != 0 else "")) + "\n" + description += txtkv("Defense: ", f"{selfMonster.defensePower:.2f}" + (ratmod(defRatio) if defRatio != 0 else "")) + "\n" + selfStatView["setContent"](description) if opponentMonster is not None: opponentStatView = cache.opponentStatView + monsterType = monster_get(gameState, opponentMonster.referenceId) hpCalculated = inventory_monster_get_calculated_health_points(gameState, opponentMonster) atkCalculated = inventory_monster_get_calculated_attack_power(gameState, opponentMonster) defCalculated = inventory_monster_get_calculated_defense_power(gameState, opponentMonster) hpRatio = (hpCalculated - opponentMonster.healthPoints) / opponentMonster.healthPoints if opponentMonster.healthPoints != 0 else 0 atkRatio = (atkCalculated - opponentMonster.attackPower) / opponentMonster.attackPower if opponentMonster.attackPower != 0 else 0 defRatio = (defCalculated - opponentMonster.defensePower) / opponentMonster.defensePower if opponentMonster.defensePower != 0 else 0 - potionNames = array_map(opponentMonster.activePotions, lambda p, i, *_: f"\t{i + 1}. {potion_get(gameState, p[2]).name}") - newLine = "\n" - opponentStatView["setContent"](formatString(f""" - Nama: {opponentMonster.name} - Level: {monster_get(gameState, opponentMonster.referenceId).level} - HP: {opponentMonster.healthPoints:.1f}{f"{'+' if hpRatio >= 0 else ''}{hpRatio * 100:.2f}%" if hpRatio != 0 else ""} - Attack: {opponentMonster.attackPower}{f"{'+' if atkRatio >= 0 else ''}{atkRatio * 100:.2f}%" if atkRatio != 0 else ""} - Defense: {opponentMonster.defensePower}{f"{'+' if defRatio >= 0 else ''}{defRatio * 100:.2f}%" if defRatio != 0 else ""} - Potions: {"-" if len(potionNames) == 0 else f"{newLine}{array_join(potionNames, newLine)}"} - """)) + # potionNames = array_map(opponentMonster.activePotions, lambda p, i, *_: f"\t{i + 1}. {ptncl(potion_get(gameState, p[2]).name)}") + description = txtkv("Nama: ", opponentMonster.name) + "\n" + description += txtkv("Level: ", monsterType.level) + "\n" + description += txtkv("HP: ", "") + "\n" + stbar(opponentMonster.healthPoints, monsterType.healthPoints, f"{opponentMonster.healthPoints:.2f}/{monsterType.healthPoints:.2f}{ratmod(hpRatio) if hpRatio != 0 else ''}", opponentStatView) + "\n" + description += txtkv("Attack: ", f"{opponentMonster.attackPower:.2f}" + (ratmod(atkRatio) if atkRatio != 0 else "")) + "\n" + description += txtkv("Defense: ", f"{opponentMonster.defensePower:.2f}" + (ratmod(defRatio) if defRatio != 0 else "")) + "\n" + opponentStatView["setContent"](description) cache = namedtuple_with(cache, battle=battle, selfMonster=selfMonster, diff --git a/src/game/menu/ui_inventory.py b/src/game/menu/ui_inventory.py index fd065aa..545e0f3 100644 --- a/src/game/menu/ui_inventory.py +++ b/src/game/menu/ui_inventory.py @@ -70,7 +70,7 @@ def _menu_show_inventory(state, args): width=dim_from_factor(0.8), height=dim_from_absolute(3 + 2 * (2 + tableMaxShown) + 2 + 2 + 2 + 2), horizontalAlignment="Right", parent=cache.parent) - mainView["setContent"]("OWCA: 0 ") + mainView["setContent"](txtkv("OWCA: ", "0") + " ") entryView = visual_show_simple_dialog(visual, None, "", x=pos_from_absolute(0), y=pos_from_absolute(0), @@ -167,14 +167,10 @@ def _menu_show_inventory(state, args): itemRows = array_slice(cache.inventoryEntries, startIndex, endIndex) def getRowFor(i: int, inventoryEntry: __InventoryEntry): resolvedEntry = __resolve_inventory_entry(gameState, inventoryEntry) - entryType = "monster" if __is_inventory_entries_monster(inventoryEntry) else "item" + entryType = smnstr("Monster") if __is_inventory_entries_monster(inventoryEntry) else ptncl("Item") return [f"{startIndex + i + 1}", entryType, resolvedEntry[0], resolvedEntry[2]] itemRows = array_map(itemRows, lambda it, i, *_: getRowFor(i, it)) - tableView["updateRows"]([ - ["▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲"], - *itemRows, - ["▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼"], - ]) + tableView["updateRows"]([scrlup(4), *itemRows, scrldw(4)]) cache = namedtuple_with(cache, lastTableOffset=cache.tableOffset ) @@ -184,7 +180,7 @@ def getRowFor(i: int, inventoryEntry: __InventoryEntry): gameState = cache.gameState mainView = cache.mainView userMoney = user_get_current(gameState).money - mainView["setContent"](f"OWCA: {userMoney} ") + mainView["setContent"](txtkv("OWCA Coin: ", txtcrcy(userMoney)) + " ") if cache.inputPosition == cache.lastInputPosition: return "waitInput", cache visual = gamestate_get_visual(gameState) @@ -206,10 +202,10 @@ def getRowFor(i: int, inventoryEntry: __InventoryEntry): entryName, entryDescription, entryQuantity, entrySprite = __resolve_inventory_entry(gameState, inventoryEntry) entryPreviewAnimation = visual_show_splash(visual, entrySprite, parent=entryPreviewFrame) entryPreviewAnimation["play"](60, True) - description = f"ID: {inputPosition}\n" - description += f"Nama: {entryName}\n" + description = txtkv("ID: ", inputPosition) + "\n" + description += txtkv("Nama: ", entryName) + "\n" if entryQuantity != "-": - description += f"Jumlah: {entryQuantity}\n" + description += txtkv("Jumlah: ", entryQuantity) + "\n" description += entryDescription entryDescriptionView["setContent"](description) cache = namedtuple_with(cache, @@ -307,7 +303,7 @@ def onKey(event: KeyEvent): # inventoryEntry = cache.inventoryEntries[cache.inputPosition] # itemName = __resolve_inventory_entry(gameState, inventoryEntry)[0] # meta(action="clear") - # print(f"==== Beli '{itemName}' @ {inventoryEntry.cost} ====") + # print(f"==== Beli {itemName} @ {inventoryEntry.cost} ====") # print("Masukkan jumlah yang ingin dibeli.") # def onChange(v): # meta(action="clearPrint") @@ -319,10 +315,10 @@ def onKey(event: KeyEvent): # print("Jumlah yang dimasukkan tidak valid.") # return # subtotal = quantity * inventoryEntry.cost - # print(f"Total harga: {quantity} * {inventoryEntry.cost} = {subtotal}") + # print(f"Total harga: {txtqty(quantity)} * {inventoryEntry.cost} = {txtcrcy(subtotal)}") # if userMoney < subtotal: - # print(f"Uangmu tidak cukup.") - # quantity = input("Jumlah: ", f"Uangmu: {userMoney}", onChange=onChange) + # print(f"OWCA Coinmu tidak cukup.") + # quantity = input("Jumlah: ", txtkv("OWCA Coin: ", txtcrcy(userMoney)) + "", onChange=onChange) # return "actionDialogConfirm", cache, quantity # if state == "actionDialogConfirm": # cache, quantity, *_ = args @@ -339,15 +335,15 @@ def onKey(event: KeyEvent): # userMoney = user_get_current(gameState).money # subtotal = quantity * inventoryEntry.cost # if userMoney < subtotal: - # print(f"Uangmu tidak cukup. ", end="") + # print(f"OWCA Coinmu tidak cukup. ", end="") # input("Lanjut", selectable=True) # selection = meta(action="select") # return "actionDialogConfirmChoose", cache, None, "Batal", selection # meta("keySpeed", 120) - # print(f"OWCA mu saat ini terdapat {userMoney}. ", end="") - # print(f"Kamu akan membeli '{itemName}' dengan harga satuan {inventoryEntry.cost} sebanyak {quantity} dengan subtotal {subtotal}. ", end="") - # print(f"Di akhir transaksi OWCA mu akan tersisa {userMoney - subtotal}.") - # input("Konfirmasi", selectable=True) + # print(f"OWCA Coinmu saat ini terdapat {txtcrcy(userMoney)}. ", end="") + # print(f"Kamu akan membeli {itemName} dengan harga satuan {inventoryEntry.cost} sebanyak {txtqty(quantity)} dengan subtotal {txtcrcy(subtotal)}. ", end="") + # print(f"Di akhir transaksi OWCA Coinmu akan tersisa {txtcrcy(userMoney - subtotal)}.") + # input(txtprcd("Konfirmasi"), selectable=True) # input("Batal", selectable=True) # selection = meta(action="select") # return "actionDialogConfirmChoose", cache, quantity, selection @@ -409,10 +405,15 @@ def __resolve_inventory_entry(gameState: GameState, inventoryEntry: ShopSchemaTy if __is_inventory_entries_monster(inventoryEntry): monster: InventoryMonsterSchemaType = inventoryEntry monsterType = monster_get(gameState, monster.referenceId) - description = f"Family: {monsterType.family} Level: {monsterType.level}\nATK: {monster.attackPower} DEF: {monster.defensePower}\nDeskripsi: {monsterType.description}" + description = txtkv("Family: ", monsterType.family) + " " + description += txtkv("Level: ", monsterType.level) + "\n" + description += txtkv("HP: ", monster.healthPoints) + " " + description += txtkv("ATK: ", monster.attackPower) + " " + description += txtkv("DEF: ", monster.defensePower) + "\n" + description += txtkv("Deskripsi: ", monsterType.description) + "" return (monster.name, description, "-", monsterType.spriteFront) if __is_inventory_entries_item(inventoryEntry): potion: InventoryItemSchemaType = inventoryEntry potionType = potion_get(gameState, potion.referenceId) - description = f"Deskripsi: {potionType.description}" - return (potionType.name, description, f"{potion.quantity}", potionType.sprite) + description = txtkv("Deskripsi: ", potionType.description) + "" + return (potionType.name, description, txtqty(potion.quantity), potionType.sprite) diff --git a/src/game/menu/ui_laboratory.py b/src/game/menu/ui_laboratory.py index bb5a132..c60ebb1 100644 --- a/src/game/menu/ui_laboratory.py +++ b/src/game/menu/ui_laboratory.py @@ -77,7 +77,7 @@ def _menu_show_laboratory(state, args): width=dim_from_factor(0.8), #height=dim_from_absolute(3 + 2 * (2 + tableMaxShown) + 2 + 24), height=dim_from_factor(0.8), parent=cache.parent) - mainView["setContent"](" OWCA: 0") + mainView["setContent"](" " + txtkv("OWCA: ", "0")) tableView = visual_show_table(visual, [ @@ -200,17 +200,13 @@ def getRowFor(i: int, upgradeOption: LaboratorySchemaType): hpRatio = (afterMonster.healthPoints - beforeMonster.healthPoints) / beforeMonster.healthPoints if beforeMonster.healthPoints != 0 else 0 atkRatio = (afterMonster.attackPower - beforeMonster.attackPower) / beforeMonster.attackPower if beforeMonster.attackPower != 0 else 0 defRatio = (afterMonster.defensePower - beforeMonster.defensePower) / beforeMonster.defensePower if beforeMonster.defensePower != 0 else 0 - rowName = f"{beforeMonster.name} ({beforeMonster.level}) --> ({afterMonster.level}) {afterMonster.name}" - rowHp = f"{beforeMonster.healthPoints} {'+' if hpRatio >= 0 else ''}{hpRatio * 100:.2f}%" - rowAtk = f"{beforeMonster.attackPower} {'+' if atkRatio >= 0 else ''}{atkRatio * 100:.2f}%" - rowDef = f"{beforeMonster.defensePower} {'+' if defRatio >= 0 else ''}{defRatio * 100:.2f}%" - return [f"{startIndex + i + 1}", rowName, rowHp, rowAtk, rowDef, f"{upgradeOption.cost}"] + rowName = f"{smnstr(beforeMonster.name)} ({beforeMonster.level}) --> ({afterMonster.level}) {smnstr(afterMonster.name)}" + rowHp = f"{beforeMonster.healthPoints} {ratmod(hpRatio)}" + rowAtk = f"{beforeMonster.attackPower} {ratmod(atkRatio)}" + rowDef = f"{beforeMonster.defensePower} {ratmod(defRatio)}" + return [f"{startIndex + i + 1}", rowName, rowHp, rowAtk, rowDef, txtcrcy(upgradeOption.cost)] upgradeRows = array_map(upgradeRows, lambda u, i, *_: getRowFor(i, u)) - tableView["updateRows"]([ - ["▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲"], - *upgradeRows, - ["▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼"], - ]) + tableView["updateRows"]([scrlup(6), *upgradeRows, scrldw(6)]) cache = namedtuple_with(cache, lastTableOffset=cache.tableOffset ) @@ -220,7 +216,7 @@ def getRowFor(i: int, upgradeOption: LaboratorySchemaType): gameState = cache.gameState mainView = cache.mainView userMoney = user_get_current(gameState).money - mainView["setContent"](f" OWCA: {userMoney}") + mainView["setContent"](txtkv("OWCA Coin: ", txtcrcy(userMoney)) + "") if cache.inputPosition == cache.lastInputPosition: return "waitInput", cache visual = gamestate_get_visual(gameState) @@ -250,10 +246,22 @@ def getRowFor(i: int, upgradeOption: LaboratorySchemaType): beforeMonster, afterMonster = __resolve_laboratory_upgrade(gameState, upgradeOption) beforePreviewAnimation = visual_show_splash(visual, beforeMonster.spriteFront, parent=beforePreviewFrame) beforePreviewAnimation["play"](60, True) - beforeDescriptionView["setContent"](f"Nama: {beforeMonster.name} ({beforeMonster.level})\nHP: {beforeMonster.healthPoints}\nATK: {beforeMonster.attackPower}\nDEF: {beforeMonster.defensePower}") + description = txtkv("Nama: ", beforeMonster.family) + " " + description += txtkv("Level: ", beforeMonster.level) + "\n" + description += txtkv("HP: ", beforeMonster.healthPoints) + " " + description += txtkv("ATK: ", beforeMonster.attackPower) + " " + description += txtkv("DEF: ", beforeMonster.defensePower) + "\n" + description += txtkv("Deskripsi: ", beforeMonster.description) + "" + beforeDescriptionView["setContent"](description) afterPreviewAnimation = visual_show_splash(visual, afterMonster.spriteFront, parent=afterPreviewFrame) afterPreviewAnimation["play"](60, True) - afterDescriptionView["setContent"](f"Nama: {afterMonster.name} ({afterMonster.level})\nHP: {afterMonster.healthPoints}\nATK: {afterMonster.attackPower}\nDEF: {afterMonster.defensePower}") + description = txtkv("Nama: ", afterMonster.family) + " " + description += txtkv("Level: ", afterMonster.level) + "\n" + description += txtkv("HP: ", afterMonster.healthPoints) + " " + description += txtkv("ATK: ", afterMonster.attackPower) + " " + description += txtkv("DEF: ", afterMonster.defensePower) + "\n" + description += txtkv("Deskripsi: ", afterMonster.description) + "" + afterDescriptionView["setContent"](description) cache = namedtuple_with(cache, lastInputPosition=inputPosition, beforePreviewAnimation=beforePreviewAnimation, @@ -350,9 +358,9 @@ def onKey(event: KeyEvent): beforeMonster, afterMonster = __resolve_laboratory_upgrade(gameState, upgradeOption) print, input, meta = cache.upgradeDialogConsole meta(action="clear") - print(f"==== Upgrade {beforeMonster.name} ({beforeMonster.level}) --> ({afterMonster.level}) {afterMonster.name} ====") + print(f"==== Upgrade {smnstr(beforeMonster.name)} ({beforeMonster.level}) --> ({afterMonster.level}) {smnstr(afterMonster.name)} ====") if userMoney < upgradeOption.cost: - print("Uangmu tidak cukup untuk melakukan upgrade ini.") + print("OWCA Coinmu tidak cukup untuk melakukan upgrade ini.") input("Lanjut", selectable=True) selection = meta(action="select") return "upgradeDialogConfirmChoose", cache, None, "Batal", selection @@ -367,11 +375,11 @@ def onKey(event: KeyEvent): hpRatio = (targetHp - userMonster.healthPoints) / userMonster.healthPoints if userMonster.healthPoints != 0 else 0 atkRatio = (targetAtk - userMonster.attackPower) / userMonster.attackPower if userMonster.attackPower != 0 else 0 defRatio = (targetDef - userMonster.defensePower) / userMonster.defensePower if userMonster.defensePower != 0 else 0 - rowHp = f"{userMonster.healthPoints} {'+' if hpRatio >= 0 else ''}{hpRatio * 100:.2f}%" - rowAtk = f"{userMonster.attackPower} {'+' if atkRatio >= 0 else ''}{atkRatio * 100:.2f}%" - rowDef = f"{userMonster.defensePower} {'+' if defRatio >= 0 else ''}{defRatio * 100:.2f}%" + rowHp = f"{userMonster.healthPoints} {ratmod(hpRatio)}" + rowAtk = f"{userMonster.attackPower} {ratmod(atkRatio)}" + rowDef = f"{userMonster.defensePower} {ratmod(defRatio)}" description = f"HP: {rowHp} ATK: {rowAtk} DEF: {rowDef}" - input(f"{userMonster.name}", description, id=userMonster.id, selectable=True) + input(smnstr(userMonster.name), description, id=userMonster.id, selectable=True) selection = meta(action="select") return "upgradeDialogConfirm", cache, selection if state == "upgradeDialogConfirm": @@ -386,7 +394,7 @@ def onKey(event: KeyEvent): print, input, meta = cache.upgradeDialogConsole meta(action="clear") if userMoney < upgradeOption.cost: - print(f"Uangmu tidak cukup. ", end="") + print(f"OWCA Coinmu tidak cukup. ", end="") input("Lanjut", selectable=True) selection = meta(action="select") return "upgradeDialogConfirmChoose", cache, None, "Batal", selection @@ -394,11 +402,11 @@ def onKey(event: KeyEvent): targetAtk = max(userMonster.attackPower, afterMonster.attackPower) targetDef = max(userMonster.defensePower, afterMonster.defensePower) meta("keySpeed", 120) - print(f"OWCA mu saat ini terdapat {userMoney}. ", end="") - print(f"Kamu akan mengupgrade '{userMonster.name}' dari level {beforeMonster.level} ke level {afterMonster.level} dengan harga {upgradeOption.cost}. ", end="") - print(f"Di akhir transaksi OWCA mu akan tersisa {userMoney - upgradeOption.cost}. Dan '{userMonster.name}' akan memiliki HP: {targetHp} ATK: {targetAtk} DEF: {targetDef}") - input("Konfirmasi", selectable=True) - input("Batal", selectable=True) + print(f"OWCA Coinmu saat ini terdapat {txtcrcy(userMoney)}. ", end="") + print(f"Kamu akan mengupgrade {smnstr(userMonster.name)} dari level {beforeMonster.level} ke level {afterMonster.level} dengan harga {txtcrcy(upgradeOption.cost)}. ", end="") + print(f"Di akhir transaksi OWCA Coinmu akan tersisa {txtcrcy(userMoney - upgradeOption.cost)}. Dan {smnstr(userMonster.name)} akan memiliki {txtkv('HP: ', targetHp)} {txtkv('ATK: ', targetAtk)} {txtkv('DEF: ', targetDef)}") + input(txtprcd("Konfirmasi"), selectable=True) + input(txtcncl("Batal"), selectable=True) selection = meta(action="select") return "upgradeDialogConfirmChoose", cache, monsterId, selection if state == "upgradeDialogConfirmChoose": diff --git a/src/game/menu/ui_monster_management.py b/src/game/menu/ui_monster_management.py index 5c5f41e..baf9245 100644 --- a/src/game/menu/ui_monster_management.py +++ b/src/game/menu/ui_monster_management.py @@ -166,15 +166,11 @@ def _menu_show_monster_management(state, args): endIndex = startIndex + tableMaxShown itemRows = array_slice(cache.monsterTypes, startIndex, endIndex) def getRowFor(i: int, monsterType: MonsterSchemaType): - return [f"{startIndex + i + 1}", monsterType.family, monsterType.name, f"{monsterType.level}", f"{monsterType.healthPoints}", f"{monsterType.attackPower}", f"{monsterType.defensePower}"] + return [f"{startIndex + i + 1}", monsterType.family, smnstr(monsterType.name), f"{monsterType.level}", f"{monsterType.healthPoints}", f"{monsterType.attackPower}", f"{monsterType.defensePower}"] itemRows = array_map(itemRows, lambda it, i, *_: getRowFor(i, it)) if len(itemRows) < tableMaxShown: - array_push(itemRows, ["+++", "++++++", "++++++", "++++++", "++++++", "++++++", "++++++"]) - tableView["updateRows"]([ - ["▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲"], - *itemRows, - ["▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼"], - ]) + array_push(itemRows, scrlad(7)) + tableView["updateRows"]([scrlup(7), *itemRows, scrldw(7)]) cache = namedtuple_with(cache, lastTableOffset=cache.tableOffset ) @@ -202,13 +198,13 @@ def getRowFor(i: int, monsterType: MonsterSchemaType): monsterType = cache.monsterTypes[inputPosition] itemPreviewAnimation = visual_show_splash(visual, monsterType.spriteFront, parent=itemPreviewFrame) itemPreviewAnimation["play"](60, True) - description = f"ID: {inputPosition}\n" - description += f"Family: {monsterType.family}\n" - description += f"Nama: {monsterType.name}\n" - description += f"Level: {monsterType.level}\n" - description += f"HP: {monsterType.healthPoints}\n" - description += f"ATK: {monsterType.attackPower}\n" - description += f"DEF: {monsterType.defensePower}\n" + description = txtkv("ID: ", inputPosition) + "\n" + description += txtkv("Family: ", monsterType.family) + "\n" + description += txtkv("Nama: ", smnstr(monsterType.name)) + "\n" + description += txtkv("Level: ", monsterType.level) + "\n" + description += txtkv("HP: ", monsterType.healthPoints) + "\n" + description += txtkv("ATK: ", monsterType.attackPower) + "\n" + description += txtkv("DEF: ", monsterType.defensePower) + "\n" itemDescriptionView["setContent"](description) cache = namedtuple_with(cache, lastInputPosition=inputPosition, @@ -337,7 +333,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta if lastFamily is None or lastFamily == "": array_push(emptyFields, "family") else: - array_push(descriptions, f"Family: {lastFamily}") + array_push(descriptions, txtkv("Family: ", lastFamily) + "") if lastName is None or lastName == "": array_push(emptyFields, "nama") else: @@ -345,7 +341,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta if array_some(cache.monsterTypes, lambda m, *_: m.name == lastName): array_push(descriptions, "Nama sudah terdaftar!") else: - array_push(descriptions, f"Nama: {lastName}") + array_push(descriptions, txtkv("Nama: ", lastName) + "") parsedLevel = None if level is None or level == "": array_push(emptyFields, "level") @@ -354,7 +350,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta if parsedLevel is None or parsedLevel < 0: array_push(descriptions, "Level tidak valid.") else: - array_push(descriptions, f"Level: {parsedLevel}") + array_push(descriptions, txtkv("Level: ", parsedLevel) + "") if lastFamily is not None and parsedLevel is not None: if array_some(cache.monsterTypes, lambda m, *_: m.family == lastFamily and m.level == parsedLevel): array_push(descriptions, f"Monster dengan family dan level ini telah ada!") @@ -365,7 +361,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta if parsedHealthPoints is None or parsedHealthPoints < 0: array_push(descriptions, "Health points tidak valid.") else: - array_push(descriptions, f"HP: {parsedHealthPoints}") + array_push(descriptions, txtkv("HP: ", parsedHealthPoints) + "") if attackPower is None or attackPower == "": array_push(emptyFields, "attack power") else: @@ -373,7 +369,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta if parsedAttackPower is None or parsedAttackPower < 0: array_push(descriptions, "Attack power tidak valid.") else: - array_push(descriptions, f"ATK: {parsedAttackPower}") + array_push(descriptions, txtkv("ATK: ", parsedAttackPower) + "") if defensePower is None or defensePower == "": array_push(emptyFields, "defense power") else: @@ -382,7 +378,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta if parsedDefensePower is None or parsedDefensePower < 0 or parsedDefensePower > 50: array_push(descriptions, "Defense power tidak valid.") else: - array_push(descriptions, f"DEF: {parsedDefensePower}") + array_push(descriptions, txtkv("DEF: ", parsedDefensePower) + "") emptyFieldsStr = None if len(emptyFields) >= 3: emptyFieldsStr = f"{array_join(array_slice(emptyFields, 0, len(emptyFields) - 1), ', ')}, dan {emptyFields[len(emptyFields) - 1]}." @@ -455,7 +451,7 @@ def onChange(family = None, name = None, level = None, healthPoints = None, atta print, input, meta = cache.actionDialogConsole monsterType = cache.monsterTypes[cache.inputPosition] meta(action="clear") - print(f"==== Edit '{monsterType.name}' ====") + print(f"==== Edit {smnstr(monsterType.name)} ====") input("Ganti Nama", selectable=True) input("Ganti HP", selectable=True) input("Ganti ATK", selectable=True) @@ -481,7 +477,7 @@ def onChange(v): if array_some(cache.monsterTypes, lambda m, *_: m.name == v): print("Nama sudah terdaftar!") return - print(f"Nama akan diganti menjadi {v}") + print(f"Nama akan diganti menjadi {smnstr(v)}") monsterName = input("Nama: ", onChange=onChange) return "actionDialogChangeName", cache, monsterName if selection == "Ganti HP": @@ -524,7 +520,7 @@ def onChange(v): return defensePower = parse_int(v) # THIS IS A HACK TO CONFORM THE RULES. Defense power range is from 0 to 50 - if defensePower is None or defensePower < 0 or defensePower > 0: + if defensePower is None or defensePower < 0 or defensePower > 50: print("Defense power yang dimasukkan tidak valid.") return print(f"Defense power akan diganti menjadi {defensePower}") diff --git a/src/game/menu/ui_save.py b/src/game/menu/ui_save.py index 871ca6a..a46fc4f 100644 --- a/src/game/menu/ui_save.py +++ b/src/game/menu/ui_save.py @@ -12,7 +12,7 @@ def _menu_show_save(state, args): meta(action="clear") print("=========== SAVE ===========") print("Silahkan masukkan nama save.") - saveName = input(f"{fbg()}Save: {fg('e6dee6')}{bg('734118')}", f"{fbg()}Kosongkan untuk menggunakan folder save saat ini.") + saveName = input(f"Save: ", f"Kosongkan untuk menggunakan folder save saat ini.") return 2, gameState, console, currentDirectory, saveName if state == 2: gameState, console, currentDirectory, saveName = args diff --git a/src/game/menu/ui_shop.py b/src/game/menu/ui_shop.py index 167967f..3fd609d 100644 --- a/src/game/menu/ui_shop.py +++ b/src/game/menu/ui_shop.py @@ -69,7 +69,7 @@ def _menu_show_shop(state, args): x=pos_from_center(), y=pos_from_center(), width=dim_from_factor(0.8), height=dim_from_absolute(3 + 2 * (2 + tableMaxShown) + 2 + 2 + 2 + 2), parent=cache.parent) - mainView["setContent"](" OWCA: 0") + mainView["setContent"](txtkv("OWCA: ", "0") + " ") tableView = visual_show_table(visual, [ @@ -167,13 +167,9 @@ def _menu_show_shop(state, args): itemRows = array_slice(cache.shopItems, startIndex, endIndex) def getRowFor(i: int, shopItem: ShopSchemaType): resolvedItem = __resolve_shop_item(gameState, shopItem) - return [f"{startIndex + i + 1}", shopItem.referenceType, resolvedItem[0], f"{shopItem.stock}", f"{shopItem.cost}"] + return [f"{startIndex + i + 1}", shopItem.referenceType, resolvedItem[0], txtqty(shopItem.stock), txtcrcy(shopItem.cost)] itemRows = array_map(itemRows, lambda it, i, *_: getRowFor(i, it)) - tableView["updateRows"]([ - ["▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲"], - *itemRows, - ["▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼"], - ]) + tableView["updateRows"]([scrlup(5), *itemRows, scrldw(5)]) cache = namedtuple_with(cache, lastTableOffset=cache.tableOffset ) @@ -183,7 +179,7 @@ def getRowFor(i: int, shopItem: ShopSchemaType): gameState = cache.gameState mainView = cache.mainView userMoney = user_get_current(gameState).money - mainView["setContent"](f" OWCA: {userMoney}") + mainView["setContent"](txtkv("OWCA Coin: ", txtcrcy(userMoney)) + "") if cache.inputPosition == cache.lastInputPosition: return "waitInput", cache visual = gamestate_get_visual(gameState) @@ -205,10 +201,10 @@ def getRowFor(i: int, shopItem: ShopSchemaType): itemName, itemDescription, itemSprite = __resolve_shop_item(gameState, shopItem) itemPreviewAnimation = visual_show_splash(visual, itemSprite, parent=itemPreviewFrame) itemPreviewAnimation["play"](60, True) - description = f"ID: {inputPosition}\n" - description += f"Nama: {itemName}\n" - description += f"Harga: {shopItem.cost} " - description += f"Stok: {shopItem.stock}\n" + description = txtkv("ID: ", inputPosition) + "\n" + description += txtkv("Nama: ", itemName) + "\n" + description += txtkv("Harga: ", txtcrcy(shopItem.cost)) + " " + description += txtkv("Stok: ", txtqty(shopItem.stock)) + "\n" description += itemDescription itemDescriptionView["setContent"](description) cache = namedtuple_with(cache, @@ -291,10 +287,10 @@ def onKey(event: KeyEvent): inputPosition=inputPosition ) if action == "enter": - return "buyDialog", cache + return "buyDialog", cache, False return "updateItemView", cache if state == "buyDialog": - cache, *_ = args + cache, cancelled, *_ = args gameState = cache.gameState mainView = cache.mainView tableView = cache.tableView @@ -307,7 +303,7 @@ def onKey(event: KeyEvent): shopItem = cache.shopItems[cache.inputPosition] itemName = __resolve_shop_item(gameState, shopItem)[0] meta(action="clear") - print(f"==== Beli '{itemName}' @ {shopItem.cost} ====") + print(f"==== Beli {itemName} @ {txtcrcy(shopItem.cost)} ====") if shopItem.stock <= 0: print("Waduh! Kayaknya stoknya lagi kosong. Mampir kapan-kapan lagi ya.") input("Lanjut", selectable=True) @@ -322,6 +318,8 @@ def onKey(event: KeyEvent): selection = meta(action="select") return "buyDialogConfirmChoose", cache, None, "Batal", selection # THIS IS A HACK TO CONFORM THE RULES. You can only have one for each monster types. Don't bother to show quantity dialog. + if cancelled: + return "buyDialogConfirmChoose", cache, None, "Batal" return "buyDialogConfirm", cache, "1" print("Masukkan jumlah yang ingin dibeli.") def onChange(v): @@ -334,12 +332,12 @@ def onChange(v): print("Jumlah yang dimasukkan tidak valid.") return subtotal = quantity * shopItem.cost - print(f"Total harga: {quantity} * {shopItem.cost} = {subtotal}") + print(f"Total harga: {txtqty(quantity)} * {txtcrcy(shopItem.cost)} = {txtcrcy(subtotal)}") if userMoney < subtotal: - print(f"Uangmu tidak cukup.", end=" ") + print(f"OWCA Coinmu tidak cukup.", end=" ") if quantity > shopItem.stock: print(f"Stok di shop tidak cukup.", end=" ") - quantity = input("Jumlah: ", f"Uangmu: {userMoney}", onChange=onChange) + quantity = input("Jumlah: ", txtkv("OWCA Coun: ", txtcrcy(userMoney)) + "", onChange=onChange) return "buyDialogConfirm", cache, quantity if state == "buyDialogConfirm": cache, quantity, *_ = args @@ -347,7 +345,7 @@ def onChange(v): return "buyDialogConfirmChoose", cache, None, "Batal" quantity = parse_int(quantity) if quantity is None or quantity <= 0: - return "buyDialog", cache + return "buyDialog", cache, False gameState = cache.gameState shopItem = cache.shopItems[cache.inputPosition] itemName = __resolve_shop_item(gameState, shopItem)[0] @@ -357,18 +355,18 @@ def onChange(v): subtotal = quantity * shopItem.cost if userMoney < subtotal or quantity > shopItem.stock: if userMoney < subtotal: - print(f"Uangmu tidak cukup.", end=" ") + print(f"OWCA Coinmu tidak cukup.", end=" ") if quantity > shopItem.stock: print(f"Stok di shop tidak cukup.", end=" ") input("Lanjut", selectable=True) selection = meta(action="select") return "buyDialogConfirmChoose", cache, None, "Batal", selection meta("keySpeed", 120) - print(f"OWCA mu saat ini terdapat {userMoney}. ", end="") - print(f"Kamu akan membeli '{itemName}' dengan harga satuan {shopItem.cost} sebanyak {quantity} dengan subtotal {subtotal}. ", end="") - print(f"Di akhir transaksi OWCA mu akan tersisa {userMoney - subtotal}.") - input("Konfirmasi", selectable=True) - input("Batal", selectable=True) + print(f"OWCA Coinmu saat ini terdapat {txtcrcy(userMoney)}. ", end="") + print(f"Kamu akan membeli {itemName} dengan harga satuan {txtcrcy(shopItem.cost)} sebanyak {txtqty(quantity)} dengan subtotal {txtcrcy(subtotal)}. ", end="") + print(f"Di akhir transaksi OWCA Coinmu akan tersisa {txtcrcy(userMoney - subtotal)}.") + input(txtprcd("Konfirmasi"), selectable=True) + input(txtcncl("Batal"), selectable=True) selection = meta(action="select") return "buyDialogConfirmChoose", cache, quantity, selection if state == "buyDialogConfirmChoose": @@ -376,7 +374,7 @@ def onChange(v): print, input, meta = cache.buyDialogConsole meta("keySpeed", -1) if selection is None: - return "buyDialog", cache + return "buyDialog", cache, True gameState = cache.gameState mainView = cache.mainView tableView = cache.tableView @@ -446,9 +444,16 @@ def onChange(v): def __resolve_shop_item(gameState: GameState, shopItem: ShopSchemaType): if shopItem.referenceType == "item": potion = potion_get(gameState, shopItem.referenceId) - description = f"Deskripsi: {potion.description}" - return (potion.name, description, potion.sprite) + name = ptncl(potion.name) + description = txtkv("Deskripsi: ", potion.description) + "" + return (name, description, potion.sprite) if shopItem.referenceType == "monster": monster = monster_get(gameState, shopItem.referenceId) - description = f"Family: {monster.family} Level: {monster.level}\nATK: {monster.attackPower} DEF: {monster.defensePower}\nDeskripsi: {monster.description}" - return (monster.name, description, monster.spriteFront) + name = smnstr(monster.name) + description = txtkv("Family: ", monster.family) + " " + description += txtkv("Level: ", monster.level) + "\n" + description += txtkv("HP: ", monster.healthPoints) + " " + description += txtkv("ATK: ", monster.attackPower) + " " + description += txtkv("DEF: ", monster.defensePower) + "\n" + description += txtkv("Deskripsi: ", monster.description) + "" + return (name, description, monster.spriteFront) diff --git a/src/game/menu/ui_shop_management.py b/src/game/menu/ui_shop_management.py index 45c1325..1f98712 100644 --- a/src/game/menu/ui_shop_management.py +++ b/src/game/menu/ui_shop_management.py @@ -164,15 +164,11 @@ def _menu_show_shop_management(state, args): itemRows = array_slice(cache.shopItems, startIndex, endIndex) def getRowFor(i: int, shopItem: ShopSchemaType): resolvedItem = __resolve_shop_management_item(gameState, shopItem) - return [f"{startIndex + i + 1}", shopItem.referenceType, resolvedItem[0], f"{shopItem.stock}", f"{shopItem.cost}"] + return [f"{startIndex + i + 1}", shopItem.referenceType, resolvedItem[0], txtqty(shopItem.stock), txtcrcy(shopItem.cost)] itemRows = array_map(itemRows, lambda it, i, *_: getRowFor(i, it)) if len(itemRows) < tableMaxShown: - array_push(itemRows, ["+++", "++++++", "++++++", "++++++", "++++++"]) - tableView["updateRows"]([ - ["▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲", "▲▲▲▲▲▲"], - *itemRows, - ["▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼", "▼▼▼▼▼▼"], - ]) + array_push(itemRows, scrlad(5)) + tableView["updateRows"]([scrlup(5), *itemRows, scrldw(5)]) cache = namedtuple_with(cache, lastTableOffset=cache.tableOffset ) @@ -201,10 +197,10 @@ def getRowFor(i: int, shopItem: ShopSchemaType): itemName, itemDescription, itemSprite = __resolve_shop_management_item(gameState, shopItem) itemPreviewAnimation = visual_show_splash(visual, itemSprite, parent=itemPreviewFrame) itemPreviewAnimation["play"](60, True) - description = f"ID: {inputPosition}\n" - description += f"Nama: {itemName}\n" - description += f"Harga: {shopItem.cost} " - description += f"Stok: {shopItem.stock}\n" + description = txtkv("ID: ", inputPosition) + "\n" + description += txtkv("Nama: ", itemName) + "\n" + description += txtkv("Harga: ", txtcrcy(shopItem.cost)) + " " + description += txtkv("Stok: ", txtqty(shopItem.stock)) + "\n" description += itemDescription itemDescriptionView["setContent"](description) cache = namedtuple_with(cache, @@ -343,7 +339,13 @@ def onChange(id = None, stock = None, cost = None): array_push(descriptions, "ID monster tidak valid.") else: monster = monsters[parsedId] - array_push(descriptions, f"Monster: {monster.name} Level: {monster.level} HP: {monster.healthPoints} ATK: {monster.attackPower} DEF: {monster.defensePower}") + description = txtkv("Monster: ", monster.name) + " " + description = txtkv("F: ", monster.family) + " " + description += txtkv("L: ", monster.level) + " " + description += txtkv("HP: ", monster.healthPoints) + " " + description += txtkv("ATK: ", monster.attackPower) + " " + description += txtkv("DEF: ", monster.defensePower) + " " + array_push(descriptions, description) existingShopItem = array_find(cache.shopItems, lambda i, *_: i.referenceType == "monster" and i.referenceId == parsedId) if existingShopItem is not None: array_push(descriptions, "Sudah terdapat item dengan id yang sama.") @@ -354,7 +356,7 @@ def onChange(id = None, stock = None, cost = None): if parsedStock is None or parsedStock < 0: array_push(descriptions, "Stok tidak valid.") else: - array_push(descriptions, f"Stok: {parsedStock}") + array_push(descriptions, txtkv("Stok: ", parsedStock) + "") if lastCost is None or lastCost == "": array_push(emptyFields, "harga") else: @@ -362,7 +364,7 @@ def onChange(id = None, stock = None, cost = None): if parsedCost is None or parsedCost < 0: array_push(descriptions, "Harga tidak valid.") else: - array_push(descriptions, f"Harga: {parsedCost}") + array_push(descriptions, txtkv("Harga: ", parsedCost) + "") emptyFieldsStr = None if len(emptyFields) == 3: emptyFieldsStr = f"{emptyFields[0]}, {emptyFields[1]}, dan {emptyFields[2]}." @@ -404,7 +406,7 @@ def onChange(id = None, stock = None, cost = None): array_push(descriptions, "ID item tidak valid.") else: potion = potions[parsedId] - array_push(descriptions, f"Item: {potion.name}") + array_push(descriptions, txtkv("Item: ", potion.name) + "") existingShopItem = array_find(cache.shopItems, lambda i, *_: i.referenceType == "item" and i.referenceId == parsedId) if existingShopItem is not None: array_push(descriptions, "Sudah terdapat item dengan id yang sama.") @@ -415,7 +417,7 @@ def onChange(id = None, stock = None, cost = None): if parsedStock is None or parsedStock < 0: array_push(descriptions, "Stok tidak valid.") else: - array_push(descriptions, f"Stok: {parsedStock}") + array_push(descriptions, txtkv("Stok: ", parsedStock) + "") if lastCost is None or lastCost == "": array_push(emptyFields, "harga") else: @@ -423,7 +425,7 @@ def onChange(id = None, stock = None, cost = None): if parsedCost is None or parsedCost < 0: array_push(descriptions, "Harga tidak valid.") else: - array_push(descriptions, f"Harga: {parsedCost}") + array_push(descriptions, txtkv("Harga: ", parsedCost) + "") emptyFieldsStr = None if len(emptyFields) == 3: emptyFieldsStr = f"{emptyFields[0]}, {emptyFields[1]}, dan {emptyFields[2]}." @@ -498,10 +500,10 @@ def onChange(id = None, stock = None, cost = None): shopItem = cache.shopItems[cache.inputPosition] itemName = __resolve_shop_management_item(gameState, shopItem)[0] meta(action="clear") - print(f"==== Edit '{itemName}' ====") + print(f"==== Edit {itemName} ====") input("Ganti Stok", selectable=True) input("Ganti Harga", selectable=True) - input("Hapus", selectable=True) + input(txtdngr("Hapus"), selectable=True) selection = meta(action="select") return "actionDialogChoose", cache, selection if state == "actionDialogChoose": @@ -522,7 +524,7 @@ def onChange(v): if quantity is None or quantity < 0: print("Jumlah yang dimasukkan tidak valid.") return - print(f"Stok akan diganti menjadi {quantity}") + print(f"Stok akan diganti menjadi {txtqty(quantity)}") quantity = input("Jumlah: ", onChange=onChange) return "actionDialogChangeStock", cache, quantity if selection == "Ganti Harga": @@ -533,20 +535,20 @@ def onChange(v): if v == "": print("Masukkan harga yang ingin diganti.") return - quantity = parse_int(v) - if quantity is None or quantity < 0: + cost = parse_int(v) + if cost is None or cost < 0: print("Harga yang dimasukkan tidak valid.") return - print(f"Harga akan diganti menjadi {quantity}") - quantity = input("Harga: ", onChange=onChange) - return "actionDialogChangeCost", cache, quantity + print(f"Harga akan diganti menjadi {txtcrcy(cost)}") + cost = input("Harga: ", onChange=onChange) + return "actionDialogChangeCost", cache, cost if selection == "Hapus": meta(action="clear") shopItem = cache.shopItems[cache.inputPosition] itemName = __resolve_shop_management_item(gameState, shopItem)[0] print(f"Yakin mau ngehapus item {itemName}?") - input("Hapus", selectable=True) - input("Batal", selectable=True) + input(txtdngr("Hapus"), selectable=True) + input(txtcncl("Batal"), selectable=True) selection = meta(action="select") return "actionDialogRemove", cache, selection if state == "actionDialogChangeStock": @@ -628,9 +630,16 @@ def onChange(v): def __resolve_shop_management_item(gameState: GameState, shopItem: ShopSchemaType): if shopItem.referenceType == "item": potion = potion_get(gameState, shopItem.referenceId) - description = f"Deskripsi: {potion.description}" - return (potion.name, description, potion.sprite) + name = ptncl(potion.name) + description = txtkv("Deskripsi: ", potion.description) + "" + return (name, description, potion.sprite) if shopItem.referenceType == "monster": monster = monster_get(gameState, shopItem.referenceId) - description = f"Family: {monster.family} Level: {monster.level}\nATK: {monster.attackPower} DEF: {monster.defensePower}\nDeskripsi: {monster.description}" - return (monster.name, description, monster.spriteFront) + name = smnstr(monster.name) + description = txtkv("Family: ", monster.family) + " " + description += txtkv("Level: ", monster.level) + "\n" + description += txtkv("HP: ", monster.healthPoints) + " " + description += txtkv("ATK: ", monster.attackPower) + " " + description += txtkv("DEF: ", monster.defensePower) + "\n" + description += txtkv("Deskripsi: ", monster.description) + "" + return (name, description, monster.spriteFront) diff --git a/src/game/menu/ui_user.py b/src/game/menu/ui_user.py index 3b861b9..b9b36e5 100644 --- a/src/game/menu/ui_user.py +++ b/src/game/menu/ui_user.py @@ -14,8 +14,8 @@ def _menu_show_login(state, args): meta(action="clear") print("=========== LOGIN ===========") print("Silahkan masukkan username dan paswordmu yang telah terdaftar.") - username = input(f"{fbg()}Username: {fg('e6dee6')}{bg('734118')}", f"{fbg()}Username hanya boleh berisi alfabet, angka, underscore, dan strip!") - password = input(f"{fbg()}Password: {fg('e6dee6')}{bg('734118')}", f"{fbg()}Tekan {fg('e63131')}CTRL+A{fg()} untuk melihat password", renderer=lambda v, *_: array_map(v, lambda r, *_: Rune("•", r.attribute))) + username = input(f"Username: ", f"Username hanya boleh berisi alfabet, angka, underscore, dan strip!") + password = input(f"Password: ", f"Tekan {txthint('CTRL+A')} untuk melihat password", renderer=lambda v, *_: array_map(v, lambda r, *_: Rune("•", r.attribute))) return 2, gameState, console, username, password if state == 2: gameState, console, username, password = args @@ -46,8 +46,8 @@ def _menu_show_register(state, args): meta(action="clear") print("=========== REGISTER ===========") print("Silahkan masukkan username dan password untuk register akun.") - username = input(f"{fbg()}Username: {fg('e6dee6')}{bg('734118')}", f"{fbg()}Username hanya boleh berisi alfabet, angka, underscore, dan strip!") - password = input(f"{fbg()}Password: {fg('e6dee6')}{bg('734118')}", f"{fbg()}Tekan {fg('e63131')}CTRL+A{fg()} untuk melihat password", renderer=lambda v, *_: array_map(v, lambda r, *_: Rune("•", r.attribute))) + username = input(f"Username: ", f"Username hanya boleh berisi alfabet, angka, underscore, dan strip!") + password = input(f"Password: ", f"Tekan {txthint('CTRL+A')} untuk melihat password", renderer=lambda v, *_: array_map(v, lambda r, *_: Rune("•", r.attribute))) return 2, gameState, console, username, password if state == 2: gameState, console, username, password = args diff --git a/src/game/state/__init__.py b/src/game/state/__init__.py index 7f1ab84..9748e1e 100644 --- a/src/game/state/__init__.py +++ b/src/game/state/__init__.py @@ -59,7 +59,7 @@ gamestate_deltatime = _gamestate_deltatime gamestate_rand = _gamestate_rand -from .visual import _Visual, _visual_new, _visual_get_driver, _visual_get_toplevel, _visual_get_view, _visual_get_directory, _visual_set_view, _visual_set_directory, _visual_get_root_view, _visual_add_connect_listener, _visual_remove_connect_listener, _visual_add_disconnect_listener, _visual_remove_disconnect_listener, _visual_is_connected, _visual_add_key_listener, _visual_remove_key_listener, _visual_tick, _visual_draw, _visual_load_splash, _visual_show_frame_sequence, _visual_show_splash, _visual_show_simple_dialog, _visual_show_table, _ConsoleMock, _visual_with_mock, _fg, _bg, _fbg +from .visual import _Visual, _visual_new, _visual_get_driver, _visual_get_toplevel, _visual_get_view, _visual_get_directory, _visual_set_view, _visual_set_directory, _visual_get_root_view, _visual_add_connect_listener, _visual_remove_connect_listener, _visual_add_disconnect_listener, _visual_remove_disconnect_listener, _visual_is_connected, _visual_add_key_listener, _visual_remove_key_listener, _visual_tick, _visual_draw, _visual_load_splash, _visual_show_frame_sequence, _visual_show_splash, _visual_show_simple_dialog, _visual_show_table, _ConsoleMock, _visual_with_mock, _fg, _bg, _fbg, _smnstr, _omnstr, _ptncl, _stbar, _ratmod, _txtk, _txtv, _txtkv, _txtqty, _txtcrcy, _txtplnm, _txtdngr, _txtprcd, _txtcncl, _txthint, _scrlup, _scrldw, _scrlad Visual = _Visual visual_new = _visual_new @@ -89,3 +89,21 @@ fg = _fg bg = _bg fbg = _fbg +smnstr = _smnstr +omnstr = _omnstr +ptncl = _ptncl +stbar = _stbar +ratmod = _ratmod +txtk = _txtk +txtv = _txtv +txtkv = _txtkv +txtqty = _txtqty +txtcrcy = _txtcrcy +txtplnm = _txtplnm +txtdngr = _txtdngr +txtprcd = _txtprcd +txtcncl = _txtcncl +txthint = _txthint +scrlup = _scrlup +scrldw = _scrldw +scrlad = _scrlad diff --git a/src/game/state/visual.py b/src/game/state/visual.py index 460e0c6..8105f9c 100644 --- a/src/game/state/visual.py +++ b/src/game/state/visual.py @@ -1439,6 +1439,67 @@ def _fbg(r: Union[int, str] = None, g: int = None, b: int = None) -> str: r = int(string_slice(r, 0, 2), 16) return f'§x{string_replace_all(base64_encode(chr(r) + chr(g) + chr(b)), "=", "")}|' +def _smnstr(name: str) -> str: # Coloring for self monster + return f"{_fg('39ACF6')}{name}{_fg()}" +def _omnstr(name: str) -> str: # Coloring for opponent monster + return f"{_fg('E3111A')}{name}{_fg()}" +def _ptncl(potion: str) -> str: + return f"{_fg('DEB462')}{potion}{_fg()}" +def _stbar(value: float, max: float, desc: str = None, bounds: Union[View, int] = 10) -> str: # Coloring for stats bar + if desc is None: + desc = f"{value:.2f}/{max:.2f}" + if type(bounds) is dict: + view = bounds + bounds = view["frame"].w # This is illegal access + bounds -= thickness_get_horizontal(adornment_get_thickness(view_get_margin(view))) + bounds -= thickness_get_horizontal(adornment_get_thickness(view_get_border(view))) + bounds -= thickness_get_horizontal(adornment_get_thickness(view_get_padding(view))) + ratio = value / max + ratioWidth = int(bounds * ratio) + result = _bg("52A441") if ratio > 0.5 else _bg("FCD216") + _fg(0, 0, 0) if ratio > 0.2 else _bg("BD0820") + result += array_join([desc[i] if i < len(desc) else " " for i in range(0, min(ratioWidth, bounds))], "") + result += _bg("C5B4B4") + _fg(0, 0, 0) + result += array_join([desc[i] if i < len(desc) else " " for i in range(ratioWidth, bounds)], "") + result += _fbg() + return result +def _ratmod(ratio: float) -> str: + return f"{_fg('52A441') + '+' if ratio >= 0 else _fg('BD0820')}{ratio * 100:.2f}%{_fg()}" +def _txtk(text: str) -> str: + return f"{_fg('C5B4B4')}{text}{_fg()}" +def _txtv(text: str) -> str: + return f"{_fg()}{text}" +def _txtkv(key: str, value: str) -> str: + return f"{_fg('C5B4B4')}{key}{_fg()}{value}" +def _txtqty(qty: int) -> str: + return f"{_fg('CD94C5')}{qty}{_fg()}" +def _txtcrcy(currency: int) -> str: + return f"{_fg('A3E2BB')}{currency}{_fg()}" +def _txtplnm(name: int) -> str: + return f"{_fg('E69C00')}{name}{_fg()}" +def _txtdngr(danger: str) -> str: + return f"{_fg('E63131')}{danger}{_fg()}" +def _txtprcd(proceed: str) -> str: + return f"{_fg('52A441')}{proceed}{_fg()}" +def _txtcncl(cancel: str) -> str: + return f"{_fg('FCD216')}{cancel}{_fg()}" +def _txthint(hint: str) -> str: + return f"{_fg('E63131')}{hint}{_fg()}" +def _scrlup(arr: int = None) -> Union[str, list[str]]: + result = _fg("C5B4B4") + string_repeat("▲", 10) + _fg() + if arr is None: + return result + return [result for _ in range(arr)] +def _scrldw(arr: int = None) -> Union[str, list[str]]: + result = _fg("C5B4B4") + string_repeat("▼", 10) + _fg() + if arr is None: + return result + return [result for _ in range(arr)] +def _scrlad(arr: int = None) -> Union[str, list[str]]: + result = _fg("52A441") + string_repeat("+", 10) + _fg() + if arr is None: + return result + return [result for _ in range(arr)] + def __now() -> float: return time.monotonic() * 1000 def __load_splash_suspendable(state, args): diff --git a/src/game/user/user.py b/src/game/user/user.py index 0478256..8d32a3c 100644 --- a/src/game/user/user.py +++ b/src/game/user/user.py @@ -87,7 +87,7 @@ def _user_register(state, args) -> None: # mengecek apakah username sudah ada di database for i in range (len(user_entries)): if new_username == user_entries[i].username: - print(f"Username {new_username} sudah terpakai, silahkan gunakan username lain!") + print(f"Username {txtplnm(new_username)} sudah terpakai, silahkan gunakan username lain!") return SuspendableReturn, None # input password @@ -99,8 +99,12 @@ def _user_register(state, args) -> None: availableMonsters = array_map(rand_uniq_int_array(0, len(availableMonsters), min(5, len(availableMonsters))), lambda i, *_: availableMonsters[i]) print("Silakan pilih salah satu monster sebagai monster awalmu.") for availableMonster in availableMonsters: - description = f"L: {availableMonster.level} HP: {availableMonster.healthPoints} ATK: {availableMonster.attackPower} DEF: {availableMonster.defensePower}" - input(f"{availableMonster.name}", description, id=availableMonster.id, selectable=True) + description = txtkv("F: ", availableMonster.family) + " " + description += txtkv("L: ", availableMonster.level) + " " + description += txtkv("HP: ", f"{availableMonster.healthPoints:.1f}") + " " # TODO: These properties do not include potion effects + description += txtkv("ATK: ", f"{availableMonster.attackPower:.1f}") + " " + description += txtkv("DEF: ", f"{availableMonster.defensePower:.1f}") + "" + input(smnstr(availableMonster.name), description, id=availableMonster.id, selectable=True) meta(action="pushFlags") meta("selectableAllowEscape", False) selection = meta(action="select") @@ -117,7 +121,7 @@ def _user_register(state, args) -> None: username=new_username, password=new_password, role="agent", - money=0 + money=500 )) monsterId = selection @@ -137,7 +141,7 @@ def _user_register(state, args) -> None: gamestate_set_user_id(gameState, user.id) meta(action="clear") - print(f"Selamat datang Agent {new_username}. Mari kita mengalahkan Dr. Asep Spakbor dengan {inventoryMonster.name}!") + print(f"Selamat datang Agent {txtplnm(new_username)}. Mari kita mengalahkan Dr. Asep Spakbor dengan {smnstr(inventoryMonster.name)}!") input("Lanjut", selectable=True) selection = meta(action="select") @@ -182,7 +186,7 @@ def _user_login(gameState: GameState, username: str, password: str) -> None: return else: # benar print(f''' -Selamat datang, Agent {username}! +Selamat datang, Agent {txtplnm(username)}! ''') newly_logged_in_id = user_entries[user_index].id gamestate_set_user_id(gameState, newly_logged_in_id) diff --git a/src/utils/console/driver_std.py b/src/utils/console/driver_std.py index acdd677..0415235 100644 --- a/src/utils/console/driver_std.py +++ b/src/utils/console/driver_std.py @@ -117,7 +117,8 @@ dirtyLines=list[int], keyListeners=list[Callable[[_KeyEvent], Any]], - lastCursor=tuple[int, int], + lastCursorX=int, + lastCursorY=int, lastAttribute=_RuneAttribute, ) @@ -129,7 +130,8 @@ def _driverstd_new() -> _DriverStd: _driver_draw=_driverstd_draw ), keyListeners=[], - lastCursor=None, + lastCursorX=None, + lastCursorY=None, lastAttribute=None, ) _driver_set_size(result, __get_terminal_size()) @@ -185,41 +187,64 @@ def _driverstd_draw(driverstd: _DriverStd) -> None: else: lastDirtyLines = [inf for _ in range(1000)] driverstd["__lastDirtyLines"] = lastDirtyLines + hasDirty = False for y in range(size.h): dirtyLine = dirtyLines[y] if isinf(dirtyLine): if drawDirtyLines and dirtyLine != lastDirtyLines[y]: - overlapped = len(str(dirtyLine)) + hasDirty = True + overlapped = len(str(lastDirtyLines[y])) lastDirtyLines[y] = dirtyLine _driverstd_move_cursor(driverstd, y) for x in range(overlapped): rune = contents[y * size.w + x] _driverstd_set_current_attribute(driverstd, rune.attribute) - sys.stdout.write(rune.character) + _driverstd_print_string(driverstd, rune.character) continue dirtyLines[y] = inf + hasDirty = True _driverstd_move_cursor(driverstd, y, dirtyLine) for x in range(dirtyLine, size.w): rune = contents[y * size.w + x] _driverstd_set_current_attribute(driverstd, rune.attribute) - sys.stdout.write(rune.character) - if drawDirtyLines and dirtyLine != lastDirtyLines[y]: + _driverstd_print_string(driverstd, rune.character) + if drawDirtyLines and (dirtyLine != lastDirtyLines[y] or dirtyLine < len(str(dirtyLine))): + overlapped = len(str(lastDirtyLines[y])) if not isinf(lastDirtyLines[y]) else 0 + currentOverlapped = len(str(dirtyLine)) lastDirtyLines[y] = dirtyLine _driverstd_move_cursor(driverstd, y) _driverstd_set_current_attribute(driverstd, _RuneAttribute_debug) - sys.stdout.write(f"{dirtyLine}") - _driverstd_move_cursor(driverstd, size.h - 1) - _driverstd_set_current_attribute(driverstd, _RuneAttribute_clear) - sys.stdout.flush() + _driverstd_print_string(driverstd, f"{dirtyLine}") + for x in range(currentOverlapped, overlapped): + rune = contents[y * size.w + x] + _driverstd_set_current_attribute(driverstd, rune.attribute) + _driverstd_print_string(driverstd, rune.character) + if hasDirty: + _driverstd_move_cursor(driverstd, size.h - 1, size.w - 1) + _driverstd_set_current_attribute(driverstd, _RuneAttribute_clear) + _driverstd_flush(driverstd) -def _driverstd_move_cursor(driverstd: _DriverStd, column: int, row: int = 0) -> None: - column = max(0, min(driverstd["size"].h - 1, column)) - row = max(0, min(driverstd["size"].w - 1, row)) - if driverstd["lastCursor"] == (column, row): +def _driverstd_move_cursor(driverstd: _DriverStd, row: int, column: int = 0) -> None: + size = driverstd["size"] + row = max(0, min(size.h - 1, row)) + column = max(0, min(size.w - 1, column)) + if driverstd["lastCursorY"] == row and driverstd["lastCursorX"] == column: return - command = f"\x1b[{column + 1};{row + 1}H" + command = f"\x1b[{row + 1};{column + 1}H" sys.stdout.write(command) - driverstd["lastCursor"] = (column, row) + driverstd["lastCursorY"] = row + driverstd["lastCursorX"] = column + +def _driverstd_print_string(driverstd: _DriverStd, string: str) -> None: + size = driverstd["size"] + sys.stdout.write(string) + advanceY = len(string) // size.w + advanceX = len(string) % size.w + driverstd["lastCursorY"] += advanceY + driverstd["lastCursorX"] += advanceX + +def _driverstd_flush(driverstd: _DriverStd) -> None: + sys.stdout.flush() def _driverstd_set_current_attribute(driverstd: _DriverStd, attribute: _RuneAttribute) -> str: lastAttribute = driverstd["lastAttribute"] @@ -255,7 +280,7 @@ def driverstd_reset_console(): driverstd = _driverstd_new() _driverstd_set_current_attribute(driverstd, _RuneAttribute_clear) _driverstd_move_cursor(driverstd, driverstd["size"].h - 1) - sys.stdout.flush() + _driverstd_flush(driverstd) def __get_terminal_size() -> Size: value = os.get_terminal_size() diff --git a/src/utils/coroutines/coroutines.py b/src/utils/coroutines/coroutines.py index 578a601..b4485e0 100644 --- a/src/utils/coroutines/coroutines.py +++ b/src/utils/coroutines/coroutines.py @@ -115,7 +115,7 @@ def __looper_wait_next_timers(looper: _Looper) -> None: now = __now() timers = looper["timers"] sleepTime = array_reduce(timers, lambda c, t, *_: min(c, t["anchor"] + t["timeout"] - now), 150) - if sleepTime <= 10: + if sleepTime <= 5: return time.sleep(sleepTime / 1000)