poke_engine/genx/
base_stats.rs

1use crate::engine::abilities::Abilities;
2use crate::engine::items::Items;
3use crate::pokemon::PokemonName;
4use crate::state::PokemonType;
5
6pub struct MegaEvolveData {
7    pub id: PokemonName,
8    pub types: (PokemonType, PokemonType),
9    pub ability: Abilities,
10    pub base_stats: (i16, i16, i16, i16, i16, i16),
11}
12
13impl PokemonName {
14    /*
15    Base Stats are only required to re-calculate stats when a pokemon changes forme
16    so not every pokemon will be here
17    */
18    pub fn base_stats(&self) -> (i16, i16, i16, i16, i16, i16) {
19        match self {
20            PokemonName::MINIOR => (60, 100, 60, 100, 60, 120),
21            PokemonName::MINIORMETEOR => (60, 60, 100, 60, 100, 60),
22            PokemonName::WISHIWASHI => (45, 20, 20, 25, 25, 40),
23            PokemonName::WISHIWASHISCHOOL => (45, 140, 130, 140, 135, 30),
24            PokemonName::PALAFIN => (100, 70, 72, 53, 62, 100),
25            PokemonName::PALAFINHERO => (100, 160, 97, 106, 87, 100),
26            PokemonName::EISCUE => (75, 80, 110, 65, 90, 50),
27            PokemonName::EISCUENOICE => (75, 80, 70, 65, 50, 130),
28
29            // megas
30            PokemonName::VENUSAURMEGA => (80, 100, 123, 122, 120, 80),
31            PokemonName::CHARIZARDMEGAX => (78, 130, 111, 130, 85, 100),
32            PokemonName::CHARIZARDMEGAY => (78, 104, 78, 159, 115, 100),
33            PokemonName::BLASTOISEMEGA => (79, 103, 120, 135, 115, 78),
34            PokemonName::BEEDRILLMEGA => (65, 150, 40, 15, 80, 145),
35            PokemonName::PIDGEOTMEGA => (83, 80, 80, 135, 80, 121),
36            PokemonName::ALAKAZAMMEGA => (55, 50, 65, 175, 105, 150),
37            PokemonName::SLOWBROMEGA => (95, 75, 180, 130, 80, 30),
38            PokemonName::GENGARMEGA => (60, 65, 80, 170, 95, 130),
39            PokemonName::KANGASKHANMEGA => (105, 125, 100, 60, 100, 100),
40            PokemonName::PINSIRMEGA => (65, 155, 120, 65, 90, 105),
41            PokemonName::GYARADOSMEGA => (95, 155, 109, 70, 130, 81),
42            PokemonName::AERODACTYLMEGA => (80, 135, 85, 70, 95, 150),
43            PokemonName::MEWTWOMEGAX => (106, 190, 100, 154, 100, 130),
44            PokemonName::MEWTWOMEGAY => (106, 150, 70, 194, 120, 140),
45            PokemonName::AMPHAROSMEGA => (90, 95, 105, 165, 110, 45),
46            PokemonName::STEELIXMEGA => (75, 125, 230, 55, 95, 30),
47            PokemonName::SCIZORMEGA => (70, 150, 140, 65, 100, 75),
48            PokemonName::HERACROSSMEGA => (80, 185, 115, 40, 105, 75),
49            PokemonName::HOUNDOOMMEGA => (75, 90, 90, 140, 90, 115),
50            PokemonName::TYRANITARMEGA => (100, 164, 150, 95, 120, 71),
51            PokemonName::SCEPTILEMEGA => (70, 110, 75, 145, 85, 145),
52            PokemonName::BLAZIKENMEGA => (80, 160, 80, 130, 80, 100),
53            PokemonName::SWAMPERTMEGA => (100, 150, 110, 95, 110, 70),
54            PokemonName::GARDEVOIRMEGA => (68, 85, 65, 165, 135, 100),
55            PokemonName::SABLEYEMEGA => (50, 85, 125, 85, 115, 20),
56            PokemonName::MAWILEMEGA => (50, 105, 125, 55, 95, 50),
57            PokemonName::AGGRONMEGA => (70, 140, 230, 60, 80, 50),
58            PokemonName::MEDICHAMMEGA => (60, 100, 85, 80, 85, 100),
59            PokemonName::MANECTRICMEGA => (70, 75, 80, 135, 80, 135),
60            PokemonName::SHARPEDOMEGA => (70, 140, 70, 110, 65, 105),
61            PokemonName::CAMERUPTMEGA => (70, 120, 100, 145, 105, 20),
62            PokemonName::ALTARIAMEGA => (75, 110, 110, 110, 105, 80),
63            PokemonName::BANETTEMEGA => (64, 165, 75, 93, 83, 75),
64            PokemonName::ABSOLMEGA => (65, 150, 60, 115, 60, 115),
65            PokemonName::GLALIEMEGA => (80, 120, 80, 120, 80, 100),
66            PokemonName::SALAMENCEMEGA => (95, 145, 130, 120, 90, 120),
67            PokemonName::METAGROSSMEGA => (80, 145, 150, 105, 110, 110),
68            PokemonName::LATIASMEGA => (80, 100, 120, 140, 150, 110),
69            PokemonName::LATIOSMEGA => (80, 130, 100, 160, 120, 110),
70            PokemonName::RAYQUAZAMEGA => (105, 180, 100, 180, 100, 115),
71            PokemonName::LOPUNNYMEGA => (65, 136, 94, 54, 96, 135),
72            PokemonName::GARCHOMPMEGA => (108, 170, 115, 120, 95, 92),
73            PokemonName::LUCARIOMEGA => (70, 145, 88, 140, 70, 112),
74            PokemonName::ABOMASNOWMEGA => (90, 132, 105, 132, 105, 30),
75            PokemonName::GALLADEMEGA => (68, 165, 95, 65, 115, 110),
76            PokemonName::AUDINOMEGA => (103, 60, 126, 80, 126, 50),
77            PokemonName::DIANCIEMEGA => (50, 160, 110, 160, 110, 110),
78            _ => panic!("Base stats not implemented for {}", self),
79        }
80    }
81
82    pub fn mega_evolve_target(&self, item: Items) -> Option<MegaEvolveData> {
83        match (self, item) {
84            (PokemonName::VENUSAUR, Items::VENUSAURITE) => Some(MegaEvolveData {
85                id: PokemonName::VENUSAURMEGA,
86                types: (PokemonType::GRASS, PokemonType::POISON),
87                ability: Abilities::THICKFAT,
88                base_stats: (80, 100, 123, 122, 120, 80),
89            }),
90            (PokemonName::CHARIZARD, Items::CHARIZARDITEX) => Some(MegaEvolveData {
91                id: PokemonName::CHARIZARDMEGAX,
92                types: (PokemonType::FIRE, PokemonType::DRAGON),
93                ability: Abilities::TOUGHCLAWS,
94                base_stats: (78, 130, 111, 130, 85, 100),
95            }),
96            (PokemonName::CHARIZARD, Items::CHARIZARDITEY) => Some(MegaEvolveData {
97                id: PokemonName::CHARIZARDMEGAY,
98                types: (PokemonType::FIRE, PokemonType::FLYING),
99                ability: Abilities::DROUGHT,
100                base_stats: (78, 104, 78, 159, 115, 100),
101            }),
102            (PokemonName::BLASTOISE, Items::BLASTOISINITE) => Some(MegaEvolveData {
103                id: PokemonName::BLASTOISEMEGA,
104                types: (PokemonType::WATER, PokemonType::TYPELESS),
105                ability: Abilities::MEGALAUNCHER,
106                base_stats: (79, 103, 120, 135, 115, 78),
107            }),
108            (PokemonName::BEEDRILL, Items::BEEDRILLITE) => Some(MegaEvolveData {
109                id: PokemonName::BEEDRILLMEGA,
110                types: (PokemonType::BUG, PokemonType::POISON),
111                ability: Abilities::ADAPTABILITY,
112                base_stats: (65, 150, 40, 15, 80, 145),
113            }),
114            (PokemonName::PIDGEOT, Items::PIDGEOTITE) => Some(MegaEvolveData {
115                id: PokemonName::PIDGEOTMEGA,
116                types: (PokemonType::NORMAL, PokemonType::FLYING),
117                ability: Abilities::NOGUARD,
118                base_stats: (83, 80, 80, 135, 80, 121),
119            }),
120            (PokemonName::ALAKAZAM, Items::ALAKAZITE) => Some(MegaEvolveData {
121                id: PokemonName::ALAKAZAMMEGA,
122                types: (PokemonType::PSYCHIC, PokemonType::TYPELESS),
123                ability: Abilities::TRACE,
124                base_stats: (55, 50, 65, 175, 105, 150),
125            }),
126            (PokemonName::SLOWBRO, Items::SLOWBRONITE) => Some(MegaEvolveData {
127                id: PokemonName::SLOWBROMEGA,
128                types: (PokemonType::WATER, PokemonType::PSYCHIC),
129                ability: Abilities::SHELLARMOR,
130                base_stats: (95, 75, 180, 130, 80, 30),
131            }),
132            (PokemonName::GENGAR, Items::GENGARITE) => Some(MegaEvolveData {
133                id: PokemonName::GENGARMEGA,
134                types: (PokemonType::GHOST, PokemonType::POISON),
135                ability: Abilities::SHADOWTAG,
136                base_stats: (60, 65, 80, 170, 95, 130),
137            }),
138            (PokemonName::KANGASKHAN, Items::KANGASKHANITE) => Some(MegaEvolveData {
139                id: PokemonName::KANGASKHANMEGA,
140                types: (PokemonType::NORMAL, PokemonType::TYPELESS),
141                ability: Abilities::PARENTALBOND,
142                base_stats: (105, 125, 100, 60, 100, 100),
143            }),
144            (PokemonName::PINSIR, Items::PINSIRITE) => Some(MegaEvolveData {
145                id: PokemonName::PINSIRMEGA,
146                types: (PokemonType::BUG, PokemonType::FLYING),
147                ability: Abilities::AERILATE,
148                base_stats: (65, 155, 120, 65, 90, 105),
149            }),
150            (PokemonName::GYARADOS, Items::GYARADOSITE) => Some(MegaEvolveData {
151                id: PokemonName::GYARADOSMEGA,
152                types: (PokemonType::WATER, PokemonType::DARK),
153                ability: Abilities::MOLDBREAKER,
154                base_stats: (95, 155, 109, 70, 130, 81),
155            }),
156            (PokemonName::AERODACTYL, Items::AERODACTYLITE) => Some(MegaEvolveData {
157                id: PokemonName::AERODACTYLMEGA,
158                types: (PokemonType::ROCK, PokemonType::FLYING),
159                ability: Abilities::TOUGHCLAWS,
160                base_stats: (80, 135, 85, 70, 95, 150),
161            }),
162            (PokemonName::MEWTWO, Items::MEWTWONITEX) => Some(MegaEvolveData {
163                id: PokemonName::MEWTWOMEGAX,
164                types: (PokemonType::PSYCHIC, PokemonType::FIGHTING),
165                ability: Abilities::STEADFAST,
166                base_stats: (106, 190, 100, 154, 100, 130),
167            }),
168            (PokemonName::MEWTWO, Items::MEWTWONITEY) => Some(MegaEvolveData {
169                id: PokemonName::MEWTWOMEGAY,
170                types: (PokemonType::PSYCHIC, PokemonType::TYPELESS),
171                ability: Abilities::INSOMNIA,
172                base_stats: (106, 150, 70, 194, 120, 140),
173            }),
174            (PokemonName::AMPHAROS, Items::AMPHAROSITE) => Some(MegaEvolveData {
175                id: PokemonName::AMPHAROSMEGA,
176                types: (PokemonType::ELECTRIC, PokemonType::DRAGON),
177                ability: Abilities::MOLDBREAKER,
178                base_stats: (90, 95, 105, 165, 110, 45),
179            }),
180            (PokemonName::STEELIX, Items::STEELIXITE) => Some(MegaEvolveData {
181                id: PokemonName::STEELIXMEGA,
182                types: (PokemonType::STEEL, PokemonType::GROUND),
183                ability: Abilities::SANDFORCE,
184                base_stats: (75, 125, 230, 55, 95, 30),
185            }),
186            (PokemonName::SCIZOR, Items::SCIZORITE) => Some(MegaEvolveData {
187                id: PokemonName::SCIZORMEGA,
188                types: (PokemonType::BUG, PokemonType::STEEL),
189                ability: Abilities::TECHNICIAN,
190                base_stats: (70, 150, 140, 65, 100, 75),
191            }),
192            (PokemonName::HERACROSS, Items::HERACRONITE) => Some(MegaEvolveData {
193                id: PokemonName::HERACROSSMEGA,
194                types: (PokemonType::BUG, PokemonType::FIGHTING),
195                ability: Abilities::SKILLLINK,
196                base_stats: (80, 185, 115, 40, 105, 75),
197            }),
198            (PokemonName::HOUNDOOM, Items::HOUNDOOMINITE) => Some(MegaEvolveData {
199                id: PokemonName::HOUNDOOMMEGA,
200                types: (PokemonType::DARK, PokemonType::FIRE),
201                ability: Abilities::SOLARPOWER,
202                base_stats: (75, 90, 90, 140, 90, 115),
203            }),
204            (PokemonName::TYRANITAR, Items::TYRANITARITE) => Some(MegaEvolveData {
205                id: PokemonName::TYRANITARMEGA,
206                types: (PokemonType::ROCK, PokemonType::DARK),
207                ability: Abilities::SANDSTREAM,
208                base_stats: (100, 164, 150, 95, 120, 71),
209            }),
210            (PokemonName::SCEPTILE, Items::SCEPTILITE) => Some(MegaEvolveData {
211                id: PokemonName::SCEPTILEMEGA,
212                types: (PokemonType::GRASS, PokemonType::DRAGON),
213                ability: Abilities::LIGHTNINGROD,
214                base_stats: (70, 110, 75, 145, 85, 145),
215            }),
216            (PokemonName::BLAZIKEN, Items::BLAZIKENITE) => Some(MegaEvolveData {
217                id: PokemonName::BLAZIKENMEGA,
218                types: (PokemonType::FIRE, PokemonType::FIGHTING),
219                ability: Abilities::SPEEDBOOST,
220                base_stats: (80, 160, 80, 130, 80, 100),
221            }),
222            (PokemonName::SWAMPERT, Items::SWAMPERTITE) => Some(MegaEvolveData {
223                id: PokemonName::SWAMPERTMEGA,
224                types: (PokemonType::WATER, PokemonType::GROUND),
225                ability: Abilities::SWIFTSWIM,
226                base_stats: (100, 150, 110, 95, 110, 70),
227            }),
228            (PokemonName::GARDEVOIR, Items::GARDEVOIRITE) => Some(MegaEvolveData {
229                id: PokemonName::GARDEVOIRMEGA,
230                types: (PokemonType::PSYCHIC, PokemonType::FAIRY),
231                ability: Abilities::PIXILATE,
232                base_stats: (68, 85, 65, 165, 135, 100),
233            }),
234            (PokemonName::SABLEYE, Items::SABLENITE) => Some(MegaEvolveData {
235                id: PokemonName::SABLEYEMEGA,
236                types: (PokemonType::DARK, PokemonType::GHOST),
237                ability: Abilities::MAGICBOUNCE,
238                base_stats: (50, 85, 125, 85, 115, 20),
239            }),
240            (PokemonName::MAWILE, Items::MAWILITE) => Some(MegaEvolveData {
241                id: PokemonName::MAWILEMEGA,
242                types: (PokemonType::STEEL, PokemonType::FAIRY),
243                ability: Abilities::HUGEPOWER,
244                base_stats: (50, 105, 125, 55, 95, 50),
245            }),
246            (PokemonName::AGGRON, Items::AGGRONITE) => Some(MegaEvolveData {
247                id: PokemonName::AGGRONMEGA,
248                types: (PokemonType::STEEL, PokemonType::TYPELESS),
249                ability: Abilities::FILTER,
250                base_stats: (70, 140, 230, 60, 80, 50),
251            }),
252            (PokemonName::MEDICHAM, Items::MEDICHAMITE) => Some(MegaEvolveData {
253                id: PokemonName::MEDICHAMMEGA,
254                types: (PokemonType::FIGHTING, PokemonType::PSYCHIC),
255                ability: Abilities::PUREPOWER,
256                base_stats: (60, 100, 85, 80, 85, 100),
257            }),
258            (PokemonName::MANECTRIC, Items::MANECTITE) => Some(MegaEvolveData {
259                id: PokemonName::MANECTRICMEGA,
260                types: (PokemonType::ELECTRIC, PokemonType::TYPELESS),
261                ability: Abilities::INTIMIDATE,
262                base_stats: (70, 75, 80, 135, 80, 135),
263            }),
264            (PokemonName::SHARPEDO, Items::SHARPEDONITE) => Some(MegaEvolveData {
265                id: PokemonName::SHARPEDOMEGA,
266                types: (PokemonType::WATER, PokemonType::DARK),
267                ability: Abilities::STRONGJAW,
268                base_stats: (70, 140, 70, 110, 65, 105),
269            }),
270            (PokemonName::CAMERUPT, Items::CAMERUPTITE) => Some(MegaEvolveData {
271                id: PokemonName::CAMERUPTMEGA,
272                types: (PokemonType::FIRE, PokemonType::GROUND),
273                ability: Abilities::SHEERFORCE,
274                base_stats: (70, 120, 100, 145, 105, 20),
275            }),
276            (PokemonName::ALTARIA, Items::ALTARIANITE) => Some(MegaEvolveData {
277                id: PokemonName::ALTARIAMEGA,
278                types: (PokemonType::DRAGON, PokemonType::FAIRY),
279                ability: Abilities::PIXILATE,
280                base_stats: (75, 110, 110, 110, 105, 80),
281            }),
282            (PokemonName::BANETTE, Items::BANETTITE) => Some(MegaEvolveData {
283                id: PokemonName::BANETTEMEGA,
284                types: (PokemonType::GHOST, PokemonType::TYPELESS),
285                ability: Abilities::PRANKSTER,
286                base_stats: (64, 165, 75, 93, 83, 75),
287            }),
288            (PokemonName::ABSOL, Items::ABSOLITE) => Some(MegaEvolveData {
289                id: PokemonName::ABSOLMEGA,
290                types: (PokemonType::DARK, PokemonType::TYPELESS),
291                ability: Abilities::MAGICBOUNCE,
292                base_stats: (65, 150, 60, 115, 60, 115),
293            }),
294            (PokemonName::GLALIE, Items::GLALITITE) => Some(MegaEvolveData {
295                id: PokemonName::GLALIEMEGA,
296                types: (PokemonType::ICE, PokemonType::TYPELESS),
297                ability: Abilities::REFRIGERATE,
298                base_stats: (80, 120, 80, 120, 80, 100),
299            }),
300            (PokemonName::SALAMENCE, Items::SALAMENCITE) => Some(MegaEvolveData {
301                id: PokemonName::SALAMENCEMEGA,
302                types: (PokemonType::DRAGON, PokemonType::FLYING),
303                ability: Abilities::AERILATE,
304                base_stats: (95, 145, 130, 120, 90, 120),
305            }),
306            (PokemonName::METAGROSS, Items::METAGROSSITE) => Some(MegaEvolveData {
307                id: PokemonName::METAGROSSMEGA,
308                types: (PokemonType::STEEL, PokemonType::PSYCHIC),
309                ability: Abilities::TOUGHCLAWS,
310                base_stats: (80, 145, 150, 105, 110, 110),
311            }),
312            (PokemonName::LATIAS, Items::LATIASITE) => Some(MegaEvolveData {
313                id: PokemonName::LATIASMEGA,
314                types: (PokemonType::DRAGON, PokemonType::PSYCHIC),
315                ability: Abilities::LEVITATE,
316                base_stats: (80, 100, 120, 140, 150, 110),
317            }),
318            (PokemonName::LATIOS, Items::LATIOSITE) => Some(MegaEvolveData {
319                id: PokemonName::LATIOSMEGA,
320                types: (PokemonType::DRAGON, PokemonType::PSYCHIC),
321                ability: Abilities::LEVITATE,
322                base_stats: (80, 130, 100, 160, 120, 110),
323            }),
324            (PokemonName::LOPUNNY, Items::LOPUNNITE) => Some(MegaEvolveData {
325                id: PokemonName::LOPUNNYMEGA,
326                types: (PokemonType::NORMAL, PokemonType::FIGHTING),
327                ability: Abilities::SCRAPPY,
328                base_stats: (65, 136, 94, 54, 96, 135),
329            }),
330            (PokemonName::GARCHOMP, Items::GARCHOMPITE) => Some(MegaEvolveData {
331                id: PokemonName::GARCHOMPMEGA,
332                types: (PokemonType::DRAGON, PokemonType::GROUND),
333                ability: Abilities::SANDFORCE,
334                base_stats: (108, 170, 115, 120, 95, 92),
335            }),
336            (PokemonName::LUCARIO, Items::LUCARIONITE) => Some(MegaEvolveData {
337                id: PokemonName::LUCARIOMEGA,
338                types: (PokemonType::FIGHTING, PokemonType::STEEL),
339                ability: Abilities::ADAPTABILITY,
340                base_stats: (70, 145, 88, 140, 70, 112),
341            }),
342            (PokemonName::ABOMASNOW, Items::ABOMASITE) => Some(MegaEvolveData {
343                id: PokemonName::ABOMASNOWMEGA,
344                types: (PokemonType::GRASS, PokemonType::ICE),
345                ability: Abilities::SNOWWARNING,
346                base_stats: (90, 132, 105, 132, 105, 30),
347            }),
348            (PokemonName::GALLADE, Items::GALLADITE) => Some(MegaEvolveData {
349                id: PokemonName::GALLADEMEGA,
350                types: (PokemonType::PSYCHIC, PokemonType::FIGHTING),
351                ability: Abilities::INNERFOCUS,
352                base_stats: (68, 165, 95, 65, 115, 110),
353            }),
354            (PokemonName::AUDINO, Items::AUDINITE) => Some(MegaEvolveData {
355                id: PokemonName::AUDINOMEGA,
356                types: (PokemonType::NORMAL, PokemonType::FAIRY),
357                ability: Abilities::HEALER,
358                base_stats: (103, 60, 126, 80, 126, 50),
359            }),
360            (PokemonName::DIANCIE, Items::DIANCITE) => Some(MegaEvolveData {
361                id: PokemonName::DIANCIEMEGA,
362                types: (PokemonType::ROCK, PokemonType::FAIRY),
363                ability: Abilities::MAGICBOUNCE,
364                base_stats: (50, 160, 110, 160, 110, 110),
365            }),
366            _ => None,
367        }
368    }
369}