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 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 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}