Skip to content

Commit 52afd77

Browse files
committed
feat: wip mega evolving
possibly working, pending more fuzz testing
1 parent 43d1048 commit 52afd77

File tree

6 files changed

+729
-9
lines changed

6 files changed

+729
-9
lines changed

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ gen8:
4242
cargo build --release --features gen8 --no-default-features
4343

4444
gen9:
45+
cargo build --release --features gen9 --no-default-features
46+
47+
tera:
4548
cargo build --release --features gen9,terastallization --no-default-features
4649

4750
pytest:

src/genx/base_stats.rs

Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
1+
use crate::engine::abilities::Abilities;
2+
use crate::engine::items::Items;
13
use crate::pokemon::PokemonName;
4+
use crate::state::PokemonType;
5+
6+
pub 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+
}
212

313
impl PokemonName {
414
/*
@@ -15,7 +25,345 @@ impl PokemonName {
1525
PokemonName::PALAFINHERO => (100, 160, 97, 106, 87, 100),
1626
PokemonName::EISCUE => (75, 80, 110, 65, 90, 50),
1727
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),
1878
_ => panic!("Base stats not implemented for {}", self),
1979
}
2080
}
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+
}
21369
}

0 commit comments

Comments
 (0)