1use crate::define_enum_with_from_str;
2use crate::state::PokemonVolatileStatus;
3use crate::state::{PokemonBoostableStat, PokemonSideCondition};
4use crate::state::{PokemonIndex, PokemonStatus};
5use crate::state::{PokemonMoveIndex, PokemonType};
6use lazy_static::lazy_static;
7use std::collections::HashMap;
8use std::fmt;
9
10lazy_static! {
11 pub static ref MOVES: HashMap<Choices, Choice> = {
12 let mut moves: HashMap<Choices, Choice> = HashMap::new();
13 moves.insert(
14 Choices::NONE,
15 Choice {
16 move_id: Choices::NONE,
17 ..Default::default()
18 },
19 );
20 moves.insert(
21 Choices::ABSORB,
22 Choice {
23 move_id: Choices::ABSORB,
24 base_power: 20.0,
25 category: MoveCategory::Special,
26 move_type: PokemonType::GRASS,
27 flags: Flags {
28 heal: true,
29 protect: true,
30 ..Default::default()
31 },
32 drain: Some(0.5),
33 ..Default::default()
34 },
35 );
36 moves.insert(
37 Choices::ACCELEROCK,
38 Choice {
39 move_id: Choices::ACCELEROCK,
40 base_power: 40.0,
41 category: MoveCategory::Physical,
42 priority: 1,
43 move_type: PokemonType::ROCK,
44 flags: Flags {
45 contact: true,
46 protect: true,
47 ..Default::default()
48 },
49 ..Default::default()
50 },
51 );
52 if cfg!(feature = "gen1") {
53 moves.insert(
54 Choices::ACID,
55 Choice {
56 move_id: Choices::ACID,
57 base_power: 40.0,
58 category: MoveCategory::Special,
59 move_type: PokemonType::POISON,
60 flags: Flags {
61 protect: true,
62 ..Default::default()
63 },
64 secondaries: Some(vec![Secondary {
65 chance: 33.2,
66 target: MoveTarget::Opponent,
67 effect: Effect::Boost(StatBoosts {
68 attack: 0,
69 defense: -1,
70 special_attack: 0,
71 special_defense: 0,
72 speed: 0,
73 accuracy: 0,
74 }),
75 }]),
76 ..Default::default()
77 },
78 );
79 } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") {
80 moves.insert(
81 Choices::ACID,
82 Choice {
83 move_id: Choices::ACID,
84 base_power: 40.0,
85 category: MoveCategory::Special,
86 move_type: PokemonType::POISON,
87 flags: Flags {
88 protect: true,
89 ..Default::default()
90 },
91 secondaries: Some(vec![Secondary {
92 chance: 10.0,
93 target: MoveTarget::Opponent,
94 effect: Effect::Boost(StatBoosts {
95 attack: 0,
96 defense: -1,
97 special_attack: 0,
98 special_defense: 0,
99 speed: 0,
100 accuracy: 0,
101 }),
102 }]),
103 ..Default::default()
104 },
105 );
106 } else {
107 moves.insert(
108 Choices::ACID,
109 Choice {
110 move_id: Choices::ACID,
111 base_power: 40.0,
112 category: MoveCategory::Special,
113 move_type: PokemonType::POISON,
114 flags: Flags {
115 protect: true,
116 ..Default::default()
117 },
118 secondaries: Some(vec![Secondary {
119 chance: 10.0,
120 target: MoveTarget::Opponent,
121 effect: Effect::Boost(StatBoosts {
122 attack: 0,
123 defense: 0,
124 special_attack: 0,
125 special_defense: -1,
126 speed: 0,
127 accuracy: 0,
128 }),
129 }]),
130 ..Default::default()
131 },
132 );
133 }
134 moves.insert(
135 Choices::ACIDARMOR,
136 Choice {
137 move_id: Choices::ACIDARMOR,
138 target: MoveTarget::User,
139 move_type: PokemonType::POISON,
140 flags: Flags {
141 ..Default::default()
142 },
143 boost: Some(Boost {
144 target: MoveTarget::User,
145 boosts: StatBoosts {
146 attack: 0,
147 defense: 2,
148 special_attack: 0,
149 special_defense: 0,
150 speed: 0,
151 accuracy: 0,
152 },
153 }),
154 ..Default::default()
155 },
156 );
157 moves.insert(
158 Choices::ACIDSPRAY,
159 Choice {
160 move_id: Choices::ACIDSPRAY,
161 base_power: 40.0,
162 category: MoveCategory::Special,
163 move_type: PokemonType::POISON,
164 flags: Flags {
165 bullet: true,
166 protect: true,
167 ..Default::default()
168 },
169 secondaries: Some(vec![Secondary {
170 chance: 100.0,
171 target: MoveTarget::Opponent,
172 effect: Effect::Boost(StatBoosts {
173 attack: 0,
174 defense: 0,
175 special_attack: 0,
176 special_defense: -2,
177 speed: 0,
178 accuracy: 0,
179 }),
180 }]),
181 ..Default::default()
182 },
183 );
184 moves.insert(
185 Choices::ACROBATICS,
186 Choice {
187 move_id: Choices::ACROBATICS,
188 base_power: 55.0,
189 category: MoveCategory::Physical,
190 move_type: PokemonType::FLYING,
191 flags: Flags {
192 contact: true,
193 protect: true,
194 ..Default::default()
195 },
196 ..Default::default()
197 },
198 );
199 moves.insert(
200 Choices::ACUPRESSURE,
201 Choice {
202 move_id: Choices::ACUPRESSURE,
203 target: MoveTarget::User,
204 move_type: PokemonType::NORMAL,
205 flags: Flags {
206 ..Default::default()
207 },
208 ..Default::default()
209 },
210 );
211 moves.insert(
212 Choices::AERIALACE,
213 Choice {
214 move_id: Choices::AERIALACE,
215 base_power: 60.0,
216 category: MoveCategory::Physical,
217 move_type: PokemonType::FLYING,
218 flags: Flags {
219 contact: true,
220 protect: true,
221 slicing: true,
222 ..Default::default()
223 },
224 ..Default::default()
225 },
226 );
227 moves.insert(
228 Choices::AEROBLAST,
229 Choice {
230 move_id: Choices::AEROBLAST,
231 accuracy: 95.0,
232 base_power: 100.0,
233 category: MoveCategory::Special,
234 move_type: PokemonType::FLYING,
235 flags: Flags {
236 protect: true,
237 wind: true,
238 ..Default::default()
239 },
240 ..Default::default()
241 },
242 );
243 moves.insert(
244 Choices::AFTERYOU,
245 Choice {
246 move_id: Choices::AFTERYOU,
247 move_type: PokemonType::NORMAL,
248 flags: Flags {
249 ..Default::default()
250 },
251 ..Default::default()
252 },
253 );
254 moves.insert(
255 Choices::AGILITY,
256 Choice {
257 move_id: Choices::AGILITY,
258 target: MoveTarget::User,
259 move_type: PokemonType::PSYCHIC,
260 flags: Flags {
261 ..Default::default()
262 },
263 boost: Some(Boost {
264 target: MoveTarget::User,
265 boosts: StatBoosts {
266 attack: 0,
267 defense: 0,
268 special_attack: 0,
269 special_defense: 0,
270 speed: 2,
271 accuracy: 0,
272 },
273 }),
274 ..Default::default()
275 },
276 );
277 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
278 moves.insert(
279 Choices::AIRCUTTER,
280 Choice {
281 move_id: Choices::AIRCUTTER,
282 accuracy: 95.0,
283 base_power: 55.0,
284 category: MoveCategory::Special,
285 move_type: PokemonType::FLYING,
286 flags: Flags {
287 protect: true,
288 slicing: true,
289 wind: true,
290 ..Default::default()
291 },
292 ..Default::default()
293 },
294 );
295 } else {
296 moves.insert(
297 Choices::AIRCUTTER,
298 Choice {
299 move_id: Choices::AIRCUTTER,
300 accuracy: 95.0,
301 base_power: 60.0,
302 category: MoveCategory::Special,
303 move_type: PokemonType::FLYING,
304 flags: Flags {
305 protect: true,
306 ..Default::default()
307 },
308 ..Default::default()
309 },
310 );
311 }
312 moves.insert(
313 Choices::AIRSLASH,
314 Choice {
315 move_id: Choices::AIRSLASH,
316 accuracy: 95.0,
317 base_power: 75.0,
318 category: MoveCategory::Special,
319 move_type: PokemonType::FLYING,
320 flags: Flags {
321 protect: true,
322 slicing: true,
323 ..Default::default()
324 },
325 secondaries: Some(vec![Secondary {
326 chance: 30.0,
327 target: MoveTarget::Opponent,
328 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
329 }]),
330 ..Default::default()
331 },
332 );
333 moves.insert(
334 Choices::ALLURINGVOICE,
335 Choice {
336 base_power: 80.0,
337 category: MoveCategory::Special,
338 move_id: Choices::ALLURINGVOICE,
339 move_type: PokemonType::FAIRY,
340 flags: Flags {
341 sound: true,
342 protect: true,
343 ..Default::default()
344 },
345 ..Default::default()
346 },
347 );
348 moves.insert(
349 Choices::ALLYSWITCH,
350 Choice {
351 move_id: Choices::ALLYSWITCH,
352 priority: 2,
353 target: MoveTarget::User,
354 move_type: PokemonType::PSYCHIC,
355 flags: Flags {
356 ..Default::default()
357 },
358 ..Default::default()
359 },
360 );
361 if cfg!(feature = "gen1") {
362 moves.insert(
363 Choices::AMNESIA,
364 Choice {
365 move_id: Choices::AMNESIA,
366 target: MoveTarget::User,
367 move_type: PokemonType::PSYCHIC,
368 flags: Flags {
369 ..Default::default()
370 },
371 boost: Some(Boost {
372 target: MoveTarget::User,
373 boosts: StatBoosts {
374 attack: 0,
375 defense: 0,
376 special_attack: 2,
377 special_defense: 0,
378 speed: 0,
379 accuracy: 0,
380 },
381 }),
382 ..Default::default()
383 },
384 );
385 } else {
386 moves.insert(
387 Choices::AMNESIA,
388 Choice {
389 move_id: Choices::AMNESIA,
390 target: MoveTarget::User,
391 move_type: PokemonType::PSYCHIC,
392 flags: Flags {
393 ..Default::default()
394 },
395 boost: Some(Boost {
396 target: MoveTarget::User,
397 boosts: StatBoosts {
398 attack: 0,
399 defense: 0,
400 special_attack: 0,
401 special_defense: 2,
402 speed: 0,
403 accuracy: 0,
404 },
405 }),
406 ..Default::default()
407 },
408 );
409 }
410 moves.insert(
411 Choices::ANCHORSHOT,
412 Choice {
413 move_id: Choices::ANCHORSHOT,
414 base_power: 80.0,
415 category: MoveCategory::Physical,
416 move_type: PokemonType::STEEL,
417 flags: Flags {
418 contact: true,
419 protect: true,
420 ..Default::default()
421 },
422 ..Default::default()
423 },
424 );
425 moves.insert(
426 Choices::ANCIENTPOWER,
427 Choice {
428 move_id: Choices::ANCIENTPOWER,
429 base_power: 60.0,
430 category: MoveCategory::Special,
431 move_type: PokemonType::ROCK,
432 flags: Flags {
433 protect: true,
434 ..Default::default()
435 },
436 secondaries: Some(vec![Secondary {
437 chance: 10.0,
438 target: MoveTarget::User,
439 effect: Effect::Boost(StatBoosts {
440 attack: 1,
441 defense: 1,
442 special_attack: 1,
443 special_defense: 1,
444 speed: 1,
445 accuracy: 0,
446 }),
447 }]),
448 ..Default::default()
449 },
450 );
451 moves.insert(
452 Choices::APPLEACID,
453 Choice {
454 move_id: Choices::APPLEACID,
455 base_power: 80.0,
456 category: MoveCategory::Special,
457 move_type: PokemonType::GRASS,
458 flags: Flags {
459 protect: true,
460 ..Default::default()
461 },
462 secondaries: Some(vec![Secondary {
463 chance: 100.0,
464 target: MoveTarget::Opponent,
465 effect: Effect::Boost(StatBoosts {
466 attack: 0,
467 defense: 0,
468 special_attack: 0,
469 special_defense: -1,
470 speed: 0,
471 accuracy: 0,
472 }),
473 }]),
474 ..Default::default()
475 },
476 );
477 moves.insert(
478 Choices::AQUACUTTER,
479 Choice {
480 move_id: Choices::AQUACUTTER,
481 base_power: 70.0,
482 category: MoveCategory::Physical,
483 move_type: PokemonType::WATER,
484 flags: Flags {
485 protect: true,
486 slicing: true,
487 ..Default::default()
488 },
489 ..Default::default()
490 },
491 );
492 moves.insert(
493 Choices::AQUAJET,
494 Choice {
495 move_id: Choices::AQUAJET,
496 base_power: 40.0,
497 category: MoveCategory::Physical,
498 priority: 1,
499 move_type: PokemonType::WATER,
500 flags: Flags {
501 contact: true,
502 protect: true,
503 ..Default::default()
504 },
505 ..Default::default()
506 },
507 );
508 moves.insert(
509 Choices::AQUARING,
510 Choice {
511 move_id: Choices::AQUARING,
512 target: MoveTarget::User,
513 move_type: PokemonType::WATER,
514 flags: Flags {
515 ..Default::default()
516 },
517 volatile_status: Some(VolatileStatus {
518 target: MoveTarget::User,
519 volatile_status: PokemonVolatileStatus::AQUARING,
520 }),
521 ..Default::default()
522 },
523 );
524 moves.insert(
525 Choices::AQUASTEP,
526 Choice {
527 move_id: Choices::AQUASTEP,
528 base_power: 80.0,
529 category: MoveCategory::Physical,
530 move_type: PokemonType::WATER,
531 flags: Flags {
532 contact: true,
533 protect: true,
534 ..Default::default()
535 },
536 secondaries: Some(vec![Secondary {
537 chance: 100.0,
538 target: MoveTarget::User,
539 effect: Effect::Boost(StatBoosts {
540 attack: 0,
541 defense: 0,
542 special_attack: 0,
543 special_defense: 0,
544 speed: 1,
545 accuracy: 0,
546 }),
547 }]),
548 ..Default::default()
549 },
550 );
551 moves.insert(
552 Choices::AQUATAIL,
553 Choice {
554 move_id: Choices::AQUATAIL,
555 accuracy: 90.0,
556 base_power: 90.0,
557 category: MoveCategory::Physical,
558 move_type: PokemonType::WATER,
559 flags: Flags {
560 contact: true,
561 protect: true,
562 ..Default::default()
563 },
564 ..Default::default()
565 },
566 );
567 moves.insert(
568 Choices::ARMORCANNON,
569 Choice {
570 move_id: Choices::ARMORCANNON,
571 base_power: 120.0,
572 category: MoveCategory::Special,
573 move_type: PokemonType::FIRE,
574 flags: Flags {
575 protect: true,
576 ..Default::default()
577 },
578 ..Default::default()
579 },
580 );
581 moves.insert(
582 Choices::ARMTHRUST,
583 Choice {
584 move_id: Choices::ARMTHRUST,
585 base_power: 15.0,
586 category: MoveCategory::Physical,
587 move_type: PokemonType::FIGHTING,
588 flags: Flags {
589 contact: true,
590 protect: true,
591 ..Default::default()
592 },
593 ..Default::default()
594 },
595 );
596 moves.insert(
597 Choices::AROMATHERAPY,
598 Choice {
599 move_id: Choices::AROMATHERAPY,
600 target: MoveTarget::User,
601 move_type: PokemonType::GRASS,
602 flags: Flags {
603 ..Default::default()
604 },
605 ..Default::default()
606 },
607 );
608 moves.insert(
609 Choices::AROMATICMIST,
610 Choice {
611 move_id: Choices::AROMATICMIST,
612 target: MoveTarget::User,
613 move_type: PokemonType::FAIRY,
614 flags: Flags {
615 ..Default::default()
616 },
617 boost: Some(Boost {
618 target: MoveTarget::User,
619 boosts: StatBoosts {
620 attack: 0,
621 defense: 0,
622 special_attack: 0,
623 special_defense: 1,
624 speed: 0,
625 accuracy: 0,
626 },
627 }),
628 ..Default::default()
629 },
630 );
631 moves.insert(
632 Choices::ASSIST,
633 Choice {
634 move_id: Choices::ASSIST,
635 target: MoveTarget::User,
636 move_type: PokemonType::NORMAL,
637 flags: Flags {
638 ..Default::default()
639 },
640 ..Default::default()
641 },
642 );
643 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
644 moves.insert(
645 Choices::ASSURANCE,
646 Choice {
647 move_id: Choices::ASSURANCE,
648 base_power: 50.0,
649 category: MoveCategory::Physical,
650 move_type: PokemonType::DARK,
651 flags: Flags {
652 contact: true,
653 protect: true,
654 ..Default::default()
655 },
656 ..Default::default()
657 },
658 );
659 } else {
660 moves.insert(
661 Choices::ASSURANCE,
662 Choice {
663 move_id: Choices::ASSURANCE,
664 base_power: 60.0,
665 category: MoveCategory::Physical,
666 move_type: PokemonType::DARK,
667 flags: Flags {
668 contact: true,
669 protect: true,
670 ..Default::default()
671 },
672 ..Default::default()
673 },
674 );
675 }
676 moves.insert(
677 Choices::ASTONISH,
678 Choice {
679 move_id: Choices::ASTONISH,
680 base_power: 30.0,
681 category: MoveCategory::Physical,
682 move_type: PokemonType::GHOST,
683 flags: Flags {
684 contact: true,
685 protect: true,
686 ..Default::default()
687 },
688 secondaries: Some(vec![Secondary {
689 chance: 30.0,
690 target: MoveTarget::Opponent,
691 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
692 }]),
693 ..Default::default()
694 },
695 );
696 moves.insert(
697 Choices::ASTRALBARRAGE,
698 Choice {
699 move_id: Choices::ASTRALBARRAGE,
700 base_power: 120.0,
701 category: MoveCategory::Special,
702 move_type: PokemonType::GHOST,
703 flags: Flags {
704 protect: true,
705 ..Default::default()
706 },
707 ..Default::default()
708 },
709 );
710 moves.insert(
711 Choices::ATTACKORDER,
712 Choice {
713 move_id: Choices::ATTACKORDER,
714 base_power: 90.0,
715 category: MoveCategory::Physical,
716 move_type: PokemonType::BUG,
717 flags: Flags {
718 protect: true,
719 ..Default::default()
720 },
721 ..Default::default()
722 },
723 );
724 moves.insert(
725 Choices::ATTRACT,
726 Choice {
727 move_id: Choices::ATTRACT,
728 move_type: PokemonType::NORMAL,
729 flags: Flags {
730 protect: true,
731 reflectable: true,
732 ..Default::default()
733 },
734 volatile_status: Some(VolatileStatus {
735 target: MoveTarget::Opponent,
736 volatile_status: PokemonVolatileStatus::ATTRACT,
737 }),
738 ..Default::default()
739 },
740 );
741 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
742 moves.insert(
743 Choices::AURASPHERE,
744 Choice {
745 move_id: Choices::AURASPHERE,
746 base_power: 90.0,
747 category: MoveCategory::Special,
748 move_type: PokemonType::FIGHTING,
749 flags: Flags {
750 bullet: true,
751 protect: true,
752 pulse: true,
753 ..Default::default()
754 },
755 ..Default::default()
756 },
757 );
758 } else {
759 moves.insert(
760 Choices::AURASPHERE,
761 Choice {
762 move_id: Choices::AURASPHERE,
763 base_power: 80.0,
764 category: MoveCategory::Special,
765 move_type: PokemonType::FIGHTING,
766 flags: Flags {
767 bullet: true,
768 protect: true,
769 pulse: true,
770 ..Default::default()
771 },
772 ..Default::default()
773 },
774 );
775 }
776 moves.insert(
777 Choices::AURAWHEEL,
778 Choice {
779 move_id: Choices::AURAWHEEL,
780 base_power: 110.0,
781 category: MoveCategory::Physical,
782 move_type: PokemonType::ELECTRIC,
783 flags: Flags {
784 protect: true,
785 ..Default::default()
786 },
787 secondaries: Some(vec![Secondary {
788 chance: 100.0,
789 target: MoveTarget::User,
790 effect: Effect::Boost(StatBoosts {
791 attack: 0,
792 defense: 0,
793 special_attack: 0,
794 special_defense: 0,
795 speed: 1,
796 accuracy: 0,
797 }),
798 }]),
799 ..Default::default()
800 },
801 );
802 if cfg!(feature = "gen1") {
803 moves.insert(
804 Choices::AURORABEAM,
805 Choice {
806 move_id: Choices::AURORABEAM,
807 base_power: 65.0,
808 category: MoveCategory::Special,
809 move_type: PokemonType::ICE,
810 flags: Flags {
811 protect: true,
812 ..Default::default()
813 },
814 secondaries: Some(vec![Secondary {
815 chance: 33.2,
816 target: MoveTarget::Opponent,
817 effect: Effect::Boost(StatBoosts {
818 attack: -1,
819 defense: 0,
820 special_attack: 0,
821 special_defense: 0,
822 speed: 0,
823 accuracy: 0,
824 }),
825 }]),
826 ..Default::default()
827 },
828 );
829 } else {
830 moves.insert(
831 Choices::AURORABEAM,
832 Choice {
833 move_id: Choices::AURORABEAM,
834 base_power: 65.0,
835 category: MoveCategory::Special,
836 move_type: PokemonType::ICE,
837 flags: Flags {
838 protect: true,
839 ..Default::default()
840 },
841 secondaries: Some(vec![Secondary {
842 chance: 10.0,
843 target: MoveTarget::Opponent,
844 effect: Effect::Boost(StatBoosts {
845 attack: -1,
846 defense: 0,
847 special_attack: 0,
848 special_defense: 0,
849 speed: 0,
850 accuracy: 0,
851 }),
852 }]),
853 ..Default::default()
854 },
855 );
856 }
857 moves.insert(
858 Choices::AURORAVEIL,
859 Choice {
860 move_id: Choices::AURORAVEIL,
861 target: MoveTarget::User,
862 move_type: PokemonType::ICE,
863 flags: Flags {
864 ..Default::default()
865 },
866 side_condition: Some(SideCondition {
867 target: MoveTarget::User,
868 condition: PokemonSideCondition::AuroraVeil,
869 }),
870 ..Default::default()
871 },
872 );
873 moves.insert(
874 Choices::AUTOTOMIZE,
875 Choice {
876 move_id: Choices::AUTOTOMIZE,
877 target: MoveTarget::User,
878 move_type: PokemonType::STEEL,
879 flags: Flags {
880 ..Default::default()
881 },
882 boost: Some(Boost {
883 target: MoveTarget::User,
884 boosts: StatBoosts {
885 attack: 0,
886 defense: 0,
887 special_attack: 0,
888 special_defense: 0,
889 speed: 2,
890 accuracy: 0,
891 },
892 }),
893 ..Default::default()
894 },
895 );
896 moves.insert(
897 Choices::AVALANCHE,
898 Choice {
899 move_id: Choices::AVALANCHE,
900 base_power: 60.0,
901 category: MoveCategory::Physical,
902 priority: -4,
903 move_type: PokemonType::ICE,
904 flags: Flags {
905 contact: true,
906 protect: true,
907 ..Default::default()
908 },
909 ..Default::default()
910 },
911 );
912 moves.insert(
913 Choices::AXEKICK,
914 Choice {
915 move_id: Choices::AXEKICK,
916 accuracy: 90.0,
917 base_power: 120.0,
918 category: MoveCategory::Physical,
919 move_type: PokemonType::FIGHTING,
920 flags: Flags {
921 contact: true,
922 protect: true,
923 ..Default::default()
924 },
925 secondaries: Some(vec![Secondary {
926 chance: 30.0,
927 target: MoveTarget::Opponent,
928 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
929 }]),
930 crash: Some(0.5),
931 ..Default::default()
932 },
933 );
934 moves.insert(
935 Choices::BABYDOLLEYES,
936 Choice {
937 move_id: Choices::BABYDOLLEYES,
938 priority: 1,
939 move_type: PokemonType::FAIRY,
940 flags: Flags {
941 protect: true,
942 reflectable: true,
943 ..Default::default()
944 },
945 boost: Some(Boost {
946 target: MoveTarget::Opponent,
947 boosts: StatBoosts {
948 attack: -1,
949 defense: 0,
950 special_attack: 0,
951 special_defense: 0,
952 speed: 0,
953 accuracy: 0,
954 },
955 }),
956 ..Default::default()
957 },
958 );
959 moves.insert(
960 Choices::BADDYBAD,
961 Choice {
962 move_id: Choices::BADDYBAD,
963 accuracy: 95.0,
964 base_power: 80.0,
965 category: MoveCategory::Special,
966 move_type: PokemonType::DARK,
967 flags: Flags {
968 protect: true,
969 ..Default::default()
970 },
971 ..Default::default()
972 },
973 );
974 moves.insert(
975 Choices::BANEFULBUNKER,
976 Choice {
977 move_id: Choices::BANEFULBUNKER,
978 priority: 4,
979 target: MoveTarget::User,
980 move_type: PokemonType::POISON,
981 flags: Flags {
982 ..Default::default()
983 },
984 volatile_status: Some(VolatileStatus {
985 target: MoveTarget::User,
986 volatile_status: PokemonVolatileStatus::BANEFULBUNKER,
987 }),
988 ..Default::default()
989 },
990 );
991 moves.insert(
992 Choices::BARBBARRAGE,
993 Choice {
994 move_id: Choices::BARBBARRAGE,
995 base_power: 60.0,
996 category: MoveCategory::Physical,
997 move_type: PokemonType::POISON,
998 flags: Flags {
999 protect: true,
1000 ..Default::default()
1001 },
1002 secondaries: Some(vec![Secondary {
1003 chance: 50.0,
1004 target: MoveTarget::Opponent,
1005 effect: Effect::Status(PokemonStatus::POISON),
1006 }]),
1007 ..Default::default()
1008 },
1009 );
1010 moves.insert(
1011 Choices::BARRAGE,
1012 Choice {
1013 move_id: Choices::BARRAGE,
1014 accuracy: 85.0,
1015 base_power: 15.0,
1016 category: MoveCategory::Physical,
1017 move_type: PokemonType::NORMAL,
1018 flags: Flags {
1019 bullet: true,
1020 protect: true,
1021 ..Default::default()
1022 },
1023 ..Default::default()
1024 },
1025 );
1026 moves.insert(
1027 Choices::BARRIER,
1028 Choice {
1029 move_id: Choices::BARRIER,
1030 target: MoveTarget::User,
1031 move_type: PokemonType::PSYCHIC,
1032 flags: Flags {
1033 ..Default::default()
1034 },
1035 boost: Some(Boost {
1036 target: MoveTarget::User,
1037 boosts: StatBoosts {
1038 attack: 0,
1039 defense: 2,
1040 special_attack: 0,
1041 special_defense: 0,
1042 speed: 0,
1043 accuracy: 0,
1044 },
1045 }),
1046 ..Default::default()
1047 },
1048 );
1049 moves.insert(
1050 Choices::BATONPASS,
1051 Choice {
1052 move_id: Choices::BATONPASS,
1053 target: MoveTarget::User,
1054 move_type: PokemonType::NORMAL,
1055 flags: Flags {
1056 pivot: true,
1057 ..Default::default()
1058 },
1059 ..Default::default()
1060 },
1061 );
1062 moves.insert(
1063 Choices::BEAKBLAST,
1064 Choice {
1065 move_id: Choices::BEAKBLAST,
1066 base_power: 100.0,
1067 category: MoveCategory::Physical,
1068 priority: -3,
1069 move_type: PokemonType::FLYING,
1070 flags: Flags {
1071 bullet: true,
1072 protect: true,
1073 ..Default::default()
1074 },
1075 ..Default::default()
1076 },
1077 );
1078 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
1079 moves.insert(
1080 Choices::BEATUP,
1081 Choice {
1082 base_power: 10.0,
1083 move_id: Choices::BEATUP,
1084 category: MoveCategory::Physical,
1085 move_type: PokemonType::DARK,
1086 flags: Flags {
1087 protect: true,
1088 ..Default::default()
1089 },
1090 ..Default::default()
1091 },
1092 );
1093 } else {
1094 moves.insert(
1095 Choices::BEATUP,
1096 Choice {
1097 move_id: Choices::BEATUP,
1098 category: MoveCategory::Physical,
1099 move_type: PokemonType::DARK,
1100 flags: Flags {
1101 protect: true,
1102 ..Default::default()
1103 },
1104 ..Default::default()
1105 },
1106 );
1107 }
1108 moves.insert(
1109 Choices::BEHEMOTHBASH,
1110 Choice {
1111 move_id: Choices::BEHEMOTHBASH,
1112 base_power: 100.0,
1113 category: MoveCategory::Physical,
1114 move_type: PokemonType::STEEL,
1115 flags: Flags {
1116 contact: true,
1117 protect: true,
1118 ..Default::default()
1119 },
1120 ..Default::default()
1121 },
1122 );
1123 moves.insert(
1124 Choices::BEHEMOTHBLADE,
1125 Choice {
1126 move_id: Choices::BEHEMOTHBLADE,
1127 base_power: 100.0,
1128 category: MoveCategory::Physical,
1129 move_type: PokemonType::STEEL,
1130 flags: Flags {
1131 contact: true,
1132 protect: true,
1133 slicing: true,
1134 ..Default::default()
1135 },
1136 ..Default::default()
1137 },
1138 );
1139 moves.insert(
1140 Choices::BELCH,
1141 Choice {
1142 move_id: Choices::BELCH,
1143 accuracy: 90.0,
1144 base_power: 120.0,
1145 category: MoveCategory::Special,
1146 move_type: PokemonType::POISON,
1147 flags: Flags {
1148 protect: true,
1149 ..Default::default()
1150 },
1151 ..Default::default()
1152 },
1153 );
1154 moves.insert(
1155 Choices::BELLYDRUM,
1156 Choice {
1157 move_id: Choices::BELLYDRUM,
1158 target: MoveTarget::User,
1159 move_type: PokemonType::NORMAL,
1160 flags: Flags {
1161 ..Default::default()
1162 },
1163 ..Default::default()
1164 },
1165 );
1166 moves.insert(
1167 Choices::BESTOW,
1168 Choice {
1169 move_id: Choices::BESTOW,
1170 move_type: PokemonType::NORMAL,
1171 flags: Flags {
1172 ..Default::default()
1173 },
1174 ..Default::default()
1175 },
1176 );
1177 moves.insert(
1178 Choices::BIDE,
1179 Choice {
1180 move_id: Choices::BIDE,
1181 category: MoveCategory::Physical,
1182 priority: 1,
1183 target: MoveTarget::User,
1184 move_type: PokemonType::NORMAL,
1185 flags: Flags {
1186 contact: true,
1187 protect: true,
1188 ..Default::default()
1189 },
1190 volatile_status: Some(VolatileStatus {
1191 target: MoveTarget::User,
1192 volatile_status: PokemonVolatileStatus::BIDE,
1193 }),
1194 ..Default::default()
1195 },
1196 );
1197 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
1198 moves.insert(
1199 Choices::BIND,
1200 Choice {
1201 move_id: Choices::BIND,
1202 accuracy: 75.0,
1203 base_power: 15.0,
1204 category: MoveCategory::Physical,
1205 move_type: PokemonType::NORMAL,
1206 flags: Flags {
1207 contact: true,
1208 protect: true,
1209 ..Default::default()
1210 },
1211 volatile_status: Some(VolatileStatus {
1212 target: MoveTarget::Opponent,
1213 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
1214 }),
1215 ..Default::default()
1216 },
1217 );
1218 } else {
1219 moves.insert(
1220 Choices::BIND,
1221 Choice {
1222 move_id: Choices::BIND,
1223 accuracy: 85.0,
1224 base_power: 15.0,
1225 category: MoveCategory::Physical,
1226 move_type: PokemonType::NORMAL,
1227 flags: Flags {
1228 contact: true,
1229 protect: true,
1230 ..Default::default()
1231 },
1232 volatile_status: Some(VolatileStatus {
1233 target: MoveTarget::Opponent,
1234 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
1235 }),
1236 ..Default::default()
1237 },
1238 );
1239 }
1240 if cfg!(feature = "gen1") {
1241 moves.insert(
1242 Choices::BITE,
1243 Choice {
1244 move_id: Choices::BITE,
1245 base_power: 60.0,
1246 category: MoveCategory::Physical,
1247 move_type: PokemonType::NORMAL,
1248 flags: Flags {
1249 bite: true,
1250 contact: true,
1251 protect: true,
1252 ..Default::default()
1253 },
1254 secondaries: Some(vec![Secondary {
1255 chance: 10.0,
1256 target: MoveTarget::Opponent,
1257 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
1258 }]),
1259 ..Default::default()
1260 },
1261 );
1262 } else {
1263 moves.insert(
1264 Choices::BITE,
1265 Choice {
1266 move_id: Choices::BITE,
1267 base_power: 60.0,
1268 category: MoveCategory::Physical,
1269 move_type: PokemonType::DARK,
1270 flags: Flags {
1271 bite: true,
1272 contact: true,
1273 protect: true,
1274 ..Default::default()
1275 },
1276 secondaries: Some(vec![Secondary {
1277 chance: 30.0,
1278 target: MoveTarget::Opponent,
1279 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
1280 }]),
1281 ..Default::default()
1282 },
1283 );
1284 }
1285 moves.insert(
1286 Choices::BITTERBLADE,
1287 Choice {
1288 move_id: Choices::BITTERBLADE,
1289 base_power: 90.0,
1290 category: MoveCategory::Physical,
1291 move_type: PokemonType::FIRE,
1292 flags: Flags {
1293 contact: true,
1294 protect: true,
1295 slicing: true,
1296 heal: true,
1297 ..Default::default()
1298 },
1299 drain: Some(0.5),
1300 ..Default::default()
1301 },
1302 );
1303 moves.insert(
1304 Choices::BITTERMALICE,
1305 Choice {
1306 move_id: Choices::BITTERMALICE,
1307 base_power: 75.0,
1308 category: MoveCategory::Special,
1309 move_type: PokemonType::GHOST,
1310 flags: Flags {
1311 protect: true,
1312 ..Default::default()
1313 },
1314 secondaries: Some(vec![Secondary {
1315 chance: 100.0,
1316 target: MoveTarget::Opponent,
1317 effect: Effect::Boost(StatBoosts {
1318 attack: -1,
1319 defense: 0,
1320 special_attack: 0,
1321 special_defense: 0,
1322 speed: 0,
1323 accuracy: 0,
1324 }),
1325 }]),
1326 ..Default::default()
1327 },
1328 );
1329 moves.insert(
1330 Choices::BLASTBURN,
1331 Choice {
1332 move_id: Choices::BLASTBURN,
1333 accuracy: 90.0,
1334 base_power: 150.0,
1335 category: MoveCategory::Special,
1336 move_type: PokemonType::FIRE,
1337 flags: Flags {
1338 protect: true,
1339 recharge: true,
1340 ..Default::default()
1341 },
1342 ..Default::default()
1343 },
1344 );
1345 moves.insert(
1346 Choices::BLAZEKICK,
1347 Choice {
1348 move_id: Choices::BLAZEKICK,
1349 accuracy: 90.0,
1350 base_power: 85.0,
1351 category: MoveCategory::Physical,
1352 move_type: PokemonType::FIRE,
1353 flags: Flags {
1354 contact: true,
1355 protect: true,
1356 ..Default::default()
1357 },
1358 secondaries: Some(vec![Secondary {
1359 chance: 10.0,
1360 target: MoveTarget::Opponent,
1361 effect: Effect::Status(PokemonStatus::BURN),
1362 }]),
1363 ..Default::default()
1364 },
1365 );
1366 moves.insert(
1367 Choices::BLAZINGTORQUE,
1368 Choice {
1369 move_id: Choices::BLAZINGTORQUE,
1370 base_power: 80.0,
1371 category: MoveCategory::Physical,
1372 move_type: PokemonType::FIRE,
1373 flags: Flags {
1374 protect: true,
1375 ..Default::default()
1376 },
1377 secondaries: Some(vec![Secondary {
1378 chance: 30.0,
1379 target: MoveTarget::Opponent,
1380 effect: Effect::Status(PokemonStatus::BURN),
1381 }]),
1382 ..Default::default()
1383 },
1384 );
1385 moves.insert(
1386 Choices::BLEAKWINDSTORM,
1387 Choice {
1388 move_id: Choices::BLEAKWINDSTORM,
1389 accuracy: 80.0,
1390 base_power: 100.0,
1391 category: MoveCategory::Special,
1392 move_type: PokemonType::FLYING,
1393 flags: Flags {
1394 protect: true,
1395 wind: true,
1396 ..Default::default()
1397 },
1398 secondaries: Some(vec![Secondary {
1399 chance: 30.0,
1400 target: MoveTarget::Opponent,
1401 effect: Effect::Boost(StatBoosts {
1402 attack: 0,
1403 defense: 0,
1404 special_attack: 0,
1405 special_defense: 0,
1406 speed: -1,
1407 accuracy: 0,
1408 }),
1409 }]),
1410 ..Default::default()
1411 },
1412 );
1413 if cfg!(feature = "gen1") {
1414 moves.insert(
1415 Choices::BLIZZARD,
1416 Choice {
1417 move_id: Choices::BLIZZARD,
1418 accuracy: 90.0,
1419 base_power: 120.0,
1420 category: MoveCategory::Special,
1421 move_type: PokemonType::ICE,
1422 flags: Flags {
1423 protect: true,
1424 wind: true,
1425 ..Default::default()
1426 },
1427 secondaries: Some(vec![Secondary {
1428 chance: 10.0,
1429 target: MoveTarget::Opponent,
1430 effect: Effect::Status(PokemonStatus::FREEZE),
1431 }]),
1432 ..Default::default()
1433 },
1434 );
1435 }
1436 else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
1437 moves.insert(
1438 Choices::BLIZZARD,
1439 Choice {
1440 move_id: Choices::BLIZZARD,
1441 accuracy: 70.0,
1442 base_power: 120.0,
1443 category: MoveCategory::Special,
1444 move_type: PokemonType::ICE,
1445 flags: Flags {
1446 protect: true,
1447 wind: true,
1448 ..Default::default()
1449 },
1450 secondaries: Some(vec![Secondary {
1451 chance: 10.0,
1452 target: MoveTarget::Opponent,
1453 effect: Effect::Status(PokemonStatus::FREEZE),
1454 }]),
1455 ..Default::default()
1456 },
1457 );
1458 } else {
1459 moves.insert(
1460 Choices::BLIZZARD,
1461 Choice {
1462 move_id: Choices::BLIZZARD,
1463 accuracy: 70.0,
1464 base_power: 110.0,
1465 category: MoveCategory::Special,
1466 move_type: PokemonType::ICE,
1467 flags: Flags {
1468 protect: true,
1469 ..Default::default()
1470 },
1471 secondaries: Some(vec![Secondary {
1472 chance: 10.0,
1473 target: MoveTarget::Opponent,
1474 effect: Effect::Status(PokemonStatus::FREEZE),
1475 }]),
1476 ..Default::default()
1477 },
1478 );
1479 }
1480 moves.insert(
1481 Choices::BLOCK,
1482 Choice {
1483 move_id: Choices::BLOCK,
1484 move_type: PokemonType::NORMAL,
1485 flags: Flags {
1486 reflectable: true,
1487 ..Default::default()
1488 },
1489 ..Default::default()
1490 },
1491 );
1492 moves.insert(
1493 Choices::BLOODMOON,
1494 Choice {
1495 move_id: Choices::BLOODMOON,
1496 base_power: 140.0,
1497 category: MoveCategory::Special,
1498 move_type: PokemonType::NORMAL,
1499 flags: Flags {
1500 protect: true,
1501 ..Default::default()
1502 },
1503 ..Default::default()
1504 },
1505 );
1506 moves.insert(
1507 Choices::BLUEFLARE,
1508 Choice {
1509 move_id: Choices::BLUEFLARE,
1510 accuracy: 85.0,
1511 base_power: 130.0,
1512 category: MoveCategory::Special,
1513 move_type: PokemonType::FIRE,
1514 flags: Flags {
1515 protect: true,
1516 ..Default::default()
1517 },
1518 secondaries: Some(vec![Secondary {
1519 chance: 20.0,
1520 target: MoveTarget::Opponent,
1521 effect: Effect::Status(PokemonStatus::BURN),
1522 }]),
1523 ..Default::default()
1524 },
1525 );
1526 moves.insert(
1527 Choices::BODYPRESS,
1528 Choice {
1529 move_id: Choices::BODYPRESS,
1530 base_power: 80.0,
1531 category: MoveCategory::Physical,
1532 move_type: PokemonType::FIGHTING,
1533 flags: Flags {
1534 contact: true,
1535 protect: true,
1536 ..Default::default()
1537 },
1538 ..Default::default()
1539 },
1540 );
1541 moves.insert(
1542 Choices::BODYSLAM,
1543 Choice {
1544 move_id: Choices::BODYSLAM,
1545 base_power: 85.0,
1546 category: MoveCategory::Physical,
1547 move_type: PokemonType::NORMAL,
1548 flags: Flags {
1549 contact: true,
1550 protect: true,
1551 ..Default::default()
1552 },
1553 secondaries: Some(vec![Secondary {
1554 chance: 30.0,
1555 target: MoveTarget::Opponent,
1556 effect: Effect::Status(PokemonStatus::PARALYZE),
1557 }]),
1558 ..Default::default()
1559 },
1560 );
1561 moves.insert(
1562 Choices::BOLTBEAK,
1563 Choice {
1564 move_id: Choices::BOLTBEAK,
1565 base_power: 85.0,
1566 category: MoveCategory::Physical,
1567 move_type: PokemonType::ELECTRIC,
1568 flags: Flags {
1569 contact: true,
1570 protect: true,
1571 ..Default::default()
1572 },
1573 ..Default::default()
1574 },
1575 );
1576 moves.insert(
1577 Choices::BOLTSTRIKE,
1578 Choice {
1579 move_id: Choices::BOLTSTRIKE,
1580 accuracy: 85.0,
1581 base_power: 130.0,
1582 category: MoveCategory::Physical,
1583 move_type: PokemonType::ELECTRIC,
1584 flags: Flags {
1585 contact: true,
1586 protect: true,
1587 ..Default::default()
1588 },
1589 secondaries: Some(vec![Secondary {
1590 chance: 20.0,
1591 target: MoveTarget::Opponent,
1592 effect: Effect::Status(PokemonStatus::PARALYZE),
1593 }]),
1594 ..Default::default()
1595 },
1596 );
1597 moves.insert(
1598 Choices::BONECLUB,
1599 Choice {
1600 move_id: Choices::BONECLUB,
1601 accuracy: 85.0,
1602 base_power: 65.0,
1603 category: MoveCategory::Physical,
1604 move_type: PokemonType::GROUND,
1605 flags: Flags {
1606 protect: true,
1607 ..Default::default()
1608 },
1609 secondaries: Some(vec![Secondary {
1610 chance: 10.0,
1611 target: MoveTarget::Opponent,
1612 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
1613 }]),
1614 ..Default::default()
1615 },
1616 );
1617 moves.insert(
1618 Choices::BONEMERANG,
1619 Choice {
1620 move_id: Choices::BONEMERANG,
1621 accuracy: 90.0,
1622 base_power: 50.0,
1623 category: MoveCategory::Physical,
1624 move_type: PokemonType::GROUND,
1625 flags: Flags {
1626 protect: true,
1627 ..Default::default()
1628 },
1629 ..Default::default()
1630 },
1631 );
1632 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
1633 moves.insert(
1634 Choices::BONERUSH,
1635 Choice {
1636 move_id: Choices::BONERUSH,
1637 accuracy: 80.0,
1638 base_power: 25.0,
1639 category: MoveCategory::Physical,
1640 move_type: PokemonType::GROUND,
1641 flags: Flags {
1642 protect: true,
1643 ..Default::default()
1644 },
1645 ..Default::default()
1646 },
1647 );
1648 } else {
1649 moves.insert(
1650 Choices::BONERUSH,
1651 Choice {
1652 move_id: Choices::BONERUSH,
1653 accuracy: 90.0,
1654 base_power: 25.0,
1655 category: MoveCategory::Physical,
1656 move_type: PokemonType::GROUND,
1657 flags: Flags {
1658 protect: true,
1659 ..Default::default()
1660 },
1661 ..Default::default()
1662 },
1663 );
1664 }
1665 moves.insert(
1666 Choices::BOOMBURST,
1667 Choice {
1668 move_id: Choices::BOOMBURST,
1669 base_power: 140.0,
1670 category: MoveCategory::Special,
1671 move_type: PokemonType::NORMAL,
1672 flags: Flags {
1673 protect: true,
1674 sound: true,
1675 ..Default::default()
1676 },
1677 ..Default::default()
1678 },
1679 );
1680 moves.insert(
1681 Choices::BOUNCE,
1682 Choice {
1683 move_id: Choices::BOUNCE,
1684 accuracy: 85.0,
1685 base_power: 85.0,
1686 category: MoveCategory::Physical,
1687 move_type: PokemonType::FLYING,
1688 flags: Flags {
1689 charge: true,
1690 contact: true,
1691 protect: true,
1692 ..Default::default()
1693 },
1694 secondaries: Some(vec![Secondary {
1695 chance: 30.0,
1696 target: MoveTarget::Opponent,
1697 effect: Effect::Status(PokemonStatus::PARALYZE),
1698 }]),
1699 ..Default::default()
1700 },
1701 );
1702 moves.insert(
1703 Choices::BOUNCYBUBBLE,
1704 Choice {
1705 move_id: Choices::BOUNCYBUBBLE,
1706 base_power: 60.0,
1707 category: MoveCategory::Special,
1708 move_type: PokemonType::WATER,
1709 flags: Flags {
1710 heal: true,
1711 protect: true,
1712 ..Default::default()
1713 },
1714 drain: Some(0.5),
1715 ..Default::default()
1716 },
1717 );
1718 moves.insert(
1719 Choices::BRANCHPOKE,
1720 Choice {
1721 move_id: Choices::BRANCHPOKE,
1722 base_power: 40.0,
1723 category: MoveCategory::Physical,
1724 move_type: PokemonType::GRASS,
1725 flags: Flags {
1726 contact: true,
1727 protect: true,
1728 ..Default::default()
1729 },
1730 ..Default::default()
1731 },
1732 );
1733 moves.insert(
1734 Choices::BRAVEBIRD,
1735 Choice {
1736 move_id: Choices::BRAVEBIRD,
1737 base_power: 120.0,
1738 category: MoveCategory::Physical,
1739 move_type: PokemonType::FLYING,
1740 flags: Flags {
1741 contact: true,
1742 protect: true,
1743 ..Default::default()
1744 },
1745 recoil: Some(0.33),
1746 ..Default::default()
1747 },
1748 );
1749 moves.insert(
1750 Choices::BREAKINGSWIPE,
1751 Choice {
1752 move_id: Choices::BREAKINGSWIPE,
1753 base_power: 60.0,
1754 category: MoveCategory::Physical,
1755 move_type: PokemonType::DRAGON,
1756 flags: Flags {
1757 contact: true,
1758 protect: true,
1759 ..Default::default()
1760 },
1761 secondaries: Some(vec![Secondary {
1762 chance: 100.0,
1763 target: MoveTarget::Opponent,
1764 effect: Effect::Boost(StatBoosts {
1765 attack: -1,
1766 defense: 0,
1767 special_attack: 0,
1768 special_defense: 0,
1769 speed: 0,
1770 accuracy: 0,
1771 }),
1772 }]),
1773 ..Default::default()
1774 },
1775 );
1776 moves.insert(
1777 Choices::BRICKBREAK,
1778 Choice {
1779 move_id: Choices::BRICKBREAK,
1780 base_power: 75.0,
1781 category: MoveCategory::Physical,
1782 move_type: PokemonType::FIGHTING,
1783 flags: Flags {
1784 contact: true,
1785 protect: true,
1786 ..Default::default()
1787 },
1788 ..Default::default()
1789 },
1790 );
1791 moves.insert(
1792 Choices::BRINE,
1793 Choice {
1794 move_id: Choices::BRINE,
1795 base_power: 65.0,
1796 category: MoveCategory::Special,
1797 move_type: PokemonType::WATER,
1798 flags: Flags {
1799 protect: true,
1800 ..Default::default()
1801 },
1802 ..Default::default()
1803 },
1804 );
1805 moves.insert(
1806 Choices::BRUTALSWING,
1807 Choice {
1808 move_id: Choices::BRUTALSWING,
1809 base_power: 60.0,
1810 category: MoveCategory::Physical,
1811 move_type: PokemonType::DARK,
1812 flags: Flags {
1813 contact: true,
1814 protect: true,
1815 ..Default::default()
1816 },
1817 ..Default::default()
1818 },
1819 );
1820 if cfg!(feature = "gen1") {
1821 moves.insert(
1822 Choices::BUBBLE,
1823 Choice {
1824 move_id: Choices::BUBBLE,
1825 base_power: 20.0,
1826 category: MoveCategory::Special,
1827 move_type: PokemonType::WATER,
1828 flags: Flags {
1829 protect: true,
1830 ..Default::default()
1831 },
1832 secondaries: Some(vec![Secondary {
1833 chance: 33.2,
1834 target: MoveTarget::Opponent,
1835 effect: Effect::Boost(StatBoosts {
1836 attack: 0,
1837 defense: 0,
1838 special_attack: 0,
1839 special_defense: 0,
1840 speed: -1,
1841 accuracy: 0,
1842 }),
1843 }]),
1844 ..Default::default()
1845 },
1846 );
1847 } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
1848 moves.insert(
1849 Choices::BUBBLE,
1850 Choice {
1851 move_id: Choices::BUBBLE,
1852 base_power: 20.0,
1853 category: MoveCategory::Special,
1854 move_type: PokemonType::WATER,
1855 flags: Flags {
1856 protect: true,
1857 ..Default::default()
1858 },
1859 secondaries: Some(vec![Secondary {
1860 chance: 10.0,
1861 target: MoveTarget::Opponent,
1862 effect: Effect::Boost(StatBoosts {
1863 attack: 0,
1864 defense: 0,
1865 special_attack: 0,
1866 special_defense: 0,
1867 speed: -1,
1868 accuracy: 0,
1869 }),
1870 }]),
1871 ..Default::default()
1872 },
1873 );
1874 } else {
1875 moves.insert(
1876 Choices::BUBBLE,
1877 Choice {
1878 move_id: Choices::BUBBLE,
1879 base_power: 40.0,
1880 category: MoveCategory::Special,
1881 move_type: PokemonType::WATER,
1882 flags: Flags {
1883 protect: true,
1884 ..Default::default()
1885 },
1886 secondaries: Some(vec![Secondary {
1887 chance: 10.0,
1888 target: MoveTarget::Opponent,
1889 effect: Effect::Boost(StatBoosts {
1890 attack: 0,
1891 defense: 0,
1892 special_attack: 0,
1893 special_defense: 0,
1894 speed: -1,
1895 accuracy: 0,
1896 }),
1897 }]),
1898 ..Default::default()
1899 },
1900 );
1901 }
1902 if cfg!(feature = "gen1") {
1903 moves.insert(
1904 Choices::BUBBLEBEAM,
1905 Choice {
1906 move_id: Choices::BUBBLEBEAM,
1907 base_power: 65.0,
1908 category: MoveCategory::Special,
1909 move_type: PokemonType::WATER,
1910 flags: Flags {
1911 protect: true,
1912 ..Default::default()
1913 },
1914 secondaries: Some(vec![Secondary {
1915 chance: 33.2,
1916 target: MoveTarget::Opponent,
1917 effect: Effect::Boost(StatBoosts {
1918 attack: 0,
1919 defense: 0,
1920 special_attack: 0,
1921 special_defense: 0,
1922 speed: -1,
1923 accuracy: 0,
1924 }),
1925 }]),
1926 ..Default::default()
1927 },
1928 );
1929 } else {
1930 moves.insert(
1931 Choices::BUBBLEBEAM,
1932 Choice {
1933 move_id: Choices::BUBBLEBEAM,
1934 base_power: 65.0,
1935 category: MoveCategory::Special,
1936 move_type: PokemonType::WATER,
1937 flags: Flags {
1938 protect: true,
1939 ..Default::default()
1940 },
1941 secondaries: Some(vec![Secondary {
1942 chance: 10.0,
1943 target: MoveTarget::Opponent,
1944 effect: Effect::Boost(StatBoosts {
1945 attack: 0,
1946 defense: 0,
1947 special_attack: 0,
1948 special_defense: 0,
1949 speed: -1,
1950 accuracy: 0,
1951 }),
1952 }]),
1953 ..Default::default()
1954 },
1955 );
1956 }
1957 moves.insert(
1958 Choices::BUGBITE,
1959 Choice {
1960 move_id: Choices::BUGBITE,
1961 base_power: 60.0,
1962 category: MoveCategory::Physical,
1963 move_type: PokemonType::BUG,
1964 flags: Flags {
1965 contact: true,
1966 protect: true,
1967 ..Default::default()
1968 },
1969 ..Default::default()
1970 },
1971 );
1972 moves.insert(
1973 Choices::BUGBUZZ,
1974 Choice {
1975 move_id: Choices::BUGBUZZ,
1976 base_power: 90.0,
1977 category: MoveCategory::Special,
1978 move_type: PokemonType::BUG,
1979 flags: Flags {
1980 protect: true,
1981 sound: true,
1982 ..Default::default()
1983 },
1984 secondaries: Some(vec![Secondary {
1985 chance: 10.0,
1986 target: MoveTarget::Opponent,
1987 effect: Effect::Boost(StatBoosts {
1988 attack: 0,
1989 defense: 0,
1990 special_attack: 0,
1991 special_defense: -1,
1992 speed: 0,
1993 accuracy: 0,
1994 }),
1995 }]),
1996 ..Default::default()
1997 },
1998 );
1999 moves.insert(
2000 Choices::BULKUP,
2001 Choice {
2002 move_id: Choices::BULKUP,
2003 target: MoveTarget::User,
2004 move_type: PokemonType::FIGHTING,
2005 flags: Flags {
2006 ..Default::default()
2007 },
2008 boost: Some(Boost {
2009 target: MoveTarget::User,
2010 boosts: StatBoosts {
2011 attack: 1,
2012 defense: 1,
2013 special_attack: 0,
2014 special_defense: 0,
2015 speed: 0,
2016 accuracy: 0,
2017 },
2018 }),
2019 ..Default::default()
2020 },
2021 );
2022 moves.insert(
2023 Choices::BULLDOZE,
2024 Choice {
2025 move_id: Choices::BULLDOZE,
2026 base_power: 60.0,
2027 category: MoveCategory::Physical,
2028 move_type: PokemonType::GROUND,
2029 flags: Flags {
2030 protect: true,
2031 ..Default::default()
2032 },
2033 secondaries: Some(vec![Secondary {
2034 chance: 100.0,
2035 target: MoveTarget::Opponent,
2036 effect: Effect::Boost(StatBoosts {
2037 attack: 0,
2038 defense: 0,
2039 special_attack: 0,
2040 special_defense: 0,
2041 speed: -1,
2042 accuracy: 0,
2043 }),
2044 }]),
2045 ..Default::default()
2046 },
2047 );
2048 moves.insert(
2049 Choices::BULLETPUNCH,
2050 Choice {
2051 move_id: Choices::BULLETPUNCH,
2052 base_power: 40.0,
2053 category: MoveCategory::Physical,
2054 priority: 1,
2055 move_type: PokemonType::STEEL,
2056 flags: Flags {
2057 contact: true,
2058 protect: true,
2059 punch: true,
2060 ..Default::default()
2061 },
2062 ..Default::default()
2063 },
2064 );
2065 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
2066 moves.insert(
2067 Choices::BULLETSEED,
2068 Choice {
2069 move_id: Choices::BULLETSEED,
2070 base_power: 10.0,
2071 category: MoveCategory::Physical,
2072 move_type: PokemonType::GRASS,
2073 flags: Flags {
2074 bullet: true,
2075 protect: true,
2076 ..Default::default()
2077 },
2078 ..Default::default()
2079 },
2080 );
2081 } else {
2082 moves.insert(
2083 Choices::BULLETSEED,
2084 Choice {
2085 move_id: Choices::BULLETSEED,
2086 base_power: 25.0,
2087 category: MoveCategory::Physical,
2088 move_type: PokemonType::GRASS,
2089 flags: Flags {
2090 bullet: true,
2091 protect: true,
2092 ..Default::default()
2093 },
2094 ..Default::default()
2095 },
2096 );
2097 }
2098 moves.insert(
2099 Choices::BURNINGBULWARK,
2100 Choice {
2101 move_id: Choices::BURNINGBULWARK,
2102 category: MoveCategory::Status,
2103 move_type: PokemonType::FIRE,
2104 priority: 4,
2105 flags: Flags {
2106 ..Default::default()
2107 },
2108 volatile_status: Some(VolatileStatus {
2109 target: MoveTarget::User,
2110 volatile_status: PokemonVolatileStatus::BURNINGBULWARK,
2111 }),
2112 ..Default::default()
2113 },
2114 );
2115 moves.insert(
2116 Choices::BURNINGJEALOUSY,
2117 Choice {
2118 move_id: Choices::BURNINGJEALOUSY,
2119 base_power: 70.0,
2120 category: MoveCategory::Special,
2121 move_type: PokemonType::FIRE,
2122 flags: Flags {
2123 protect: true,
2124 ..Default::default()
2125 },
2126 ..Default::default()
2127 },
2128 );
2129 moves.insert(
2130 Choices::BURNUP,
2131 Choice {
2132 move_id: Choices::BURNUP,
2133 base_power: 130.0,
2134 category: MoveCategory::Special,
2135 move_type: PokemonType::FIRE,
2136 flags: Flags {
2137 protect: true,
2138 ..Default::default()
2139 },
2140 ..Default::default()
2141 },
2142 );
2143 moves.insert(
2144 Choices::BUZZYBUZZ,
2145 Choice {
2146 move_id: Choices::BUZZYBUZZ,
2147 base_power: 60.0,
2148 category: MoveCategory::Special,
2149 move_type: PokemonType::ELECTRIC,
2150 flags: Flags {
2151 protect: true,
2152 ..Default::default()
2153 },
2154 secondaries: Some(vec![Secondary {
2155 chance: 100.0,
2156 target: MoveTarget::Opponent,
2157 effect: Effect::Status(PokemonStatus::PARALYZE),
2158 }]),
2159 ..Default::default()
2160 },
2161 );
2162 moves.insert(
2163 Choices::CALMMIND,
2164 Choice {
2165 move_id: Choices::CALMMIND,
2166 target: MoveTarget::User,
2167 move_type: PokemonType::PSYCHIC,
2168 flags: Flags {
2169 ..Default::default()
2170 },
2171 boost: Some(Boost {
2172 target: MoveTarget::User,
2173 boosts: StatBoosts {
2174 attack: 0,
2175 defense: 0,
2176 special_attack: 1,
2177 special_defense: 1,
2178 speed: 0,
2179 accuracy: 0,
2180 },
2181 }),
2182 ..Default::default()
2183 },
2184 );
2185 moves.insert(
2186 Choices::CAMOUFLAGE,
2187 Choice {
2188 move_id: Choices::CAMOUFLAGE,
2189 target: MoveTarget::User,
2190 move_type: PokemonType::NORMAL,
2191 flags: Flags {
2192 ..Default::default()
2193 },
2194 ..Default::default()
2195 },
2196 );
2197 moves.insert(
2198 Choices::CAPTIVATE,
2199 Choice {
2200 move_id: Choices::CAPTIVATE,
2201 move_type: PokemonType::NORMAL,
2202 flags: Flags {
2203 protect: true,
2204 reflectable: true,
2205 ..Default::default()
2206 },
2207 boost: Some(Boost {
2208 target: MoveTarget::Opponent,
2209 boosts: StatBoosts {
2210 attack: 0,
2211 defense: 0,
2212 special_attack: -2,
2213 special_defense: 0,
2214 speed: 0,
2215 accuracy: 0,
2216 },
2217 }),
2218 ..Default::default()
2219 },
2220 );
2221 moves.insert(
2222 Choices::CEASELESSEDGE,
2223 Choice {
2224 move_id: Choices::CEASELESSEDGE,
2225 accuracy: 90.0,
2226 base_power: 65.0,
2227 category: MoveCategory::Physical,
2228 move_type: PokemonType::DARK,
2229 flags: Flags {
2230 contact: true,
2231 protect: true,
2232 slicing: true,
2233 ..Default::default()
2234 },
2235 side_condition: Some(SideCondition {
2236 target: MoveTarget::Opponent,
2237 condition: PokemonSideCondition::Spikes,
2238 }),
2239 ..Default::default()
2240 },
2241 );
2242 moves.insert(
2243 Choices::CELEBRATE,
2244 Choice {
2245 move_id: Choices::CELEBRATE,
2246 target: MoveTarget::User,
2247 move_type: PokemonType::NORMAL,
2248 flags: Flags {
2249 ..Default::default()
2250 },
2251 ..Default::default()
2252 },
2253 );
2254 moves.insert(
2255 Choices::CHARGE,
2256 Choice {
2257 move_id: Choices::CHARGE,
2258 target: MoveTarget::User,
2259 move_type: PokemonType::ELECTRIC,
2260 flags: Flags {
2261 ..Default::default()
2262 },
2263 boost: Some(Boost {
2264 target: MoveTarget::User,
2265 boosts: StatBoosts {
2266 attack: 0,
2267 defense: 0,
2268 special_attack: 0,
2269 special_defense: 1,
2270 speed: 0,
2271 accuracy: 0,
2272 },
2273 }),
2274 volatile_status: Some(VolatileStatus {
2275 target: MoveTarget::User,
2276 volatile_status: PokemonVolatileStatus::CHARGE,
2277 }),
2278 ..Default::default()
2279 },
2280 );
2281 moves.insert(
2282 Choices::CHARGEBEAM,
2283 Choice {
2284 move_id: Choices::CHARGEBEAM,
2285 accuracy: 90.0,
2286 base_power: 50.0,
2287 category: MoveCategory::Special,
2288 move_type: PokemonType::ELECTRIC,
2289 flags: Flags {
2290 protect: true,
2291 ..Default::default()
2292 },
2293 secondaries: Some(vec![Secondary {
2294 chance: 70.0,
2295 target: MoveTarget::User,
2296 effect: Effect::Boost(StatBoosts {
2297 attack: 0,
2298 defense: 0,
2299 special_attack: 1,
2300 special_defense: 0,
2301 speed: 0,
2302 accuracy: 0,
2303 }),
2304 }]),
2305 ..Default::default()
2306 },
2307 );
2308 moves.insert(
2309 Choices::CHARM,
2310 Choice {
2311 move_id: Choices::CHARM,
2312 move_type: PokemonType::FAIRY,
2313 flags: Flags {
2314 protect: true,
2315 reflectable: true,
2316 ..Default::default()
2317 },
2318 boost: Some(Boost {
2319 target: MoveTarget::Opponent,
2320 boosts: StatBoosts {
2321 attack: -2,
2322 defense: 0,
2323 special_attack: 0,
2324 special_defense: 0,
2325 speed: 0,
2326 accuracy: 0,
2327 },
2328 }),
2329 ..Default::default()
2330 },
2331 );
2332 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
2333 moves.insert(
2334 Choices::CHATTER,
2335 Choice {
2336 move_id: Choices::CHATTER,
2337 base_power: 65.0,
2338 category: MoveCategory::Special,
2339 move_type: PokemonType::FLYING,
2340 flags: Flags {
2341 protect: true,
2342 sound: true,
2343 ..Default::default()
2344 },
2345 secondaries: Some(vec![Secondary {
2346 chance: 100.0,
2347 target: MoveTarget::Opponent,
2348 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
2349 }]),
2350 ..Default::default()
2351 },
2352 );
2353 } else {
2354 moves.insert(
2355 Choices::CHATTER,
2356 Choice {
2357 move_id: Choices::CHATTER,
2358 base_power: 65.0,
2359 category: MoveCategory::Special,
2360 move_type: PokemonType::FLYING,
2361 flags: Flags {
2362 protect: true,
2363 sound: true,
2364 ..Default::default()
2365 },
2366 secondaries: Some(vec![Secondary {
2367 chance: 100.0,
2368 target: MoveTarget::Opponent,
2369 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
2370 }]),
2371 ..Default::default()
2372 },
2373 );
2374 }
2375 moves.insert(
2376 Choices::CHILLINGWATER,
2377 Choice {
2378 move_id: Choices::CHILLINGWATER,
2379 base_power: 50.0,
2380 category: MoveCategory::Special,
2381 move_type: PokemonType::WATER,
2382 flags: Flags {
2383 protect: true,
2384 ..Default::default()
2385 },
2386 secondaries: Some(vec![Secondary {
2387 chance: 100.0,
2388 target: MoveTarget::Opponent,
2389 effect: Effect::Boost(StatBoosts {
2390 attack: -1,
2391 defense: 0,
2392 special_attack: 0,
2393 special_defense: 0,
2394 speed: 0,
2395 accuracy: 0,
2396 }),
2397 }]),
2398 ..Default::default()
2399 },
2400 );
2401 moves.insert(
2402 Choices::CHILLYRECEPTION,
2403 Choice {
2404 move_id: Choices::CHILLYRECEPTION,
2405 move_type: PokemonType::ICE,
2406 flags: Flags {
2407 pivot: true,
2408 ..Default::default()
2409 },
2410 ..Default::default()
2411 },
2412 );
2413 moves.insert(
2414 Choices::CHIPAWAY,
2415 Choice {
2416 move_id: Choices::CHIPAWAY,
2417 base_power: 70.0,
2418 category: MoveCategory::Physical,
2419 move_type: PokemonType::NORMAL,
2420 flags: Flags {
2421 contact: true,
2422 protect: true,
2423 ..Default::default()
2424 },
2425 ..Default::default()
2426 },
2427 );
2428 moves.insert(
2429 Choices::CHLOROBLAST,
2430 Choice {
2431 move_id: Choices::CHLOROBLAST,
2432 accuracy: 95.0,
2433 base_power: 150.0,
2434 category: MoveCategory::Special,
2435 move_type: PokemonType::GRASS,
2436 flags: Flags {
2437 protect: true,
2438 ..Default::default()
2439 },
2440 heal: Some(Heal {
2441 target: MoveTarget::User,
2442 amount: -0.5,
2443 }),
2444 ..Default::default()
2445 },
2446 );
2447 moves.insert(
2448 Choices::CIRCLETHROW,
2449 Choice {
2450 move_id: Choices::CIRCLETHROW,
2451 accuracy: 90.0,
2452 base_power: 60.0,
2453 category: MoveCategory::Physical,
2454 priority: -6,
2455 move_type: PokemonType::FIGHTING,
2456 flags: Flags {
2457 contact: true,
2458 drag: true,
2459 protect: true,
2460 ..Default::default()
2461 },
2462 ..Default::default()
2463 },
2464 );
2465 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
2466 moves.insert(
2467 Choices::CLAMP,
2468 Choice {
2469 move_id: Choices::CLAMP,
2470 accuracy: 75.0,
2471 base_power: 35.0,
2472 category: MoveCategory::Physical,
2473 move_type: PokemonType::WATER,
2474 flags: Flags {
2475 contact: true,
2476 protect: true,
2477 ..Default::default()
2478 },
2479 volatile_status: Some(VolatileStatus {
2480 target: MoveTarget::Opponent,
2481 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
2482 }),
2483 ..Default::default()
2484 },
2485 );
2486 } else {
2487 moves.insert(
2488 Choices::CLAMP,
2489 Choice {
2490 move_id: Choices::CLAMP,
2491 accuracy: 85.0,
2492 base_power: 35.0,
2493 category: MoveCategory::Physical,
2494 move_type: PokemonType::WATER,
2495 flags: Flags {
2496 contact: true,
2497 protect: true,
2498 ..Default::default()
2499 },
2500 volatile_status: Some(VolatileStatus {
2501 target: MoveTarget::Opponent,
2502 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
2503 }),
2504 ..Default::default()
2505 },
2506 );
2507 }
2508 moves.insert(
2509 Choices::CLANGINGSCALES,
2510 Choice {
2511 move_id: Choices::CLANGINGSCALES,
2512 base_power: 110.0,
2513 category: MoveCategory::Special,
2514 move_type: PokemonType::DRAGON,
2515 flags: Flags {
2516 protect: true,
2517 sound: true,
2518 ..Default::default()
2519 },
2520 boost: Some(Boost {
2521 target: MoveTarget::User,
2522 boosts: StatBoosts {
2523 attack: 0,
2524 defense: -1,
2525 special_attack: 0,
2526 special_defense: 0,
2527 speed: 0,
2528 accuracy: 0,
2529 },
2530 }),
2531 ..Default::default()
2532 },
2533 );
2534 moves.insert(
2535 Choices::CLANGOROUSSOUL,
2536 Choice {
2537 move_id: Choices::CLANGOROUSSOUL,
2538 target: MoveTarget::User,
2539 move_type: PokemonType::DRAGON,
2540 flags: Flags {
2541 sound: true,
2542 ..Default::default()
2543 },
2544 ..Default::default()
2545 },
2546 );
2547 moves.insert(
2548 Choices::CLEARSMOG,
2549 Choice {
2550 move_id: Choices::CLEARSMOG,
2551 base_power: 50.0,
2552 category: MoveCategory::Special,
2553 move_type: PokemonType::POISON,
2554 flags: Flags {
2555 protect: true,
2556 ..Default::default()
2557 },
2558 ..Default::default()
2559 },
2560 );
2561 moves.insert(
2562 Choices::CLOSECOMBAT,
2563 Choice {
2564 move_id: Choices::CLOSECOMBAT,
2565 base_power: 120.0,
2566 category: MoveCategory::Physical,
2567 move_type: PokemonType::FIGHTING,
2568 flags: Flags {
2569 contact: true,
2570 protect: true,
2571 ..Default::default()
2572 },
2573 boost: Some(Boost {
2574 target: MoveTarget::User,
2575 boosts: StatBoosts {
2576 attack: 0,
2577 defense: -1,
2578 special_attack: 0,
2579 special_defense: -1,
2580 speed: 0,
2581 accuracy: 0,
2582 },
2583 }),
2584 ..Default::default()
2585 },
2586 );
2587 moves.insert(
2588 Choices::COACHING,
2589 Choice {
2590 move_id: Choices::COACHING,
2591 target: MoveTarget::User,
2592 move_type: PokemonType::FIGHTING,
2593 flags: Flags {
2594 ..Default::default()
2595 },
2596 boost: Some(Boost {
2597 target: MoveTarget::User,
2598 boosts: StatBoosts {
2599 attack: 1,
2600 defense: 1,
2601 special_attack: 0,
2602 special_defense: 0,
2603 speed: 0,
2604 accuracy: 0,
2605 },
2606 }),
2607 ..Default::default()
2608 },
2609 );
2610 moves.insert(
2611 Choices::COIL,
2612 Choice {
2613 move_id: Choices::COIL,
2614 target: MoveTarget::User,
2615 move_type: PokemonType::POISON,
2616 flags: Flags {
2617 ..Default::default()
2618 },
2619 boost: Some(Boost {
2620 target: MoveTarget::User,
2621 boosts: StatBoosts {
2622 attack: 1,
2623 defense: 1,
2624 special_attack: 0,
2625 special_defense: 0,
2626 speed: 0,
2627 accuracy: 1,
2628 },
2629 }),
2630 ..Default::default()
2631 },
2632 );
2633 moves.insert(
2634 Choices::COLLISIONCOURSE,
2635 Choice {
2636 move_id: Choices::COLLISIONCOURSE,
2637 base_power: 100.0,
2638 category: MoveCategory::Physical,
2639 move_type: PokemonType::FIGHTING,
2640 flags: Flags {
2641 contact: true,
2642 protect: true,
2643 ..Default::default()
2644 },
2645 ..Default::default()
2646 },
2647 );
2648 moves.insert(
2649 Choices::COMBATTORQUE,
2650 Choice {
2651 move_id: Choices::COMBATTORQUE,
2652 base_power: 100.0,
2653 category: MoveCategory::Physical,
2654 move_type: PokemonType::FIGHTING,
2655 flags: Flags {
2656 protect: true,
2657 ..Default::default()
2658 },
2659 secondaries: Some(vec![Secondary {
2660 chance: 30.0,
2661 target: MoveTarget::Opponent,
2662 effect: Effect::Status(PokemonStatus::PARALYZE),
2663 }]),
2664 ..Default::default()
2665 },
2666 );
2667 moves.insert(
2668 Choices::COMETPUNCH,
2669 Choice {
2670 move_id: Choices::COMETPUNCH,
2671 accuracy: 85.0,
2672 base_power: 18.0,
2673 category: MoveCategory::Physical,
2674 move_type: PokemonType::NORMAL,
2675 flags: Flags {
2676 contact: true,
2677 protect: true,
2678 punch: true,
2679 ..Default::default()
2680 },
2681 ..Default::default()
2682 },
2683 );
2684 moves.insert(
2685 Choices::COMEUPPANCE,
2686 Choice {
2687 move_id: Choices::COMEUPPANCE,
2688 category: MoveCategory::Physical,
2689 move_type: PokemonType::DARK,
2690 flags: Flags {
2691 contact: true,
2692 protect: true,
2693 ..Default::default()
2694 },
2695 ..Default::default()
2696 },
2697 );
2698 moves.insert(
2699 Choices::CONFIDE,
2700 Choice {
2701 move_id: Choices::CONFIDE,
2702 move_type: PokemonType::NORMAL,
2703 flags: Flags {
2704 reflectable: true,
2705 sound: true,
2706 ..Default::default()
2707 },
2708 boost: Some(Boost {
2709 target: MoveTarget::Opponent,
2710 boosts: StatBoosts {
2711 attack: 0,
2712 defense: 0,
2713 special_attack: -1,
2714 special_defense: 0,
2715 speed: 0,
2716 accuracy: 0,
2717 },
2718 }),
2719 ..Default::default()
2720 },
2721 );
2722 moves.insert(
2723 Choices::CONFUSERAY,
2724 Choice {
2725 move_id: Choices::CONFUSERAY,
2726 move_type: PokemonType::GHOST,
2727 flags: Flags {
2728 protect: true,
2729 reflectable: true,
2730 ..Default::default()
2731 },
2732 volatile_status: Some(VolatileStatus {
2733 target: MoveTarget::Opponent,
2734 volatile_status: PokemonVolatileStatus::CONFUSION,
2735 }),
2736 ..Default::default()
2737 },
2738 );
2739 moves.insert(
2740 Choices::CONFUSION,
2741 Choice {
2742 move_id: Choices::CONFUSION,
2743 base_power: 50.0,
2744 category: MoveCategory::Special,
2745 move_type: PokemonType::PSYCHIC,
2746 flags: Flags {
2747 protect: true,
2748 ..Default::default()
2749 },
2750 secondaries: Some(vec![Secondary {
2751 chance: 10.0,
2752 target: MoveTarget::Opponent,
2753 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
2754 }]),
2755 ..Default::default()
2756 },
2757 );
2758 if cfg!(feature = "gen1") {
2759 moves.insert(
2760 Choices::CONSTRICT,
2761 Choice {
2762 move_id: Choices::CONSTRICT,
2763 base_power: 10.0,
2764 category: MoveCategory::Physical,
2765 move_type: PokemonType::NORMAL,
2766 flags: Flags {
2767 contact: true,
2768 protect: true,
2769 ..Default::default()
2770 },
2771 secondaries: Some(vec![Secondary {
2772 chance: 33.2,
2773 target: MoveTarget::Opponent,
2774 effect: Effect::Boost(StatBoosts {
2775 attack: 0,
2776 defense: 0,
2777 special_attack: 0,
2778 special_defense: 0,
2779 speed: -1,
2780 accuracy: 0,
2781 }),
2782 }]),
2783 ..Default::default()
2784 },
2785 );
2786 } else {
2787 moves.insert(
2788 Choices::CONSTRICT,
2789 Choice {
2790 move_id: Choices::CONSTRICT,
2791 base_power: 10.0,
2792 category: MoveCategory::Physical,
2793 move_type: PokemonType::NORMAL,
2794 flags: Flags {
2795 contact: true,
2796 protect: true,
2797 ..Default::default()
2798 },
2799 secondaries: Some(vec![Secondary {
2800 chance: 10.0,
2801 target: MoveTarget::Opponent,
2802 effect: Effect::Boost(StatBoosts {
2803 attack: 0,
2804 defense: 0,
2805 special_attack: 0,
2806 special_defense: 0,
2807 speed: -1,
2808 accuracy: 0,
2809 }),
2810 }]),
2811 ..Default::default()
2812 },
2813 );
2814 }
2815 moves.insert(
2816 Choices::CONVERSION,
2817 Choice {
2818 move_id: Choices::CONVERSION,
2819 target: MoveTarget::User,
2820 move_type: PokemonType::NORMAL,
2821 flags: Flags {
2822 ..Default::default()
2823 },
2824 ..Default::default()
2825 },
2826 );
2827 moves.insert(
2828 Choices::CONVERSION2,
2829 Choice {
2830 move_id: Choices::CONVERSION2,
2831 move_type: PokemonType::NORMAL,
2832 flags: Flags {
2833 ..Default::default()
2834 },
2835 ..Default::default()
2836 },
2837 );
2838 moves.insert(
2839 Choices::COPYCAT,
2840 Choice {
2841 move_id: Choices::COPYCAT,
2842 target: MoveTarget::User,
2843 move_type: PokemonType::NORMAL,
2844 flags: Flags {
2845 ..Default::default()
2846 },
2847 ..Default::default()
2848 },
2849 );
2850 moves.insert(
2851 Choices::COREENFORCER,
2852 Choice {
2853 move_id: Choices::COREENFORCER,
2854 base_power: 100.0,
2855 category: MoveCategory::Special,
2856 move_type: PokemonType::DRAGON,
2857 flags: Flags {
2858 protect: true,
2859 ..Default::default()
2860 },
2861 ..Default::default()
2862 },
2863 );
2864 moves.insert(
2865 Choices::CORROSIVEGAS,
2866 Choice {
2867 move_id: Choices::CORROSIVEGAS,
2868 move_type: PokemonType::POISON,
2869 flags: Flags {
2870 protect: true,
2871 reflectable: true,
2872 ..Default::default()
2873 },
2874 ..Default::default()
2875 },
2876 );
2877 moves.insert(
2878 Choices::COSMICPOWER,
2879 Choice {
2880 move_id: Choices::COSMICPOWER,
2881 target: MoveTarget::User,
2882 move_type: PokemonType::PSYCHIC,
2883 flags: Flags {
2884 ..Default::default()
2885 },
2886 boost: Some(Boost {
2887 target: MoveTarget::User,
2888 boosts: StatBoosts {
2889 attack: 0,
2890 defense: 1,
2891 special_attack: 0,
2892 special_defense: 1,
2893 speed: 0,
2894 accuracy: 0,
2895 },
2896 }),
2897 ..Default::default()
2898 },
2899 );
2900 moves.insert(
2901 Choices::COTTONGUARD,
2902 Choice {
2903 move_id: Choices::COTTONGUARD,
2904 target: MoveTarget::User,
2905 move_type: PokemonType::GRASS,
2906 flags: Flags {
2907 ..Default::default()
2908 },
2909 boost: Some(Boost {
2910 target: MoveTarget::User,
2911 boosts: StatBoosts {
2912 attack: 0,
2913 defense: 3,
2914 special_attack: 0,
2915 special_defense: 0,
2916 speed: 0,
2917 accuracy: 0,
2918 },
2919 }),
2920 ..Default::default()
2921 },
2922 );
2923 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
2924 moves.insert(
2925 Choices::COTTONSPORE,
2926 Choice {
2927 move_id: Choices::COTTONSPORE,
2928 accuracy: 85.0,
2929 move_type: PokemonType::GRASS,
2930 flags: Flags {
2931 powder: true,
2932 protect: true,
2933 reflectable: true,
2934 ..Default::default()
2935 },
2936 boost: Some(Boost {
2937 target: MoveTarget::Opponent,
2938 boosts: StatBoosts {
2939 attack: 0,
2940 defense: 0,
2941 special_attack: 0,
2942 special_defense: 0,
2943 speed: -2,
2944 accuracy: 0,
2945 },
2946 }),
2947 ..Default::default()
2948 },
2949 );
2950 } else {
2951 moves.insert(
2952 Choices::COTTONSPORE,
2953 Choice {
2954 move_id: Choices::COTTONSPORE,
2955 move_type: PokemonType::GRASS,
2956 flags: Flags {
2957 powder: true,
2958 protect: true,
2959 reflectable: true,
2960 ..Default::default()
2961 },
2962 boost: Some(Boost {
2963 target: MoveTarget::Opponent,
2964 boosts: StatBoosts {
2965 attack: 0,
2966 defense: 0,
2967 special_attack: 0,
2968 special_defense: 0,
2969 speed: -2,
2970 accuracy: 0,
2971 },
2972 }),
2973 ..Default::default()
2974 },
2975 );
2976 }
2977 moves.insert(
2978 Choices::COUNTER,
2979 Choice {
2980 move_id: Choices::COUNTER,
2981 category: MoveCategory::Physical,
2982 priority: -5,
2983 move_type: PokemonType::FIGHTING,
2984 flags: Flags {
2985 contact: true,
2986 protect: true,
2987 ..Default::default()
2988 },
2989 ..Default::default()
2990 },
2991 );
2992 moves.insert(
2993 Choices::COURTCHANGE,
2994 Choice {
2995 move_id: Choices::COURTCHANGE,
2996 move_type: PokemonType::NORMAL,
2997 flags: Flags {
2998 ..Default::default()
2999 },
3000 ..Default::default()
3001 },
3002 );
3003 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
3004 moves.insert(
3005 Choices::COVET,
3006 Choice {
3007 move_id: Choices::COVET,
3008 base_power: 40.0,
3009 category: MoveCategory::Physical,
3010 move_type: PokemonType::NORMAL,
3011 flags: Flags {
3012 contact: true,
3013 protect: true,
3014 ..Default::default()
3015 },
3016 ..Default::default()
3017 },
3018 );
3019 } else {
3020 moves.insert(
3021 Choices::COVET,
3022 Choice {
3023 move_id: Choices::COVET,
3024 base_power: 60.0,
3025 category: MoveCategory::Physical,
3026 move_type: PokemonType::NORMAL,
3027 flags: Flags {
3028 contact: true,
3029 protect: true,
3030 ..Default::default()
3031 },
3032 ..Default::default()
3033 },
3034 );
3035 }
3036 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
3037 moves.insert(
3038 Choices::CRABHAMMER,
3039 Choice {
3040 move_id: Choices::CRABHAMMER,
3041 accuracy: 85.0,
3042 base_power: 90.0,
3043 category: MoveCategory::Physical,
3044 move_type: PokemonType::WATER,
3045 flags: Flags {
3046 contact: true,
3047 protect: true,
3048 ..Default::default()
3049 },
3050 ..Default::default()
3051 },
3052 );
3053 } else {
3054 moves.insert(
3055 Choices::CRABHAMMER,
3056 Choice {
3057 move_id: Choices::CRABHAMMER,
3058 accuracy: 90.0,
3059 base_power: 100.0,
3060 category: MoveCategory::Physical,
3061 move_type: PokemonType::WATER,
3062 flags: Flags {
3063 contact: true,
3064 protect: true,
3065 ..Default::default()
3066 },
3067 ..Default::default()
3068 },
3069 );
3070 }
3071 moves.insert(
3072 Choices::CRAFTYSHIELD,
3073 Choice {
3074 move_id: Choices::CRAFTYSHIELD,
3075 priority: 3,
3076 target: MoveTarget::User,
3077 move_type: PokemonType::FAIRY,
3078 flags: Flags {
3079 ..Default::default()
3080 },
3081 side_condition: Some(SideCondition {
3082 target: MoveTarget::User,
3083 condition: PokemonSideCondition::CraftyShield,
3084 }),
3085 ..Default::default()
3086 },
3087 );
3088 moves.insert(
3089 Choices::CROSSCHOP,
3090 Choice {
3091 move_id: Choices::CROSSCHOP,
3092 accuracy: 80.0,
3093 base_power: 100.0,
3094 category: MoveCategory::Physical,
3095 move_type: PokemonType::FIGHTING,
3096 flags: Flags {
3097 contact: true,
3098 protect: true,
3099 ..Default::default()
3100 },
3101 ..Default::default()
3102 },
3103 );
3104 moves.insert(
3105 Choices::CROSSPOISON,
3106 Choice {
3107 move_id: Choices::CROSSPOISON,
3108 base_power: 70.0,
3109 category: MoveCategory::Physical,
3110 move_type: PokemonType::POISON,
3111 flags: Flags {
3112 contact: true,
3113 protect: true,
3114 slicing: true,
3115 ..Default::default()
3116 },
3117 secondaries: Some(vec![Secondary {
3118 chance: 10.0,
3119 target: MoveTarget::Opponent,
3120 effect: Effect::Status(PokemonStatus::POISON),
3121 }]),
3122 ..Default::default()
3123 },
3124 );
3125 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
3126 moves.insert(
3127 Choices::CRUNCH,
3128 Choice {
3129 move_id: Choices::CRUNCH,
3130 base_power: 80.0,
3131 category: MoveCategory::Physical,
3132 move_type: PokemonType::DARK,
3133 flags: Flags {
3134 bite: true,
3135 contact: true,
3136 protect: true,
3137 ..Default::default()
3138 },
3139 secondaries: Some(vec![Secondary {
3140 chance: 20.0,
3141 target: MoveTarget::Opponent,
3142 effect: Effect::Boost(StatBoosts {
3143 attack: 0,
3144 defense: 0,
3145 special_attack: 0,
3146 special_defense: -1,
3147 speed: 0,
3148 accuracy: 0,
3149 }),
3150 }]),
3151 ..Default::default()
3152 },
3153 );
3154 }
3155 else {
3156 moves.insert(
3157 Choices::CRUNCH,
3158 Choice {
3159 move_id: Choices::CRUNCH,
3160 base_power: 80.0,
3161 category: MoveCategory::Physical,
3162 move_type: PokemonType::DARK,
3163 flags: Flags {
3164 bite: true,
3165 contact: true,
3166 protect: true,
3167 ..Default::default()
3168 },
3169 secondaries: Some(vec![Secondary {
3170 chance: 20.0,
3171 target: MoveTarget::Opponent,
3172 effect: Effect::Boost(StatBoosts {
3173 attack: 0,
3174 defense: -1,
3175 special_attack: 0,
3176 special_defense: 0,
3177 speed: 0,
3178 accuracy: 0,
3179 }),
3180 }]),
3181 ..Default::default()
3182 },
3183 );
3184 }
3185 moves.insert(
3186 Choices::CRUSHCLAW,
3187 Choice {
3188 move_id: Choices::CRUSHCLAW,
3189 accuracy: 95.0,
3190 base_power: 75.0,
3191 category: MoveCategory::Physical,
3192 move_type: PokemonType::NORMAL,
3193 flags: Flags {
3194 contact: true,
3195 protect: true,
3196 ..Default::default()
3197 },
3198 secondaries: Some(vec![Secondary {
3199 chance: 50.0,
3200 target: MoveTarget::Opponent,
3201 effect: Effect::Boost(StatBoosts {
3202 attack: 0,
3203 defense: -1,
3204 special_attack: 0,
3205 special_defense: 0,
3206 speed: 0,
3207 accuracy: 0,
3208 }),
3209 }]),
3210 ..Default::default()
3211 },
3212 );
3213 moves.insert(
3214 Choices::CRUSHGRIP,
3215 Choice {
3216 move_id: Choices::CRUSHGRIP,
3217 category: MoveCategory::Physical,
3218 move_type: PokemonType::NORMAL,
3219 flags: Flags {
3220 contact: true,
3221 protect: true,
3222 ..Default::default()
3223 },
3224 ..Default::default()
3225 },
3226 );
3227 moves.insert(
3228 Choices::CURSE,
3229 Choice {
3230 move_id: Choices::CURSE,
3231 move_type: PokemonType::GHOST,
3232 flags: Flags {
3233 ..Default::default()
3234 },
3235 boost: Some(Boost {
3236 target: MoveTarget::User,
3237 boosts: StatBoosts {
3238 attack: 1,
3239 defense: 1,
3240 special_attack: 0,
3241 special_defense: 0,
3242 speed: -1,
3243 accuracy: 0,
3244 },
3245 }),
3246 volatile_status: Some(VolatileStatus {
3247 target: MoveTarget::User,
3248 volatile_status: PokemonVolatileStatus::CURSE,
3249 }),
3250 ..Default::default()
3251 },
3252 );
3253 moves.insert(
3254 Choices::CUT,
3255 Choice {
3256 move_id: Choices::CUT,
3257 accuracy: 95.0,
3258 base_power: 50.0,
3259 category: MoveCategory::Physical,
3260 move_type: PokemonType::NORMAL,
3261 flags: Flags {
3262 contact: true,
3263 protect: true,
3264 slicing: true,
3265 ..Default::default()
3266 },
3267 ..Default::default()
3268 },
3269 );
3270 moves.insert(
3271 Choices::DARKESTLARIAT,
3272 Choice {
3273 move_id: Choices::DARKESTLARIAT,
3274 base_power: 85.0,
3275 category: MoveCategory::Physical,
3276 move_type: PokemonType::DARK,
3277 flags: Flags {
3278 contact: true,
3279 protect: true,
3280 ..Default::default()
3281 },
3282 ..Default::default()
3283 },
3284 );
3285 moves.insert(
3286 Choices::DARKPULSE,
3287 Choice {
3288 move_id: Choices::DARKPULSE,
3289 base_power: 80.0,
3290 category: MoveCategory::Special,
3291 move_type: PokemonType::DARK,
3292 flags: Flags {
3293 protect: true,
3294 pulse: true,
3295 ..Default::default()
3296 },
3297 secondaries: Some(vec![Secondary {
3298 chance: 20.0,
3299 target: MoveTarget::Opponent,
3300 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
3301 }]),
3302 ..Default::default()
3303 },
3304 );
3305 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
3306 moves.insert(
3307 Choices::DARKVOID,
3308 Choice {
3309 move_id: Choices::DARKVOID,
3310 accuracy: 80.0,
3311 status: Some(Status {
3312 target: MoveTarget::Opponent,
3313 status: PokemonStatus::SLEEP,
3314 }),
3315 move_type: PokemonType::DARK,
3316 flags: Flags {
3317 protect: true,
3318 reflectable: true,
3319 ..Default::default()
3320 },
3321 ..Default::default()
3322 },
3323 );
3324 } else {
3325 moves.insert(
3326 Choices::DARKVOID,
3327 Choice {
3328 move_id: Choices::DARKVOID,
3329 accuracy: 50.0,
3330 status: Some(Status {
3331 target: MoveTarget::Opponent,
3332 status: PokemonStatus::SLEEP,
3333 }),
3334 move_type: PokemonType::DARK,
3335 flags: Flags {
3336 protect: true,
3337 reflectable: true,
3338 ..Default::default()
3339 },
3340 ..Default::default()
3341 },
3342 );
3343 }
3344 moves.insert(
3345 Choices::DAZZLINGGLEAM,
3346 Choice {
3347 move_id: Choices::DAZZLINGGLEAM,
3348 base_power: 80.0,
3349 category: MoveCategory::Special,
3350 move_type: PokemonType::FAIRY,
3351 flags: Flags {
3352 protect: true,
3353 ..Default::default()
3354 },
3355 ..Default::default()
3356 },
3357 );
3358 moves.insert(
3359 Choices::DECORATE,
3360 Choice {
3361 move_id: Choices::DECORATE,
3362 move_type: PokemonType::FAIRY,
3363 flags: Flags {
3364 ..Default::default()
3365 },
3366 boost: Some(Boost {
3367 target: MoveTarget::Opponent,
3368 boosts: StatBoosts {
3369 attack: 2,
3370 defense: 0,
3371 special_attack: 2,
3372 special_defense: 0,
3373 speed: 0,
3374 accuracy: 0,
3375 },
3376 }),
3377 ..Default::default()
3378 },
3379 );
3380 moves.insert(
3381 Choices::DEFENDORDER,
3382 Choice {
3383 move_id: Choices::DEFENDORDER,
3384 target: MoveTarget::User,
3385 move_type: PokemonType::BUG,
3386 flags: Flags {
3387 ..Default::default()
3388 },
3389 boost: Some(Boost {
3390 target: MoveTarget::User,
3391 boosts: StatBoosts {
3392 attack: 0,
3393 defense: 1,
3394 special_attack: 0,
3395 special_defense: 1,
3396 speed: 0,
3397 accuracy: 0,
3398 },
3399 }),
3400 ..Default::default()
3401 },
3402 );
3403 moves.insert(
3404 Choices::DEFENSECURL,
3405 Choice {
3406 move_id: Choices::DEFENSECURL,
3407 target: MoveTarget::User,
3408 move_type: PokemonType::NORMAL,
3409 flags: Flags {
3410 ..Default::default()
3411 },
3412 boost: Some(Boost {
3413 target: MoveTarget::User,
3414 boosts: StatBoosts {
3415 attack: 0,
3416 defense: 1,
3417 special_attack: 0,
3418 special_defense: 0,
3419 speed: 0,
3420 accuracy: 0,
3421 },
3422 }),
3423 volatile_status: Some(VolatileStatus {
3424 target: MoveTarget::User,
3425 volatile_status: PokemonVolatileStatus::DEFENSECURL,
3426 }),
3427 ..Default::default()
3428 },
3429 );
3430 moves.insert(
3431 Choices::DEFOG,
3432 Choice {
3433 move_id: Choices::DEFOG,
3434 move_type: PokemonType::FLYING,
3435 flags: Flags {
3436 protect: true,
3437 reflectable: true,
3438 ..Default::default()
3439 },
3440 boost: Some(Boost {
3441 target: MoveTarget::Opponent,
3442 boosts: StatBoosts {
3443 attack: 0,
3444 defense: 0,
3445 special_attack: 0,
3446 special_defense: 0,
3447 speed: 0,
3448 accuracy: 0,
3449 },
3450 }),
3451 ..Default::default()
3452 },
3453 );
3454 moves.insert(
3455 Choices::DESTINYBOND,
3456 Choice {
3457 move_id: Choices::DESTINYBOND,
3458 target: MoveTarget::User,
3459 move_type: PokemonType::GHOST,
3460 flags: Flags {
3461 ..Default::default()
3462 },
3463 volatile_status: Some(VolatileStatus {
3464 target: MoveTarget::User,
3465 volatile_status: PokemonVolatileStatus::DESTINYBOND,
3466 }),
3467 ..Default::default()
3468 },
3469 );
3470 moves.insert(
3471 Choices::DETECT,
3472 Choice {
3473 move_id: Choices::DETECT,
3474 priority: 4,
3475 target: MoveTarget::User,
3476 move_type: PokemonType::FIGHTING,
3477 flags: Flags {
3478 ..Default::default()
3479 },
3480 volatile_status: Some(VolatileStatus {
3481 target: MoveTarget::User,
3482 volatile_status: PokemonVolatileStatus::PROTECT,
3483 }),
3484 ..Default::default()
3485 },
3486 );
3487
3488 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
3489 moves.insert(
3490 Choices::DIAMONDSTORM,
3491 Choice {
3492 move_id: Choices::DIAMONDSTORM,
3493 accuracy: 95.0,
3494 base_power: 100.0,
3495 category: MoveCategory::Physical,
3496 move_type: PokemonType::ROCK,
3497 flags: Flags {
3498 protect: true,
3499 ..Default::default()
3500 },
3501 secondaries: Some(vec![Secondary {
3502 chance: 50.0,
3503 target: MoveTarget::User,
3504 effect: Effect::Boost(StatBoosts {
3505 attack: 0,
3506 defense: 1,
3507 special_attack: 0,
3508 special_defense: 0,
3509 speed: 0,
3510 accuracy: 0,
3511 }),
3512 }]),
3513 ..Default::default()
3514 },
3515 );
3516 } else {
3517 moves.insert(
3518 Choices::DIAMONDSTORM,
3519 Choice {
3520 move_id: Choices::DIAMONDSTORM,
3521 accuracy: 95.0,
3522 base_power: 100.0,
3523 category: MoveCategory::Physical,
3524 move_type: PokemonType::ROCK,
3525 flags: Flags {
3526 protect: true,
3527 ..Default::default()
3528 },
3529 secondaries: Some(vec![Secondary {
3530 chance: 50.0,
3531 target: MoveTarget::User,
3532 effect: Effect::Boost(StatBoosts {
3533 attack: 0,
3534 defense: 2,
3535 special_attack: 0,
3536 special_defense: 0,
3537 speed: 0,
3538 accuracy: 0,
3539 }),
3540 }]),
3541 ..Default::default()
3542 },
3543 );
3544 }
3545 if cfg!(feature = "gen1") {
3546 moves.insert(
3547 Choices::DIG,
3548 Choice {
3549 move_id: Choices::DIG,
3550 base_power: 100.0,
3551 category: MoveCategory::Physical,
3552 move_type: PokemonType::GROUND,
3553 flags: Flags {
3554 charge: true,
3555 contact: true,
3556 protect: true,
3557 ..Default::default()
3558 },
3559 ..Default::default()
3560 },
3561 );
3562 } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") {
3563 moves.insert(
3564 Choices::DIG,
3565 Choice {
3566 move_id: Choices::DIG,
3567 base_power: 60.0,
3568 category: MoveCategory::Physical,
3569 move_type: PokemonType::GROUND,
3570 flags: Flags {
3571 charge: true,
3572 contact: true,
3573 protect: true,
3574 ..Default::default()
3575 },
3576 ..Default::default()
3577 },
3578 );
3579 } else {
3580 moves.insert(
3581 Choices::DIG,
3582 Choice {
3583 move_id: Choices::DIG,
3584 base_power: 80.0,
3585 category: MoveCategory::Physical,
3586 move_type: PokemonType::GROUND,
3587 flags: Flags {
3588 charge: true,
3589 contact: true,
3590 protect: true,
3591 ..Default::default()
3592 },
3593 ..Default::default()
3594 },
3595 );
3596 }
3597 moves.insert(
3598 Choices::DIRECLAW,
3599 Choice {
3600 move_id: Choices::DIRECLAW,
3601 base_power: 80.0,
3602 category: MoveCategory::Physical,
3603 move_type: PokemonType::POISON,
3604 flags: Flags {
3605 contact: true,
3606 protect: true,
3607 ..Default::default()
3608 },
3609 ..Default::default()
3610 },
3611 );
3612 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
3613 moves.insert(
3614 Choices::DISABLE,
3615 Choice {
3616 move_id: Choices::DISABLE,
3617 accuracy: 80.0,
3618 move_type: PokemonType::NORMAL,
3619 flags: Flags {
3620 protect: true,
3621 reflectable: true,
3622 ..Default::default()
3623 },
3624 volatile_status: Some(VolatileStatus {
3625 target: MoveTarget::Opponent,
3626 volatile_status: PokemonVolatileStatus::DISABLE,
3627 }),
3628 ..Default::default()
3629 },
3630 );
3631 } else {
3632 moves.insert(
3633 Choices::DISABLE,
3634 Choice {
3635 move_id: Choices::DISABLE,
3636 move_type: PokemonType::NORMAL,
3637 flags: Flags {
3638 protect: true,
3639 reflectable: true,
3640 ..Default::default()
3641 },
3642 volatile_status: Some(VolatileStatus {
3643 target: MoveTarget::Opponent,
3644 volatile_status: PokemonVolatileStatus::DISABLE,
3645 }),
3646 ..Default::default()
3647 },
3648 );
3649 }
3650 moves.insert(
3651 Choices::DISARMINGVOICE,
3652 Choice {
3653 move_id: Choices::DISARMINGVOICE,
3654 base_power: 40.0,
3655 category: MoveCategory::Special,
3656 move_type: PokemonType::FAIRY,
3657 flags: Flags {
3658 protect: true,
3659 sound: true,
3660 ..Default::default()
3661 },
3662 ..Default::default()
3663 },
3664 );
3665 moves.insert(
3666 Choices::DISCHARGE,
3667 Choice {
3668 move_id: Choices::DISCHARGE,
3669 base_power: 80.0,
3670 category: MoveCategory::Special,
3671 move_type: PokemonType::ELECTRIC,
3672 flags: Flags {
3673 protect: true,
3674 ..Default::default()
3675 },
3676 secondaries: Some(vec![Secondary {
3677 chance: 30.0,
3678 target: MoveTarget::Opponent,
3679 effect: Effect::Status(PokemonStatus::PARALYZE),
3680 }]),
3681 ..Default::default()
3682 },
3683 );
3684 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
3685 moves.insert(
3686 Choices::DIVE,
3687 Choice {
3688 move_id: Choices::DIVE,
3689 base_power: 60.0,
3690 category: MoveCategory::Physical,
3691 move_type: PokemonType::WATER,
3692 flags: Flags {
3693 charge: true,
3694 contact: true,
3695 protect: true,
3696 ..Default::default()
3697 },
3698 ..Default::default()
3699 },
3700 );
3701 } else {
3702 moves.insert(
3703 Choices::DIVE,
3704 Choice {
3705 move_id: Choices::DIVE,
3706 base_power: 80.0,
3707 category: MoveCategory::Physical,
3708 move_type: PokemonType::WATER,
3709 flags: Flags {
3710 charge: true,
3711 contact: true,
3712 protect: true,
3713 ..Default::default()
3714 },
3715 ..Default::default()
3716 },
3717 );
3718 }
3719 if cfg!(feature = "gen1") {
3720 moves.insert(
3721 Choices::DIZZYPUNCH,
3722 Choice {
3723 move_id: Choices::DIZZYPUNCH,
3724 base_power: 70.0,
3725 category: MoveCategory::Physical,
3726 move_type: PokemonType::NORMAL,
3727 flags: Flags {
3728 contact: true,
3729 protect: true,
3730 punch: true,
3731 ..Default::default()
3732 },
3733 ..Default::default()
3734 },
3735 );
3736 } else {
3737 moves.insert(
3738 Choices::DIZZYPUNCH,
3739 Choice {
3740 move_id: Choices::DIZZYPUNCH,
3741 base_power: 70.0,
3742 category: MoveCategory::Physical,
3743 move_type: PokemonType::NORMAL,
3744 flags: Flags {
3745 contact: true,
3746 protect: true,
3747 punch: true,
3748 ..Default::default()
3749 },
3750 secondaries: Some(vec![Secondary {
3751 chance: 20.0,
3752 target: MoveTarget::Opponent,
3753 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
3754 }]),
3755 ..Default::default()
3756 },
3757 );
3758 }
3759 moves.insert(
3760 Choices::DOODLE,
3761 Choice {
3762 move_id: Choices::DOODLE,
3763 move_type: PokemonType::NORMAL,
3764 flags: Flags {
3765 ..Default::default()
3766 },
3767 ..Default::default()
3768 },
3769 );
3770 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
3771 moves.insert(
3772 Choices::DOOMDESIRE,
3773 Choice {
3774 move_id: Choices::DOOMDESIRE,
3775 accuracy: 85.0,
3776 base_power: 120.0,
3777 category: MoveCategory::Special,
3778 move_type: PokemonType::STEEL,
3779 flags: Flags {
3780 ..Default::default()
3781 },
3782 ..Default::default()
3783 },
3784 );
3785 } else {
3786 moves.insert(
3787 Choices::DOOMDESIRE,
3788 Choice {
3789 move_id: Choices::DOOMDESIRE,
3790 base_power: 140.0,
3791 category: MoveCategory::Special,
3792 move_type: PokemonType::STEEL,
3793 flags: Flags {
3794 ..Default::default()
3795 },
3796 ..Default::default()
3797 },
3798 );
3799 }
3800 if cfg!(feature = "gen1") {
3801 moves.insert(
3802 Choices::DOUBLEEDGE,
3803 Choice {
3804 move_id: Choices::DOUBLEEDGE,
3805 base_power: 100.0,
3806 category: MoveCategory::Physical,
3807 move_type: PokemonType::NORMAL,
3808 flags: Flags {
3809 contact: true,
3810 protect: true,
3811 ..Default::default()
3812 },
3813 recoil: Some(0.33),
3814 ..Default::default()
3815 },
3816 );
3817 } else {
3818 moves.insert(
3819 Choices::DOUBLEEDGE,
3820 Choice {
3821 move_id: Choices::DOUBLEEDGE,
3822 base_power: 120.0,
3823 category: MoveCategory::Physical,
3824 move_type: PokemonType::NORMAL,
3825 flags: Flags {
3826 contact: true,
3827 protect: true,
3828 ..Default::default()
3829 },
3830 recoil: Some(0.33),
3831 ..Default::default()
3832 },
3833 );
3834 }
3835 moves.insert(
3836 Choices::DOUBLEHIT,
3837 Choice {
3838 move_id: Choices::DOUBLEHIT,
3839 accuracy: 90.0,
3840 base_power: 35.0,
3841 category: MoveCategory::Physical,
3842 move_type: PokemonType::NORMAL,
3843 flags: Flags {
3844 contact: true,
3845 protect: true,
3846 ..Default::default()
3847 },
3848 ..Default::default()
3849 },
3850 );
3851 moves.insert(
3852 Choices::DOUBLEIRONBASH,
3853 Choice {
3854 move_id: Choices::DOUBLEIRONBASH,
3855 base_power: 60.0,
3856 category: MoveCategory::Physical,
3857 move_type: PokemonType::STEEL,
3858 flags: Flags {
3859 contact: true,
3860 protect: true,
3861 punch: true,
3862 ..Default::default()
3863 },
3864 secondaries: Some(vec![Secondary {
3865 chance: 30.0,
3866 target: MoveTarget::Opponent,
3867 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
3868 }]),
3869 ..Default::default()
3870 },
3871 );
3872 moves.insert(
3873 Choices::DOUBLEKICK,
3874 Choice {
3875 move_id: Choices::DOUBLEKICK,
3876 base_power: 30.0,
3877 category: MoveCategory::Physical,
3878 move_type: PokemonType::FIGHTING,
3879 flags: Flags {
3880 contact: true,
3881 protect: true,
3882 ..Default::default()
3883 },
3884 ..Default::default()
3885 },
3886 );
3887 moves.insert(
3888 Choices::DOUBLESHOCK,
3889 Choice {
3890 move_id: Choices::DOUBLESHOCK,
3891 base_power: 120.0,
3892 category: MoveCategory::Physical,
3893 move_type: PokemonType::ELECTRIC,
3894 flags: Flags {
3895 contact: true,
3896 protect: true,
3897 ..Default::default()
3898 },
3899 ..Default::default()
3900 },
3901 );
3902 moves.insert(
3903 Choices::DOUBLESLAP,
3904 Choice {
3905 move_id: Choices::DOUBLESLAP,
3906 accuracy: 85.0,
3907 base_power: 15.0,
3908 category: MoveCategory::Physical,
3909 move_type: PokemonType::NORMAL,
3910 flags: Flags {
3911 contact: true,
3912 protect: true,
3913 ..Default::default()
3914 },
3915 ..Default::default()
3916 },
3917 );
3918 moves.insert(
3919 Choices::DOUBLETEAM,
3920 Choice {
3921 move_id: Choices::DOUBLETEAM,
3922 target: MoveTarget::User,
3923 move_type: PokemonType::NORMAL,
3924 flags: Flags {
3925 ..Default::default()
3926 },
3927 boost: Some(Boost {
3928 target: MoveTarget::User,
3929 boosts: StatBoosts {
3930 attack: 0,
3931 defense: 0,
3932 special_attack: 0,
3933 special_defense: 0,
3934 speed: 0,
3935 accuracy: 0,
3936 },
3937 }),
3938 ..Default::default()
3939 },
3940 );
3941 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
3942 moves.insert(
3943 Choices::DRACOMETEOR,
3944 Choice {
3945 move_id: Choices::DRACOMETEOR,
3946 accuracy: 90.0,
3947 base_power: 140.0,
3948 category: MoveCategory::Special,
3949 move_type: PokemonType::DRAGON,
3950 flags: Flags {
3951 protect: true,
3952 ..Default::default()
3953 },
3954 boost: Some(Boost {
3955 target: MoveTarget::User,
3956 boosts: StatBoosts {
3957 attack: 0,
3958 defense: 0,
3959 special_attack: -2,
3960 special_defense: 0,
3961 speed: 0,
3962 accuracy: 0,
3963 },
3964 }),
3965 ..Default::default()
3966 },
3967 );
3968 } else {
3969 moves.insert(
3970 Choices::DRACOMETEOR,
3971 Choice {
3972 move_id: Choices::DRACOMETEOR,
3973 accuracy: 90.0,
3974 base_power: 130.0,
3975 category: MoveCategory::Special,
3976 move_type: PokemonType::DRAGON,
3977 flags: Flags {
3978 protect: true,
3979 ..Default::default()
3980 },
3981 boost: Some(Boost {
3982 target: MoveTarget::User,
3983 boosts: StatBoosts {
3984 attack: 0,
3985 defense: 0,
3986 special_attack: -2,
3987 special_defense: 0,
3988 speed: 0,
3989 accuracy: 0,
3990 },
3991 }),
3992 ..Default::default()
3993 },
3994 );
3995 }
3996 moves.insert(
3997 Choices::DRAGONASCENT,
3998 Choice {
3999 move_id: Choices::DRAGONASCENT,
4000 base_power: 120.0,
4001 category: MoveCategory::Physical,
4002 move_type: PokemonType::FLYING,
4003 flags: Flags {
4004 contact: true,
4005 protect: true,
4006 ..Default::default()
4007 },
4008 boost: Some(Boost {
4009 target: MoveTarget::User,
4010 boosts: StatBoosts {
4011 attack: 0,
4012 defense: -1,
4013 special_attack: 0,
4014 special_defense: -1,
4015 speed: 0,
4016 accuracy: 0,
4017 },
4018 }),
4019 ..Default::default()
4020 },
4021 );
4022 moves.insert(
4023 Choices::DRAGONBREATH,
4024 Choice {
4025 move_id: Choices::DRAGONBREATH,
4026 base_power: 60.0,
4027 category: MoveCategory::Special,
4028 move_type: PokemonType::DRAGON,
4029 flags: Flags {
4030 protect: true,
4031 ..Default::default()
4032 },
4033 secondaries: Some(vec![Secondary {
4034 chance: 30.0,
4035 target: MoveTarget::Opponent,
4036 effect: Effect::Status(PokemonStatus::PARALYZE),
4037 }]),
4038 ..Default::default()
4039 },
4040 );
4041 moves.insert(
4042 Choices::DRAGONCHEER,
4043 Choice {
4044 move_id: Choices::DRAGONCHEER,
4045 base_power: 60.0,
4046 category: MoveCategory::Status,
4047 move_type: PokemonType::DRAGON,
4048 target: MoveTarget::User,
4049 flags: Flags {
4050 ..Default::default()
4051 },
4052 ..Default::default()
4053 },
4054 );
4055 moves.insert(
4056 Choices::DRAGONCLAW,
4057 Choice {
4058 move_id: Choices::DRAGONCLAW,
4059 base_power: 80.0,
4060 category: MoveCategory::Physical,
4061 move_type: PokemonType::DRAGON,
4062 flags: Flags {
4063 contact: true,
4064 protect: true,
4065 ..Default::default()
4066 },
4067 ..Default::default()
4068 },
4069 );
4070 moves.insert(
4071 Choices::DRAGONDANCE,
4072 Choice {
4073 move_id: Choices::DRAGONDANCE,
4074 target: MoveTarget::User,
4075 move_type: PokemonType::DRAGON,
4076 flags: Flags {
4077 ..Default::default()
4078 },
4079 boost: Some(Boost {
4080 target: MoveTarget::User,
4081 boosts: StatBoosts {
4082 attack: 1,
4083 defense: 0,
4084 special_attack: 0,
4085 special_defense: 0,
4086 speed: 1,
4087 accuracy: 0,
4088 },
4089 }),
4090 ..Default::default()
4091 },
4092 );
4093 moves.insert(
4094 Choices::DRAGONDARTS,
4095 Choice {
4096 move_id: Choices::DRAGONDARTS,
4097 base_power: 50.0,
4098 category: MoveCategory::Physical,
4099 move_type: PokemonType::DRAGON,
4100 flags: Flags {
4101 protect: true,
4102 ..Default::default()
4103 },
4104 ..Default::default()
4105 },
4106 );
4107 moves.insert(
4108 Choices::DRAGONENERGY,
4109 Choice {
4110 move_id: Choices::DRAGONENERGY,
4111 base_power: 150.0,
4112 category: MoveCategory::Special,
4113 move_type: PokemonType::DRAGON,
4114 flags: Flags {
4115 protect: true,
4116 ..Default::default()
4117 },
4118 ..Default::default()
4119 },
4120 );
4121 moves.insert(
4122 Choices::DRAGONHAMMER,
4123 Choice {
4124 move_id: Choices::DRAGONHAMMER,
4125 base_power: 90.0,
4126 category: MoveCategory::Physical,
4127 move_type: PokemonType::DRAGON,
4128 flags: Flags {
4129 contact: true,
4130 protect: true,
4131 ..Default::default()
4132 },
4133 ..Default::default()
4134 },
4135 );
4136 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
4137 moves.insert(
4138 Choices::DRAGONPULSE,
4139 Choice {
4140 move_id: Choices::DRAGONPULSE,
4141 base_power: 90.0,
4142 category: MoveCategory::Special,
4143 move_type: PokemonType::DRAGON,
4144 flags: Flags {
4145 protect: true,
4146 pulse: true,
4147 ..Default::default()
4148 },
4149 ..Default::default()
4150 },
4151 );
4152 } else {
4153 moves.insert(
4154 Choices::DRAGONPULSE,
4155 Choice {
4156 move_id: Choices::DRAGONPULSE,
4157 base_power: 85.0,
4158 category: MoveCategory::Special,
4159 move_type: PokemonType::DRAGON,
4160 flags: Flags {
4161 protect: true,
4162 pulse: true,
4163 ..Default::default()
4164 },
4165 ..Default::default()
4166 },
4167 );
4168 }
4169 moves.insert(
4170 Choices::DRAGONRAGE,
4171 Choice {
4172 move_id: Choices::DRAGONRAGE,
4173 category: MoveCategory::Special,
4174 move_type: PokemonType::DRAGON,
4175 flags: Flags {
4176 protect: true,
4177 ..Default::default()
4178 },
4179 ..Default::default()
4180 },
4181 );
4182 moves.insert(
4183 Choices::DRAGONRUSH,
4184 Choice {
4185 move_id: Choices::DRAGONRUSH,
4186 accuracy: 75.0,
4187 base_power: 100.0,
4188 category: MoveCategory::Physical,
4189 move_type: PokemonType::DRAGON,
4190 flags: Flags {
4191 contact: true,
4192 protect: true,
4193 ..Default::default()
4194 },
4195 secondaries: Some(vec![Secondary {
4196 chance: 20.0,
4197 target: MoveTarget::Opponent,
4198 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
4199 }]),
4200 ..Default::default()
4201 },
4202 );
4203 moves.insert(
4204 Choices::DRAGONTAIL,
4205 Choice {
4206 move_id: Choices::DRAGONTAIL,
4207 accuracy: 90.0,
4208 base_power: 60.0,
4209 category: MoveCategory::Physical,
4210 priority: -6,
4211 move_type: PokemonType::DRAGON,
4212 flags: Flags {
4213 contact: true,
4214 drag: true,
4215 protect: true,
4216 ..Default::default()
4217 },
4218 ..Default::default()
4219 },
4220 );
4221 moves.insert(
4222 Choices::DRAININGKISS,
4223 Choice {
4224 move_id: Choices::DRAININGKISS,
4225 base_power: 50.0,
4226 category: MoveCategory::Special,
4227 move_type: PokemonType::FAIRY,
4228 flags: Flags {
4229 contact: true,
4230 heal: true,
4231 protect: true,
4232 ..Default::default()
4233 },
4234 drain: Some(0.75),
4235 ..Default::default()
4236 },
4237 );
4238 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
4239 moves.insert(
4240 Choices::DRAINPUNCH,
4241 Choice {
4242 move_id: Choices::DRAINPUNCH,
4243 base_power: 60.0,
4244 category: MoveCategory::Physical,
4245 move_type: PokemonType::FIGHTING,
4246 flags: Flags {
4247 contact: true,
4248 heal: true,
4249 protect: true,
4250 punch: true,
4251 ..Default::default()
4252 },
4253 drain: Some(0.5),
4254 ..Default::default()
4255 },
4256 );
4257 } else {
4258 moves.insert(
4259 Choices::DRAINPUNCH,
4260 Choice {
4261 move_id: Choices::DRAINPUNCH,
4262 base_power: 75.0,
4263 category: MoveCategory::Physical,
4264 move_type: PokemonType::FIGHTING,
4265 flags: Flags {
4266 contact: true,
4267 heal: true,
4268 protect: true,
4269 punch: true,
4270 ..Default::default()
4271 },
4272 drain: Some(0.5),
4273 ..Default::default()
4274 },
4275 );
4276 }
4277 moves.insert(
4278 Choices::DREAMEATER,
4279 Choice {
4280 move_id: Choices::DREAMEATER,
4281 base_power: 100.0,
4282 category: MoveCategory::Special,
4283 move_type: PokemonType::PSYCHIC,
4284 flags: Flags {
4285 heal: true,
4286 protect: true,
4287 ..Default::default()
4288 },
4289 drain: Some(0.5),
4290 ..Default::default()
4291 },
4292 );
4293 moves.insert(
4294 Choices::DRILLPECK,
4295 Choice {
4296 move_id: Choices::DRILLPECK,
4297 base_power: 80.0,
4298 category: MoveCategory::Physical,
4299 move_type: PokemonType::FLYING,
4300 flags: Flags {
4301 contact: true,
4302 protect: true,
4303 ..Default::default()
4304 },
4305 ..Default::default()
4306 },
4307 );
4308 moves.insert(
4309 Choices::DRILLRUN,
4310 Choice {
4311 move_id: Choices::DRILLRUN,
4312 accuracy: 95.0,
4313 base_power: 80.0,
4314 category: MoveCategory::Physical,
4315 move_type: PokemonType::GROUND,
4316 flags: Flags {
4317 contact: true,
4318 protect: true,
4319 ..Default::default()
4320 },
4321 ..Default::default()
4322 },
4323 );
4324 moves.insert(
4325 Choices::DRUMBEATING,
4326 Choice {
4327 move_id: Choices::DRUMBEATING,
4328 base_power: 80.0,
4329 category: MoveCategory::Physical,
4330 move_type: PokemonType::GRASS,
4331 flags: Flags {
4332 protect: true,
4333 ..Default::default()
4334 },
4335 secondaries: Some(vec![Secondary {
4336 chance: 100.0,
4337 target: MoveTarget::Opponent,
4338 effect: Effect::Boost(StatBoosts {
4339 attack: 0,
4340 defense: 0,
4341 special_attack: 0,
4342 special_defense: 0,
4343 speed: -1,
4344 accuracy: 0,
4345 }),
4346 }]),
4347 ..Default::default()
4348 },
4349 );
4350 moves.insert(
4351 Choices::DUALCHOP,
4352 Choice {
4353 move_id: Choices::DUALCHOP,
4354 accuracy: 90.0,
4355 base_power: 40.0,
4356 category: MoveCategory::Physical,
4357 move_type: PokemonType::DRAGON,
4358 flags: Flags {
4359 contact: true,
4360 protect: true,
4361 ..Default::default()
4362 },
4363 ..Default::default()
4364 },
4365 );
4366 moves.insert(
4367 Choices::DUALWINGBEAT,
4368 Choice {
4369 move_id: Choices::DUALWINGBEAT,
4370 accuracy: 90.0,
4371 base_power: 40.0,
4372 category: MoveCategory::Physical,
4373 move_type: PokemonType::FLYING,
4374 flags: Flags {
4375 contact: true,
4376 protect: true,
4377 ..Default::default()
4378 },
4379 ..Default::default()
4380 },
4381 );
4382 moves.insert(
4383 Choices::DYNAMAXCANNON,
4384 Choice {
4385 move_id: Choices::DYNAMAXCANNON,
4386 base_power: 100.0,
4387 category: MoveCategory::Special,
4388 move_type: PokemonType::DRAGON,
4389 flags: Flags {
4390 protect: true,
4391 ..Default::default()
4392 },
4393 ..Default::default()
4394 },
4395 );
4396 moves.insert(
4397 Choices::DYNAMICPUNCH,
4398 Choice {
4399 move_id: Choices::DYNAMICPUNCH,
4400 accuracy: 50.0,
4401 base_power: 100.0,
4402 category: MoveCategory::Physical,
4403 move_type: PokemonType::FIGHTING,
4404 flags: Flags {
4405 contact: true,
4406 protect: true,
4407 punch: true,
4408 ..Default::default()
4409 },
4410 secondaries: Some(vec![Secondary {
4411 chance: 100.0,
4412 target: MoveTarget::Opponent,
4413 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
4414 }]),
4415 ..Default::default()
4416 },
4417 );
4418 moves.insert(
4419 Choices::EARTHPOWER,
4420 Choice {
4421 move_id: Choices::EARTHPOWER,
4422 base_power: 90.0,
4423 category: MoveCategory::Special,
4424 move_type: PokemonType::GROUND,
4425 flags: Flags {
4426 protect: true,
4427 ..Default::default()
4428 },
4429 secondaries: Some(vec![Secondary {
4430 chance: 10.0,
4431 target: MoveTarget::Opponent,
4432 effect: Effect::Boost(StatBoosts {
4433 attack: 0,
4434 defense: 0,
4435 special_attack: 0,
4436 special_defense: -1,
4437 speed: 0,
4438 accuracy: 0,
4439 }),
4440 }]),
4441 ..Default::default()
4442 },
4443 );
4444 moves.insert(
4445 Choices::EARTHQUAKE,
4446 Choice {
4447 move_id: Choices::EARTHQUAKE,
4448 base_power: 100.0,
4449 category: MoveCategory::Physical,
4450 move_type: PokemonType::GROUND,
4451 flags: Flags {
4452 protect: true,
4453 ..Default::default()
4454 },
4455 ..Default::default()
4456 },
4457 );
4458 moves.insert(
4459 Choices::ECHOEDVOICE,
4460 Choice {
4461 move_id: Choices::ECHOEDVOICE,
4462 base_power: 40.0,
4463 category: MoveCategory::Special,
4464 move_type: PokemonType::NORMAL,
4465 flags: Flags {
4466 protect: true,
4467 sound: true,
4468 ..Default::default()
4469 },
4470 ..Default::default()
4471 },
4472 );
4473 moves.insert(
4474 Choices::EERIEIMPULSE,
4475 Choice {
4476 move_id: Choices::EERIEIMPULSE,
4477 move_type: PokemonType::ELECTRIC,
4478 flags: Flags {
4479 protect: true,
4480 reflectable: true,
4481 ..Default::default()
4482 },
4483 boost: Some(Boost {
4484 target: MoveTarget::Opponent,
4485 boosts: StatBoosts {
4486 attack: 0,
4487 defense: 0,
4488 special_attack: -2,
4489 special_defense: 0,
4490 speed: 0,
4491 accuracy: 0,
4492 },
4493 }),
4494 ..Default::default()
4495 },
4496 );
4497 moves.insert(
4498 Choices::EERIESPELL,
4499 Choice {
4500 move_id: Choices::EERIESPELL,
4501 base_power: 80.0,
4502 category: MoveCategory::Special,
4503 move_type: PokemonType::PSYCHIC,
4504 flags: Flags {
4505 protect: true,
4506 sound: true,
4507 ..Default::default()
4508 },
4509 ..Default::default()
4510 },
4511 );
4512 moves.insert(
4513 Choices::EGGBOMB,
4514 Choice {
4515 move_id: Choices::EGGBOMB,
4516 accuracy: 75.0,
4517 base_power: 100.0,
4518 category: MoveCategory::Physical,
4519 move_type: PokemonType::NORMAL,
4520 flags: Flags {
4521 bullet: true,
4522 protect: true,
4523 ..Default::default()
4524 },
4525 ..Default::default()
4526 },
4527 );
4528 moves.insert(
4529 Choices::ELECTRICTERRAIN,
4530 Choice {
4531 move_id: Choices::ELECTRICTERRAIN,
4532 move_type: PokemonType::ELECTRIC,
4533 flags: Flags {
4534 ..Default::default()
4535 },
4536 ..Default::default()
4537 },
4538 );
4539 moves.insert(
4540 Choices::ELECTRIFY,
4541 Choice {
4542 move_id: Choices::ELECTRIFY,
4543 move_type: PokemonType::ELECTRIC,
4544 flags: Flags {
4545 protect: true,
4546 ..Default::default()
4547 },
4548 volatile_status: Some(VolatileStatus {
4549 target: MoveTarget::Opponent,
4550 volatile_status: PokemonVolatileStatus::ELECTRIFY,
4551 }),
4552 ..Default::default()
4553 },
4554 );
4555 moves.insert(
4556 Choices::ELECTROBALL,
4557 Choice {
4558 move_id: Choices::ELECTROBALL,
4559 category: MoveCategory::Special,
4560 move_type: PokemonType::ELECTRIC,
4561 flags: Flags {
4562 bullet: true,
4563 protect: true,
4564 ..Default::default()
4565 },
4566 ..Default::default()
4567 },
4568 );
4569 moves.insert(
4570 Choices::ELECTRODRIFT,
4571 Choice {
4572 move_id: Choices::ELECTRODRIFT,
4573 base_power: 100.0,
4574 category: MoveCategory::Special,
4575 move_type: PokemonType::ELECTRIC,
4576 flags: Flags {
4577 contact: true,
4578 protect: true,
4579 ..Default::default()
4580 },
4581 ..Default::default()
4582 },
4583 );
4584 moves.insert(
4585 Choices::ELECTROSHOT,
4586 Choice {
4587 move_id: Choices::ELECTROSHOT,
4588 base_power: 130.0,
4589 category: MoveCategory::Special,
4590 move_type: PokemonType::ELECTRIC,
4591 flags: Flags {
4592 charge: true,
4593 protect: true,
4594 ..Default::default()
4595 },
4596 ..Default::default()
4597 },
4598 );
4599 moves.insert(
4600 Choices::ELECTROWEB,
4601 Choice {
4602 move_id: Choices::ELECTROWEB,
4603 accuracy: 95.0,
4604 base_power: 55.0,
4605 category: MoveCategory::Special,
4606 move_type: PokemonType::ELECTRIC,
4607 flags: Flags {
4608 protect: true,
4609 ..Default::default()
4610 },
4611 secondaries: Some(vec![Secondary {
4612 chance: 100.0,
4613 target: MoveTarget::Opponent,
4614 effect: Effect::Boost(StatBoosts {
4615 attack: 0,
4616 defense: 0,
4617 special_attack: 0,
4618 special_defense: 0,
4619 speed: -1,
4620 accuracy: 0,
4621 }),
4622 }]),
4623 ..Default::default()
4624 },
4625 );
4626 moves.insert(
4627 Choices::EMBARGO,
4628 Choice {
4629 move_id: Choices::EMBARGO,
4630 move_type: PokemonType::DARK,
4631 flags: Flags {
4632 protect: true,
4633 reflectable: true,
4634 ..Default::default()
4635 },
4636 volatile_status: Some(VolatileStatus {
4637 target: MoveTarget::Opponent,
4638 volatile_status: PokemonVolatileStatus::EMBARGO,
4639 }),
4640 ..Default::default()
4641 },
4642 );
4643 moves.insert(
4644 Choices::EMBER,
4645 Choice {
4646 move_id: Choices::EMBER,
4647 base_power: 40.0,
4648 category: MoveCategory::Special,
4649 move_type: PokemonType::FIRE,
4650 flags: Flags {
4651 protect: true,
4652 ..Default::default()
4653 },
4654 secondaries: Some(vec![Secondary {
4655 chance: 10.0,
4656 target: MoveTarget::Opponent,
4657 effect: Effect::Status(PokemonStatus::BURN),
4658 }]),
4659 ..Default::default()
4660 },
4661 );
4662 moves.insert(
4663 Choices::ENCORE,
4664 Choice {
4665 move_id: Choices::ENCORE,
4666 move_type: PokemonType::NORMAL,
4667 flags: Flags {
4668 protect: true,
4669 reflectable: true,
4670 ..Default::default()
4671 },
4672 volatile_status: Some(VolatileStatus {
4673 target: MoveTarget::Opponent,
4674 volatile_status: PokemonVolatileStatus::ENCORE,
4675 }),
4676 ..Default::default()
4677 },
4678 );
4679 moves.insert(
4680 Choices::ENDEAVOR,
4681 Choice {
4682 move_id: Choices::ENDEAVOR,
4683 category: MoveCategory::Physical,
4684 move_type: PokemonType::NORMAL,
4685 flags: Flags {
4686 contact: true,
4687 protect: true,
4688 ..Default::default()
4689 },
4690 ..Default::default()
4691 },
4692 );
4693 moves.insert(
4694 Choices::ENDURE,
4695 Choice {
4696 move_id: Choices::ENDURE,
4697 priority: 4,
4698 target: MoveTarget::User,
4699 move_type: PokemonType::NORMAL,
4700 flags: Flags {
4701 ..Default::default()
4702 },
4703 volatile_status: Some(VolatileStatus {
4704 target: MoveTarget::User,
4705 volatile_status: PokemonVolatileStatus::ENDURE,
4706 }),
4707 ..Default::default()
4708 },
4709 );
4710 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
4711 moves.insert(
4712 Choices::ENERGYBALL,
4713 Choice {
4714 move_id: Choices::ENERGYBALL,
4715 base_power: 80.0,
4716 category: MoveCategory::Special,
4717 move_type: PokemonType::GRASS,
4718 flags: Flags {
4719 bullet: true,
4720 protect: true,
4721 ..Default::default()
4722 },
4723 secondaries: Some(vec![Secondary {
4724 chance: 10.0,
4725 target: MoveTarget::Opponent,
4726 effect: Effect::Boost(StatBoosts {
4727 attack: 0,
4728 defense: 0,
4729 special_attack: 0,
4730 special_defense: -1,
4731 speed: 0,
4732 accuracy: 0,
4733 }),
4734 }]),
4735 ..Default::default()
4736 },
4737 );
4738 } else {
4739 moves.insert(
4740 Choices::ENERGYBALL,
4741 Choice {
4742 move_id: Choices::ENERGYBALL,
4743 base_power: 90.0,
4744 category: MoveCategory::Special,
4745 move_type: PokemonType::GRASS,
4746 flags: Flags {
4747 bullet: true,
4748 protect: true,
4749 ..Default::default()
4750 },
4751 secondaries: Some(vec![Secondary {
4752 chance: 10.0,
4753 target: MoveTarget::Opponent,
4754 effect: Effect::Boost(StatBoosts {
4755 attack: 0,
4756 defense: 0,
4757 special_attack: 0,
4758 special_defense: -1,
4759 speed: 0,
4760 accuracy: 0,
4761 }),
4762 }]),
4763 ..Default::default()
4764 },
4765 );
4766 }
4767 moves.insert(
4768 Choices::ENTRAINMENT,
4769 Choice {
4770 move_id: Choices::ENTRAINMENT,
4771 move_type: PokemonType::NORMAL,
4772 flags: Flags {
4773 protect: true,
4774 reflectable: true,
4775 ..Default::default()
4776 },
4777 ..Default::default()
4778 },
4779 );
4780 moves.insert(
4781 Choices::ERUPTION,
4782 Choice {
4783 move_id: Choices::ERUPTION,
4784 base_power: 150.0,
4785 category: MoveCategory::Special,
4786 move_type: PokemonType::FIRE,
4787 flags: Flags {
4788 protect: true,
4789 ..Default::default()
4790 },
4791 ..Default::default()
4792 },
4793 );
4794 moves.insert(
4795 Choices::ESPERWING,
4796 Choice {
4797 move_id: Choices::ESPERWING,
4798 base_power: 80.0,
4799 category: MoveCategory::Special,
4800 move_type: PokemonType::PSYCHIC,
4801 flags: Flags {
4802 protect: true,
4803 ..Default::default()
4804 },
4805 secondaries: Some(vec![Secondary {
4806 chance: 100.0,
4807 target: MoveTarget::User,
4808 effect: Effect::Boost(StatBoosts {
4809 attack: 0,
4810 defense: 0,
4811 special_attack: 0,
4812 special_defense: 0,
4813 speed: 1,
4814 accuracy: 0,
4815 }),
4816 }]),
4817 ..Default::default()
4818 },
4819 );
4820 moves.insert(
4821 Choices::ETERNABEAM,
4822 Choice {
4823 move_id: Choices::ETERNABEAM,
4824 accuracy: 90.0,
4825 base_power: 160.0,
4826 category: MoveCategory::Special,
4827 move_type: PokemonType::DRAGON,
4828 flags: Flags {
4829 protect: true,
4830 recharge: true,
4831 ..Default::default()
4832 },
4833 ..Default::default()
4834 },
4835 );
4836 moves.insert(
4837 Choices::EXPANDINGFORCE,
4838 Choice {
4839 move_id: Choices::EXPANDINGFORCE,
4840 base_power: 80.0,
4841 category: MoveCategory::Special,
4842 move_type: PokemonType::PSYCHIC,
4843 flags: Flags {
4844 protect: true,
4845 ..Default::default()
4846 },
4847 ..Default::default()
4848 },
4849 );
4850 if cfg!(feature = "gen1") {
4851 moves.insert(
4852 Choices::EXPLOSION,
4853 Choice {
4854 move_id: Choices::EXPLOSION,
4855 base_power: 170.0,
4856 category: MoveCategory::Physical,
4857 move_type: PokemonType::NORMAL,
4858 flags: Flags {
4859 protect: true,
4860 ..Default::default()
4861 },
4862 ..Default::default()
4863 },
4864 );
4865 } else {
4866 moves.insert(
4867 Choices::EXPLOSION,
4868 Choice {
4869 move_id: Choices::EXPLOSION,
4870 base_power: 250.0,
4871 category: MoveCategory::Physical,
4872 move_type: PokemonType::NORMAL,
4873 flags: Flags {
4874 protect: true,
4875 ..Default::default()
4876 },
4877 ..Default::default()
4878 },
4879 );
4880 }
4881 moves.insert(
4882 Choices::EXTRASENSORY,
4883 Choice {
4884 move_id: Choices::EXTRASENSORY,
4885 base_power: 80.0,
4886 category: MoveCategory::Special,
4887 move_type: PokemonType::PSYCHIC,
4888 flags: Flags {
4889 protect: true,
4890 ..Default::default()
4891 },
4892 secondaries: Some(vec![Secondary {
4893 chance: 10.0,
4894 target: MoveTarget::Opponent,
4895 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
4896 }]),
4897 ..Default::default()
4898 },
4899 );
4900 moves.insert(
4901 Choices::EXTREMESPEED,
4902 Choice {
4903 move_id: Choices::EXTREMESPEED,
4904 base_power: 80.0,
4905 category: MoveCategory::Physical,
4906 priority: 2,
4907 move_type: PokemonType::NORMAL,
4908 flags: Flags {
4909 contact: true,
4910 protect: true,
4911 ..Default::default()
4912 },
4913 ..Default::default()
4914 },
4915 );
4916 moves.insert(
4917 Choices::FACADE,
4918 Choice {
4919 move_id: Choices::FACADE,
4920 base_power: 70.0,
4921 category: MoveCategory::Physical,
4922 move_type: PokemonType::NORMAL,
4923 flags: Flags {
4924 contact: true,
4925 protect: true,
4926 ..Default::default()
4927 },
4928 ..Default::default()
4929 },
4930 );
4931 moves.insert(
4932 Choices::FAIRYLOCK,
4933 Choice {
4934 move_id: Choices::FAIRYLOCK,
4935 move_type: PokemonType::FAIRY,
4936 flags: Flags {
4937 ..Default::default()
4938 },
4939 ..Default::default()
4940 },
4941 );
4942 moves.insert(
4943 Choices::FAIRYWIND,
4944 Choice {
4945 move_id: Choices::FAIRYWIND,
4946 base_power: 40.0,
4947 category: MoveCategory::Special,
4948 move_type: PokemonType::FAIRY,
4949 flags: Flags {
4950 protect: true,
4951 wind: true,
4952 ..Default::default()
4953 },
4954 ..Default::default()
4955 },
4956 );
4957 moves.insert(
4958 Choices::FAKEOUT,
4959 Choice {
4960 move_id: Choices::FAKEOUT,
4961 base_power: 40.0,
4962 category: MoveCategory::Physical,
4963 priority: 3,
4964 move_type: PokemonType::NORMAL,
4965 flags: Flags {
4966 contact: true,
4967 protect: true,
4968 ..Default::default()
4969 },
4970 secondaries: Some(vec![Secondary {
4971 chance: 100.0,
4972 target: MoveTarget::Opponent,
4973 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
4974 }]),
4975 ..Default::default()
4976 },
4977 );
4978 moves.insert(
4979 Choices::FAKETEARS,
4980 Choice {
4981 move_id: Choices::FAKETEARS,
4982 move_type: PokemonType::DARK,
4983 flags: Flags {
4984 protect: true,
4985 reflectable: true,
4986 ..Default::default()
4987 },
4988 boost: Some(Boost {
4989 target: MoveTarget::Opponent,
4990 boosts: StatBoosts {
4991 attack: 0,
4992 defense: 0,
4993 special_attack: 0,
4994 special_defense: -2,
4995 speed: 0,
4996 accuracy: 0,
4997 },
4998 }),
4999 ..Default::default()
5000 },
5001 );
5002 moves.insert(
5003 Choices::FALSESURRENDER,
5004 Choice {
5005 move_id: Choices::FALSESURRENDER,
5006 base_power: 80.0,
5007 category: MoveCategory::Physical,
5008 move_type: PokemonType::DARK,
5009 flags: Flags {
5010 contact: true,
5011 protect: true,
5012 ..Default::default()
5013 },
5014 ..Default::default()
5015 },
5016 );
5017 moves.insert(
5018 Choices::FALSESWIPE,
5019 Choice {
5020 move_id: Choices::FALSESWIPE,
5021 base_power: 40.0,
5022 category: MoveCategory::Physical,
5023 move_type: PokemonType::NORMAL,
5024 flags: Flags {
5025 contact: true,
5026 protect: true,
5027 ..Default::default()
5028 },
5029 ..Default::default()
5030 },
5031 );
5032 moves.insert(
5033 Choices::FEATHERDANCE,
5034 Choice {
5035 move_id: Choices::FEATHERDANCE,
5036 move_type: PokemonType::FLYING,
5037 flags: Flags {
5038 protect: true,
5039 reflectable: true,
5040 ..Default::default()
5041 },
5042 boost: Some(Boost {
5043 target: MoveTarget::Opponent,
5044 boosts: StatBoosts {
5045 attack: -2,
5046 defense: 0,
5047 special_attack: 0,
5048 special_defense: 0,
5049 speed: 0,
5050 accuracy: 0,
5051 },
5052 }),
5053 ..Default::default()
5054 },
5055 );
5056 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
5057 moves.insert(
5058 Choices::FEINT,
5059 Choice {
5060 move_id: Choices::FEINT,
5061 base_power: 50.0,
5062 category: MoveCategory::Physical,
5063 priority: 2,
5064 move_type: PokemonType::NORMAL,
5065 flags: Flags {
5066 ..Default::default()
5067 },
5068 ..Default::default()
5069 },
5070 );
5071 } else {
5072 moves.insert(
5073 Choices::FEINT,
5074 Choice {
5075 move_id: Choices::FEINT,
5076 base_power: 30.0,
5077 category: MoveCategory::Physical,
5078 priority: 2,
5079 move_type: PokemonType::NORMAL,
5080 flags: Flags {
5081 ..Default::default()
5082 },
5083 ..Default::default()
5084 },
5085 );
5086 }
5087 moves.insert(
5088 Choices::FEINTATTACK,
5089 Choice {
5090 move_id: Choices::FEINTATTACK,
5091 base_power: 60.0,
5092 category: MoveCategory::Physical,
5093 move_type: PokemonType::DARK,
5094 flags: Flags {
5095 contact: true,
5096 protect: true,
5097 ..Default::default()
5098 },
5099 ..Default::default()
5100 },
5101 );
5102 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
5103 moves.insert(
5104 Choices::FELLSTINGER,
5105 Choice {
5106 move_id: Choices::FELLSTINGER,
5107 base_power: 30.0,
5108 category: MoveCategory::Physical,
5109 move_type: PokemonType::BUG,
5110 flags: Flags {
5111 contact: true,
5112 protect: true,
5113 ..Default::default()
5114 },
5115 ..Default::default()
5116 },
5117 );
5118 } else {
5119 moves.insert(
5120 Choices::FELLSTINGER,
5121 Choice {
5122 move_id: Choices::FELLSTINGER,
5123 base_power: 50.0,
5124 category: MoveCategory::Physical,
5125 move_type: PokemonType::BUG,
5126 flags: Flags {
5127 contact: true,
5128 protect: true,
5129 ..Default::default()
5130 },
5131 ..Default::default()
5132 },
5133 );
5134 }
5135 moves.insert(
5136 Choices::FICKLEBEAM,
5137 Choice {
5138 move_id: Choices::FICKLEBEAM,
5139 base_power: 80.0,
5140 category: MoveCategory::Special,
5141 move_type: PokemonType::DRAGON,
5142 flags: Flags {
5143 protect: true,
5144 ..Default::default()
5145 },
5146 secondaries: Some(vec![Secondary {
5147 chance: 50.0,
5148 target: MoveTarget::User,
5149 effect: Effect::Boost(StatBoosts {
5150 attack: 0,
5151 defense: 0,
5152 special_attack: 1,
5153 special_defense: 0,
5154 speed: 0,
5155 accuracy: 0,
5156 }),
5157 }]),
5158 ..Default::default()
5159 },
5160 );
5161 moves.insert(
5162 Choices::FIERYDANCE,
5163 Choice {
5164 move_id: Choices::FIERYDANCE,
5165 base_power: 80.0,
5166 category: MoveCategory::Special,
5167 move_type: PokemonType::FIRE,
5168 flags: Flags {
5169 protect: true,
5170 ..Default::default()
5171 },
5172 secondaries: Some(vec![Secondary {
5173 chance: 50.0,
5174 target: MoveTarget::User,
5175 effect: Effect::Boost(StatBoosts {
5176 attack: 0,
5177 defense: 0,
5178 special_attack: 1,
5179 special_defense: 0,
5180 speed: 0,
5181 accuracy: 0,
5182 }),
5183 }]),
5184 ..Default::default()
5185 },
5186 );
5187 moves.insert(
5188 Choices::FIERYWRATH,
5189 Choice {
5190 move_id: Choices::FIERYWRATH,
5191 base_power: 90.0,
5192 category: MoveCategory::Special,
5193 move_type: PokemonType::DARK,
5194 flags: Flags {
5195 protect: true,
5196 ..Default::default()
5197 },
5198 secondaries: Some(vec![Secondary {
5199 chance: 20.0,
5200 target: MoveTarget::Opponent,
5201 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
5202 }]),
5203 ..Default::default()
5204 },
5205 );
5206 moves.insert(
5207 Choices::FILLETAWAY,
5208 Choice {
5209 move_id: Choices::FILLETAWAY,
5210 target: MoveTarget::User,
5211 move_type: PokemonType::NORMAL,
5212 flags: Flags {
5213 ..Default::default()
5214 },
5215 ..Default::default()
5216 },
5217 );
5218 moves.insert(
5219 Choices::FINALGAMBIT,
5220 Choice {
5221 move_id: Choices::FINALGAMBIT,
5222 category: MoveCategory::Special,
5223 move_type: PokemonType::FIGHTING,
5224 flags: Flags {
5225 protect: true,
5226 ..Default::default()
5227 },
5228 ..Default::default()
5229 },
5230 );
5231 if cfg!(feature = "gen1") {
5232 moves.insert(
5233 Choices::FIREBLAST,
5234 Choice {
5235 move_id: Choices::FIREBLAST,
5236 accuracy: 85.0,
5237 base_power: 120.0,
5238 category: MoveCategory::Special,
5239 move_type: PokemonType::FIRE,
5240 flags: Flags {
5241 protect: true,
5242 ..Default::default()
5243 },
5244 secondaries: Some(vec![Secondary {
5245 chance: 30.0,
5246 target: MoveTarget::Opponent,
5247 effect: Effect::Status(PokemonStatus::BURN),
5248 }]),
5249 ..Default::default()
5250 },
5251 );
5252 }
5253 else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
5254 moves.insert(
5255 Choices::FIREBLAST,
5256 Choice {
5257 move_id: Choices::FIREBLAST,
5258 accuracy: 85.0,
5259 base_power: 120.0,
5260 category: MoveCategory::Special,
5261 move_type: PokemonType::FIRE,
5262 flags: Flags {
5263 protect: true,
5264 ..Default::default()
5265 },
5266 secondaries: Some(vec![Secondary {
5267 chance: 10.0,
5268 target: MoveTarget::Opponent,
5269 effect: Effect::Status(PokemonStatus::BURN),
5270 }]),
5271 ..Default::default()
5272 },
5273 );
5274 } else {
5275 moves.insert(
5276 Choices::FIREBLAST,
5277 Choice {
5278 move_id: Choices::FIREBLAST,
5279 accuracy: 85.0,
5280 base_power: 110.0,
5281 category: MoveCategory::Special,
5282 move_type: PokemonType::FIRE,
5283 flags: Flags {
5284 protect: true,
5285 ..Default::default()
5286 },
5287 secondaries: Some(vec![Secondary {
5288 chance: 10.0,
5289 target: MoveTarget::Opponent,
5290 effect: Effect::Status(PokemonStatus::BURN),
5291 }]),
5292 ..Default::default()
5293 },
5294 );
5295 }
5296 moves.insert(
5297 Choices::FIREFANG,
5298 Choice {
5299 move_id: Choices::FIREFANG,
5300 accuracy: 95.0,
5301 base_power: 65.0,
5302 category: MoveCategory::Physical,
5303 move_type: PokemonType::FIRE,
5304 flags: Flags {
5305 bite: true,
5306 contact: true,
5307 protect: true,
5308 ..Default::default()
5309 },
5310 secondaries: Some(vec![
5311 Secondary {
5312 chance: 10.0,
5313 target: MoveTarget::Opponent,
5314 effect: Effect::Status(PokemonStatus::BURN),
5315 },
5316 Secondary {
5317 chance: 10.0,
5318 target: MoveTarget::Opponent,
5319 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
5320 },
5321 ]),
5322 ..Default::default()
5323 },
5324 );
5325 moves.insert(
5326 Choices::FIRELASH,
5327 Choice {
5328 move_id: Choices::FIRELASH,
5329 base_power: 80.0,
5330 category: MoveCategory::Physical,
5331 move_type: PokemonType::FIRE,
5332 flags: Flags {
5333 contact: true,
5334 protect: true,
5335 ..Default::default()
5336 },
5337 secondaries: Some(vec![Secondary {
5338 chance: 100.0,
5339 target: MoveTarget::Opponent,
5340 effect: Effect::Boost(StatBoosts {
5341 attack: 0,
5342 defense: -1,
5343 special_attack: 0,
5344 special_defense: 0,
5345 speed: 0,
5346 accuracy: 0,
5347 }),
5348 }]),
5349 ..Default::default()
5350 },
5351 );
5352 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
5353 moves.insert(
5354 Choices::FIREPLEDGE,
5355 Choice {
5356 move_id: Choices::FIREPLEDGE,
5357 base_power: 50.0,
5358 category: MoveCategory::Special,
5359 move_type: PokemonType::FIRE,
5360 flags: Flags {
5361 protect: true,
5362 ..Default::default()
5363 },
5364 ..Default::default()
5365 },
5366 );
5367 } else {
5368 moves.insert(
5369 Choices::FIREPLEDGE,
5370 Choice {
5371 move_id: Choices::FIREPLEDGE,
5372 base_power: 80.0,
5373 category: MoveCategory::Special,
5374 move_type: PokemonType::FIRE,
5375 flags: Flags {
5376 protect: true,
5377 ..Default::default()
5378 },
5379 ..Default::default()
5380 },
5381 );
5382 }
5383 moves.insert(
5384 Choices::FIREPUNCH,
5385 Choice {
5386 move_id: Choices::FIREPUNCH,
5387 base_power: 75.0,
5388 category: MoveCategory::Physical,
5389 move_type: PokemonType::FIRE,
5390 flags: Flags {
5391 contact: true,
5392 protect: true,
5393 punch: true,
5394 ..Default::default()
5395 },
5396 secondaries: Some(vec![Secondary {
5397 chance: 10.0,
5398 target: MoveTarget::Opponent,
5399 effect: Effect::Status(PokemonStatus::BURN),
5400 }]),
5401 ..Default::default()
5402 },
5403 );
5404 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
5405 moves.insert(
5406 Choices::FIRESPIN,
5407 Choice {
5408 move_id: Choices::FIRESPIN,
5409 accuracy: 70.0,
5410 base_power: 15.0,
5411 category: MoveCategory::Special,
5412 move_type: PokemonType::FIRE,
5413 flags: Flags {
5414 protect: true,
5415 ..Default::default()
5416 },
5417 volatile_status: Some(VolatileStatus {
5418 target: MoveTarget::Opponent,
5419 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
5420 }),
5421 ..Default::default()
5422 },
5423 );
5424 } else {
5425 moves.insert(
5426 Choices::FIRESPIN,
5427 Choice {
5428 move_id: Choices::FIRESPIN,
5429 accuracy: 85.0,
5430 base_power: 35.0,
5431 category: MoveCategory::Special,
5432 move_type: PokemonType::FIRE,
5433 flags: Flags {
5434 protect: true,
5435 ..Default::default()
5436 },
5437 volatile_status: Some(VolatileStatus {
5438 target: MoveTarget::Opponent,
5439 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
5440 }),
5441 ..Default::default()
5442 },
5443 );
5444 }
5445 moves.insert(
5446 Choices::FIRSTIMPRESSION,
5447 Choice {
5448 move_id: Choices::FIRSTIMPRESSION,
5449 base_power: 90.0,
5450 category: MoveCategory::Physical,
5451 priority: 2,
5452 move_type: PokemonType::BUG,
5453 flags: Flags {
5454 contact: true,
5455 protect: true,
5456 ..Default::default()
5457 },
5458 ..Default::default()
5459 },
5460 );
5461 moves.insert(
5462 Choices::FISHIOUSREND,
5463 Choice {
5464 move_id: Choices::FISHIOUSREND,
5465 base_power: 85.0,
5466 category: MoveCategory::Physical,
5467 move_type: PokemonType::WATER,
5468 flags: Flags {
5469 bite: true,
5470 contact: true,
5471 protect: true,
5472 ..Default::default()
5473 },
5474 ..Default::default()
5475 },
5476 );
5477 moves.insert(
5478 Choices::FISSURE,
5479 Choice {
5480 move_id: Choices::FISSURE,
5481 accuracy: 30.0,
5482 category: MoveCategory::Physical,
5483 move_type: PokemonType::GROUND,
5484 flags: Flags {
5485 protect: true,
5486 ..Default::default()
5487 },
5488 ..Default::default()
5489 },
5490 );
5491 moves.insert(
5492 Choices::FLAIL,
5493 Choice {
5494 move_id: Choices::FLAIL,
5495 category: MoveCategory::Physical,
5496 move_type: PokemonType::NORMAL,
5497 flags: Flags {
5498 contact: true,
5499 protect: true,
5500 ..Default::default()
5501 },
5502 ..Default::default()
5503 },
5504 );
5505 moves.insert(
5506 Choices::FLAMEBURST,
5507 Choice {
5508 move_id: Choices::FLAMEBURST,
5509 base_power: 70.0,
5510 category: MoveCategory::Special,
5511 move_type: PokemonType::FIRE,
5512 flags: Flags {
5513 protect: true,
5514 ..Default::default()
5515 },
5516 ..Default::default()
5517 },
5518 );
5519 moves.insert(
5520 Choices::FLAMECHARGE,
5521 Choice {
5522 move_id: Choices::FLAMECHARGE,
5523 base_power: 50.0,
5524 category: MoveCategory::Physical,
5525 move_type: PokemonType::FIRE,
5526 flags: Flags {
5527 contact: true,
5528 protect: true,
5529 ..Default::default()
5530 },
5531 secondaries: Some(vec![Secondary {
5532 chance: 100.0,
5533 target: MoveTarget::User,
5534 effect: Effect::Boost(StatBoosts {
5535 attack: 0,
5536 defense: 0,
5537 special_attack: 0,
5538 special_defense: 0,
5539 speed: 1,
5540 accuracy: 0,
5541 }),
5542 }]),
5543 ..Default::default()
5544 },
5545 );
5546 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
5547 moves.insert(
5548 Choices::FLAMETHROWER,
5549 Choice {
5550 move_id: Choices::FLAMETHROWER,
5551 base_power: 95.0,
5552 category: MoveCategory::Special,
5553 move_type: PokemonType::FIRE,
5554 flags: Flags {
5555 protect: true,
5556 ..Default::default()
5557 },
5558 secondaries: Some(vec![Secondary {
5559 chance: 10.0,
5560 target: MoveTarget::Opponent,
5561 effect: Effect::Status(PokemonStatus::BURN),
5562 }]),
5563 ..Default::default()
5564 },
5565 );
5566 } else {
5567 moves.insert(
5568 Choices::FLAMETHROWER,
5569 Choice {
5570 move_id: Choices::FLAMETHROWER,
5571 base_power: 90.0,
5572 category: MoveCategory::Special,
5573 move_type: PokemonType::FIRE,
5574 flags: Flags {
5575 protect: true,
5576 ..Default::default()
5577 },
5578 secondaries: Some(vec![Secondary {
5579 chance: 10.0,
5580 target: MoveTarget::Opponent,
5581 effect: Effect::Status(PokemonStatus::BURN),
5582 }]),
5583 ..Default::default()
5584 },
5585 );
5586 }
5587 moves.insert(
5588 Choices::FLAMEWHEEL,
5589 Choice {
5590 move_id: Choices::FLAMEWHEEL,
5591 base_power: 60.0,
5592 category: MoveCategory::Physical,
5593 move_type: PokemonType::FIRE,
5594 flags: Flags {
5595 contact: true,
5596 protect: true,
5597 ..Default::default()
5598 },
5599 secondaries: Some(vec![Secondary {
5600 chance: 10.0,
5601 target: MoveTarget::Opponent,
5602 effect: Effect::Status(PokemonStatus::BURN),
5603 }]),
5604 ..Default::default()
5605 },
5606 );
5607 moves.insert(
5608 Choices::FLAREBLITZ,
5609 Choice {
5610 move_id: Choices::FLAREBLITZ,
5611 base_power: 120.0,
5612 category: MoveCategory::Physical,
5613 move_type: PokemonType::FIRE,
5614 flags: Flags {
5615 contact: true,
5616 protect: true,
5617 ..Default::default()
5618 },
5619 secondaries: Some(vec![Secondary {
5620 chance: 10.0,
5621 target: MoveTarget::Opponent,
5622 effect: Effect::Status(PokemonStatus::BURN),
5623 }]),
5624 recoil: Some(0.33),
5625 ..Default::default()
5626 },
5627 );
5628 moves.insert(
5629 Choices::FLASH,
5630 Choice {
5631 move_id: Choices::FLASH,
5632 move_type: PokemonType::NORMAL,
5633 flags: Flags {
5634 protect: true,
5635 reflectable: true,
5636 ..Default::default()
5637 },
5638 boost: Some(Boost {
5639 target: MoveTarget::Opponent,
5640 boosts: StatBoosts {
5641 attack: 0,
5642 defense: 0,
5643 special_attack: 0,
5644 special_defense: 0,
5645 speed: 0,
5646 accuracy: -1,
5647 },
5648 }),
5649 ..Default::default()
5650 },
5651 );
5652 moves.insert(
5653 Choices::FLASHCANNON,
5654 Choice {
5655 move_id: Choices::FLASHCANNON,
5656 base_power: 80.0,
5657 category: MoveCategory::Special,
5658 move_type: PokemonType::STEEL,
5659 flags: Flags {
5660 protect: true,
5661 ..Default::default()
5662 },
5663 secondaries: Some(vec![Secondary {
5664 chance: 10.0,
5665 target: MoveTarget::Opponent,
5666 effect: Effect::Boost(StatBoosts {
5667 attack: 0,
5668 defense: 0,
5669 special_attack: 0,
5670 special_defense: -1,
5671 speed: 0,
5672 accuracy: 0,
5673 }),
5674 }]),
5675 ..Default::default()
5676 },
5677 );
5678 moves.insert(
5679 Choices::FLATTER,
5680 Choice {
5681 move_id: Choices::FLATTER,
5682 move_type: PokemonType::DARK,
5683 flags: Flags {
5684 protect: true,
5685 reflectable: true,
5686 ..Default::default()
5687 },
5688 boost: Some(Boost {
5689 target: MoveTarget::Opponent,
5690 boosts: StatBoosts {
5691 attack: 0,
5692 defense: 0,
5693 special_attack: 1,
5694 special_defense: 0,
5695 speed: 0,
5696 accuracy: 0,
5697 },
5698 }),
5699 volatile_status: Some(VolatileStatus {
5700 target: MoveTarget::Opponent,
5701 volatile_status: PokemonVolatileStatus::CONFUSION,
5702 }),
5703 ..Default::default()
5704 },
5705 );
5706 moves.insert(
5707 Choices::FLEURCANNON,
5708 Choice {
5709 move_id: Choices::FLEURCANNON,
5710 accuracy: 90.0,
5711 base_power: 130.0,
5712 category: MoveCategory::Special,
5713 move_type: PokemonType::FAIRY,
5714 flags: Flags {
5715 protect: true,
5716 ..Default::default()
5717 },
5718 boost: Some(Boost {
5719 target: MoveTarget::User,
5720 boosts: StatBoosts {
5721 attack: 0,
5722 defense: 0,
5723 special_attack: -2,
5724 special_defense: 0,
5725 speed: 0,
5726 accuracy: 0,
5727 },
5728 }),
5729 ..Default::default()
5730 },
5731 );
5732 moves.insert(
5733 Choices::FLING,
5734 Choice {
5735 move_id: Choices::FLING,
5736 category: MoveCategory::Physical,
5737 move_type: PokemonType::DARK,
5738 flags: Flags {
5739 protect: true,
5740 ..Default::default()
5741 },
5742 ..Default::default()
5743 },
5744 );
5745 moves.insert(
5746 Choices::FLIPTURN,
5747 Choice {
5748 move_id: Choices::FLIPTURN,
5749 base_power: 60.0,
5750 category: MoveCategory::Physical,
5751 move_type: PokemonType::WATER,
5752 flags: Flags {
5753 contact: true,
5754 protect: true,
5755 pivot: true,
5756 ..Default::default()
5757 },
5758 ..Default::default()
5759 },
5760 );
5761 moves.insert(
5762 Choices::FLOATYFALL,
5763 Choice {
5764 move_id: Choices::FLOATYFALL,
5765 accuracy: 95.0,
5766 base_power: 90.0,
5767 category: MoveCategory::Physical,
5768 move_type: PokemonType::FLYING,
5769 flags: Flags {
5770 contact: true,
5771 protect: true,
5772 ..Default::default()
5773 },
5774 secondaries: Some(vec![Secondary {
5775 chance: 30.0,
5776 target: MoveTarget::Opponent,
5777 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
5778 }]),
5779 ..Default::default()
5780 },
5781 );
5782 moves.insert(
5783 Choices::FLORALHEALING,
5784 Choice {
5785 move_id: Choices::FLORALHEALING,
5786 move_type: PokemonType::FAIRY,
5787 flags: Flags {
5788 heal: true,
5789 protect: true,
5790 reflectable: true,
5791 ..Default::default()
5792 },
5793 ..Default::default()
5794 },
5795 );
5796 moves.insert(
5797 Choices::FLOWERSHIELD,
5798 Choice {
5799 move_id: Choices::FLOWERSHIELD,
5800 move_type: PokemonType::FAIRY,
5801 flags: Flags {
5802 ..Default::default()
5803 },
5804 ..Default::default()
5805 },
5806 );
5807 moves.insert(
5808 Choices::FLOWERTRICK,
5809 Choice {
5810 move_id: Choices::FLOWERTRICK,
5811 base_power: 70.0,
5812 category: MoveCategory::Physical,
5813 move_type: PokemonType::GRASS,
5814 flags: Flags {
5815 protect: true,
5816 ..Default::default()
5817 },
5818 ..Default::default()
5819 },
5820 );
5821 moves.insert(
5822 Choices::FLY,
5823 Choice {
5824 move_id: Choices::FLY,
5825 accuracy: 95.0,
5826 base_power: 90.0,
5827 category: MoveCategory::Physical,
5828 move_type: PokemonType::FLYING,
5829 flags: Flags {
5830 charge: true,
5831 contact: true,
5832 protect: true,
5833 ..Default::default()
5834 },
5835 ..Default::default()
5836 },
5837 );
5838 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
5839 moves.insert(
5840 Choices::FLYINGPRESS,
5841 Choice {
5842 move_id: Choices::FLYINGPRESS,
5843 accuracy: 95.0,
5844 base_power: 80.0,
5845 category: MoveCategory::Physical,
5846 move_type: PokemonType::FIGHTING,
5847 flags: Flags {
5848 contact: true,
5849 protect: true,
5850 ..Default::default()
5851 },
5852 ..Default::default()
5853 },
5854 );
5855 } else {
5856 moves.insert(
5857 Choices::FLYINGPRESS,
5858 Choice {
5859 move_id: Choices::FLYINGPRESS,
5860 accuracy: 95.0,
5861 base_power: 100.0,
5862 category: MoveCategory::Physical,
5863 move_type: PokemonType::FIGHTING,
5864 flags: Flags {
5865 contact: true,
5866 protect: true,
5867 ..Default::default()
5868 },
5869 ..Default::default()
5870 },
5871 );
5872 }
5873 moves.insert(
5874 Choices::FOCUSBLAST,
5875 Choice {
5876 move_id: Choices::FOCUSBLAST,
5877 accuracy: 70.0,
5878 base_power: 120.0,
5879 category: MoveCategory::Special,
5880 move_type: PokemonType::FIGHTING,
5881 flags: Flags {
5882 bullet: true,
5883 protect: true,
5884 ..Default::default()
5885 },
5886 secondaries: Some(vec![Secondary {
5887 chance: 10.0,
5888 target: MoveTarget::Opponent,
5889 effect: Effect::Boost(StatBoosts {
5890 attack: 0,
5891 defense: 0,
5892 special_attack: 0,
5893 special_defense: -1,
5894 speed: 0,
5895 accuracy: 0,
5896 }),
5897 }]),
5898 ..Default::default()
5899 },
5900 );
5901 moves.insert(
5902 Choices::FOCUSENERGY,
5903 Choice {
5904 move_id: Choices::FOCUSENERGY,
5905 target: MoveTarget::User,
5906 move_type: PokemonType::NORMAL,
5907 flags: Flags {
5908 ..Default::default()
5909 },
5910 volatile_status: Some(VolatileStatus {
5911 target: MoveTarget::User,
5912 volatile_status: PokemonVolatileStatus::FOCUSENERGY,
5913 }),
5914 ..Default::default()
5915 },
5916 );
5917 moves.insert(
5918 Choices::FOCUSPUNCH,
5919 Choice {
5920 move_id: Choices::FOCUSPUNCH,
5921 base_power: 150.0,
5922 category: MoveCategory::Physical,
5923 priority: -3,
5924 move_type: PokemonType::FIGHTING,
5925 flags: Flags {
5926 contact: true,
5927 protect: true,
5928 punch: true,
5929 ..Default::default()
5930 },
5931 ..Default::default()
5932 },
5933 );
5934 moves.insert(
5935 Choices::FOLLOWME,
5936 Choice {
5937 move_id: Choices::FOLLOWME,
5938 priority: 2,
5939 target: MoveTarget::User,
5940 move_type: PokemonType::NORMAL,
5941 flags: Flags {
5942 ..Default::default()
5943 },
5944 volatile_status: Some(VolatileStatus {
5945 target: MoveTarget::User,
5946 volatile_status: PokemonVolatileStatus::FOLLOWME,
5947 }),
5948 ..Default::default()
5949 },
5950 );
5951 moves.insert(
5952 Choices::FORCEPALM,
5953 Choice {
5954 move_id: Choices::FORCEPALM,
5955 base_power: 60.0,
5956 category: MoveCategory::Physical,
5957 move_type: PokemonType::FIGHTING,
5958 flags: Flags {
5959 contact: true,
5960 protect: true,
5961 ..Default::default()
5962 },
5963 secondaries: Some(vec![Secondary {
5964 chance: 30.0,
5965 target: MoveTarget::Opponent,
5966 effect: Effect::Status(PokemonStatus::PARALYZE),
5967 }]),
5968 ..Default::default()
5969 },
5970 );
5971 moves.insert(
5972 Choices::FORESIGHT,
5973 Choice {
5974 move_id: Choices::FORESIGHT,
5975 move_type: PokemonType::NORMAL,
5976 flags: Flags {
5977 protect: true,
5978 reflectable: true,
5979 ..Default::default()
5980 },
5981 volatile_status: Some(VolatileStatus {
5982 target: MoveTarget::Opponent,
5983 volatile_status: PokemonVolatileStatus::FORESIGHT,
5984 }),
5985 ..Default::default()
5986 },
5987 );
5988 moves.insert(
5989 Choices::FORESTSCURSE,
5990 Choice {
5991 move_id: Choices::FORESTSCURSE,
5992 move_type: PokemonType::GRASS,
5993 flags: Flags {
5994 protect: true,
5995 reflectable: true,
5996 ..Default::default()
5997 },
5998 ..Default::default()
5999 },
6000 );
6001 moves.insert(
6002 Choices::FOULPLAY,
6003 Choice {
6004 move_id: Choices::FOULPLAY,
6005 base_power: 95.0,
6006 category: MoveCategory::Physical,
6007 move_type: PokemonType::DARK,
6008 flags: Flags {
6009 contact: true,
6010 protect: true,
6011 ..Default::default()
6012 },
6013 ..Default::default()
6014 },
6015 );
6016 moves.insert(
6017 Choices::FREEZEDRY,
6018 Choice {
6019 move_id: Choices::FREEZEDRY,
6020 base_power: 70.0,
6021 category: MoveCategory::Special,
6022 move_type: PokemonType::ICE,
6023 flags: Flags {
6024 protect: true,
6025 ..Default::default()
6026 },
6027 secondaries: Some(vec![Secondary {
6028 chance: 10.0,
6029 target: MoveTarget::Opponent,
6030 effect: Effect::Status(PokemonStatus::FREEZE),
6031 }]),
6032 ..Default::default()
6033 },
6034 );
6035 moves.insert(
6036 Choices::FREEZESHOCK,
6037 Choice {
6038 move_id: Choices::FREEZESHOCK,
6039 accuracy: 90.0,
6040 base_power: 140.0,
6041 category: MoveCategory::Physical,
6042 move_type: PokemonType::ICE,
6043 flags: Flags {
6044 charge: true,
6045 protect: true,
6046 ..Default::default()
6047 },
6048 secondaries: Some(vec![Secondary {
6049 chance: 30.0,
6050 target: MoveTarget::Opponent,
6051 effect: Effect::Status(PokemonStatus::PARALYZE),
6052 }]),
6053 ..Default::default()
6054 },
6055 );
6056 moves.insert(
6057 Choices::FREEZINGGLARE,
6058 Choice {
6059 move_id: Choices::FREEZINGGLARE,
6060 base_power: 90.0,
6061 category: MoveCategory::Special,
6062 move_type: PokemonType::PSYCHIC,
6063 flags: Flags {
6064 protect: true,
6065 ..Default::default()
6066 },
6067 secondaries: Some(vec![Secondary {
6068 chance: 10.0,
6069 target: MoveTarget::Opponent,
6070 effect: Effect::Status(PokemonStatus::FREEZE),
6071 }]),
6072 ..Default::default()
6073 },
6074 );
6075 moves.insert(
6076 Choices::FREEZYFROST,
6077 Choice {
6078 move_id: Choices::FREEZYFROST,
6079 accuracy: 90.0,
6080 base_power: 100.0,
6081 category: MoveCategory::Special,
6082 move_type: PokemonType::ICE,
6083 flags: Flags {
6084 protect: true,
6085 ..Default::default()
6086 },
6087 ..Default::default()
6088 },
6089 );
6090 moves.insert(
6091 Choices::FRENZYPLANT,
6092 Choice {
6093 move_id: Choices::FRENZYPLANT,
6094 accuracy: 90.0,
6095 base_power: 150.0,
6096 category: MoveCategory::Special,
6097 move_type: PokemonType::GRASS,
6098 flags: Flags {
6099 protect: true,
6100 recharge: true,
6101 ..Default::default()
6102 },
6103 ..Default::default()
6104 },
6105 );
6106 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
6107 moves.insert(
6108 Choices::FROSTBREATH,
6109 Choice {
6110 move_id: Choices::FROSTBREATH,
6111 accuracy: 90.0,
6112 base_power: 40.0,
6113 category: MoveCategory::Special,
6114 move_type: PokemonType::ICE,
6115 flags: Flags {
6116 protect: true,
6117 ..Default::default()
6118 },
6119 ..Default::default()
6120 },
6121 );
6122 } else {
6123 moves.insert(
6124 Choices::FROSTBREATH,
6125 Choice {
6126 move_id: Choices::FROSTBREATH,
6127 accuracy: 90.0,
6128 base_power: 60.0,
6129 category: MoveCategory::Special,
6130 move_type: PokemonType::ICE,
6131 flags: Flags {
6132 protect: true,
6133 ..Default::default()
6134 },
6135 ..Default::default()
6136 },
6137 );
6138 }
6139 moves.insert(
6140 Choices::FRUSTRATION,
6141 Choice {
6142 move_id: Choices::FRUSTRATION,
6143 category: MoveCategory::Physical,
6144 move_type: PokemonType::NORMAL,
6145 flags: Flags {
6146 contact: true,
6147 protect: true,
6148 ..Default::default()
6149 },
6150 ..Default::default()
6151 },
6152 );
6153 moves.insert(
6154 Choices::FURYATTACK,
6155 Choice {
6156 move_id: Choices::FURYATTACK,
6157 accuracy: 85.0,
6158 base_power: 15.0,
6159 category: MoveCategory::Physical,
6160 move_type: PokemonType::NORMAL,
6161 flags: Flags {
6162 contact: true,
6163 protect: true,
6164 ..Default::default()
6165 },
6166 ..Default::default()
6167 },
6168 );
6169 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6170 moves.insert(
6171 Choices::FURYCUTTER,
6172 Choice {
6173 move_id: Choices::FURYCUTTER,
6174 accuracy: 95.0,
6175 base_power: 10.0,
6176 category: MoveCategory::Physical,
6177 move_type: PokemonType::BUG,
6178 flags: Flags {
6179 contact: true,
6180 protect: true,
6181 slicing: true,
6182 ..Default::default()
6183 },
6184 ..Default::default()
6185 },
6186 );
6187 } else if cfg!(feature = "gen5") {
6188 moves.insert(
6189 Choices::FURYCUTTER,
6190 Choice {
6191 move_id: Choices::FURYCUTTER,
6192 accuracy: 95.0,
6193 base_power: 20.0,
6194 category: MoveCategory::Physical,
6195 move_type: PokemonType::BUG,
6196 flags: Flags {
6197 contact: true,
6198 protect: true,
6199 ..Default::default()
6200 },
6201 ..Default::default()
6202 },
6203 );
6204 } else {
6205 moves.insert(
6206 Choices::FURYCUTTER,
6207 Choice {
6208 move_id: Choices::FURYCUTTER,
6209 accuracy: 95.0,
6210 base_power: 40.0,
6211 category: MoveCategory::Physical,
6212 move_type: PokemonType::BUG,
6213 flags: Flags {
6214 contact: true,
6215 protect: true,
6216 ..Default::default()
6217 },
6218 ..Default::default()
6219 },
6220 );
6221 }
6222 moves.insert(
6223 Choices::FURYSWIPES,
6224 Choice {
6225 move_id: Choices::FURYSWIPES,
6226 accuracy: 80.0,
6227 base_power: 18.0,
6228 category: MoveCategory::Physical,
6229 move_type: PokemonType::NORMAL,
6230 flags: Flags {
6231 contact: true,
6232 protect: true,
6233 ..Default::default()
6234 },
6235 ..Default::default()
6236 },
6237 );
6238 moves.insert(
6239 Choices::FUSIONBOLT,
6240 Choice {
6241 move_id: Choices::FUSIONBOLT,
6242 base_power: 100.0,
6243 category: MoveCategory::Physical,
6244 move_type: PokemonType::ELECTRIC,
6245 flags: Flags {
6246 protect: true,
6247 ..Default::default()
6248 },
6249 ..Default::default()
6250 },
6251 );
6252 moves.insert(
6253 Choices::FUSIONFLARE,
6254 Choice {
6255 move_id: Choices::FUSIONFLARE,
6256 base_power: 100.0,
6257 category: MoveCategory::Special,
6258 move_type: PokemonType::FIRE,
6259 flags: Flags {
6260 protect: true,
6261 ..Default::default()
6262 },
6263 ..Default::default()
6264 },
6265 );
6266 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6267 moves.insert(
6268 Choices::FUTURESIGHT,
6269 Choice {
6270 accuracy: 90.0,
6271 move_id: Choices::FUTURESIGHT,
6272 base_power: 80.0,
6273 category: MoveCategory::Special,
6274 move_type: PokemonType::PSYCHIC,
6275 flags: Flags {
6276 ..Default::default()
6277 },
6278 ..Default::default()
6279 },
6280 );
6281 } else if cfg!(feature = "gen5") {
6282 moves.insert(
6283 Choices::FUTURESIGHT,
6284 Choice {
6285 move_id: Choices::FUTURESIGHT,
6286 base_power: 100.0,
6287 category: MoveCategory::Special,
6288 move_type: PokemonType::PSYCHIC,
6289 flags: Flags {
6290 ..Default::default()
6291 },
6292 ..Default::default()
6293 },
6294 );
6295 } else {
6296 moves.insert(
6297 Choices::FUTURESIGHT,
6298 Choice {
6299 move_id: Choices::FUTURESIGHT,
6300 base_power: 120.0,
6301 category: MoveCategory::Special,
6302 move_type: PokemonType::PSYCHIC,
6303 flags: Flags {
6304 ..Default::default()
6305 },
6306 ..Default::default()
6307 },
6308 );
6309 }
6310 moves.insert(
6311 Choices::GASTROACID,
6312 Choice {
6313 move_id: Choices::GASTROACID,
6314 move_type: PokemonType::POISON,
6315 flags: Flags {
6316 protect: true,
6317 reflectable: true,
6318 ..Default::default()
6319 },
6320 volatile_status: Some(VolatileStatus {
6321 target: MoveTarget::Opponent,
6322 volatile_status: PokemonVolatileStatus::GASTROACID,
6323 }),
6324 ..Default::default()
6325 },
6326 );
6327 moves.insert(
6328 Choices::GEARGRIND,
6329 Choice {
6330 move_id: Choices::GEARGRIND,
6331 accuracy: 85.0,
6332 base_power: 50.0,
6333 category: MoveCategory::Physical,
6334 move_type: PokemonType::STEEL,
6335 flags: Flags {
6336 contact: true,
6337 protect: true,
6338 ..Default::default()
6339 },
6340 ..Default::default()
6341 },
6342 );
6343 moves.insert(
6344 Choices::GEARUP,
6345 Choice {
6346 move_id: Choices::GEARUP,
6347 target: MoveTarget::User,
6348 move_type: PokemonType::STEEL,
6349 flags: Flags {
6350 ..Default::default()
6351 },
6352 ..Default::default()
6353 },
6354 );
6355 moves.insert(
6356 Choices::GEOMANCY,
6357 Choice {
6358 move_id: Choices::GEOMANCY,
6359 target: MoveTarget::User,
6360 move_type: PokemonType::FAIRY,
6361 flags: Flags {
6362 charge: true,
6363 ..Default::default()
6364 },
6365 boost: Some(Boost {
6366 target: MoveTarget::User,
6367 boosts: StatBoosts {
6368 attack: 0,
6369 defense: 0,
6370 special_attack: 2,
6371 special_defense: 2,
6372 speed: 2,
6373 accuracy: 0,
6374 },
6375 }),
6376 ..Default::default()
6377 },
6378 );
6379 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6380 moves.insert(
6381 Choices::GIGADRAIN,
6382 Choice {
6383 move_id: Choices::GIGADRAIN,
6384 base_power: 60.0,
6385 category: MoveCategory::Special,
6386 move_type: PokemonType::GRASS,
6387 flags: Flags {
6388 heal: true,
6389 protect: true,
6390 ..Default::default()
6391 },
6392 drain: Some(0.5),
6393 ..Default::default()
6394 },
6395 );
6396 } else {
6397 moves.insert(
6398 Choices::GIGADRAIN,
6399 Choice {
6400 move_id: Choices::GIGADRAIN,
6401 base_power: 75.0,
6402 category: MoveCategory::Special,
6403 move_type: PokemonType::GRASS,
6404 flags: Flags {
6405 heal: true,
6406 protect: true,
6407 ..Default::default()
6408 },
6409 drain: Some(0.5),
6410 ..Default::default()
6411 },
6412 );
6413 }
6414 moves.insert(
6415 Choices::GIGAIMPACT,
6416 Choice {
6417 move_id: Choices::GIGAIMPACT,
6418 accuracy: 90.0,
6419 base_power: 150.0,
6420 category: MoveCategory::Physical,
6421 move_type: PokemonType::NORMAL,
6422 flags: Flags {
6423 contact: true,
6424 protect: true,
6425 recharge: true,
6426 ..Default::default()
6427 },
6428 ..Default::default()
6429 },
6430 );
6431 moves.insert(
6432 Choices::GIGATONHAMMER,
6433 Choice {
6434 move_id: Choices::GIGATONHAMMER,
6435 base_power: 160.0,
6436 category: MoveCategory::Physical,
6437 move_type: PokemonType::STEEL,
6438 flags: Flags {
6439 protect: true,
6440 ..Default::default()
6441 },
6442 ..Default::default()
6443 },
6444 );
6445
6446 if cfg!(feature = "gen9") {
6447 moves.insert(
6448 Choices::GLACIALLANCE,
6449 Choice {
6450 move_id: Choices::GLACIALLANCE,
6451 base_power: 120.0,
6452 category: MoveCategory::Physical,
6453 move_type: PokemonType::ICE,
6454 flags: Flags {
6455 protect: true,
6456 ..Default::default()
6457 },
6458 ..Default::default()
6459 },
6460 );
6461 } else {
6462 moves.insert(
6463 Choices::GLACIALLANCE,
6464 Choice {
6465 move_id: Choices::GLACIALLANCE,
6466 base_power: 130.0,
6467 category: MoveCategory::Physical,
6468 move_type: PokemonType::ICE,
6469 flags: Flags {
6470 protect: true,
6471 ..Default::default()
6472 },
6473 ..Default::default()
6474 },
6475 );
6476 }
6477 moves.insert(
6478 Choices::GLACIATE,
6479 Choice {
6480 move_id: Choices::GLACIATE,
6481 accuracy: 95.0,
6482 base_power: 65.0,
6483 category: MoveCategory::Special,
6484 move_type: PokemonType::ICE,
6485 flags: Flags {
6486 protect: true,
6487 ..Default::default()
6488 },
6489 secondaries: Some(vec![Secondary {
6490 chance: 100.0,
6491 target: MoveTarget::Opponent,
6492 effect: Effect::Boost(StatBoosts {
6493 attack: 0,
6494 defense: 0,
6495 special_attack: 0,
6496 special_defense: 0,
6497 speed: -1,
6498 accuracy: 0,
6499 }),
6500 }]),
6501 ..Default::default()
6502 },
6503 );
6504 moves.insert(
6505 Choices::GLAIVERUSH,
6506 Choice {
6507 move_id: Choices::GLAIVERUSH,
6508 base_power: 120.0,
6509 category: MoveCategory::Physical,
6510 move_type: PokemonType::DRAGON,
6511 flags: Flags {
6512 contact: true,
6513 protect: true,
6514 ..Default::default()
6515 },
6516 ..Default::default()
6517 },
6518 );
6519 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6520 moves.insert(
6521 Choices::GLARE,
6522 Choice {
6523 accuracy: 75.0,
6524 move_id: Choices::GLARE,
6525 status: Some(Status {
6526 target: MoveTarget::Opponent,
6527 status: PokemonStatus::PARALYZE,
6528 }),
6529 move_type: PokemonType::NORMAL,
6530 flags: Flags {
6531 protect: true,
6532 reflectable: true,
6533 ..Default::default()
6534 },
6535 ..Default::default()
6536 },
6537 );
6538 } else if cfg!(feature = "gen5") {
6539 moves.insert(
6540 Choices::GLARE,
6541 Choice {
6542 accuracy: 90.0,
6543 move_id: Choices::GLARE,
6544 status: Some(Status {
6545 target: MoveTarget::Opponent,
6546 status: PokemonStatus::PARALYZE,
6547 }),
6548 move_type: PokemonType::NORMAL,
6549 flags: Flags {
6550 protect: true,
6551 reflectable: true,
6552 ..Default::default()
6553 },
6554 ..Default::default()
6555 },
6556 );
6557 } else {
6558 moves.insert(
6559 Choices::GLARE,
6560 Choice {
6561 move_id: Choices::GLARE,
6562 status: Some(Status {
6563 target: MoveTarget::Opponent,
6564 status: PokemonStatus::PARALYZE,
6565 }),
6566 move_type: PokemonType::NORMAL,
6567 flags: Flags {
6568 protect: true,
6569 reflectable: true,
6570 ..Default::default()
6571 },
6572 ..Default::default()
6573 },
6574 );
6575 }
6576 moves.insert(
6577 Choices::GLITZYGLOW,
6578 Choice {
6579 move_id: Choices::GLITZYGLOW,
6580 accuracy: 95.0,
6581 base_power: 80.0,
6582 category: MoveCategory::Special,
6583 move_type: PokemonType::PSYCHIC,
6584 flags: Flags {
6585 protect: true,
6586 ..Default::default()
6587 },
6588 ..Default::default()
6589 },
6590 );
6591 moves.insert(
6592 Choices::GRASSKNOT,
6593 Choice {
6594 move_id: Choices::GRASSKNOT,
6595 category: MoveCategory::Special,
6596 move_type: PokemonType::GRASS,
6597 flags: Flags {
6598 contact: true,
6599 protect: true,
6600 ..Default::default()
6601 },
6602 ..Default::default()
6603 },
6604 );
6605 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
6606 moves.insert(
6607 Choices::GRASSPLEDGE,
6608 Choice {
6609 move_id: Choices::GRASSPLEDGE,
6610 base_power: 50.0,
6611 category: MoveCategory::Special,
6612 move_type: PokemonType::GRASS,
6613 flags: Flags {
6614 protect: true,
6615 ..Default::default()
6616 },
6617 ..Default::default()
6618 },
6619 );
6620 } else {
6621 moves.insert(
6622 Choices::GRASSPLEDGE,
6623 Choice {
6624 move_id: Choices::GRASSPLEDGE,
6625 base_power: 80.0,
6626 category: MoveCategory::Special,
6627 move_type: PokemonType::GRASS,
6628 flags: Flags {
6629 protect: true,
6630 ..Default::default()
6631 },
6632 ..Default::default()
6633 },
6634 );
6635 }
6636 moves.insert(
6637 Choices::GRASSWHISTLE,
6638 Choice {
6639 move_id: Choices::GRASSWHISTLE,
6640 accuracy: 55.0,
6641 status: Some(Status {
6642 target: MoveTarget::Opponent,
6643 status: PokemonStatus::SLEEP,
6644 }),
6645 move_type: PokemonType::GRASS,
6646 flags: Flags {
6647 protect: true,
6648 reflectable: true,
6649 sound: true,
6650 ..Default::default()
6651 },
6652 ..Default::default()
6653 },
6654 );
6655
6656 if cfg!(feature = "gen9") {
6657 moves.insert(
6658 Choices::GRASSYGLIDE,
6659 Choice {
6660 move_id: Choices::GRASSYGLIDE,
6661 base_power: 55.0,
6662 category: MoveCategory::Physical,
6663 move_type: PokemonType::GRASS,
6664 flags: Flags {
6665 contact: true,
6666 protect: true,
6667 ..Default::default()
6668 },
6669 ..Default::default()
6670 },
6671 );
6672 } else {
6673 moves.insert(
6674 Choices::GRASSYGLIDE,
6675 Choice {
6676 move_id: Choices::GRASSYGLIDE,
6677 base_power: 70.0,
6678 category: MoveCategory::Physical,
6679 move_type: PokemonType::GRASS,
6680 flags: Flags {
6681 contact: true,
6682 protect: true,
6683 ..Default::default()
6684 },
6685 ..Default::default()
6686 },
6687 );
6688 }
6689 moves.insert(
6690 Choices::GRASSYTERRAIN,
6691 Choice {
6692 move_id: Choices::GRASSYTERRAIN,
6693 move_type: PokemonType::GRASS,
6694 flags: Flags {
6695 ..Default::default()
6696 },
6697 ..Default::default()
6698 },
6699 );
6700 moves.insert(
6701 Choices::GRAVAPPLE,
6702 Choice {
6703 move_id: Choices::GRAVAPPLE,
6704 base_power: 80.0,
6705 category: MoveCategory::Physical,
6706 move_type: PokemonType::GRASS,
6707 flags: Flags {
6708 protect: true,
6709 ..Default::default()
6710 },
6711 secondaries: Some(vec![Secondary {
6712 chance: 100.0,
6713 target: MoveTarget::Opponent,
6714 effect: Effect::Boost(StatBoosts {
6715 attack: 0,
6716 defense: -1,
6717 special_attack: 0,
6718 special_defense: 0,
6719 speed: 0,
6720 accuracy: 0,
6721 }),
6722 }]),
6723 ..Default::default()
6724 },
6725 );
6726 moves.insert(
6727 Choices::GRAVITY,
6728 Choice {
6729 move_id: Choices::GRAVITY,
6730 move_type: PokemonType::PSYCHIC,
6731 flags: Flags {
6732 ..Default::default()
6733 },
6734 ..Default::default()
6735 },
6736 );
6737 moves.insert(
6738 Choices::GROWL,
6739 Choice {
6740 move_id: Choices::GROWL,
6741 move_type: PokemonType::NORMAL,
6742 flags: Flags {
6743 protect: true,
6744 reflectable: true,
6745 sound: true,
6746 ..Default::default()
6747 },
6748 boost: Some(Boost {
6749 target: MoveTarget::Opponent,
6750 boosts: StatBoosts {
6751 attack: -1,
6752 defense: 0,
6753 special_attack: 0,
6754 special_defense: 0,
6755 speed: 0,
6756 accuracy: 0,
6757 },
6758 }),
6759 ..Default::default()
6760 },
6761 );
6762 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6763 moves.insert(
6764 Choices::GROWTH,
6765 Choice {
6766 move_id: Choices::GROWTH,
6767 target: MoveTarget::User,
6768 move_type: PokemonType::NORMAL,
6769 flags: Flags {
6770 ..Default::default()
6771 },
6772 boost: Some(Boost {
6773 target: MoveTarget::User,
6774 boosts: StatBoosts {
6775 attack: 0,
6776 defense: 0,
6777 special_attack: 1,
6778 special_defense: 0,
6779 speed: 0,
6780 accuracy: 0,
6781 },
6782 }),
6783 ..Default::default()
6784 },
6785 );
6786 } else {
6787 moves.insert(
6788 Choices::GROWTH,
6789 Choice {
6790 move_id: Choices::GROWTH,
6791 target: MoveTarget::User,
6792 move_type: PokemonType::NORMAL,
6793 flags: Flags {
6794 ..Default::default()
6795 },
6796 boost: Some(Boost {
6797 target: MoveTarget::User,
6798 boosts: StatBoosts {
6799 attack: 1,
6800 defense: 0,
6801 special_attack: 1,
6802 special_defense: 0,
6803 speed: 0,
6804 accuracy: 0,
6805 },
6806 }),
6807 ..Default::default()
6808 },
6809 );
6810 }
6811 moves.insert(
6812 Choices::GRUDGE,
6813 Choice {
6814 move_id: Choices::GRUDGE,
6815 target: MoveTarget::User,
6816 move_type: PokemonType::GHOST,
6817 flags: Flags {
6818 ..Default::default()
6819 },
6820 volatile_status: Some(VolatileStatus {
6821 target: MoveTarget::User,
6822 volatile_status: PokemonVolatileStatus::GRUDGE,
6823 }),
6824 ..Default::default()
6825 },
6826 );
6827 moves.insert(
6828 Choices::GUARDSPLIT,
6829 Choice {
6830 move_id: Choices::GUARDSPLIT,
6831 move_type: PokemonType::PSYCHIC,
6832 flags: Flags {
6833 protect: true,
6834 ..Default::default()
6835 },
6836 ..Default::default()
6837 },
6838 );
6839 moves.insert(
6840 Choices::GUARDSWAP,
6841 Choice {
6842 move_id: Choices::GUARDSWAP,
6843 move_type: PokemonType::PSYCHIC,
6844 flags: Flags {
6845 protect: true,
6846 ..Default::default()
6847 },
6848 ..Default::default()
6849 },
6850 );
6851 moves.insert(
6852 Choices::GUILLOTINE,
6853 Choice {
6854 move_id: Choices::GUILLOTINE,
6855 accuracy: 30.0,
6856 category: MoveCategory::Physical,
6857 move_type: PokemonType::NORMAL,
6858 flags: Flags {
6859 contact: true,
6860 protect: true,
6861 ..Default::default()
6862 },
6863 ..Default::default()
6864 },
6865 );
6866 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
6867 moves.insert(
6868 Choices::GUNKSHOT,
6869 Choice {
6870 move_id: Choices::GUNKSHOT,
6871 accuracy: 70.0,
6872 base_power: 120.0,
6873 category: MoveCategory::Physical,
6874 move_type: PokemonType::POISON,
6875 flags: Flags {
6876 protect: true,
6877 ..Default::default()
6878 },
6879 secondaries: Some(vec![Secondary {
6880 chance: 30.0,
6881 target: MoveTarget::Opponent,
6882 effect: Effect::Status(PokemonStatus::POISON),
6883 }]),
6884 ..Default::default()
6885 },
6886 );
6887 } else {
6888 moves.insert(
6889 Choices::GUNKSHOT,
6890 Choice {
6891 move_id: Choices::GUNKSHOT,
6892 accuracy: 80.0,
6893 base_power: 120.0,
6894 category: MoveCategory::Physical,
6895 move_type: PokemonType::POISON,
6896 flags: Flags {
6897 protect: true,
6898 ..Default::default()
6899 },
6900 secondaries: Some(vec![Secondary {
6901 chance: 30.0,
6902 target: MoveTarget::Opponent,
6903 effect: Effect::Status(PokemonStatus::POISON),
6904 }]),
6905 ..Default::default()
6906 },
6907 );
6908 }
6909 if cfg!(feature = "gen1") {
6910 moves.insert(
6911 Choices::GUST,
6912 Choice {
6913 move_id: Choices::GUST,
6914 base_power: 40.0,
6915 category: MoveCategory::Special,
6916 move_type: PokemonType::NORMAL,
6917 flags: Flags {
6918 protect: true,
6919 wind: true,
6920 ..Default::default()
6921 },
6922 ..Default::default()
6923 },
6924 );
6925 } else {
6926 moves.insert(
6927 Choices::GUST,
6928 Choice {
6929 move_id: Choices::GUST,
6930 base_power: 40.0,
6931 category: MoveCategory::Special,
6932 move_type: PokemonType::FLYING,
6933 flags: Flags {
6934 protect: true,
6935 wind: true,
6936 ..Default::default()
6937 },
6938 ..Default::default()
6939 },
6940 );
6941 }
6942 moves.insert(
6943 Choices::GYROBALL,
6944 Choice {
6945 move_id: Choices::GYROBALL,
6946 category: MoveCategory::Physical,
6947 move_type: PokemonType::STEEL,
6948 flags: Flags {
6949 bullet: true,
6950 contact: true,
6951 protect: true,
6952 ..Default::default()
6953 },
6954 ..Default::default()
6955 },
6956 );
6957 moves.insert(
6958 Choices::HAIL,
6959 Choice {
6960 move_id: Choices::HAIL,
6961 move_type: PokemonType::ICE,
6962 flags: Flags {
6963 ..Default::default()
6964 },
6965 ..Default::default()
6966 },
6967 );
6968 moves.insert(
6969 Choices::HAMMERARM,
6970 Choice {
6971 move_id: Choices::HAMMERARM,
6972 accuracy: 90.0,
6973 base_power: 100.0,
6974 category: MoveCategory::Physical,
6975 move_type: PokemonType::FIGHTING,
6976 flags: Flags {
6977 contact: true,
6978 protect: true,
6979 punch: true,
6980 ..Default::default()
6981 },
6982 boost: Some(Boost {
6983 target: MoveTarget::User,
6984 boosts: StatBoosts {
6985 attack: 0,
6986 defense: 0,
6987 special_attack: 0,
6988 special_defense: 0,
6989 speed: -1,
6990 accuracy: 0,
6991 },
6992 }),
6993 ..Default::default()
6994 },
6995 );
6996 moves.insert(
6997 Choices::HAPPYHOUR,
6998 Choice {
6999 move_id: Choices::HAPPYHOUR,
7000 target: MoveTarget::User,
7001 move_type: PokemonType::NORMAL,
7002 flags: Flags {
7003 ..Default::default()
7004 },
7005 ..Default::default()
7006 },
7007 );
7008 moves.insert(
7009 Choices::HARDEN,
7010 Choice {
7011 move_id: Choices::HARDEN,
7012 target: MoveTarget::User,
7013 move_type: PokemonType::NORMAL,
7014 flags: Flags {
7015 ..Default::default()
7016 },
7017 boost: Some(Boost {
7018 target: MoveTarget::User,
7019 boosts: StatBoosts {
7020 attack: 0,
7021 defense: 1,
7022 special_attack: 0,
7023 special_defense: 0,
7024 speed: 0,
7025 accuracy: 0,
7026 },
7027 }),
7028 ..Default::default()
7029 },
7030 );
7031 moves.insert(
7032 Choices::HARDPRESS,
7033 Choice {
7034 move_id: Choices::HARDPRESS,
7035 category: MoveCategory::Physical,
7036 move_type: PokemonType::STEEL,
7037 flags: Flags {
7038 contact: true,
7039 protect: true,
7040 ..Default::default()
7041 },
7042 ..Default::default()
7043 },
7044 );
7045 moves.insert(
7046 Choices::HAZE,
7047 Choice {
7048 move_id: Choices::HAZE,
7049 move_type: PokemonType::ICE,
7050 flags: Flags {
7051 ..Default::default()
7052 },
7053 ..Default::default()
7054 },
7055 );
7056 moves.insert(
7057 Choices::HEADBUTT,
7058 Choice {
7059 move_id: Choices::HEADBUTT,
7060 base_power: 70.0,
7061 category: MoveCategory::Physical,
7062 move_type: PokemonType::NORMAL,
7063 flags: Flags {
7064 contact: true,
7065 protect: true,
7066 ..Default::default()
7067 },
7068 secondaries: Some(vec![Secondary {
7069 chance: 30.0,
7070 target: MoveTarget::Opponent,
7071 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
7072 }]),
7073 ..Default::default()
7074 },
7075 );
7076 moves.insert(
7077 Choices::HEADCHARGE,
7078 Choice {
7079 move_id: Choices::HEADCHARGE,
7080 base_power: 120.0,
7081 category: MoveCategory::Physical,
7082 move_type: PokemonType::NORMAL,
7083 flags: Flags {
7084 contact: true,
7085 protect: true,
7086 ..Default::default()
7087 },
7088 recoil: Some(0.25),
7089 ..Default::default()
7090 },
7091 );
7092 moves.insert(
7093 Choices::HEADLONGRUSH,
7094 Choice {
7095 move_id: Choices::HEADLONGRUSH,
7096 base_power: 120.0,
7097 category: MoveCategory::Physical,
7098 move_type: PokemonType::GROUND,
7099 flags: Flags {
7100 contact: true,
7101 protect: true,
7102 punch: true,
7103 ..Default::default()
7104 },
7105 boost: Some(Boost {
7106 target: MoveTarget::User,
7107 boosts: StatBoosts {
7108 attack: 0,
7109 defense: -1,
7110 special_attack: 0,
7111 special_defense: -1,
7112 speed: 0,
7113 accuracy: 0,
7114 },
7115 }),
7116 ..Default::default()
7117 },
7118 );
7119 moves.insert(
7120 Choices::HEADSMASH,
7121 Choice {
7122 move_id: Choices::HEADSMASH,
7123 accuracy: 80.0,
7124 base_power: 150.0,
7125 category: MoveCategory::Physical,
7126 move_type: PokemonType::ROCK,
7127 flags: Flags {
7128 contact: true,
7129 protect: true,
7130 ..Default::default()
7131 },
7132 recoil: Some(0.5),
7133 ..Default::default()
7134 },
7135 );
7136 moves.insert(
7137 Choices::HEALBELL,
7138 Choice {
7139 move_id: Choices::HEALBELL,
7140 target: MoveTarget::User,
7141 move_type: PokemonType::NORMAL,
7142 flags: Flags {
7143 sound: true,
7144 ..Default::default()
7145 },
7146 ..Default::default()
7147 },
7148 );
7149 moves.insert(
7150 Choices::HEALBLOCK,
7151 Choice {
7152 move_id: Choices::HEALBLOCK,
7153 move_type: PokemonType::PSYCHIC,
7154 flags: Flags {
7155 protect: true,
7156 reflectable: true,
7157 ..Default::default()
7158 },
7159 volatile_status: Some(VolatileStatus {
7160 target: MoveTarget::Opponent,
7161 volatile_status: PokemonVolatileStatus::HEALBLOCK,
7162 }),
7163 ..Default::default()
7164 },
7165 );
7166 moves.insert(
7167 Choices::HEALINGWISH,
7168 Choice {
7169 move_id: Choices::HEALINGWISH,
7170 target: MoveTarget::User,
7171 move_type: PokemonType::PSYCHIC,
7172 flags: Flags {
7173 heal: true,
7174 ..Default::default()
7175 },
7176 side_condition: Some(SideCondition {
7177 target: MoveTarget::User,
7178 condition: PokemonSideCondition::HealingWish,
7179 }),
7180 heal: Some(Heal {
7181 target: MoveTarget::User,
7182 amount: -1.0,
7183 }),
7184 ..Default::default()
7185 },
7186 );
7187 moves.insert(
7188 Choices::HEALORDER,
7189 Choice {
7190 move_id: Choices::HEALORDER,
7191 target: MoveTarget::User,
7192 move_type: PokemonType::BUG,
7193 flags: Flags {
7194 heal: true,
7195 ..Default::default()
7196 },
7197 heal: Some(Heal {
7198 target: MoveTarget::User,
7199 amount: 0.5,
7200 }),
7201 ..Default::default()
7202 },
7203 );
7204 moves.insert(
7205 Choices::HEALPULSE,
7206 Choice {
7207 move_id: Choices::HEALPULSE,
7208 move_type: PokemonType::PSYCHIC,
7209 flags: Flags {
7210 heal: true,
7211 protect: true,
7212 pulse: true,
7213 reflectable: true,
7214 ..Default::default()
7215 },
7216 ..Default::default()
7217 },
7218 );
7219 moves.insert(
7220 Choices::HEARTSTAMP,
7221 Choice {
7222 move_id: Choices::HEARTSTAMP,
7223 base_power: 60.0,
7224 category: MoveCategory::Physical,
7225 move_type: PokemonType::PSYCHIC,
7226 flags: Flags {
7227 contact: true,
7228 protect: true,
7229 ..Default::default()
7230 },
7231 secondaries: Some(vec![Secondary {
7232 chance: 30.0,
7233 target: MoveTarget::Opponent,
7234 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
7235 }]),
7236 ..Default::default()
7237 },
7238 );
7239 moves.insert(
7240 Choices::HEARTSWAP,
7241 Choice {
7242 move_id: Choices::HEARTSWAP,
7243 move_type: PokemonType::PSYCHIC,
7244 flags: Flags {
7245 protect: true,
7246 ..Default::default()
7247 },
7248 ..Default::default()
7249 },
7250 );
7251 moves.insert(
7252 Choices::HEATCRASH,
7253 Choice {
7254 move_id: Choices::HEATCRASH,
7255 category: MoveCategory::Physical,
7256 move_type: PokemonType::FIRE,
7257 flags: Flags {
7258 contact: true,
7259 protect: true,
7260 ..Default::default()
7261 },
7262 ..Default::default()
7263 },
7264 );
7265 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
7266 moves.insert(
7267 Choices::HEATWAVE,
7268 Choice {
7269 move_id: Choices::HEATWAVE,
7270 accuracy: 90.0,
7271 base_power: 100.0,
7272 category: MoveCategory::Special,
7273 move_type: PokemonType::FIRE,
7274 flags: Flags {
7275 protect: true,
7276 wind: true,
7277 ..Default::default()
7278 },
7279 secondaries: Some(vec![Secondary {
7280 chance: 10.0,
7281 target: MoveTarget::Opponent,
7282 effect: Effect::Status(PokemonStatus::BURN),
7283 }]),
7284 ..Default::default()
7285 },
7286 );
7287 } else {
7288 moves.insert(
7289 Choices::HEATWAVE,
7290 Choice {
7291 move_id: Choices::HEATWAVE,
7292 accuracy: 90.0,
7293 base_power: 95.0,
7294 category: MoveCategory::Special,
7295 move_type: PokemonType::FIRE,
7296 flags: Flags {
7297 protect: true,
7298 wind: true,
7299 ..Default::default()
7300 },
7301 secondaries: Some(vec![Secondary {
7302 chance: 10.0,
7303 target: MoveTarget::Opponent,
7304 effect: Effect::Status(PokemonStatus::BURN),
7305 }]),
7306 ..Default::default()
7307 },
7308 );
7309 }
7310 moves.insert(
7311 Choices::HEAVYSLAM,
7312 Choice {
7313 move_id: Choices::HEAVYSLAM,
7314 category: MoveCategory::Physical,
7315 move_type: PokemonType::STEEL,
7316 flags: Flags {
7317 contact: true,
7318 protect: true,
7319 ..Default::default()
7320 },
7321 ..Default::default()
7322 },
7323 );
7324 moves.insert(
7325 Choices::HELPINGHAND,
7326 Choice {
7327 move_id: Choices::HELPINGHAND,
7328 priority: 5,
7329 target: MoveTarget::User,
7330 move_type: PokemonType::NORMAL,
7331 flags: Flags {
7332 ..Default::default()
7333 },
7334 volatile_status: Some(VolatileStatus {
7335 target: MoveTarget::User,
7336 volatile_status: PokemonVolatileStatus::HELPINGHAND,
7337 }),
7338 ..Default::default()
7339 },
7340 );
7341 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
7342 moves.insert(
7343 Choices::HEX,
7344 Choice {
7345 move_id: Choices::HEX,
7346 base_power: 50.0,
7347 category: MoveCategory::Special,
7348 move_type: PokemonType::GHOST,
7349 flags: Flags {
7350 protect: true,
7351 ..Default::default()
7352 },
7353 ..Default::default()
7354 },
7355 );
7356 } else {
7357 moves.insert(
7358 Choices::HEX,
7359 Choice {
7360 move_id: Choices::HEX,
7361 base_power: 65.0,
7362 category: MoveCategory::Special,
7363 move_type: PokemonType::GHOST,
7364 flags: Flags {
7365 protect: true,
7366 ..Default::default()
7367 },
7368 ..Default::default()
7369 },
7370 );
7371 }
7372 moves.insert(
7373 Choices::HIDDENPOWER,
7374 Choice {
7375 move_id: Choices::HIDDENPOWER,
7376 base_power: 60.0,
7377 category: MoveCategory::Special,
7378 move_type: PokemonType::NORMAL,
7379 flags: Flags {
7380 protect: true,
7381 ..Default::default()
7382 },
7383 ..Default::default()
7384 },
7385 );
7386 moves.insert(
7387 Choices::HIDDENPOWERBUG60,
7388 Choice {
7389 move_id: Choices::HIDDENPOWERBUG60,
7390 base_power: 60.0,
7391 category: MoveCategory::Special,
7392 move_type: PokemonType::BUG,
7393 flags: Flags {
7394 protect: true,
7395 ..Default::default()
7396 },
7397 ..Default::default()
7398 },
7399 );
7400 moves.insert(
7401 Choices::HIDDENPOWERBUG70,
7402 Choice {
7403 move_id: Choices::HIDDENPOWERBUG70,
7404 base_power: 70.0,
7405 category: MoveCategory::Special,
7406 move_type: PokemonType::BUG,
7407 flags: Flags {
7408 protect: true,
7409 ..Default::default()
7410 },
7411 ..Default::default()
7412 },
7413 );
7414 moves.insert(
7415 Choices::HIDDENPOWERDARK60,
7416 Choice {
7417 move_id: Choices::HIDDENPOWERDARK60,
7418 base_power: 60.0,
7419 category: MoveCategory::Special,
7420 move_type: PokemonType::DARK,
7421 flags: Flags {
7422 protect: true,
7423 ..Default::default()
7424 },
7425 ..Default::default()
7426 },
7427 );
7428 moves.insert(
7429 Choices::HIDDENPOWERDARK70,
7430 Choice {
7431 move_id: Choices::HIDDENPOWERDARK70,
7432 base_power: 70.0,
7433 category: MoveCategory::Special,
7434 move_type: PokemonType::DARK,
7435 flags: Flags {
7436 protect: true,
7437 ..Default::default()
7438 },
7439 ..Default::default()
7440 },
7441 );
7442 moves.insert(
7443 Choices::HIDDENPOWERDRAGON60,
7444 Choice {
7445 move_id: Choices::HIDDENPOWERDRAGON60,
7446 base_power: 60.0,
7447 category: MoveCategory::Special,
7448 move_type: PokemonType::DRAGON,
7449 flags: Flags {
7450 protect: true,
7451 ..Default::default()
7452 },
7453 ..Default::default()
7454 },
7455 );
7456 moves.insert(
7457 Choices::HIDDENPOWERDRAGON70,
7458 Choice {
7459 move_id: Choices::HIDDENPOWERDRAGON70,
7460 base_power: 70.0,
7461 category: MoveCategory::Special,
7462 move_type: PokemonType::DRAGON,
7463 flags: Flags {
7464 protect: true,
7465 ..Default::default()
7466 },
7467 ..Default::default()
7468 },
7469 );
7470 moves.insert(
7471 Choices::HIDDENPOWERELECTRIC60,
7472 Choice {
7473 move_id: Choices::HIDDENPOWERELECTRIC60,
7474 base_power: 60.0,
7475 category: MoveCategory::Special,
7476 move_type: PokemonType::ELECTRIC,
7477 flags: Flags {
7478 protect: true,
7479 ..Default::default()
7480 },
7481 ..Default::default()
7482 },
7483 );
7484 moves.insert(
7485 Choices::HIDDENPOWERELECTRIC70,
7486 Choice {
7487 move_id: Choices::HIDDENPOWERELECTRIC70,
7488 base_power: 70.0,
7489 category: MoveCategory::Special,
7490 move_type: PokemonType::ELECTRIC,
7491 flags: Flags {
7492 protect: true,
7493 ..Default::default()
7494 },
7495 ..Default::default()
7496 },
7497 );
7498 moves.insert(
7499 Choices::HIDDENPOWERFIGHTING60,
7500 Choice {
7501 move_id: Choices::HIDDENPOWERFIGHTING60,
7502 base_power: 60.0,
7503 category: MoveCategory::Special,
7504 move_type: PokemonType::FIGHTING,
7505 flags: Flags {
7506 protect: true,
7507 ..Default::default()
7508 },
7509 ..Default::default()
7510 },
7511 );
7512 moves.insert(
7513 Choices::HIDDENPOWERFIGHTING70,
7514 Choice {
7515 move_id: Choices::HIDDENPOWERFIGHTING70,
7516 base_power: 70.0,
7517 category: MoveCategory::Special,
7518 move_type: PokemonType::FIGHTING,
7519 flags: Flags {
7520 protect: true,
7521 ..Default::default()
7522 },
7523 ..Default::default()
7524 },
7525 );
7526 moves.insert(
7527 Choices::HIDDENPOWERFIRE60,
7528 Choice {
7529 move_id: Choices::HIDDENPOWERFIRE60,
7530 base_power: 60.0,
7531 category: MoveCategory::Special,
7532 move_type: PokemonType::FIRE,
7533 flags: Flags {
7534 protect: true,
7535 ..Default::default()
7536 },
7537 ..Default::default()
7538 },
7539 );
7540 moves.insert(
7541 Choices::HIDDENPOWERFIRE70,
7542 Choice {
7543 move_id: Choices::HIDDENPOWERFIRE70,
7544 base_power: 70.0,
7545 category: MoveCategory::Special,
7546 move_type: PokemonType::FIRE,
7547 flags: Flags {
7548 protect: true,
7549 ..Default::default()
7550 },
7551 ..Default::default()
7552 },
7553 );
7554 moves.insert(
7555 Choices::HIDDENPOWERFLYING60,
7556 Choice {
7557 move_id: Choices::HIDDENPOWERFLYING60,
7558 base_power: 60.0,
7559 category: MoveCategory::Special,
7560 move_type: PokemonType::FLYING,
7561 flags: Flags {
7562 protect: true,
7563 ..Default::default()
7564 },
7565 ..Default::default()
7566 },
7567 );
7568 moves.insert(
7569 Choices::HIDDENPOWERFLYING70,
7570 Choice {
7571 move_id: Choices::HIDDENPOWERFLYING70,
7572 base_power: 70.0,
7573 category: MoveCategory::Special,
7574 move_type: PokemonType::FLYING,
7575 flags: Flags {
7576 protect: true,
7577 ..Default::default()
7578 },
7579 ..Default::default()
7580 },
7581 );
7582 moves.insert(
7583 Choices::HIDDENPOWERGHOST60,
7584 Choice {
7585 move_id: Choices::HIDDENPOWERGHOST60,
7586 base_power: 60.0,
7587 category: MoveCategory::Special,
7588 move_type: PokemonType::GHOST,
7589 flags: Flags {
7590 protect: true,
7591 ..Default::default()
7592 },
7593 ..Default::default()
7594 },
7595 );
7596 moves.insert(
7597 Choices::HIDDENPOWERGHOST70,
7598 Choice {
7599 move_id: Choices::HIDDENPOWERGHOST70,
7600 base_power: 70.0,
7601 category: MoveCategory::Special,
7602 move_type: PokemonType::GHOST,
7603 flags: Flags {
7604 protect: true,
7605 ..Default::default()
7606 },
7607 ..Default::default()
7608 },
7609 );
7610 moves.insert(
7611 Choices::HIDDENPOWERGRASS60,
7612 Choice {
7613 move_id: Choices::HIDDENPOWERGRASS60,
7614 base_power: 60.0,
7615 category: MoveCategory::Special,
7616 move_type: PokemonType::GRASS,
7617 flags: Flags {
7618 protect: true,
7619 ..Default::default()
7620 },
7621 ..Default::default()
7622 },
7623 );
7624 moves.insert(
7625 Choices::HIDDENPOWERGRASS70,
7626 Choice {
7627 move_id: Choices::HIDDENPOWERGRASS70,
7628 base_power: 70.0,
7629 category: MoveCategory::Special,
7630 move_type: PokemonType::GRASS,
7631 flags: Flags {
7632 protect: true,
7633 ..Default::default()
7634 },
7635 ..Default::default()
7636 },
7637 );
7638 moves.insert(
7639 Choices::HIDDENPOWERGROUND60,
7640 Choice {
7641 move_id: Choices::HIDDENPOWERGROUND60,
7642 base_power: 60.0,
7643 category: MoveCategory::Special,
7644 move_type: PokemonType::GROUND,
7645 flags: Flags {
7646 protect: true,
7647 ..Default::default()
7648 },
7649 ..Default::default()
7650 },
7651 );
7652 moves.insert(
7653 Choices::HIDDENPOWERGROUND70,
7654 Choice {
7655 move_id: Choices::HIDDENPOWERGROUND70,
7656 base_power: 70.0,
7657 category: MoveCategory::Special,
7658 move_type: PokemonType::GROUND,
7659 flags: Flags {
7660 protect: true,
7661 ..Default::default()
7662 },
7663 ..Default::default()
7664 },
7665 );
7666 moves.insert(
7667 Choices::HIDDENPOWERICE60,
7668 Choice {
7669 move_id: Choices::HIDDENPOWERICE60,
7670 base_power: 60.0,
7671 category: MoveCategory::Special,
7672 move_type: PokemonType::ICE,
7673 flags: Flags {
7674 protect: true,
7675 ..Default::default()
7676 },
7677 ..Default::default()
7678 },
7679 );
7680 moves.insert(
7681 Choices::HIDDENPOWERICE70,
7682 Choice {
7683 move_id: Choices::HIDDENPOWERICE70,
7684 base_power: 70.0,
7685 category: MoveCategory::Special,
7686 move_type: PokemonType::ICE,
7687 flags: Flags {
7688 protect: true,
7689 ..Default::default()
7690 },
7691 ..Default::default()
7692 },
7693 );
7694 moves.insert(
7695 Choices::HIDDENPOWERPOISON60,
7696 Choice {
7697 move_id: Choices::HIDDENPOWERPOISON60,
7698 base_power: 60.0,
7699 category: MoveCategory::Special,
7700 move_type: PokemonType::POISON,
7701 flags: Flags {
7702 protect: true,
7703 ..Default::default()
7704 },
7705 ..Default::default()
7706 },
7707 );
7708 moves.insert(
7709 Choices::HIDDENPOWERPOISON70,
7710 Choice {
7711 move_id: Choices::HIDDENPOWERPOISON70,
7712 base_power: 70.0,
7713 category: MoveCategory::Special,
7714 move_type: PokemonType::POISON,
7715 flags: Flags {
7716 protect: true,
7717 ..Default::default()
7718 },
7719 ..Default::default()
7720 },
7721 );
7722 moves.insert(
7723 Choices::HIDDENPOWERPSYCHIC60,
7724 Choice {
7725 move_id: Choices::HIDDENPOWERPSYCHIC60,
7726 base_power: 60.0,
7727 category: MoveCategory::Special,
7728 move_type: PokemonType::PSYCHIC,
7729 flags: Flags {
7730 protect: true,
7731 ..Default::default()
7732 },
7733 ..Default::default()
7734 },
7735 );
7736 moves.insert(
7737 Choices::HIDDENPOWERPSYCHIC70,
7738 Choice {
7739 move_id: Choices::HIDDENPOWERPSYCHIC70,
7740 base_power: 70.0,
7741 category: MoveCategory::Special,
7742 move_type: PokemonType::PSYCHIC,
7743 flags: Flags {
7744 protect: true,
7745 ..Default::default()
7746 },
7747 ..Default::default()
7748 },
7749 );
7750 moves.insert(
7751 Choices::HIDDENPOWERROCK60,
7752 Choice {
7753 move_id: Choices::HIDDENPOWERROCK60,
7754 base_power: 60.0,
7755 category: MoveCategory::Special,
7756 move_type: PokemonType::ROCK,
7757 flags: Flags {
7758 protect: true,
7759 ..Default::default()
7760 },
7761 ..Default::default()
7762 },
7763 );
7764 moves.insert(
7765 Choices::HIDDENPOWERROCK70,
7766 Choice {
7767 move_id: Choices::HIDDENPOWERROCK70,
7768 base_power: 70.0,
7769 category: MoveCategory::Special,
7770 move_type: PokemonType::ROCK,
7771 flags: Flags {
7772 protect: true,
7773 ..Default::default()
7774 },
7775 ..Default::default()
7776 },
7777 );
7778 moves.insert(
7779 Choices::HIDDENPOWERSTEEL60,
7780 Choice {
7781 move_id: Choices::HIDDENPOWERSTEEL60,
7782 base_power: 60.0,
7783 category: MoveCategory::Special,
7784 move_type: PokemonType::STEEL,
7785 flags: Flags {
7786 protect: true,
7787 ..Default::default()
7788 },
7789 ..Default::default()
7790 },
7791 );
7792 moves.insert(
7793 Choices::HIDDENPOWERSTEEL70,
7794 Choice {
7795 move_id: Choices::HIDDENPOWERSTEEL70,
7796 base_power: 70.0,
7797 category: MoveCategory::Special,
7798 move_type: PokemonType::STEEL,
7799 flags: Flags {
7800 protect: true,
7801 ..Default::default()
7802 },
7803 ..Default::default()
7804 },
7805 );
7806 moves.insert(
7807 Choices::HIDDENPOWERWATER60,
7808 Choice {
7809 move_id: Choices::HIDDENPOWERWATER60,
7810 base_power: 60.0,
7811 category: MoveCategory::Special,
7812 move_type: PokemonType::WATER,
7813 flags: Flags {
7814 protect: true,
7815 ..Default::default()
7816 },
7817 ..Default::default()
7818 },
7819 );
7820 moves.insert(
7821 Choices::HIDDENPOWERWATER70,
7822 Choice {
7823 move_id: Choices::HIDDENPOWERWATER70,
7824 base_power: 70.0,
7825 category: MoveCategory::Special,
7826 move_type: PokemonType::WATER,
7827 flags: Flags {
7828 protect: true,
7829 ..Default::default()
7830 },
7831 ..Default::default()
7832 },
7833 );
7834 moves.insert(
7835 Choices::HIGHHORSEPOWER,
7836 Choice {
7837 move_id: Choices::HIGHHORSEPOWER,
7838 accuracy: 95.0,
7839 base_power: 95.0,
7840 category: MoveCategory::Physical,
7841 move_type: PokemonType::GROUND,
7842 flags: Flags {
7843 contact: true,
7844 protect: true,
7845 ..Default::default()
7846 },
7847 ..Default::default()
7848 },
7849 );
7850 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
7851 moves.insert(
7852 Choices::HIGHJUMPKICK,
7853 Choice {
7854 move_id: Choices::HIGHJUMPKICK,
7855 accuracy: 90.0,
7856 base_power: 85.0,
7857 category: MoveCategory::Physical,
7858 move_type: PokemonType::FIGHTING,
7859 flags: Flags {
7860 contact: true,
7861 protect: true,
7862 ..Default::default()
7863 },
7864 crash: Some(0.5),
7865 ..Default::default()
7866 },
7867 );
7868 }
7869 else if cfg!(feature = "gen4") {
7870 moves.insert(
7871 Choices::HIGHJUMPKICK,
7872 Choice {
7873 move_id: Choices::HIGHJUMPKICK,
7874 accuracy: 90.0,
7875 base_power: 100.0,
7876 category: MoveCategory::Physical,
7877 move_type: PokemonType::FIGHTING,
7878 flags: Flags {
7879 contact: true,
7880 protect: true,
7881 ..Default::default()
7882 },
7883 crash: Some(0.5),
7884 ..Default::default()
7885 },
7886 );
7887 } else {
7888 moves.insert(
7889 Choices::HIGHJUMPKICK,
7890 Choice {
7891 move_id: Choices::HIGHJUMPKICK,
7892 accuracy: 90.0,
7893 base_power: 130.0,
7894 category: MoveCategory::Physical,
7895 move_type: PokemonType::FIGHTING,
7896 flags: Flags {
7897 contact: true,
7898 protect: true,
7899 ..Default::default()
7900 },
7901 crash: Some(0.5),
7902 ..Default::default()
7903 },
7904 );
7905 }
7906 moves.insert(
7907 Choices::HOLDBACK,
7908 Choice {
7909 move_id: Choices::HOLDBACK,
7910 base_power: 40.0,
7911 category: MoveCategory::Physical,
7912 move_type: PokemonType::NORMAL,
7913 flags: Flags {
7914 contact: true,
7915 protect: true,
7916 ..Default::default()
7917 },
7918 ..Default::default()
7919 },
7920 );
7921 moves.insert(
7922 Choices::HOLDHANDS,
7923 Choice {
7924 move_id: Choices::HOLDHANDS,
7925 target: MoveTarget::User,
7926 move_type: PokemonType::NORMAL,
7927 flags: Flags {
7928 ..Default::default()
7929 },
7930 ..Default::default()
7931 },
7932 );
7933 moves.insert(
7934 Choices::HONECLAWS,
7935 Choice {
7936 move_id: Choices::HONECLAWS,
7937 target: MoveTarget::User,
7938 move_type: PokemonType::DARK,
7939 flags: Flags {
7940 ..Default::default()
7941 },
7942 boost: Some(Boost {
7943 target: MoveTarget::User,
7944 boosts: StatBoosts {
7945 attack: 1,
7946 defense: 0,
7947 special_attack: 0,
7948 special_defense: 0,
7949 speed: 0,
7950 accuracy: 1,
7951 },
7952 }),
7953 ..Default::default()
7954 },
7955 );
7956 moves.insert(
7957 Choices::HORNATTACK,
7958 Choice {
7959 move_id: Choices::HORNATTACK,
7960 base_power: 65.0,
7961 category: MoveCategory::Physical,
7962 move_type: PokemonType::NORMAL,
7963 flags: Flags {
7964 contact: true,
7965 protect: true,
7966 ..Default::default()
7967 },
7968 ..Default::default()
7969 },
7970 );
7971 moves.insert(
7972 Choices::HORNDRILL,
7973 Choice {
7974 move_id: Choices::HORNDRILL,
7975 accuracy: 30.0,
7976 category: MoveCategory::Physical,
7977 move_type: PokemonType::NORMAL,
7978 flags: Flags {
7979 contact: true,
7980 protect: true,
7981 ..Default::default()
7982 },
7983 ..Default::default()
7984 },
7985 );
7986 moves.insert(
7987 Choices::HORNLEECH,
7988 Choice {
7989 move_id: Choices::HORNLEECH,
7990 base_power: 75.0,
7991 category: MoveCategory::Physical,
7992 move_type: PokemonType::GRASS,
7993 flags: Flags {
7994 contact: true,
7995 heal: true,
7996 protect: true,
7997 ..Default::default()
7998 },
7999 drain: Some(0.5),
8000 ..Default::default()
8001 },
8002 );
8003 moves.insert(
8004 Choices::HOWL,
8005 Choice {
8006 move_id: Choices::HOWL,
8007 target: MoveTarget::User,
8008 move_type: PokemonType::NORMAL,
8009 flags: Flags {
8010 sound: true,
8011 ..Default::default()
8012 },
8013 boost: Some(Boost {
8014 target: MoveTarget::User,
8015 boosts: StatBoosts {
8016 attack: 1,
8017 defense: 0,
8018 special_attack: 0,
8019 special_defense: 0,
8020 speed: 0,
8021 accuracy: 0,
8022 },
8023 }),
8024 ..Default::default()
8025 },
8026 );
8027 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8028 moves.insert(
8029 Choices::HURRICANE,
8030 Choice {
8031 move_id: Choices::HURRICANE,
8032 accuracy: 70.0,
8033 base_power: 120.0,
8034 category: MoveCategory::Special,
8035 move_type: PokemonType::FLYING,
8036 flags: Flags {
8037 protect: true,
8038 wind: true,
8039 ..Default::default()
8040 },
8041 secondaries: Some(vec![Secondary {
8042 chance: 30.0,
8043 target: MoveTarget::Opponent,
8044 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
8045 }]),
8046 ..Default::default()
8047 },
8048 );
8049 } else {
8050 moves.insert(
8051 Choices::HURRICANE,
8052 Choice {
8053 move_id: Choices::HURRICANE,
8054 accuracy: 70.0,
8055 base_power: 110.0,
8056 category: MoveCategory::Special,
8057 move_type: PokemonType::FLYING,
8058 flags: Flags {
8059 protect: true,
8060 wind: true,
8061 ..Default::default()
8062 },
8063 secondaries: Some(vec![Secondary {
8064 chance: 30.0,
8065 target: MoveTarget::Opponent,
8066 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
8067 }]),
8068 ..Default::default()
8069 },
8070 );
8071 }
8072 moves.insert(
8073 Choices::HYDROCANNON,
8074 Choice {
8075 move_id: Choices::HYDROCANNON,
8076 accuracy: 90.0,
8077 base_power: 150.0,
8078 category: MoveCategory::Special,
8079 move_type: PokemonType::WATER,
8080 flags: Flags {
8081 protect: true,
8082 recharge: true,
8083 ..Default::default()
8084 },
8085 ..Default::default()
8086 },
8087 );
8088 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8089 moves.insert(
8090 Choices::HYDROPUMP,
8091 Choice {
8092 move_id: Choices::HYDROPUMP,
8093 accuracy: 80.0,
8094 base_power: 120.0,
8095 category: MoveCategory::Special,
8096 move_type: PokemonType::WATER,
8097 flags: Flags {
8098 protect: true,
8099 ..Default::default()
8100 },
8101 ..Default::default()
8102 },
8103 );
8104 } else {
8105 moves.insert(
8106 Choices::HYDROPUMP,
8107 Choice {
8108 move_id: Choices::HYDROPUMP,
8109 accuracy: 80.0,
8110 base_power: 110.0,
8111 category: MoveCategory::Special,
8112 move_type: PokemonType::WATER,
8113 flags: Flags {
8114 protect: true,
8115 ..Default::default()
8116 },
8117 ..Default::default()
8118 },
8119 );
8120 }
8121 moves.insert(
8122 Choices::HYDROSTEAM,
8123 Choice {
8124 move_id: Choices::HYDROSTEAM,
8125 base_power: 80.0,
8126 category: MoveCategory::Special,
8127 move_type: PokemonType::WATER,
8128 flags: Flags {
8129 protect: true,
8130 ..Default::default()
8131 },
8132 ..Default::default()
8133 },
8134 );
8135 moves.insert(
8136 Choices::HYPERBEAM,
8137 Choice {
8138 move_id: Choices::HYPERBEAM,
8139 accuracy: 90.0,
8140 base_power: 150.0,
8141 category: MoveCategory::Special,
8142 move_type: PokemonType::NORMAL,
8143 flags: Flags {
8144 protect: true,
8145 recharge: true,
8146 ..Default::default()
8147 },
8148 ..Default::default()
8149 },
8150 );
8151 moves.insert(
8152 Choices::HYPERDRILL,
8153 Choice {
8154 move_id: Choices::HYPERDRILL,
8155 base_power: 100.0,
8156 category: MoveCategory::Physical,
8157 move_type: PokemonType::NORMAL,
8158 flags: Flags {
8159 contact: true,
8160 ..Default::default()
8161 },
8162 ..Default::default()
8163 },
8164 );
8165 moves.insert(
8166 Choices::HYPERFANG,
8167 Choice {
8168 move_id: Choices::HYPERFANG,
8169 accuracy: 90.0,
8170 base_power: 80.0,
8171 category: MoveCategory::Physical,
8172 move_type: PokemonType::NORMAL,
8173 flags: Flags {
8174 bite: true,
8175 contact: true,
8176 protect: true,
8177 ..Default::default()
8178 },
8179 secondaries: Some(vec![Secondary {
8180 chance: 10.0,
8181 target: MoveTarget::Opponent,
8182 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8183 }]),
8184 ..Default::default()
8185 },
8186 );
8187 moves.insert(
8188 Choices::HYPERSPACEFURY,
8189 Choice {
8190 move_id: Choices::HYPERSPACEFURY,
8191 base_power: 100.0,
8192 category: MoveCategory::Physical,
8193 move_type: PokemonType::DARK,
8194 flags: Flags {
8195 ..Default::default()
8196 },
8197 boost: Some(Boost {
8198 target: MoveTarget::User,
8199 boosts: StatBoosts {
8200 attack: 0,
8201 defense: -1,
8202 special_attack: 0,
8203 special_defense: 0,
8204 speed: 0,
8205 accuracy: 0,
8206 },
8207 }),
8208 ..Default::default()
8209 },
8210 );
8211 moves.insert(
8212 Choices::HYPERSPACEHOLE,
8213 Choice {
8214 move_id: Choices::HYPERSPACEHOLE,
8215 base_power: 80.0,
8216 category: MoveCategory::Special,
8217 move_type: PokemonType::PSYCHIC,
8218 flags: Flags {
8219 ..Default::default()
8220 },
8221 ..Default::default()
8222 },
8223 );
8224 moves.insert(
8225 Choices::HYPERVOICE,
8226 Choice {
8227 move_id: Choices::HYPERVOICE,
8228 base_power: 90.0,
8229 category: MoveCategory::Special,
8230 move_type: PokemonType::NORMAL,
8231 flags: Flags {
8232 protect: true,
8233 sound: true,
8234 ..Default::default()
8235 },
8236 ..Default::default()
8237 },
8238 );
8239 moves.insert(
8240 Choices::HYPNOSIS,
8241 Choice {
8242 move_id: Choices::HYPNOSIS,
8243 accuracy: 60.0,
8244 status: Some(Status {
8245 target: MoveTarget::Opponent,
8246 status: PokemonStatus::SLEEP,
8247 }),
8248 move_type: PokemonType::PSYCHIC,
8249 flags: Flags {
8250 protect: true,
8251 reflectable: true,
8252 ..Default::default()
8253 },
8254 ..Default::default()
8255 },
8256 );
8257 moves.insert(
8258 Choices::ICEBALL,
8259 Choice {
8260 move_id: Choices::ICEBALL,
8261 accuracy: 90.0,
8262 base_power: 30.0,
8263 category: MoveCategory::Physical,
8264 move_type: PokemonType::ICE,
8265 flags: Flags {
8266 bullet: true,
8267 contact: true,
8268 protect: true,
8269 ..Default::default()
8270 },
8271 ..Default::default()
8272 },
8273 );
8274 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8275 moves.insert(
8276 Choices::ICEBEAM,
8277 Choice {
8278 move_id: Choices::ICEBEAM,
8279 base_power: 95.0,
8280 category: MoveCategory::Special,
8281 move_type: PokemonType::ICE,
8282 flags: Flags {
8283 protect: true,
8284 ..Default::default()
8285 },
8286 secondaries: Some(vec![Secondary {
8287 chance: 10.0,
8288 target: MoveTarget::Opponent,
8289 effect: Effect::Status(PokemonStatus::FREEZE),
8290 }]),
8291 ..Default::default()
8292 },
8293 );
8294 } else {
8295 moves.insert(
8296 Choices::ICEBEAM,
8297 Choice {
8298 move_id: Choices::ICEBEAM,
8299 base_power: 90.0,
8300 category: MoveCategory::Special,
8301 move_type: PokemonType::ICE,
8302 flags: Flags {
8303 protect: true,
8304 ..Default::default()
8305 },
8306 secondaries: Some(vec![Secondary {
8307 chance: 10.0,
8308 target: MoveTarget::Opponent,
8309 effect: Effect::Status(PokemonStatus::FREEZE),
8310 }]),
8311 ..Default::default()
8312 },
8313 );
8314 }
8315 moves.insert(
8316 Choices::ICEBURN,
8317 Choice {
8318 move_id: Choices::ICEBURN,
8319 accuracy: 90.0,
8320 base_power: 140.0,
8321 category: MoveCategory::Special,
8322 move_type: PokemonType::ICE,
8323 flags: Flags {
8324 charge: true,
8325 protect: true,
8326 ..Default::default()
8327 },
8328 secondaries: Some(vec![Secondary {
8329 chance: 30.0,
8330 target: MoveTarget::Opponent,
8331 effect: Effect::Status(PokemonStatus::BURN),
8332 }]),
8333 ..Default::default()
8334 },
8335 );
8336 moves.insert(
8337 Choices::ICEFANG,
8338 Choice {
8339 move_id: Choices::ICEFANG,
8340 accuracy: 95.0,
8341 base_power: 65.0,
8342 category: MoveCategory::Physical,
8343 move_type: PokemonType::ICE,
8344 flags: Flags {
8345 bite: true,
8346 contact: true,
8347 protect: true,
8348 ..Default::default()
8349 },
8350 secondaries: Some(vec![
8351 Secondary {
8352 chance: 10.0,
8353 target: MoveTarget::Opponent,
8354 effect: Effect::Status(PokemonStatus::FREEZE),
8355 },
8356 Secondary {
8357 chance: 10.0,
8358 target: MoveTarget::Opponent,
8359 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8360 },
8361 ]),
8362 ..Default::default()
8363 },
8364 );
8365 moves.insert(
8366 Choices::ICEHAMMER,
8367 Choice {
8368 move_id: Choices::ICEHAMMER,
8369 accuracy: 90.0,
8370 base_power: 100.0,
8371 category: MoveCategory::Physical,
8372 move_type: PokemonType::ICE,
8373 flags: Flags {
8374 contact: true,
8375 protect: true,
8376 punch: true,
8377 ..Default::default()
8378 },
8379 boost: Some(Boost {
8380 target: MoveTarget::User,
8381 boosts: StatBoosts {
8382 attack: 0,
8383 defense: 0,
8384 special_attack: 0,
8385 special_defense: 0,
8386 speed: -1,
8387 accuracy: 0,
8388 },
8389 }),
8390 ..Default::default()
8391 },
8392 );
8393 moves.insert(
8394 Choices::ICEPUNCH,
8395 Choice {
8396 move_id: Choices::ICEPUNCH,
8397 base_power: 75.0,
8398 category: MoveCategory::Physical,
8399 move_type: PokemonType::ICE,
8400 flags: Flags {
8401 contact: true,
8402 protect: true,
8403 punch: true,
8404 ..Default::default()
8405 },
8406 secondaries: Some(vec![Secondary {
8407 chance: 10.0,
8408 target: MoveTarget::Opponent,
8409 effect: Effect::Status(PokemonStatus::FREEZE),
8410 }]),
8411 ..Default::default()
8412 },
8413 );
8414 moves.insert(
8415 Choices::ICESHARD,
8416 Choice {
8417 move_id: Choices::ICESHARD,
8418 base_power: 40.0,
8419 category: MoveCategory::Physical,
8420 priority: 1,
8421 move_type: PokemonType::ICE,
8422 flags: Flags {
8423 protect: true,
8424 ..Default::default()
8425 },
8426 ..Default::default()
8427 },
8428 );
8429 moves.insert(
8430 Choices::ICESPINNER,
8431 Choice {
8432 move_id: Choices::ICESPINNER,
8433 base_power: 80.0,
8434 category: MoveCategory::Physical,
8435 move_type: PokemonType::ICE,
8436 flags: Flags {
8437 contact: true,
8438 protect: true,
8439 ..Default::default()
8440 },
8441 ..Default::default()
8442 },
8443 );
8444 moves.insert(
8445 Choices::ICICLECRASH,
8446 Choice {
8447 move_id: Choices::ICICLECRASH,
8448 accuracy: 90.0,
8449 base_power: 85.0,
8450 category: MoveCategory::Physical,
8451 move_type: PokemonType::ICE,
8452 flags: Flags {
8453 protect: true,
8454 ..Default::default()
8455 },
8456 secondaries: Some(vec![Secondary {
8457 chance: 30.0,
8458 target: MoveTarget::Opponent,
8459 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8460 }]),
8461 ..Default::default()
8462 },
8463 );
8464 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
8465 moves.insert(
8466 Choices::ICICLESPEAR,
8467 Choice {
8468 move_id: Choices::ICICLESPEAR,
8469 base_power: 10.0,
8470 category: MoveCategory::Physical,
8471 move_type: PokemonType::ICE,
8472 flags: Flags {
8473 protect: true,
8474 ..Default::default()
8475 },
8476 ..Default::default()
8477 },
8478 );
8479 } else {
8480 moves.insert(
8481 Choices::ICICLESPEAR,
8482 Choice {
8483 move_id: Choices::ICICLESPEAR,
8484 base_power: 25.0,
8485 category: MoveCategory::Physical,
8486 move_type: PokemonType::ICE,
8487 flags: Flags {
8488 protect: true,
8489 ..Default::default()
8490 },
8491 ..Default::default()
8492 },
8493 );
8494 }
8495 moves.insert(
8496 Choices::ICYWIND,
8497 Choice {
8498 move_id: Choices::ICYWIND,
8499 accuracy: 95.0,
8500 base_power: 55.0,
8501 category: MoveCategory::Special,
8502 move_type: PokemonType::ICE,
8503 flags: Flags {
8504 protect: true,
8505 wind: true,
8506 ..Default::default()
8507 },
8508 secondaries: Some(vec![Secondary {
8509 chance: 100.0,
8510 target: MoveTarget::Opponent,
8511 effect: Effect::Boost(StatBoosts {
8512 attack: 0,
8513 defense: 0,
8514 special_attack: 0,
8515 special_defense: 0,
8516 speed: -1,
8517 accuracy: 0,
8518 }),
8519 }]),
8520 ..Default::default()
8521 },
8522 );
8523 moves.insert(
8524 Choices::IMPRISON,
8525 Choice {
8526 move_id: Choices::IMPRISON,
8527 target: MoveTarget::User,
8528 move_type: PokemonType::PSYCHIC,
8529 flags: Flags {
8530 ..Default::default()
8531 },
8532 volatile_status: Some(VolatileStatus {
8533 target: MoveTarget::User,
8534 volatile_status: PokemonVolatileStatus::IMPRISON,
8535 }),
8536 ..Default::default()
8537 },
8538 );
8539 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8540 moves.insert(
8541 Choices::INCINERATE,
8542 Choice {
8543 move_id: Choices::INCINERATE,
8544 base_power: 30.0,
8545 category: MoveCategory::Special,
8546 move_type: PokemonType::FIRE,
8547 flags: Flags {
8548 protect: true,
8549 ..Default::default()
8550 },
8551 ..Default::default()
8552 },
8553 );
8554 } else {
8555 moves.insert(
8556 Choices::INCINERATE,
8557 Choice {
8558 move_id: Choices::INCINERATE,
8559 base_power: 60.0,
8560 category: MoveCategory::Special,
8561 move_type: PokemonType::FIRE,
8562 flags: Flags {
8563 protect: true,
8564 ..Default::default()
8565 },
8566 ..Default::default()
8567 },
8568 );
8569 }
8570 moves.insert(
8571 Choices::INFERNALPARADE,
8572 Choice {
8573 move_id: Choices::INFERNALPARADE,
8574 base_power: 60.0,
8575 category: MoveCategory::Special,
8576 move_type: PokemonType::GHOST,
8577 flags: Flags {
8578 protect: true,
8579 ..Default::default()
8580 },
8581 secondaries: Some(vec![Secondary {
8582 chance: 30.0,
8583 target: MoveTarget::Opponent,
8584 effect: Effect::Status(PokemonStatus::BURN),
8585 }]),
8586 ..Default::default()
8587 },
8588 );
8589 moves.insert(
8590 Choices::INFERNO,
8591 Choice {
8592 move_id: Choices::INFERNO,
8593 accuracy: 50.0,
8594 base_power: 100.0,
8595 category: MoveCategory::Special,
8596 move_type: PokemonType::FIRE,
8597 flags: Flags {
8598 protect: true,
8599 ..Default::default()
8600 },
8601 secondaries: Some(vec![Secondary {
8602 chance: 100.0,
8603 target: MoveTarget::Opponent,
8604 effect: Effect::Status(PokemonStatus::BURN),
8605 }]),
8606 ..Default::default()
8607 },
8608 );
8609 moves.insert(
8610 Choices::INFESTATION,
8611 Choice {
8612 move_id: Choices::INFESTATION,
8613 base_power: 20.0,
8614 category: MoveCategory::Special,
8615 move_type: PokemonType::BUG,
8616 flags: Flags {
8617 contact: true,
8618 protect: true,
8619 ..Default::default()
8620 },
8621 volatile_status: Some(VolatileStatus {
8622 target: MoveTarget::Opponent,
8623 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
8624 }),
8625 ..Default::default()
8626 },
8627 );
8628 moves.insert(
8629 Choices::INGRAIN,
8630 Choice {
8631 move_id: Choices::INGRAIN,
8632 target: MoveTarget::User,
8633 move_type: PokemonType::GRASS,
8634 flags: Flags {
8635 ..Default::default()
8636 },
8637 volatile_status: Some(VolatileStatus {
8638 target: MoveTarget::User,
8639 volatile_status: PokemonVolatileStatus::INGRAIN,
8640 }),
8641 ..Default::default()
8642 },
8643 );
8644 moves.insert(
8645 Choices::INSTRUCT,
8646 Choice {
8647 move_id: Choices::INSTRUCT,
8648 move_type: PokemonType::PSYCHIC,
8649 flags: Flags {
8650 protect: true,
8651 ..Default::default()
8652 },
8653 ..Default::default()
8654 },
8655 );
8656 moves.insert(
8657 Choices::IONDELUGE,
8658 Choice {
8659 move_id: Choices::IONDELUGE,
8660 priority: 1,
8661 move_type: PokemonType::ELECTRIC,
8662 flags: Flags {
8663 ..Default::default()
8664 },
8665 ..Default::default()
8666 },
8667 );
8668 moves.insert(
8669 Choices::IRONDEFENSE,
8670 Choice {
8671 move_id: Choices::IRONDEFENSE,
8672 target: MoveTarget::User,
8673 move_type: PokemonType::STEEL,
8674 flags: Flags {
8675 ..Default::default()
8676 },
8677 boost: Some(Boost {
8678 target: MoveTarget::User,
8679 boosts: StatBoosts {
8680 attack: 0,
8681 defense: 2,
8682 special_attack: 0,
8683 special_defense: 0,
8684 speed: 0,
8685 accuracy: 0,
8686 },
8687 }),
8688 ..Default::default()
8689 },
8690 );
8691 moves.insert(
8692 Choices::IRONHEAD,
8693 Choice {
8694 move_id: Choices::IRONHEAD,
8695 base_power: 80.0,
8696 category: MoveCategory::Physical,
8697 move_type: PokemonType::STEEL,
8698 flags: Flags {
8699 contact: true,
8700 protect: true,
8701 ..Default::default()
8702 },
8703 secondaries: Some(vec![Secondary {
8704 chance: 30.0,
8705 target: MoveTarget::Opponent,
8706 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8707 }]),
8708 ..Default::default()
8709 },
8710 );
8711 moves.insert(
8712 Choices::IRONTAIL,
8713 Choice {
8714 move_id: Choices::IRONTAIL,
8715 accuracy: 75.0,
8716 base_power: 100.0,
8717 category: MoveCategory::Physical,
8718 move_type: PokemonType::STEEL,
8719 flags: Flags {
8720 contact: true,
8721 protect: true,
8722 ..Default::default()
8723 },
8724 secondaries: Some(vec![Secondary {
8725 chance: 30.0,
8726 target: MoveTarget::Opponent,
8727 effect: Effect::Boost(StatBoosts {
8728 attack: 0,
8729 defense: -1,
8730 special_attack: 0,
8731 special_defense: 0,
8732 speed: 0,
8733 accuracy: 0,
8734 }),
8735 }]),
8736 ..Default::default()
8737 },
8738 );
8739 moves.insert(
8740 Choices::IVYCUDGEL,
8741 Choice {
8742 move_id: Choices::IVYCUDGEL,
8743 base_power: 100.0,
8744 category: MoveCategory::Physical,
8745 move_type: PokemonType::GRASS,
8746 flags: Flags {
8747 protect: true,
8748 ..Default::default()
8749 },
8750 ..Default::default()
8751 },
8752 );
8753 moves.insert(
8754 Choices::JAWLOCK,
8755 Choice {
8756 move_id: Choices::JAWLOCK,
8757 base_power: 80.0,
8758 category: MoveCategory::Physical,
8759 move_type: PokemonType::DARK,
8760 flags: Flags {
8761 bite: true,
8762 contact: true,
8763 protect: true,
8764 ..Default::default()
8765 },
8766 ..Default::default()
8767 },
8768 );
8769 moves.insert(
8770 Choices::JETPUNCH,
8771 Choice {
8772 move_id: Choices::JETPUNCH,
8773 base_power: 60.0,
8774 category: MoveCategory::Physical,
8775 priority: 1,
8776 move_type: PokemonType::WATER,
8777 flags: Flags {
8778 contact: true,
8779 protect: true,
8780 punch: true,
8781 ..Default::default()
8782 },
8783 ..Default::default()
8784 },
8785 );
8786 moves.insert(
8787 Choices::JUDGMENT,
8788 Choice {
8789 move_id: Choices::JUDGMENT,
8790 base_power: 100.0,
8791 category: MoveCategory::Special,
8792 move_type: PokemonType::NORMAL,
8793 flags: Flags {
8794 protect: true,
8795 ..Default::default()
8796 },
8797 ..Default::default()
8798 },
8799 );
8800 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
8801 moves.insert(
8802 Choices::JUMPKICK,
8803 Choice {
8804 move_id: Choices::JUMPKICK,
8805 accuracy: 95.0,
8806 base_power: 70.0,
8807 category: MoveCategory::Physical,
8808 move_type: PokemonType::FIGHTING,
8809 flags: Flags {
8810 contact: true,
8811 protect: true,
8812 ..Default::default()
8813 },
8814 crash: Some(0.5),
8815 ..Default::default()
8816 },
8817 );
8818 }
8819 else if cfg!(feature = "gen4") {
8820 moves.insert(
8821 Choices::JUMPKICK,
8822 Choice {
8823 move_id: Choices::JUMPKICK,
8824 accuracy: 95.0,
8825 base_power: 85.0,
8826 category: MoveCategory::Physical,
8827 move_type: PokemonType::FIGHTING,
8828 flags: Flags {
8829 contact: true,
8830 protect: true,
8831 ..Default::default()
8832 },
8833 crash: Some(0.5),
8834 ..Default::default()
8835 },
8836 );
8837 } else {
8838 moves.insert(
8839 Choices::JUMPKICK,
8840 Choice {
8841 move_id: Choices::JUMPKICK,
8842 accuracy: 95.0,
8843 base_power: 100.0,
8844 category: MoveCategory::Physical,
8845 move_type: PokemonType::FIGHTING,
8846 flags: Flags {
8847 contact: true,
8848 protect: true,
8849 ..Default::default()
8850 },
8851 crash: Some(0.5),
8852 ..Default::default()
8853 },
8854 );
8855 }
8856 moves.insert(
8857 Choices::JUNGLEHEALING,
8858 Choice {
8859 move_id: Choices::JUNGLEHEALING,
8860 target: MoveTarget::User,
8861 move_type: PokemonType::GRASS,
8862 flags: Flags {
8863 heal: true,
8864 ..Default::default()
8865 },
8866 heal: Some(Heal {
8867 target: MoveTarget::User,
8868 amount: 0.25,
8869 }),
8870 ..Default::default()
8871 },
8872 );
8873 if cfg!(feature = "gen1") {
8874 moves.insert(
8875 Choices::KARATECHOP,
8876 Choice {
8877 move_id: Choices::KARATECHOP,
8878 base_power: 50.0,
8879 category: MoveCategory::Physical,
8880 move_type: PokemonType::NORMAL,
8881 flags: Flags {
8882 contact: true,
8883 protect: true,
8884 ..Default::default()
8885 },
8886 ..Default::default()
8887 },
8888 );
8889 } else {
8890 moves.insert(
8891 Choices::KARATECHOP,
8892 Choice {
8893 move_id: Choices::KARATECHOP,
8894 base_power: 50.0,
8895 category: MoveCategory::Physical,
8896 move_type: PokemonType::FIGHTING,
8897 flags: Flags {
8898 contact: true,
8899 protect: true,
8900 ..Default::default()
8901 },
8902 ..Default::default()
8903 },
8904 );
8905 }
8906 moves.insert(
8907 Choices::KINESIS,
8908 Choice {
8909 move_id: Choices::KINESIS,
8910 accuracy: 80.0,
8911 move_type: PokemonType::PSYCHIC,
8912 flags: Flags {
8913 protect: true,
8914 reflectable: true,
8915 ..Default::default()
8916 },
8917 boost: Some(Boost {
8918 target: MoveTarget::Opponent,
8919 boosts: StatBoosts {
8920 attack: 0,
8921 defense: 0,
8922 special_attack: 0,
8923 special_defense: 0,
8924 speed: 0,
8925 accuracy: -1,
8926 },
8927 }),
8928 ..Default::default()
8929 },
8930 );
8931 moves.insert(
8932 Choices::KINGSSHIELD,
8933 Choice {
8934 move_id: Choices::KINGSSHIELD,
8935 priority: 4,
8936 target: MoveTarget::User,
8937 move_type: PokemonType::STEEL,
8938 flags: Flags {
8939 ..Default::default()
8940 },
8941 volatile_status: Some(VolatileStatus {
8942 target: MoveTarget::User,
8943 volatile_status: PokemonVolatileStatus::KINGSSHIELD,
8944 }),
8945 ..Default::default()
8946 },
8947 );
8948 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8949 moves.insert(
8950 Choices::KNOCKOFF,
8951 Choice {
8952 move_id: Choices::KNOCKOFF,
8953 base_power: 20.0,
8954 category: MoveCategory::Physical,
8955 move_type: PokemonType::DARK,
8956 flags: Flags {
8957 contact: true,
8958 protect: true,
8959 ..Default::default()
8960 },
8961 ..Default::default()
8962 },
8963 );
8964 } else {
8965 moves.insert(
8966 Choices::KNOCKOFF,
8967 Choice {
8968 move_id: Choices::KNOCKOFF,
8969 base_power: 65.0,
8970 category: MoveCategory::Physical,
8971 move_type: PokemonType::DARK,
8972 flags: Flags {
8973 contact: true,
8974 protect: true,
8975 ..Default::default()
8976 },
8977 ..Default::default()
8978 },
8979 );
8980 }
8981 moves.insert(
8982 Choices::KOWTOWCLEAVE,
8983 Choice {
8984 move_id: Choices::KOWTOWCLEAVE,
8985 base_power: 85.0,
8986 category: MoveCategory::Physical,
8987 move_type: PokemonType::DARK,
8988 flags: Flags {
8989 contact: true,
8990 protect: true,
8991 slicing: true,
8992 ..Default::default()
8993 },
8994 ..Default::default()
8995 },
8996 );
8997 moves.insert(
8998 Choices::LANDSWRATH,
8999 Choice {
9000 move_id: Choices::LANDSWRATH,
9001 base_power: 90.0,
9002 category: MoveCategory::Physical,
9003 move_type: PokemonType::GROUND,
9004 flags: Flags {
9005 protect: true,
9006 ..Default::default()
9007 },
9008 ..Default::default()
9009 },
9010 );
9011 moves.insert(
9012 Choices::LASERFOCUS,
9013 Choice {
9014 move_id: Choices::LASERFOCUS,
9015 target: MoveTarget::User,
9016 move_type: PokemonType::NORMAL,
9017 flags: Flags {
9018 ..Default::default()
9019 },
9020 volatile_status: Some(VolatileStatus {
9021 target: MoveTarget::User,
9022 volatile_status: PokemonVolatileStatus::LASERFOCUS,
9023 }),
9024 ..Default::default()
9025 },
9026 );
9027 moves.insert(
9028 Choices::LASHOUT,
9029 Choice {
9030 move_id: Choices::LASHOUT,
9031 base_power: 75.0,
9032 category: MoveCategory::Physical,
9033 move_type: PokemonType::DARK,
9034 flags: Flags {
9035 contact: true,
9036 protect: true,
9037 ..Default::default()
9038 },
9039 ..Default::default()
9040 },
9041 );
9042 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
9043 moves.insert(
9044 Choices::LASTRESORT,
9045 Choice {
9046 move_id: Choices::LASTRESORT,
9047 base_power: 130.0,
9048 category: MoveCategory::Physical,
9049 move_type: PokemonType::NORMAL,
9050 flags: Flags {
9051 contact: true,
9052 protect: true,
9053 ..Default::default()
9054 },
9055 ..Default::default()
9056 },
9057 );
9058 } else {
9059 moves.insert(
9060 Choices::LASTRESORT,
9061 Choice {
9062 move_id: Choices::LASTRESORT,
9063 base_power: 140.0,
9064 category: MoveCategory::Physical,
9065 move_type: PokemonType::NORMAL,
9066 flags: Flags {
9067 contact: true,
9068 protect: true,
9069 ..Default::default()
9070 },
9071 ..Default::default()
9072 },
9073 );
9074 }
9075 moves.insert(
9076 Choices::LASTRESPECTS,
9077 Choice {
9078 move_id: Choices::LASTRESPECTS,
9079 base_power: 50.0,
9080 category: MoveCategory::Physical,
9081 move_type: PokemonType::GHOST,
9082 flags: Flags {
9083 protect: true,
9084 ..Default::default()
9085 },
9086 ..Default::default()
9087 },
9088 );
9089 moves.insert(
9090 Choices::LAVAPLUME,
9091 Choice {
9092 move_id: Choices::LAVAPLUME,
9093 base_power: 80.0,
9094 category: MoveCategory::Special,
9095 move_type: PokemonType::FIRE,
9096 flags: Flags {
9097 protect: true,
9098 ..Default::default()
9099 },
9100 secondaries: Some(vec![Secondary {
9101 chance: 30.0,
9102 target: MoveTarget::Opponent,
9103 effect: Effect::Status(PokemonStatus::BURN),
9104 }]),
9105 ..Default::default()
9106 },
9107 );
9108 moves.insert(
9109 Choices::LEAFAGE,
9110 Choice {
9111 move_id: Choices::LEAFAGE,
9112 base_power: 40.0,
9113 category: MoveCategory::Physical,
9114 move_type: PokemonType::GRASS,
9115 flags: Flags {
9116 protect: true,
9117 ..Default::default()
9118 },
9119 ..Default::default()
9120 },
9121 );
9122 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
9123 moves.insert(
9124 Choices::LEAFBLADE,
9125 Choice {
9126 move_id: Choices::LEAFBLADE,
9127 base_power: 70.0,
9128 category: MoveCategory::Physical,
9129 move_type: PokemonType::GRASS,
9130 flags: Flags {
9131 contact: true,
9132 protect: true,
9133 slicing: true,
9134 ..Default::default()
9135 },
9136 ..Default::default()
9137 },
9138 );
9139 } else {
9140 moves.insert(
9141 Choices::LEAFBLADE,
9142 Choice {
9143 move_id: Choices::LEAFBLADE,
9144 base_power: 90.0,
9145 category: MoveCategory::Physical,
9146 move_type: PokemonType::GRASS,
9147 flags: Flags {
9148 contact: true,
9149 protect: true,
9150 slicing: true,
9151 ..Default::default()
9152 },
9153 ..Default::default()
9154 },
9155 );
9156 }
9157 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
9158 moves.insert(
9159 Choices::LEAFSTORM,
9160 Choice {
9161 move_id: Choices::LEAFSTORM,
9162 accuracy: 90.0,
9163 base_power: 140.0,
9164 category: MoveCategory::Special,
9165 move_type: PokemonType::GRASS,
9166 flags: Flags {
9167 protect: true,
9168 ..Default::default()
9169 },
9170 boost: Some(Boost {
9171 target: MoveTarget::User,
9172 boosts: StatBoosts {
9173 attack: 0,
9174 defense: 0,
9175 special_attack: -2,
9176 special_defense: 0,
9177 speed: 0,
9178 accuracy: 0,
9179 },
9180 }),
9181 ..Default::default()
9182 },
9183 );
9184 } else {
9185 moves.insert(
9186 Choices::LEAFSTORM,
9187 Choice {
9188 move_id: Choices::LEAFSTORM,
9189 accuracy: 90.0,
9190 base_power: 130.0,
9191 category: MoveCategory::Special,
9192 move_type: PokemonType::GRASS,
9193 flags: Flags {
9194 protect: true,
9195 ..Default::default()
9196 },
9197 boost: Some(Boost {
9198 target: MoveTarget::User,
9199 boosts: StatBoosts {
9200 attack: 0,
9201 defense: 0,
9202 special_attack: -2,
9203 special_defense: 0,
9204 speed: 0,
9205 accuracy: 0,
9206 },
9207 }),
9208 ..Default::default()
9209 },
9210 );
9211 }
9212 moves.insert(
9213 Choices::LEAFTORNADO,
9214 Choice {
9215 move_id: Choices::LEAFTORNADO,
9216 accuracy: 90.0,
9217 base_power: 65.0,
9218 category: MoveCategory::Special,
9219 move_type: PokemonType::GRASS,
9220 flags: Flags {
9221 protect: true,
9222 ..Default::default()
9223 },
9224 secondaries: Some(vec![Secondary {
9225 chance: 50.0,
9226 target: MoveTarget::Opponent,
9227 effect: Effect::Boost(StatBoosts {
9228 attack: 0,
9229 defense: 0,
9230 special_attack: 0,
9231 special_defense: 0,
9232 speed: 0,
9233 accuracy: -1,
9234 }),
9235 }]),
9236 ..Default::default()
9237 },
9238 );
9239 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
9240 moves.insert(
9241 Choices::LEECHLIFE,
9242 Choice {
9243 move_id: Choices::LEECHLIFE,
9244 base_power: 20.0,
9245 category: MoveCategory::Physical,
9246 move_type: PokemonType::BUG,
9247 flags: Flags {
9248 contact: true,
9249 heal: true,
9250 protect: true,
9251 ..Default::default()
9252 },
9253 drain: Some(0.5),
9254 ..Default::default()
9255 },
9256 );
9257 } else {
9258 moves.insert(
9259 Choices::LEECHLIFE,
9260 Choice {
9261 move_id: Choices::LEECHLIFE,
9262 base_power: 80.0,
9263 category: MoveCategory::Physical,
9264 move_type: PokemonType::BUG,
9265 flags: Flags {
9266 contact: true,
9267 heal: true,
9268 protect: true,
9269 ..Default::default()
9270 },
9271 drain: Some(0.5),
9272 ..Default::default()
9273 },
9274 );
9275 }
9276 moves.insert(
9277 Choices::LEECHSEED,
9278 Choice {
9279 move_id: Choices::LEECHSEED,
9280 accuracy: 90.0,
9281 move_type: PokemonType::GRASS,
9282 flags: Flags {
9283 powder: true,
9284 protect: true,
9285 reflectable: true,
9286 ..Default::default()
9287 },
9288 volatile_status: Some(VolatileStatus {
9289 target: MoveTarget::Opponent,
9290 volatile_status: PokemonVolatileStatus::LEECHSEED,
9291 }),
9292 ..Default::default()
9293 },
9294 );
9295 moves.insert(
9296 Choices::LEER,
9297 Choice {
9298 move_id: Choices::LEER,
9299 move_type: PokemonType::NORMAL,
9300 flags: Flags {
9301 protect: true,
9302 reflectable: true,
9303 ..Default::default()
9304 },
9305 boost: Some(Boost {
9306 target: MoveTarget::Opponent,
9307 boosts: StatBoosts {
9308 attack: 0,
9309 defense: -1,
9310 special_attack: 0,
9311 special_defense: 0,
9312 speed: 0,
9313 accuracy: 0,
9314 },
9315 }),
9316 ..Default::default()
9317 },
9318 );
9319 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
9320 moves.insert(
9321 Choices::LICK,
9322 Choice {
9323 move_id: Choices::LICK,
9324 base_power: 20.0,
9325 category: MoveCategory::Physical,
9326 move_type: PokemonType::GHOST,
9327 flags: Flags {
9328 contact: true,
9329 protect: true,
9330 ..Default::default()
9331 },
9332 secondaries: Some(vec![Secondary {
9333 chance: 30.0,
9334 target: MoveTarget::Opponent,
9335 effect: Effect::Status(PokemonStatus::PARALYZE),
9336 }]),
9337 ..Default::default()
9338 },
9339 );
9340 } else {
9341 moves.insert(
9342 Choices::LICK,
9343 Choice {
9344 move_id: Choices::LICK,
9345 base_power: 30.0,
9346 category: MoveCategory::Physical,
9347 move_type: PokemonType::GHOST,
9348 flags: Flags {
9349 contact: true,
9350 protect: true,
9351 ..Default::default()
9352 },
9353 secondaries: Some(vec![Secondary {
9354 chance: 30.0,
9355 target: MoveTarget::Opponent,
9356 effect: Effect::Status(PokemonStatus::PARALYZE),
9357 }]),
9358 ..Default::default()
9359 },
9360 );
9361 }
9362 moves.insert(
9363 Choices::LIFEDEW,
9364 Choice {
9365 move_id: Choices::LIFEDEW,
9366 target: MoveTarget::User,
9367 move_type: PokemonType::WATER,
9368 flags: Flags {
9369 heal: true,
9370 ..Default::default()
9371 },
9372 heal: Some(Heal {
9373 target: MoveTarget::User,
9374 amount: 0.25,
9375 }),
9376 ..Default::default()
9377 },
9378 );
9379 moves.insert(
9380 Choices::LIGHTOFRUIN,
9381 Choice {
9382 move_id: Choices::LIGHTOFRUIN,
9383 accuracy: 90.0,
9384 base_power: 140.0,
9385 category: MoveCategory::Special,
9386 move_type: PokemonType::FAIRY,
9387 flags: Flags {
9388 protect: true,
9389 ..Default::default()
9390 },
9391 recoil: Some(0.5),
9392 ..Default::default()
9393 },
9394 );
9395 if cfg!(feature = "gen1") {
9396 moves.insert(
9397 Choices::LIGHTSCREEN,
9398 Choice {
9399 move_id: Choices::LIGHTSCREEN,
9400 target: MoveTarget::User,
9401 move_type: PokemonType::PSYCHIC,
9402 flags: Flags {
9403 ..Default::default()
9404 },
9405 volatile_status: Some(VolatileStatus {
9406 target: MoveTarget::User,
9407 volatile_status: PokemonVolatileStatus::LIGHTSCREEN,
9408 }),
9409 ..Default::default()
9410 },
9411 );
9412 } else {
9413 moves.insert(
9414 Choices::LIGHTSCREEN,
9415 Choice {
9416 move_id: Choices::LIGHTSCREEN,
9417 target: MoveTarget::User,
9418 move_type: PokemonType::PSYCHIC,
9419 flags: Flags {
9420 ..Default::default()
9421 },
9422 side_condition: Some(SideCondition {
9423 target: MoveTarget::User,
9424 condition: PokemonSideCondition::LightScreen,
9425 }),
9426 ..Default::default()
9427 },
9428 );
9429 }
9430 moves.insert(
9431 Choices::LIQUIDATION,
9432 Choice {
9433 move_id: Choices::LIQUIDATION,
9434 base_power: 85.0,
9435 category: MoveCategory::Physical,
9436 move_type: PokemonType::WATER,
9437 flags: Flags {
9438 contact: true,
9439 protect: true,
9440 ..Default::default()
9441 },
9442 secondaries: Some(vec![Secondary {
9443 chance: 20.0,
9444 target: MoveTarget::Opponent,
9445 effect: Effect::Boost(StatBoosts {
9446 attack: 0,
9447 defense: -1,
9448 special_attack: 0,
9449 special_defense: 0,
9450 speed: 0,
9451 accuracy: 0,
9452 }),
9453 }]),
9454 ..Default::default()
9455 },
9456 );
9457 moves.insert(
9458 Choices::LOCKON,
9459 Choice {
9460 move_id: Choices::LOCKON,
9461 move_type: PokemonType::NORMAL,
9462 flags: Flags {
9463 protect: true,
9464 ..Default::default()
9465 },
9466 ..Default::default()
9467 },
9468 );
9469 moves.insert(
9470 Choices::LOVELYKISS,
9471 Choice {
9472 move_id: Choices::LOVELYKISS,
9473 accuracy: 75.0,
9474 status: Some(Status {
9475 target: MoveTarget::Opponent,
9476 status: PokemonStatus::SLEEP,
9477 }),
9478 move_type: PokemonType::NORMAL,
9479 flags: Flags {
9480 protect: true,
9481 reflectable: true,
9482 ..Default::default()
9483 },
9484 ..Default::default()
9485 },
9486 );
9487 if cfg!(feature = "gen1") || cfg!(feature = "gen2") {
9488 moves.insert(
9489 Choices::LOWKICK,
9490 Choice {
9491 move_id: Choices::LOWKICK,
9492 category: MoveCategory::Physical,
9493 base_power: 50.0,
9494 accuracy: 90.0,
9495 move_type: PokemonType::FIGHTING,
9496 flags: Flags {
9497 contact: true,
9498 protect: true,
9499 ..Default::default()
9500 },
9501 secondaries: Some(vec![Secondary {
9502 chance: 30.0,
9503 target: MoveTarget::Opponent,
9504 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
9505 }]),
9506 ..Default::default()
9507 },
9508 );
9509 } else {
9510 moves.insert(
9511 Choices::LOWKICK,
9512 Choice {
9513 move_id: Choices::LOWKICK,
9514 category: MoveCategory::Physical,
9515 move_type: PokemonType::FIGHTING,
9516 flags: Flags {
9517 contact: true,
9518 protect: true,
9519 ..Default::default()
9520 },
9521 ..Default::default()
9522 },
9523 );
9524 }
9525 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
9526 moves.insert(
9527 Choices::LOWSWEEP,
9528 Choice {
9529 move_id: Choices::LOWSWEEP,
9530 base_power: 60.0,
9531 category: MoveCategory::Physical,
9532 move_type: PokemonType::FIGHTING,
9533 flags: Flags {
9534 contact: true,
9535 protect: true,
9536 ..Default::default()
9537 },
9538 secondaries: Some(vec![Secondary {
9539 chance: 100.0,
9540 target: MoveTarget::Opponent,
9541 effect: Effect::Boost(StatBoosts {
9542 attack: 0,
9543 defense: 0,
9544 special_attack: 0,
9545 special_defense: 0,
9546 speed: -1,
9547 accuracy: 0,
9548 }),
9549 }]),
9550 ..Default::default()
9551 },
9552 );
9553 } else {
9554 moves.insert(
9555 Choices::LOWSWEEP,
9556 Choice {
9557 move_id: Choices::LOWSWEEP,
9558 base_power: 65.0,
9559 category: MoveCategory::Physical,
9560 move_type: PokemonType::FIGHTING,
9561 flags: Flags {
9562 contact: true,
9563 protect: true,
9564 ..Default::default()
9565 },
9566 secondaries: Some(vec![Secondary {
9567 chance: 100.0,
9568 target: MoveTarget::Opponent,
9569 effect: Effect::Boost(StatBoosts {
9570 attack: 0,
9571 defense: 0,
9572 special_attack: 0,
9573 special_defense: 0,
9574 speed: -1,
9575 accuracy: 0,
9576 }),
9577 }]),
9578 ..Default::default()
9579 },
9580 );
9581 }
9582 moves.insert(
9583 Choices::LUCKYCHANT,
9584 Choice {
9585 move_id: Choices::LUCKYCHANT,
9586 target: MoveTarget::User,
9587 move_type: PokemonType::NORMAL,
9588 flags: Flags {
9589 ..Default::default()
9590 },
9591 side_condition: Some(SideCondition {
9592 target: MoveTarget::User,
9593 condition: PokemonSideCondition::LuckyChant,
9594 }),
9595 ..Default::default()
9596 },
9597 );
9598 moves.insert(
9599 Choices::LUMINACRASH,
9600 Choice {
9601 move_id: Choices::LUMINACRASH,
9602 base_power: 80.0,
9603 category: MoveCategory::Special,
9604 move_type: PokemonType::PSYCHIC,
9605 flags: Flags {
9606 protect: true,
9607 ..Default::default()
9608 },
9609 secondaries: Some(vec![Secondary {
9610 chance: 100.0,
9611 target: MoveTarget::Opponent,
9612 effect: Effect::Boost(StatBoosts {
9613 attack: 0,
9614 defense: 0,
9615 special_attack: 0,
9616 special_defense: -2,
9617 speed: 0,
9618 accuracy: 0,
9619 }),
9620 }]),
9621 ..Default::default()
9622 },
9623 );
9624 moves.insert(
9625 Choices::LUNARBLESSING,
9626 Choice {
9627 move_id: Choices::LUNARBLESSING,
9628 target: MoveTarget::User,
9629 move_type: PokemonType::PSYCHIC,
9630 flags: Flags {
9631 heal: true,
9632 ..Default::default()
9633 },
9634 heal: Some(Heal {
9635 target: MoveTarget::User,
9636 amount: 0.25,
9637 }),
9638 ..Default::default()
9639 },
9640 );
9641 moves.insert(
9642 Choices::LUNARDANCE,
9643 Choice {
9644 move_id: Choices::LUNARDANCE,
9645 target: MoveTarget::User,
9646 move_type: PokemonType::PSYCHIC,
9647 flags: Flags {
9648 heal: true,
9649 ..Default::default()
9650 },
9651 ..Default::default()
9652 },
9653 );
9654 moves.insert(
9655 Choices::LUNGE,
9656 Choice {
9657 move_id: Choices::LUNGE,
9658 base_power: 80.0,
9659 category: MoveCategory::Physical,
9660 move_type: PokemonType::BUG,
9661 flags: Flags {
9662 contact: true,
9663 protect: true,
9664 ..Default::default()
9665 },
9666 secondaries: Some(vec![Secondary {
9667 chance: 100.0,
9668 target: MoveTarget::Opponent,
9669 effect: Effect::Boost(StatBoosts {
9670 attack: -1,
9671 defense: 0,
9672 special_attack: 0,
9673 special_defense: 0,
9674 speed: 0,
9675 accuracy: 0,
9676 }),
9677 }]),
9678 ..Default::default()
9679 },
9680 );
9681 if cfg!(feature = "gen9") {
9682 moves.insert(
9683 Choices::LUSTERPURGE,
9684 Choice {
9685 move_id: Choices::LUSTERPURGE,
9686 base_power: 95.0,
9687 category: MoveCategory::Special,
9688 move_type: PokemonType::PSYCHIC,
9689 flags: Flags {
9690 protect: true,
9691 ..Default::default()
9692 },
9693 secondaries: Some(vec![Secondary {
9694 chance: 50.0,
9695 target: MoveTarget::Opponent,
9696 effect: Effect::Boost(StatBoosts {
9697 attack: 0,
9698 defense: 0,
9699 special_attack: 0,
9700 special_defense: -1,
9701 speed: 0,
9702 accuracy: 0,
9703 }),
9704 }]),
9705 ..Default::default()
9706 },
9707 );
9708 } else {
9709 moves.insert(
9710 Choices::LUSTERPURGE,
9711 Choice {
9712 move_id: Choices::LUSTERPURGE,
9713 base_power: 70.0,
9714 category: MoveCategory::Special,
9715 move_type: PokemonType::PSYCHIC,
9716 flags: Flags {
9717 protect: true,
9718 ..Default::default()
9719 },
9720 secondaries: Some(vec![Secondary {
9721 chance: 50.0,
9722 target: MoveTarget::Opponent,
9723 effect: Effect::Boost(StatBoosts {
9724 attack: 0,
9725 defense: 0,
9726 special_attack: 0,
9727 special_defense: -1,
9728 speed: 0,
9729 accuracy: 0,
9730 }),
9731 }]),
9732 ..Default::default()
9733 },
9734 );
9735 }
9736 moves.insert(
9737 Choices::MACHPUNCH,
9738 Choice {
9739 move_id: Choices::MACHPUNCH,
9740 base_power: 40.0,
9741 category: MoveCategory::Physical,
9742 priority: 1,
9743 move_type: PokemonType::FIGHTING,
9744 flags: Flags {
9745 contact: true,
9746 protect: true,
9747 punch: true,
9748 ..Default::default()
9749 },
9750 ..Default::default()
9751 },
9752 );
9753 moves.insert(
9754 Choices::MAGICALLEAF,
9755 Choice {
9756 move_id: Choices::MAGICALLEAF,
9757 base_power: 60.0,
9758 category: MoveCategory::Special,
9759 move_type: PokemonType::GRASS,
9760 flags: Flags {
9761 protect: true,
9762 ..Default::default()
9763 },
9764 ..Default::default()
9765 },
9766 );
9767 moves.insert(
9768 Choices::MAGICALTORQUE,
9769 Choice {
9770 move_id: Choices::MAGICALTORQUE,
9771 base_power: 100.0,
9772 category: MoveCategory::Physical,
9773 move_type: PokemonType::FAIRY,
9774 flags: Flags {
9775 protect: true,
9776 ..Default::default()
9777 },
9778 secondaries: Some(vec![Secondary {
9779 chance: 30.0,
9780 target: MoveTarget::Opponent,
9781 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
9782 }]),
9783 ..Default::default()
9784 },
9785 );
9786 moves.insert(
9787 Choices::MAGICCOAT,
9788 Choice {
9789 move_id: Choices::MAGICCOAT,
9790 priority: 4,
9791 target: MoveTarget::User,
9792 move_type: PokemonType::PSYCHIC,
9793 flags: Flags {
9794 ..Default::default()
9795 },
9796 volatile_status: Some(VolatileStatus {
9797 target: MoveTarget::User,
9798 volatile_status: PokemonVolatileStatus::MAGICCOAT,
9799 }),
9800 ..Default::default()
9801 },
9802 );
9803 moves.insert(
9804 Choices::MAGICPOWDER,
9805 Choice {
9806 move_id: Choices::MAGICPOWDER,
9807 move_type: PokemonType::PSYCHIC,
9808 flags: Flags {
9809 powder: true,
9810 protect: true,
9811 reflectable: true,
9812 ..Default::default()
9813 },
9814 ..Default::default()
9815 },
9816 );
9817 moves.insert(
9818 Choices::MAGICROOM,
9819 Choice {
9820 move_id: Choices::MAGICROOM,
9821 move_type: PokemonType::PSYCHIC,
9822 flags: Flags {
9823 ..Default::default()
9824 },
9825 ..Default::default()
9826 },
9827 );
9828 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
9829 moves.insert(
9830 Choices::MAGMASTORM,
9831 Choice {
9832 move_id: Choices::MAGMASTORM,
9833 accuracy: 70.0,
9834 base_power: 120.0,
9835 category: MoveCategory::Special,
9836 move_type: PokemonType::FIRE,
9837 flags: Flags {
9838 protect: true,
9839 ..Default::default()
9840 },
9841 volatile_status: Some(VolatileStatus {
9842 target: MoveTarget::Opponent,
9843 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
9844 }),
9845 ..Default::default()
9846 },
9847 );
9848 } else if cfg!(feature = "gen5") {
9849 moves.insert(
9850 Choices::MAGMASTORM,
9851 Choice {
9852 move_id: Choices::MAGMASTORM,
9853 accuracy: 75.0,
9854 base_power: 120.0,
9855 category: MoveCategory::Special,
9856 move_type: PokemonType::FIRE,
9857 flags: Flags {
9858 protect: true,
9859 ..Default::default()
9860 },
9861 volatile_status: Some(VolatileStatus {
9862 target: MoveTarget::Opponent,
9863 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
9864 }),
9865 ..Default::default()
9866 },
9867 );
9868 } else {
9869 moves.insert(
9870 Choices::MAGMASTORM,
9871 Choice {
9872 move_id: Choices::MAGMASTORM,
9873 accuracy: 75.0,
9874 base_power: 100.0,
9875 category: MoveCategory::Special,
9876 move_type: PokemonType::FIRE,
9877 flags: Flags {
9878 protect: true,
9879 ..Default::default()
9880 },
9881 volatile_status: Some(VolatileStatus {
9882 target: MoveTarget::Opponent,
9883 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
9884 }),
9885 ..Default::default()
9886 },
9887 );
9888 }
9889 moves.insert(
9890 Choices::MAGNETBOMB,
9891 Choice {
9892 move_id: Choices::MAGNETBOMB,
9893 base_power: 60.0,
9894 category: MoveCategory::Physical,
9895 move_type: PokemonType::STEEL,
9896 flags: Flags {
9897 bullet: true,
9898 protect: true,
9899 ..Default::default()
9900 },
9901 ..Default::default()
9902 },
9903 );
9904 moves.insert(
9905 Choices::MAGNETICFLUX,
9906 Choice {
9907 move_id: Choices::MAGNETICFLUX,
9908 target: MoveTarget::User,
9909 move_type: PokemonType::ELECTRIC,
9910 flags: Flags {
9911 ..Default::default()
9912 },
9913 ..Default::default()
9914 },
9915 );
9916 moves.insert(
9917 Choices::MAGNETRISE,
9918 Choice {
9919 move_id: Choices::MAGNETRISE,
9920 target: MoveTarget::User,
9921 move_type: PokemonType::ELECTRIC,
9922 flags: Flags {
9923 ..Default::default()
9924 },
9925 volatile_status: Some(VolatileStatus {
9926 target: MoveTarget::User,
9927 volatile_status: PokemonVolatileStatus::MAGNETRISE,
9928 }),
9929 ..Default::default()
9930 },
9931 );
9932 moves.insert(
9933 Choices::MAGNITUDE,
9934 Choice {
9935 move_id: Choices::MAGNITUDE,
9936 category: MoveCategory::Physical,
9937 move_type: PokemonType::GROUND,
9938 flags: Flags {
9939 protect: true,
9940 ..Default::default()
9941 },
9942 ..Default::default()
9943 },
9944 );
9945 moves.insert(
9946 Choices::MAKEITRAIN,
9947 Choice {
9948 move_id: Choices::MAKEITRAIN,
9949 base_power: 120.0,
9950 category: MoveCategory::Special,
9951 move_type: PokemonType::STEEL,
9952 flags: Flags {
9953 protect: true,
9954 ..Default::default()
9955 },
9956 boost: Some(Boost {
9957 target: MoveTarget::User,
9958 boosts: StatBoosts {
9959 attack: 0,
9960 defense: 0,
9961 special_attack: -1,
9962 special_defense: 0,
9963 speed: 0,
9964 accuracy: 0,
9965 },
9966 }),
9967 ..Default::default()
9968 },
9969 );
9970 moves.insert(
9971 Choices::MALIGNANTCHAIN,
9972 Choice {
9973 move_id: Choices::MALIGNANTCHAIN,
9974 base_power: 100.0,
9975 category: MoveCategory::Special,
9976 move_type: PokemonType::POISON,
9977 flags: Flags {
9978 protect: true,
9979 ..Default::default()
9980 },
9981 secondaries: Some(vec![Secondary {
9982 chance: 50.0,
9983 target: MoveTarget::Opponent,
9984 effect: Effect::Status(PokemonStatus::TOXIC),
9985 }]),
9986 ..Default::default()
9987 },
9988 );
9989 moves.insert(
9990 Choices::MATBLOCK,
9991 Choice {
9992 move_id: Choices::MATBLOCK,
9993 target: MoveTarget::User,
9994 move_type: PokemonType::FIGHTING,
9995 flags: Flags {
9996 ..Default::default()
9997 },
9998 side_condition: Some(SideCondition {
9999 target: MoveTarget::User,
10000 condition: PokemonSideCondition::MatBlock,
10001 }),
10002 ..Default::default()
10003 },
10004 );
10005 moves.insert(
10006 Choices::MATCHAGOTCHA,
10007 Choice {
10008 move_id: Choices::MATCHAGOTCHA,
10009 accuracy: 90.0,
10010 base_power: 80.0,
10011 category: MoveCategory::Special,
10012 move_type: PokemonType::GRASS,
10013 flags: Flags {
10014 protect: true,
10015 heal: true,
10016 ..Default::default()
10017 },
10018 secondaries: Some(vec![Secondary {
10019 chance: 20.0,
10020 target: MoveTarget::Opponent,
10021 effect: Effect::Status(PokemonStatus::BURN),
10022 }]),
10023 drain: Some(0.5),
10024 ..Default::default()
10025 },
10026 );
10027 moves.insert(
10028 Choices::MEANLOOK,
10029 Choice {
10030 move_id: Choices::MEANLOOK,
10031 move_type: PokemonType::NORMAL,
10032 flags: Flags {
10033 reflectable: true,
10034 ..Default::default()
10035 },
10036 ..Default::default()
10037 },
10038 );
10039 moves.insert(
10040 Choices::MEDITATE,
10041 Choice {
10042 move_id: Choices::MEDITATE,
10043 target: MoveTarget::User,
10044 move_type: PokemonType::PSYCHIC,
10045 flags: Flags {
10046 ..Default::default()
10047 },
10048 boost: Some(Boost {
10049 target: MoveTarget::User,
10050 boosts: StatBoosts {
10051 attack: 1,
10052 defense: 0,
10053 special_attack: 0,
10054 special_defense: 0,
10055 speed: 0,
10056 accuracy: 0,
10057 },
10058 }),
10059 ..Default::default()
10060 },
10061 );
10062 moves.insert(
10063 Choices::MEFIRST,
10064 Choice {
10065 move_id: Choices::MEFIRST,
10066 move_type: PokemonType::NORMAL,
10067 flags: Flags {
10068 protect: true,
10069 ..Default::default()
10070 },
10071 ..Default::default()
10072 },
10073 );
10074 moves.insert(
10075 Choices::MEGADRAIN,
10076 Choice {
10077 move_id: Choices::MEGADRAIN,
10078 base_power: 40.0,
10079 category: MoveCategory::Special,
10080 move_type: PokemonType::GRASS,
10081 flags: Flags {
10082 heal: true,
10083 protect: true,
10084 ..Default::default()
10085 },
10086 drain: Some(0.5),
10087 ..Default::default()
10088 },
10089 );
10090 moves.insert(
10091 Choices::MEGAHORN,
10092 Choice {
10093 move_id: Choices::MEGAHORN,
10094 accuracy: 85.0,
10095 base_power: 120.0,
10096 category: MoveCategory::Physical,
10097 move_type: PokemonType::BUG,
10098 flags: Flags {
10099 contact: true,
10100 protect: true,
10101 ..Default::default()
10102 },
10103 ..Default::default()
10104 },
10105 );
10106 moves.insert(
10107 Choices::MEGAKICK,
10108 Choice {
10109 move_id: Choices::MEGAKICK,
10110 accuracy: 75.0,
10111 base_power: 120.0,
10112 category: MoveCategory::Physical,
10113 move_type: PokemonType::NORMAL,
10114 flags: Flags {
10115 contact: true,
10116 protect: true,
10117 ..Default::default()
10118 },
10119 ..Default::default()
10120 },
10121 );
10122 moves.insert(
10123 Choices::MEGAPUNCH,
10124 Choice {
10125 move_id: Choices::MEGAPUNCH,
10126 accuracy: 85.0,
10127 base_power: 80.0,
10128 category: MoveCategory::Physical,
10129 move_type: PokemonType::NORMAL,
10130 flags: Flags {
10131 contact: true,
10132 protect: true,
10133 punch: true,
10134 ..Default::default()
10135 },
10136 ..Default::default()
10137 },
10138 );
10139 moves.insert(
10140 Choices::MEMENTO,
10141 Choice {
10142 move_id: Choices::MEMENTO,
10143 move_type: PokemonType::DARK,
10144 flags: Flags {
10145 protect: true,
10146 ..Default::default()
10147 },
10148 boost: Some(Boost {
10149 target: MoveTarget::Opponent,
10150 boosts: StatBoosts {
10151 attack: -2,
10152 defense: 0,
10153 special_attack: -2,
10154 special_defense: 0,
10155 speed: 0,
10156 accuracy: 0,
10157 },
10158 }),
10159 heal: Some(Heal {
10160 target: MoveTarget::User,
10161 amount: -1.0,
10162 }),
10163 ..Default::default()
10164 },
10165 );
10166 moves.insert(
10167 Choices::METALBURST,
10168 Choice {
10169 move_id: Choices::METALBURST,
10170 category: MoveCategory::Physical,
10171 move_type: PokemonType::STEEL,
10172 flags: Flags {
10173 protect: true,
10174 ..Default::default()
10175 },
10176 ..Default::default()
10177 },
10178 );
10179 moves.insert(
10180 Choices::METALCLAW,
10181 Choice {
10182 move_id: Choices::METALCLAW,
10183 accuracy: 95.0,
10184 base_power: 50.0,
10185 category: MoveCategory::Physical,
10186 move_type: PokemonType::STEEL,
10187 flags: Flags {
10188 contact: true,
10189 protect: true,
10190 ..Default::default()
10191 },
10192 secondaries: Some(vec![Secondary {
10193 chance: 10.0,
10194 target: MoveTarget::User,
10195 effect: Effect::Boost(StatBoosts {
10196 attack: 1,
10197 defense: 0,
10198 special_attack: 0,
10199 special_defense: 0,
10200 speed: 0,
10201 accuracy: 0,
10202 }),
10203 }]),
10204 ..Default::default()
10205 },
10206 );
10207 moves.insert(
10208 Choices::METALSOUND,
10209 Choice {
10210 move_id: Choices::METALSOUND,
10211 accuracy: 85.0,
10212 move_type: PokemonType::STEEL,
10213 flags: Flags {
10214 protect: true,
10215 reflectable: true,
10216 sound: true,
10217 ..Default::default()
10218 },
10219 boost: Some(Boost {
10220 target: MoveTarget::Opponent,
10221 boosts: StatBoosts {
10222 attack: 0,
10223 defense: 0,
10224 special_attack: 0,
10225 special_defense: -2,
10226 speed: 0,
10227 accuracy: 0,
10228 },
10229 }),
10230 ..Default::default()
10231 },
10232 );
10233 moves.insert(
10234 Choices::METEORASSAULT,
10235 Choice {
10236 move_id: Choices::METEORASSAULT,
10237 base_power: 150.0,
10238 category: MoveCategory::Physical,
10239 move_type: PokemonType::FIGHTING,
10240 flags: Flags {
10241 protect: true,
10242 recharge: true,
10243 ..Default::default()
10244 },
10245 ..Default::default()
10246 },
10247 );
10248 moves.insert(
10249 Choices::METEORBEAM,
10250 Choice {
10251 move_id: Choices::METEORBEAM,
10252 accuracy: 90.0,
10253 base_power: 120.0,
10254 category: MoveCategory::Special,
10255 move_type: PokemonType::ROCK,
10256 flags: Flags {
10257 charge: true,
10258 protect: true,
10259 ..Default::default()
10260 },
10261 ..Default::default()
10262 },
10263 );
10264 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
10265 moves.insert(
10266 Choices::METEORMASH,
10267 Choice {
10268 move_id: Choices::METEORMASH,
10269 accuracy: 85.0,
10270 base_power: 100.0,
10271 category: MoveCategory::Physical,
10272 move_type: PokemonType::STEEL,
10273 flags: Flags {
10274 contact: true,
10275 protect: true,
10276 punch: true,
10277 ..Default::default()
10278 },
10279 secondaries: Some(vec![Secondary {
10280 chance: 20.0,
10281 target: MoveTarget::User,
10282 effect: Effect::Boost(StatBoosts {
10283 attack: 1,
10284 defense: 0,
10285 special_attack: 0,
10286 special_defense: 0,
10287 speed: 0,
10288 accuracy: 0,
10289 }),
10290 }]),
10291 ..Default::default()
10292 },
10293 );
10294 } else {
10295 moves.insert(
10296 Choices::METEORMASH,
10297 Choice {
10298 move_id: Choices::METEORMASH,
10299 accuracy: 90.0,
10300 base_power: 90.0,
10301 category: MoveCategory::Physical,
10302 move_type: PokemonType::STEEL,
10303 flags: Flags {
10304 contact: true,
10305 protect: true,
10306 punch: true,
10307 ..Default::default()
10308 },
10309 secondaries: Some(vec![Secondary {
10310 chance: 20.0,
10311 target: MoveTarget::User,
10312 effect: Effect::Boost(StatBoosts {
10313 attack: 1,
10314 defense: 0,
10315 special_attack: 0,
10316 special_defense: 0,
10317 speed: 0,
10318 accuracy: 0,
10319 }),
10320 }]),
10321 ..Default::default()
10322 },
10323 );
10324 }
10325 moves.insert(
10326 Choices::METRONOME,
10327 Choice {
10328 move_id: Choices::METRONOME,
10329 target: MoveTarget::User,
10330 move_type: PokemonType::NORMAL,
10331 flags: Flags {
10332 ..Default::default()
10333 },
10334 ..Default::default()
10335 },
10336 );
10337 moves.insert(
10338 Choices::MIGHTYCLEAVE,
10339 Choice {
10340 move_id: Choices::MIGHTYCLEAVE,
10341 base_power: 95.0,
10342 category: MoveCategory::Physical,
10343 move_type: PokemonType::ROCK,
10344 flags: Flags {
10345 contact: true,
10346 slicing: true,
10347 ..Default::default()
10348 },
10349 ..Default::default()
10350 },
10351 );
10352 moves.insert(
10353 Choices::MILKDRINK,
10354 Choice {
10355 move_id: Choices::MILKDRINK,
10356 target: MoveTarget::User,
10357 move_type: PokemonType::NORMAL,
10358 flags: Flags {
10359 heal: true,
10360 ..Default::default()
10361 },
10362 heal: Some(Heal {
10363 target: MoveTarget::User,
10364 amount: 0.5,
10365 }),
10366 ..Default::default()
10367 },
10368 );
10369 moves.insert(
10370 Choices::MIMIC,
10371 Choice {
10372 move_id: Choices::MIMIC,
10373 move_type: PokemonType::NORMAL,
10374 flags: Flags {
10375 protect: true,
10376 ..Default::default()
10377 },
10378 ..Default::default()
10379 },
10380 );
10381 moves.insert(
10382 Choices::MINDBLOWN,
10383 Choice {
10384 move_id: Choices::MINDBLOWN,
10385 base_power: 150.0,
10386 category: MoveCategory::Special,
10387 move_type: PokemonType::FIRE,
10388 flags: Flags {
10389 protect: true,
10390 ..Default::default()
10391 },
10392 ..Default::default()
10393 },
10394 );
10395 moves.insert(
10396 Choices::MINDREADER,
10397 Choice {
10398 move_id: Choices::MINDREADER,
10399 move_type: PokemonType::NORMAL,
10400 flags: Flags {
10401 protect: true,
10402 ..Default::default()
10403 },
10404 ..Default::default()
10405 },
10406 );
10407 moves.insert(
10408 Choices::MINIMIZE,
10409 Choice {
10410 move_id: Choices::MINIMIZE,
10411 target: MoveTarget::User,
10412 move_type: PokemonType::NORMAL,
10413 flags: Flags {
10414 ..Default::default()
10415 },
10416 boost: Some(Boost {
10417 target: MoveTarget::User,
10418 boosts: StatBoosts {
10419 attack: 0,
10420 defense: 0,
10421 special_attack: 0,
10422 special_defense: 0,
10423 speed: 0,
10424 accuracy: 0,
10425 },
10426 }),
10427 volatile_status: Some(VolatileStatus {
10428 target: MoveTarget::User,
10429 volatile_status: PokemonVolatileStatus::MINIMIZE,
10430 }),
10431 ..Default::default()
10432 },
10433 );
10434 moves.insert(
10435 Choices::MIRACLEEYE,
10436 Choice {
10437 move_id: Choices::MIRACLEEYE,
10438 move_type: PokemonType::PSYCHIC,
10439 flags: Flags {
10440 protect: true,
10441 reflectable: true,
10442 ..Default::default()
10443 },
10444 volatile_status: Some(VolatileStatus {
10445 target: MoveTarget::Opponent,
10446 volatile_status: PokemonVolatileStatus::MIRACLEEYE,
10447 }),
10448 ..Default::default()
10449 },
10450 );
10451 moves.insert(
10452 Choices::MIRRORCOAT,
10453 Choice {
10454 move_id: Choices::MIRRORCOAT,
10455 category: MoveCategory::Special,
10456 priority: -5,
10457 move_type: PokemonType::PSYCHIC,
10458 flags: Flags {
10459 protect: true,
10460 ..Default::default()
10461 },
10462 ..Default::default()
10463 },
10464 );
10465 moves.insert(
10466 Choices::MIRRORMOVE,
10467 Choice {
10468 move_id: Choices::MIRRORMOVE,
10469 move_type: PokemonType::FLYING,
10470 flags: Flags {
10471 ..Default::default()
10472 },
10473 ..Default::default()
10474 },
10475 );
10476 moves.insert(
10477 Choices::MIRRORSHOT,
10478 Choice {
10479 move_id: Choices::MIRRORSHOT,
10480 accuracy: 85.0,
10481 base_power: 65.0,
10482 category: MoveCategory::Special,
10483 move_type: PokemonType::STEEL,
10484 flags: Flags {
10485 protect: true,
10486 ..Default::default()
10487 },
10488 secondaries: Some(vec![Secondary {
10489 chance: 30.0,
10490 target: MoveTarget::Opponent,
10491 effect: Effect::Boost(StatBoosts {
10492 attack: 0,
10493 defense: 0,
10494 special_attack: 0,
10495 special_defense: 0,
10496 speed: 0,
10497 accuracy: -1,
10498 }),
10499 }]),
10500 ..Default::default()
10501 },
10502 );
10503 moves.insert(
10504 Choices::MIST,
10505 Choice {
10506 move_id: Choices::MIST,
10507 target: MoveTarget::User,
10508 move_type: PokemonType::ICE,
10509 flags: Flags {
10510 ..Default::default()
10511 },
10512 side_condition: Some(SideCondition {
10513 target: MoveTarget::User,
10514 condition: PokemonSideCondition::Mist,
10515 }),
10516 ..Default::default()
10517 },
10518 );
10519 if cfg!(feature = "gen9") {
10520 moves.insert(
10521 Choices::MISTBALL,
10522 Choice {
10523 move_id: Choices::MISTBALL,
10524 base_power: 95.0,
10525 category: MoveCategory::Special,
10526 move_type: PokemonType::PSYCHIC,
10527 flags: Flags {
10528 bullet: true,
10529 protect: true,
10530 ..Default::default()
10531 },
10532 secondaries: Some(vec![Secondary {
10533 chance: 50.0,
10534 target: MoveTarget::Opponent,
10535 effect: Effect::Boost(StatBoosts {
10536 attack: 0,
10537 defense: 0,
10538 special_attack: -1,
10539 special_defense: 0,
10540 speed: 0,
10541 accuracy: 0,
10542 }),
10543 }]),
10544 ..Default::default()
10545 },
10546 );
10547 } else {
10548 moves.insert(
10549 Choices::MISTBALL,
10550 Choice {
10551 move_id: Choices::MISTBALL,
10552 base_power: 70.0,
10553 category: MoveCategory::Special,
10554 move_type: PokemonType::PSYCHIC,
10555 flags: Flags {
10556 bullet: true,
10557 protect: true,
10558 ..Default::default()
10559 },
10560 secondaries: Some(vec![Secondary {
10561 chance: 50.0,
10562 target: MoveTarget::Opponent,
10563 effect: Effect::Boost(StatBoosts {
10564 attack: 0,
10565 defense: 0,
10566 special_attack: -1,
10567 special_defense: 0,
10568 speed: 0,
10569 accuracy: 0,
10570 }),
10571 }]),
10572 ..Default::default()
10573 },
10574 );
10575 }
10576 moves.insert(
10577 Choices::MISTYEXPLOSION,
10578 Choice {
10579 move_id: Choices::MISTYEXPLOSION,
10580 base_power: 100.0,
10581 category: MoveCategory::Special,
10582 move_type: PokemonType::FAIRY,
10583 flags: Flags {
10584 protect: true,
10585 ..Default::default()
10586 },
10587 ..Default::default()
10588 },
10589 );
10590 moves.insert(
10591 Choices::MISTYTERRAIN,
10592 Choice {
10593 move_id: Choices::MISTYTERRAIN,
10594 move_type: PokemonType::FAIRY,
10595 flags: Flags {
10596 ..Default::default()
10597 },
10598 ..Default::default()
10599 },
10600 );
10601 moves.insert(
10602 Choices::MOONBLAST,
10603 Choice {
10604 move_id: Choices::MOONBLAST,
10605 base_power: 95.0,
10606 category: MoveCategory::Special,
10607 move_type: PokemonType::FAIRY,
10608 flags: Flags {
10609 protect: true,
10610 ..Default::default()
10611 },
10612 secondaries: Some(vec![Secondary {
10613 chance: 30.0,
10614 target: MoveTarget::Opponent,
10615 effect: Effect::Boost(StatBoosts {
10616 attack: 0,
10617 defense: 0,
10618 special_attack: -1,
10619 special_defense: 0,
10620 speed: 0,
10621 accuracy: 0,
10622 }),
10623 }]),
10624 ..Default::default()
10625 },
10626 );
10627 moves.insert(
10628 Choices::MOONGEISTBEAM,
10629 Choice {
10630 move_id: Choices::MOONGEISTBEAM,
10631 base_power: 100.0,
10632 category: MoveCategory::Special,
10633 move_type: PokemonType::GHOST,
10634 flags: Flags {
10635 protect: true,
10636 ..Default::default()
10637 },
10638 ..Default::default()
10639 },
10640 );
10641 moves.insert(
10642 Choices::MOONLIGHT,
10643 Choice {
10644 move_id: Choices::MOONLIGHT,
10645 target: MoveTarget::User,
10646 move_type: PokemonType::FAIRY,
10647 flags: Flags {
10648 heal: true,
10649 ..Default::default()
10650 },
10651 heal: Some(Heal {
10652 target: MoveTarget::User,
10653 amount: 0.5,
10654 }),
10655 ..Default::default()
10656 },
10657 );
10658 moves.insert(
10659 Choices::MORNINGSUN,
10660 Choice {
10661 move_id: Choices::MORNINGSUN,
10662 target: MoveTarget::User,
10663 move_type: PokemonType::NORMAL,
10664 flags: Flags {
10665 heal: true,
10666 ..Default::default()
10667 },
10668 heal: Some(Heal {
10669 target: MoveTarget::User,
10670 amount: 0.5,
10671 }),
10672 ..Default::default()
10673 },
10674 );
10675 moves.insert(
10676 Choices::MORTALSPIN,
10677 Choice {
10678 move_id: Choices::MORTALSPIN,
10679 base_power: 30.0,
10680 category: MoveCategory::Physical,
10681 move_type: PokemonType::POISON,
10682 flags: Flags {
10683 contact: true,
10684 protect: true,
10685 ..Default::default()
10686 },
10687 secondaries: Some(vec![Secondary {
10688 chance: 100.0,
10689 target: MoveTarget::Opponent,
10690 effect: Effect::Status(PokemonStatus::POISON),
10691 }]),
10692 ..Default::default()
10693 },
10694 );
10695 moves.insert(
10696 Choices::MOUNTAINGALE,
10697 Choice {
10698 move_id: Choices::MOUNTAINGALE,
10699 accuracy: 85.0,
10700 base_power: 100.0,
10701 category: MoveCategory::Physical,
10702 move_type: PokemonType::ICE,
10703 flags: Flags {
10704 protect: true,
10705 ..Default::default()
10706 },
10707 secondaries: Some(vec![Secondary {
10708 chance: 30.0,
10709 target: MoveTarget::Opponent,
10710 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
10711 }]),
10712 ..Default::default()
10713 },
10714 );
10715 moves.insert(
10716 Choices::MUDBOMB,
10717 Choice {
10718 move_id: Choices::MUDBOMB,
10719 accuracy: 85.0,
10720 base_power: 65.0,
10721 category: MoveCategory::Special,
10722 move_type: PokemonType::GROUND,
10723 flags: Flags {
10724 bullet: true,
10725 protect: true,
10726 ..Default::default()
10727 },
10728 secondaries: Some(vec![Secondary {
10729 chance: 30.0,
10730 target: MoveTarget::Opponent,
10731 effect: Effect::Boost(StatBoosts {
10732 attack: 0,
10733 defense: 0,
10734 special_attack: 0,
10735 special_defense: 0,
10736 speed: 0,
10737 accuracy: -1,
10738 }),
10739 }]),
10740 ..Default::default()
10741 },
10742 );
10743 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
10744 moves.insert(
10745 Choices::MUDDYWATER,
10746 Choice {
10747 move_id: Choices::MUDDYWATER,
10748 accuracy: 85.0,
10749 base_power: 95.0,
10750 category: MoveCategory::Special,
10751 move_type: PokemonType::WATER,
10752 flags: Flags {
10753 protect: true,
10754 ..Default::default()
10755 },
10756 secondaries: Some(vec![Secondary {
10757 chance: 30.0,
10758 target: MoveTarget::Opponent,
10759 effect: Effect::Boost(StatBoosts {
10760 attack: 0,
10761 defense: 0,
10762 special_attack: 0,
10763 special_defense: 0,
10764 speed: 0,
10765 accuracy: -1,
10766 }),
10767 }]),
10768 ..Default::default()
10769 },
10770 );
10771 } else {
10772 moves.insert(
10773 Choices::MUDDYWATER,
10774 Choice {
10775 move_id: Choices::MUDDYWATER,
10776 accuracy: 85.0,
10777 base_power: 90.0,
10778 category: MoveCategory::Special,
10779 move_type: PokemonType::WATER,
10780 flags: Flags {
10781 protect: true,
10782 ..Default::default()
10783 },
10784 secondaries: Some(vec![Secondary {
10785 chance: 30.0,
10786 target: MoveTarget::Opponent,
10787 effect: Effect::Boost(StatBoosts {
10788 attack: 0,
10789 defense: 0,
10790 special_attack: 0,
10791 special_defense: 0,
10792 speed: 0,
10793 accuracy: -1,
10794 }),
10795 }]),
10796 ..Default::default()
10797 },
10798 );
10799 }
10800 moves.insert(
10801 Choices::MUDSHOT,
10802 Choice {
10803 move_id: Choices::MUDSHOT,
10804 accuracy: 95.0,
10805 base_power: 55.0,
10806 category: MoveCategory::Special,
10807 move_type: PokemonType::GROUND,
10808 flags: Flags {
10809 protect: true,
10810 ..Default::default()
10811 },
10812 secondaries: Some(vec![Secondary {
10813 chance: 100.0,
10814 target: MoveTarget::Opponent,
10815 effect: Effect::Boost(StatBoosts {
10816 attack: 0,
10817 defense: 0,
10818 special_attack: 0,
10819 special_defense: 0,
10820 speed: -1,
10821 accuracy: 0,
10822 }),
10823 }]),
10824 ..Default::default()
10825 },
10826 );
10827 moves.insert(
10828 Choices::MUDSLAP,
10829 Choice {
10830 move_id: Choices::MUDSLAP,
10831 base_power: 20.0,
10832 category: MoveCategory::Special,
10833 move_type: PokemonType::GROUND,
10834 flags: Flags {
10835 protect: true,
10836 ..Default::default()
10837 },
10838 secondaries: Some(vec![Secondary {
10839 chance: 100.0,
10840 target: MoveTarget::Opponent,
10841 effect: Effect::Boost(StatBoosts {
10842 attack: 0,
10843 defense: 0,
10844 special_attack: 0,
10845 special_defense: 0,
10846 speed: 0,
10847 accuracy: -1,
10848 }),
10849 }]),
10850 ..Default::default()
10851 },
10852 );
10853 moves.insert(
10854 Choices::MUDSPORT,
10855 Choice {
10856 move_id: Choices::MUDSPORT,
10857 move_type: PokemonType::GROUND,
10858 flags: Flags {
10859 ..Default::default()
10860 },
10861 ..Default::default()
10862 },
10863 );
10864 if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
10865 moves.insert(
10866 Choices::MULTIATTACK,
10867 Choice {
10868 move_id: Choices::MULTIATTACK,
10869 base_power: 120.0,
10870 category: MoveCategory::Physical,
10871 move_type: PokemonType::NORMAL,
10872 flags: Flags {
10873 contact: true,
10874 protect: true,
10875 ..Default::default()
10876 },
10877 ..Default::default()
10878 },
10879 );
10880 } else {
10881 moves.insert(
10882 Choices::MULTIATTACK,
10883 Choice {
10884 move_id: Choices::MULTIATTACK,
10885 base_power: 90.0,
10886 category: MoveCategory::Physical,
10887 move_type: PokemonType::NORMAL,
10888 flags: Flags {
10889 contact: true,
10890 protect: true,
10891 ..Default::default()
10892 },
10893 ..Default::default()
10894 },
10895 );
10896 }
10897 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
10898 moves.insert(
10899 Choices::MYSTICALFIRE,
10900 Choice {
10901 move_id: Choices::MYSTICALFIRE,
10902 base_power: 65.0,
10903 category: MoveCategory::Special,
10904 move_type: PokemonType::FIRE,
10905 flags: Flags {
10906 protect: true,
10907 ..Default::default()
10908 },
10909 secondaries: Some(vec![Secondary {
10910 chance: 100.0,
10911 target: MoveTarget::Opponent,
10912 effect: Effect::Boost(StatBoosts {
10913 attack: 0,
10914 defense: 0,
10915 special_attack: -1,
10916 special_defense: 0,
10917 speed: 0,
10918 accuracy: 0,
10919 }),
10920 }]),
10921 ..Default::default()
10922 },
10923 );
10924 } else {
10925 moves.insert(
10926 Choices::MYSTICALFIRE,
10927 Choice {
10928 move_id: Choices::MYSTICALFIRE,
10929 base_power: 75.0,
10930 category: MoveCategory::Special,
10931 move_type: PokemonType::FIRE,
10932 flags: Flags {
10933 protect: true,
10934 ..Default::default()
10935 },
10936 secondaries: Some(vec![Secondary {
10937 chance: 100.0,
10938 target: MoveTarget::Opponent,
10939 effect: Effect::Boost(StatBoosts {
10940 attack: 0,
10941 defense: 0,
10942 special_attack: -1,
10943 special_defense: 0,
10944 speed: 0,
10945 accuracy: 0,
10946 }),
10947 }]),
10948 ..Default::default()
10949 },
10950 );
10951 }
10952 moves.insert(
10953 Choices::MYSTICALPOWER,
10954 Choice {
10955 move_id: Choices::MYSTICALPOWER,
10956 accuracy: 90.0,
10957 base_power: 70.0,
10958 category: MoveCategory::Special,
10959 move_type: PokemonType::PSYCHIC,
10960 flags: Flags {
10961 protect: true,
10962 ..Default::default()
10963 },
10964 secondaries: Some(vec![Secondary {
10965 chance: 100.0,
10966 target: MoveTarget::User,
10967 effect: Effect::Boost(StatBoosts {
10968 attack: 0,
10969 defense: 0,
10970 special_attack: 1,
10971 special_defense: 0,
10972 speed: 0,
10973 accuracy: 0,
10974 }),
10975 }]),
10976 ..Default::default()
10977 },
10978 );
10979 moves.insert(
10980 Choices::NASTYPLOT,
10981 Choice {
10982 move_id: Choices::NASTYPLOT,
10983 target: MoveTarget::User,
10984 move_type: PokemonType::DARK,
10985 flags: Flags {
10986 ..Default::default()
10987 },
10988 boost: Some(Boost {
10989 target: MoveTarget::User,
10990 boosts: StatBoosts {
10991 attack: 0,
10992 defense: 0,
10993 special_attack: 2,
10994 special_defense: 0,
10995 speed: 0,
10996 accuracy: 0,
10997 },
10998 }),
10999 ..Default::default()
11000 },
11001 );
11002 moves.insert(
11003 Choices::NATURALGIFT,
11004 Choice {
11005 move_id: Choices::NATURALGIFT,
11006 category: MoveCategory::Physical,
11007 move_type: PokemonType::NORMAL,
11008 flags: Flags {
11009 protect: true,
11010 ..Default::default()
11011 },
11012 ..Default::default()
11013 },
11014 );
11015 moves.insert(
11016 Choices::NATUREPOWER,
11017 Choice {
11018 move_id: Choices::NATUREPOWER,
11019 move_type: PokemonType::NORMAL,
11020 flags: Flags {
11021 ..Default::default()
11022 },
11023 ..Default::default()
11024 },
11025 );
11026 moves.insert(
11027 Choices::NATURESMADNESS,
11028 Choice {
11029 move_id: Choices::NATURESMADNESS,
11030 accuracy: 90.0,
11031 category: MoveCategory::Special,
11032 move_type: PokemonType::FAIRY,
11033 flags: Flags {
11034 protect: true,
11035 ..Default::default()
11036 },
11037 ..Default::default()
11038 },
11039 );
11040 moves.insert(
11041 Choices::NEEDLEARM,
11042 Choice {
11043 move_id: Choices::NEEDLEARM,
11044 base_power: 60.0,
11045 category: MoveCategory::Physical,
11046 move_type: PokemonType::GRASS,
11047 flags: Flags {
11048 contact: true,
11049 protect: true,
11050 ..Default::default()
11051 },
11052 secondaries: Some(vec![Secondary {
11053 chance: 30.0,
11054 target: MoveTarget::Opponent,
11055 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
11056 }]),
11057 ..Default::default()
11058 },
11059 );
11060 moves.insert(
11061 Choices::NIGHTDAZE,
11062 Choice {
11063 move_id: Choices::NIGHTDAZE,
11064 accuracy: 95.0,
11065 base_power: 85.0,
11066 category: MoveCategory::Special,
11067 move_type: PokemonType::DARK,
11068 flags: Flags {
11069 protect: true,
11070 ..Default::default()
11071 },
11072 secondaries: Some(vec![Secondary {
11073 chance: 40.0,
11074 target: MoveTarget::Opponent,
11075 effect: Effect::Boost(StatBoosts {
11076 attack: 0,
11077 defense: 0,
11078 special_attack: 0,
11079 special_defense: 0,
11080 speed: 0,
11081 accuracy: -1,
11082 }),
11083 }]),
11084 ..Default::default()
11085 },
11086 );
11087 moves.insert(
11088 Choices::NIGHTMARE,
11089 Choice {
11090 move_id: Choices::NIGHTMARE,
11091 move_type: PokemonType::GHOST,
11092 flags: Flags {
11093 protect: true,
11094 ..Default::default()
11095 },
11096 volatile_status: Some(VolatileStatus {
11097 target: MoveTarget::Opponent,
11098 volatile_status: PokemonVolatileStatus::NIGHTMARE,
11099 }),
11100 ..Default::default()
11101 },
11102 );
11103 moves.insert(
11104 Choices::NIGHTSHADE,
11105 Choice {
11106 move_id: Choices::NIGHTSHADE,
11107 category: MoveCategory::Special,
11108 move_type: PokemonType::GHOST,
11109 flags: Flags {
11110 protect: true,
11111 ..Default::default()
11112 },
11113 ..Default::default()
11114 },
11115 );
11116 moves.insert(
11117 Choices::NIGHTSLASH,
11118 Choice {
11119 move_id: Choices::NIGHTSLASH,
11120 base_power: 70.0,
11121 category: MoveCategory::Physical,
11122 move_type: PokemonType::DARK,
11123 flags: Flags {
11124 contact: true,
11125 protect: true,
11126 slicing: true,
11127 ..Default::default()
11128 },
11129 ..Default::default()
11130 },
11131 );
11132 moves.insert(
11133 Choices::NOBLEROAR,
11134 Choice {
11135 move_id: Choices::NOBLEROAR,
11136 move_type: PokemonType::NORMAL,
11137 flags: Flags {
11138 protect: true,
11139 reflectable: true,
11140 sound: true,
11141 ..Default::default()
11142 },
11143 boost: Some(Boost {
11144 target: MoveTarget::Opponent,
11145 boosts: StatBoosts {
11146 attack: -1,
11147 defense: 0,
11148 special_attack: -1,
11149 special_defense: 0,
11150 speed: 0,
11151 accuracy: 0,
11152 },
11153 }),
11154 ..Default::default()
11155 },
11156 );
11157 moves.insert(
11158 Choices::NORETREAT,
11159 Choice {
11160 move_id: Choices::NORETREAT,
11161 target: MoveTarget::User,
11162 move_type: PokemonType::FIGHTING,
11163 flags: Flags {
11164 ..Default::default()
11165 },
11166 boost: Some(Boost {
11167 target: MoveTarget::User,
11168 boosts: StatBoosts {
11169 attack: 1,
11170 defense: 1,
11171 special_attack: 1,
11172 special_defense: 1,
11173 speed: 1,
11174 accuracy: 0,
11175 },
11176 }),
11177 volatile_status: Some(VolatileStatus {
11178 target: MoveTarget::User,
11179 volatile_status: PokemonVolatileStatus::NORETREAT,
11180 }),
11181 ..Default::default()
11182 },
11183 );
11184 moves.insert(
11185 Choices::NOTHING,
11186 Choice {
11187 move_id: Choices::NOTHING,
11188 target: MoveTarget::User,
11189 move_type: PokemonType::NORMAL,
11190 flags: Flags {
11191 ..Default::default()
11192 },
11193 ..Default::default()
11194 },
11195 );
11196 moves.insert(
11197 Choices::NOXIOUSTORQUE,
11198 Choice {
11199 move_id: Choices::NOXIOUSTORQUE,
11200 base_power: 100.0,
11201 category: MoveCategory::Physical,
11202 move_type: PokemonType::POISON,
11203 flags: Flags {
11204 protect: true,
11205 ..Default::default()
11206 },
11207 secondaries: Some(vec![Secondary {
11208 chance: 30.0,
11209 target: MoveTarget::Opponent,
11210 effect: Effect::Status(PokemonStatus::POISON),
11211 }]),
11212 ..Default::default()
11213 },
11214 );
11215 moves.insert(
11216 Choices::NUZZLE,
11217 Choice {
11218 move_id: Choices::NUZZLE,
11219 base_power: 20.0,
11220 category: MoveCategory::Physical,
11221 move_type: PokemonType::ELECTRIC,
11222 flags: Flags {
11223 contact: true,
11224 protect: true,
11225 ..Default::default()
11226 },
11227 secondaries: Some(vec![Secondary {
11228 chance: 100.0,
11229 target: MoveTarget::Opponent,
11230 effect: Effect::Status(PokemonStatus::PARALYZE),
11231 }]),
11232 ..Default::default()
11233 },
11234 );
11235 moves.insert(
11236 Choices::OBLIVIONWING,
11237 Choice {
11238 move_id: Choices::OBLIVIONWING,
11239 base_power: 80.0,
11240 category: MoveCategory::Special,
11241 move_type: PokemonType::FLYING,
11242 flags: Flags {
11243 heal: true,
11244 protect: true,
11245 ..Default::default()
11246 },
11247 drain: Some(0.75),
11248 ..Default::default()
11249 },
11250 );
11251 moves.insert(
11252 Choices::OBSTRUCT,
11253 Choice {
11254 move_id: Choices::OBSTRUCT,
11255 priority: 4,
11256 target: MoveTarget::User,
11257 move_type: PokemonType::DARK,
11258 flags: Flags {
11259 ..Default::default()
11260 },
11261 volatile_status: Some(VolatileStatus {
11262 target: MoveTarget::User,
11263 volatile_status: PokemonVolatileStatus::PROTECT,
11264 }),
11265 ..Default::default()
11266 },
11267 );
11268 moves.insert(
11269 Choices::OCTAZOOKA,
11270 Choice {
11271 move_id: Choices::OCTAZOOKA,
11272 accuracy: 85.0,
11273 base_power: 65.0,
11274 category: MoveCategory::Special,
11275 move_type: PokemonType::WATER,
11276 flags: Flags {
11277 bullet: true,
11278 protect: true,
11279 ..Default::default()
11280 },
11281 secondaries: Some(vec![Secondary {
11282 chance: 50.0,
11283 target: MoveTarget::Opponent,
11284 effect: Effect::Boost(StatBoosts {
11285 attack: 0,
11286 defense: 0,
11287 special_attack: 0,
11288 special_defense: 0,
11289 speed: 0,
11290 accuracy: -1,
11291 }),
11292 }]),
11293 ..Default::default()
11294 },
11295 );
11296 moves.insert(
11297 Choices::OCTOLOCK,
11298 Choice {
11299 move_id: Choices::OCTOLOCK,
11300 move_type: PokemonType::FIGHTING,
11301 flags: Flags {
11302 protect: true,
11303 ..Default::default()
11304 },
11305 volatile_status: Some(VolatileStatus {
11306 target: MoveTarget::Opponent,
11307 volatile_status: PokemonVolatileStatus::OCTOLOCK,
11308 }),
11309 ..Default::default()
11310 },
11311 );
11312 moves.insert(
11313 Choices::ODORSLEUTH,
11314 Choice {
11315 move_id: Choices::ODORSLEUTH,
11316 move_type: PokemonType::NORMAL,
11317 flags: Flags {
11318 protect: true,
11319 reflectable: true,
11320 ..Default::default()
11321 },
11322 volatile_status: Some(VolatileStatus {
11323 target: MoveTarget::Opponent,
11324 volatile_status: PokemonVolatileStatus::FORESIGHT,
11325 }),
11326 ..Default::default()
11327 },
11328 );
11329 moves.insert(
11330 Choices::OMINOUSWIND,
11331 Choice {
11332 move_id: Choices::OMINOUSWIND,
11333 base_power: 60.0,
11334 category: MoveCategory::Special,
11335 move_type: PokemonType::GHOST,
11336 flags: Flags {
11337 protect: true,
11338 ..Default::default()
11339 },
11340 secondaries: Some(vec![Secondary {
11341 chance: 10.0,
11342 target: MoveTarget::User,
11343 effect: Effect::Boost(StatBoosts {
11344 attack: 1,
11345 defense: 1,
11346 special_attack: 1,
11347 special_defense: 1,
11348 speed: 1,
11349 accuracy: 0,
11350 }),
11351 }]),
11352 ..Default::default()
11353 },
11354 );
11355 moves.insert(
11356 Choices::ORDERUP,
11357 Choice {
11358 move_id: Choices::ORDERUP,
11359 base_power: 80.0,
11360 category: MoveCategory::Physical,
11361 move_type: PokemonType::DRAGON,
11362 flags: Flags {
11363 protect: true,
11364 ..Default::default()
11365 },
11366 ..Default::default()
11367 },
11368 );
11369 moves.insert(
11370 Choices::ORIGINPULSE,
11371 Choice {
11372 move_id: Choices::ORIGINPULSE,
11373 accuracy: 85.0,
11374 base_power: 110.0,
11375 category: MoveCategory::Special,
11376 move_type: PokemonType::WATER,
11377 flags: Flags {
11378 protect: true,
11379 pulse: true,
11380 ..Default::default()
11381 },
11382 ..Default::default()
11383 },
11384 );
11385 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
11386 moves.insert(
11387 Choices::OUTRAGE,
11388 Choice {
11389 move_id: Choices::OUTRAGE,
11390 base_power: 90.0,
11391 category: MoveCategory::Physical,
11392 move_type: PokemonType::DRAGON,
11393 flags: Flags {
11394 contact: true,
11395 protect: true,
11396 ..Default::default()
11397 },
11398 volatile_status: Some(VolatileStatus {
11399 target: MoveTarget::User,
11400 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11401 }),
11402 ..Default::default()
11403 },
11404 );
11405 } else {
11406 moves.insert(
11407 Choices::OUTRAGE,
11408 Choice {
11409 move_id: Choices::OUTRAGE,
11410 base_power: 120.0,
11411 category: MoveCategory::Physical,
11412 move_type: PokemonType::DRAGON,
11413 flags: Flags {
11414 contact: true,
11415 protect: true,
11416 ..Default::default()
11417 },
11418 volatile_status: Some(VolatileStatus {
11419 target: MoveTarget::User,
11420 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11421 }),
11422 ..Default::default()
11423 },
11424 );
11425 }
11426 moves.insert(
11427 Choices::OVERDRIVE,
11428 Choice {
11429 move_id: Choices::OVERDRIVE,
11430 base_power: 80.0,
11431 category: MoveCategory::Special,
11432 move_type: PokemonType::ELECTRIC,
11433 flags: Flags {
11434 protect: true,
11435 sound: true,
11436 ..Default::default()
11437 },
11438 ..Default::default()
11439 },
11440 );
11441 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
11442 moves.insert(
11443 Choices::OVERHEAT,
11444 Choice {
11445 move_id: Choices::OVERHEAT,
11446 accuracy: 90.0,
11447 base_power: 140.0,
11448 category: MoveCategory::Special,
11449 move_type: PokemonType::FIRE,
11450 flags: Flags {
11451 protect: true,
11452 ..Default::default()
11453 },
11454 boost: Some(Boost {
11455 target: MoveTarget::User,
11456 boosts: StatBoosts {
11457 attack: 0,
11458 defense: 0,
11459 special_attack: -2,
11460 special_defense: 0,
11461 speed: 0,
11462 accuracy: 0,
11463 },
11464 }),
11465 ..Default::default()
11466 },
11467 );
11468 } else {
11469 moves.insert(
11470 Choices::OVERHEAT,
11471 Choice {
11472 move_id: Choices::OVERHEAT,
11473 accuracy: 90.0,
11474 base_power: 130.0,
11475 category: MoveCategory::Special,
11476 move_type: PokemonType::FIRE,
11477 flags: Flags {
11478 protect: true,
11479 ..Default::default()
11480 },
11481 boost: Some(Boost {
11482 target: MoveTarget::User,
11483 boosts: StatBoosts {
11484 attack: 0,
11485 defense: 0,
11486 special_attack: -2,
11487 special_defense: 0,
11488 speed: 0,
11489 accuracy: 0,
11490 },
11491 }),
11492 ..Default::default()
11493 },
11494 );
11495 }
11496 moves.insert(
11497 Choices::PAINSPLIT,
11498 Choice {
11499 move_id: Choices::PAINSPLIT,
11500 move_type: PokemonType::NORMAL,
11501 flags: Flags {
11502 protect: true,
11503 ..Default::default()
11504 },
11505 ..Default::default()
11506 },
11507 );
11508 moves.insert(
11509 Choices::PALEOWAVE,
11510 Choice {
11511 move_id: Choices::PALEOWAVE,
11512 base_power: 85.0,
11513 category: MoveCategory::Special,
11514 move_type: PokemonType::ROCK,
11515 flags: Flags {
11516 protect: true,
11517 ..Default::default()
11518 },
11519 secondaries: Some(vec![Secondary {
11520 chance: 20.0,
11521 target: MoveTarget::Opponent,
11522 effect: Effect::Boost(StatBoosts {
11523 attack: -1,
11524 defense: 0,
11525 special_attack: 0,
11526 special_defense: 0,
11527 speed: 0,
11528 accuracy: 0,
11529 }),
11530 }]),
11531 ..Default::default()
11532 },
11533 );
11534 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
11535 moves.insert(
11536 Choices::PARABOLICCHARGE,
11537 Choice {
11538 move_id: Choices::PARABOLICCHARGE,
11539 base_power: 50.0,
11540 category: MoveCategory::Special,
11541 move_type: PokemonType::ELECTRIC,
11542 flags: Flags {
11543 heal: true,
11544 protect: true,
11545 ..Default::default()
11546 },
11547 drain: Some(0.5),
11548 ..Default::default()
11549 },
11550 );
11551 } else {
11552 moves.insert(
11553 Choices::PARABOLICCHARGE,
11554 Choice {
11555 move_id: Choices::PARABOLICCHARGE,
11556 base_power: 65.0,
11557 category: MoveCategory::Special,
11558 move_type: PokemonType::ELECTRIC,
11559 flags: Flags {
11560 heal: true,
11561 protect: true,
11562 ..Default::default()
11563 },
11564 drain: Some(0.5),
11565 ..Default::default()
11566 },
11567 );
11568 }
11569 moves.insert(
11570 Choices::PARTINGSHOT,
11571 Choice {
11572 move_id: Choices::PARTINGSHOT,
11573 move_type: PokemonType::DARK,
11574 flags: Flags {
11575 protect: true,
11576 reflectable: true,
11577 sound: true,
11578 pivot: true,
11579 ..Default::default()
11580 },
11581 boost: Some(Boost {
11582 target: MoveTarget::Opponent,
11583 boosts: StatBoosts {
11584 attack: -1,
11585 defense: 0,
11586 special_attack: -1,
11587 special_defense: 0,
11588 speed: 0,
11589 accuracy: 0,
11590 },
11591 }),
11592 ..Default::default()
11593 },
11594 );
11595 moves.insert(
11596 Choices::PAYBACK,
11597 Choice {
11598 move_id: Choices::PAYBACK,
11599 base_power: 50.0,
11600 category: MoveCategory::Physical,
11601 move_type: PokemonType::DARK,
11602 flags: Flags {
11603 contact: true,
11604 protect: true,
11605 ..Default::default()
11606 },
11607 ..Default::default()
11608 },
11609 );
11610 moves.insert(
11611 Choices::PAYDAY,
11612 Choice {
11613 move_id: Choices::PAYDAY,
11614 base_power: 40.0,
11615 category: MoveCategory::Physical,
11616 move_type: PokemonType::NORMAL,
11617 flags: Flags {
11618 protect: true,
11619 ..Default::default()
11620 },
11621 ..Default::default()
11622 },
11623 );
11624 moves.insert(
11625 Choices::PECK,
11626 Choice {
11627 move_id: Choices::PECK,
11628 base_power: 35.0,
11629 category: MoveCategory::Physical,
11630 move_type: PokemonType::FLYING,
11631 flags: Flags {
11632 contact: true,
11633 protect: true,
11634 ..Default::default()
11635 },
11636 ..Default::default()
11637 },
11638 );
11639 moves.insert(
11640 Choices::PERISHSONG,
11641 Choice {
11642 move_id: Choices::PERISHSONG,
11643 move_type: PokemonType::NORMAL,
11644 flags: Flags {
11645 sound: true,
11646 ..Default::default()
11647 },
11648 ..Default::default()
11649 },
11650 );
11651 moves.insert(
11652 Choices::PETALBLIZZARD,
11653 Choice {
11654 move_id: Choices::PETALBLIZZARD,
11655 base_power: 90.0,
11656 category: MoveCategory::Physical,
11657 move_type: PokemonType::GRASS,
11658 flags: Flags {
11659 protect: true,
11660 wind: true,
11661 ..Default::default()
11662 },
11663 ..Default::default()
11664 },
11665 );
11666 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
11667 moves.insert(
11668 Choices::PETALDANCE,
11669 Choice {
11670 move_id: Choices::PETALDANCE,
11671 base_power: 70.0,
11672 category: MoveCategory::Special,
11673 move_type: PokemonType::GRASS,
11674 flags: Flags {
11675 contact: true,
11676 protect: true,
11677 ..Default::default()
11678 },
11679 volatile_status: Some(VolatileStatus {
11680 target: MoveTarget::User,
11681 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11682 }),
11683 ..Default::default()
11684 },
11685 );
11686 }
11687 if cfg!(feature = "gen4") {
11688 moves.insert(
11689 Choices::PETALDANCE,
11690 Choice {
11691 move_id: Choices::PETALDANCE,
11692 base_power: 90.0,
11693 category: MoveCategory::Special,
11694 move_type: PokemonType::GRASS,
11695 flags: Flags {
11696 contact: true,
11697 protect: true,
11698 ..Default::default()
11699 },
11700 volatile_status: Some(VolatileStatus {
11701 target: MoveTarget::User,
11702 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11703 }),
11704 ..Default::default()
11705 },
11706 );
11707 } else {
11708 moves.insert(
11709 Choices::PETALDANCE,
11710 Choice {
11711 move_id: Choices::PETALDANCE,
11712 base_power: 120.0,
11713 category: MoveCategory::Special,
11714 move_type: PokemonType::GRASS,
11715 flags: Flags {
11716 contact: true,
11717 protect: true,
11718 ..Default::default()
11719 },
11720 volatile_status: Some(VolatileStatus {
11721 target: MoveTarget::User,
11722 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11723 }),
11724 ..Default::default()
11725 },
11726 );
11727 }
11728 moves.insert(
11729 Choices::PHANTOMFORCE,
11730 Choice {
11731 move_id: Choices::PHANTOMFORCE,
11732 base_power: 90.0,
11733 category: MoveCategory::Physical,
11734 move_type: PokemonType::GHOST,
11735 flags: Flags {
11736 charge: true,
11737 contact: true,
11738 ..Default::default()
11739 },
11740 ..Default::default()
11741 },
11742 );
11743 moves.insert(
11744 Choices::PHOTONGEYSER,
11745 Choice {
11746 move_id: Choices::PHOTONGEYSER,
11747 base_power: 100.0,
11748 category: MoveCategory::Special,
11749 move_type: PokemonType::PSYCHIC,
11750 flags: Flags {
11751 protect: true,
11752 ..Default::default()
11753 },
11754 ..Default::default()
11755 },
11756 );
11757 moves.insert(
11758 Choices::PIKAPAPOW,
11759 Choice {
11760 move_id: Choices::PIKAPAPOW,
11761 category: MoveCategory::Special,
11762 move_type: PokemonType::ELECTRIC,
11763 flags: Flags {
11764 protect: true,
11765 ..Default::default()
11766 },
11767 ..Default::default()
11768 },
11769 );
11770 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
11771 moves.insert(
11772 Choices::PINMISSILE,
11773 Choice {
11774 move_id: Choices::PINMISSILE,
11775 accuracy: 85.0,
11776 base_power: 14.0,
11777 category: MoveCategory::Physical,
11778 move_type: PokemonType::BUG,
11779 flags: Flags {
11780 protect: true,
11781 ..Default::default()
11782 },
11783 ..Default::default()
11784 },
11785 );
11786 } else {
11787 moves.insert(
11788 Choices::PINMISSILE,
11789 Choice {
11790 move_id: Choices::PINMISSILE,
11791 accuracy: 95.0,
11792 base_power: 25.0,
11793 category: MoveCategory::Physical,
11794 move_type: PokemonType::BUG,
11795 flags: Flags {
11796 protect: true,
11797 ..Default::default()
11798 },
11799 ..Default::default()
11800 },
11801 );
11802 }
11803 moves.insert(
11804 Choices::PLASMAFISTS,
11805 Choice {
11806 move_id: Choices::PLASMAFISTS,
11807 base_power: 100.0,
11808 category: MoveCategory::Physical,
11809 move_type: PokemonType::ELECTRIC,
11810 flags: Flags {
11811 contact: true,
11812 protect: true,
11813 punch: true,
11814 ..Default::default()
11815 },
11816 ..Default::default()
11817 },
11818 );
11819 moves.insert(
11820 Choices::PLAYNICE,
11821 Choice {
11822 move_id: Choices::PLAYNICE,
11823 move_type: PokemonType::NORMAL,
11824 flags: Flags {
11825 reflectable: true,
11826 ..Default::default()
11827 },
11828 boost: Some(Boost {
11829 target: MoveTarget::Opponent,
11830 boosts: StatBoosts {
11831 attack: -1,
11832 defense: 0,
11833 special_attack: 0,
11834 special_defense: 0,
11835 speed: 0,
11836 accuracy: 0,
11837 },
11838 }),
11839 ..Default::default()
11840 },
11841 );
11842 moves.insert(
11843 Choices::PLAYROUGH,
11844 Choice {
11845 move_id: Choices::PLAYROUGH,
11846 accuracy: 90.0,
11847 base_power: 90.0,
11848 category: MoveCategory::Physical,
11849 move_type: PokemonType::FAIRY,
11850 flags: Flags {
11851 contact: true,
11852 protect: true,
11853 ..Default::default()
11854 },
11855 secondaries: Some(vec![Secondary {
11856 chance: 10.0,
11857 target: MoveTarget::Opponent,
11858 effect: Effect::Boost(StatBoosts {
11859 attack: -1,
11860 defense: 0,
11861 special_attack: 0,
11862 special_defense: 0,
11863 speed: 0,
11864 accuracy: 0,
11865 }),
11866 }]),
11867 ..Default::default()
11868 },
11869 );
11870 moves.insert(
11871 Choices::PLUCK,
11872 Choice {
11873 move_id: Choices::PLUCK,
11874 base_power: 60.0,
11875 category: MoveCategory::Physical,
11876 move_type: PokemonType::FLYING,
11877 flags: Flags {
11878 contact: true,
11879 protect: true,
11880 ..Default::default()
11881 },
11882 ..Default::default()
11883 },
11884 );
11885 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
11886 moves.insert(
11887 Choices::POISONFANG,
11888 Choice {
11889 move_id: Choices::POISONFANG,
11890 base_power: 50.0,
11891 category: MoveCategory::Physical,
11892 move_type: PokemonType::POISON,
11893 flags: Flags {
11894 bite: true,
11895 contact: true,
11896 protect: true,
11897 ..Default::default()
11898 },
11899 secondaries: Some(vec![Secondary {
11900 chance: 30.0,
11901 target: MoveTarget::Opponent,
11902 effect: Effect::Status(PokemonStatus::TOXIC),
11903 }]),
11904 ..Default::default()
11905 },
11906 );
11907 } else {
11908 moves.insert(
11909 Choices::POISONFANG,
11910 Choice {
11911 move_id: Choices::POISONFANG,
11912 base_power: 50.0,
11913 category: MoveCategory::Physical,
11914 move_type: PokemonType::POISON,
11915 flags: Flags {
11916 bite: true,
11917 contact: true,
11918 protect: true,
11919 ..Default::default()
11920 },
11921 secondaries: Some(vec![Secondary {
11922 chance: 50.0,
11923 target: MoveTarget::Opponent,
11924 effect: Effect::Status(PokemonStatus::TOXIC),
11925 }]),
11926 ..Default::default()
11927 },
11928 );
11929 }
11930 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
11931 moves.insert(
11932 Choices::POISONGAS,
11933 Choice {
11934 move_id: Choices::POISONGAS,
11935 accuracy: 55.0,
11936 status: Some(Status {
11937 target: MoveTarget::Opponent,
11938 status: PokemonStatus::POISON,
11939 }),
11940 move_type: PokemonType::POISON,
11941 flags: Flags {
11942 protect: true,
11943 reflectable: true,
11944 ..Default::default()
11945 },
11946 ..Default::default()
11947 },
11948 );
11949 } else if cfg!(feature = "gen5") {
11950 moves.insert(
11951 Choices::POISONGAS,
11952 Choice {
11953 move_id: Choices::POISONGAS,
11954 accuracy: 80.0,
11955 status: Some(Status {
11956 target: MoveTarget::Opponent,
11957 status: PokemonStatus::POISON,
11958 }),
11959 move_type: PokemonType::POISON,
11960 flags: Flags {
11961 protect: true,
11962 reflectable: true,
11963 ..Default::default()
11964 },
11965 ..Default::default()
11966 },
11967 );
11968 } else {
11969 moves.insert(
11970 Choices::POISONGAS,
11971 Choice {
11972 move_id: Choices::POISONGAS,
11973 accuracy: 90.0,
11974 status: Some(Status {
11975 target: MoveTarget::Opponent,
11976 status: PokemonStatus::POISON,
11977 }),
11978 move_type: PokemonType::POISON,
11979 flags: Flags {
11980 protect: true,
11981 reflectable: true,
11982 ..Default::default()
11983 },
11984 ..Default::default()
11985 },
11986 );
11987 }
11988 moves.insert(
11989 Choices::POISONJAB,
11990 Choice {
11991 move_id: Choices::POISONJAB,
11992 base_power: 80.0,
11993 category: MoveCategory::Physical,
11994 move_type: PokemonType::POISON,
11995 flags: Flags {
11996 contact: true,
11997 protect: true,
11998 ..Default::default()
11999 },
12000 secondaries: Some(vec![Secondary {
12001 chance: 30.0,
12002 target: MoveTarget::Opponent,
12003 effect: Effect::Status(PokemonStatus::POISON),
12004 }]),
12005 ..Default::default()
12006 },
12007 );
12008 moves.insert(
12009 Choices::POISONPOWDER,
12010 Choice {
12011 move_id: Choices::POISONPOWDER,
12012 accuracy: 75.0,
12013 status: Some(Status {
12014 target: MoveTarget::Opponent,
12015 status: PokemonStatus::POISON,
12016 }),
12017 move_type: PokemonType::POISON,
12018 flags: Flags {
12019 powder: true,
12020 protect: true,
12021 reflectable: true,
12022 ..Default::default()
12023 },
12024 ..Default::default()
12025 },
12026 );
12027 if cfg!(feature = "gen1") {
12028 moves.insert(
12029 Choices::POISONSTING,
12030 Choice {
12031 move_id: Choices::POISONSTING,
12032 base_power: 15.0,
12033 category: MoveCategory::Physical,
12034 move_type: PokemonType::POISON,
12035 flags: Flags {
12036 protect: true,
12037 ..Default::default()
12038 },
12039 secondaries: Some(vec![Secondary {
12040 chance: 20.0,
12041 target: MoveTarget::Opponent,
12042 effect: Effect::Status(PokemonStatus::POISON),
12043 }]),
12044 ..Default::default()
12045 },
12046 );
12047 } else {
12048 moves.insert(
12049 Choices::POISONSTING,
12050 Choice {
12051 move_id: Choices::POISONSTING,
12052 base_power: 15.0,
12053 category: MoveCategory::Physical,
12054 move_type: PokemonType::POISON,
12055 flags: Flags {
12056 protect: true,
12057 ..Default::default()
12058 },
12059 secondaries: Some(vec![Secondary {
12060 chance: 30.0,
12061 target: MoveTarget::Opponent,
12062 effect: Effect::Status(PokemonStatus::POISON),
12063 }]),
12064 ..Default::default()
12065 },
12066 );
12067 }
12068 moves.insert(
12069 Choices::POISONTAIL,
12070 Choice {
12071 move_id: Choices::POISONTAIL,
12072 base_power: 50.0,
12073 category: MoveCategory::Physical,
12074 move_type: PokemonType::POISON,
12075 flags: Flags {
12076 contact: true,
12077 protect: true,
12078 ..Default::default()
12079 },
12080 secondaries: Some(vec![Secondary {
12081 chance: 10.0,
12082 target: MoveTarget::Opponent,
12083 effect: Effect::Status(PokemonStatus::POISON),
12084 }]),
12085 ..Default::default()
12086 },
12087 );
12088 moves.insert(
12089 Choices::POLLENPUFF,
12090 Choice {
12091 move_id: Choices::POLLENPUFF,
12092 base_power: 90.0,
12093 category: MoveCategory::Special,
12094 move_type: PokemonType::BUG,
12095 flags: Flags {
12096 bullet: true,
12097 protect: true,
12098 ..Default::default()
12099 },
12100 ..Default::default()
12101 },
12102 );
12103 moves.insert(
12104 Choices::POLTERGEIST,
12105 Choice {
12106 move_id: Choices::POLTERGEIST,
12107 accuracy: 90.0,
12108 base_power: 110.0,
12109 category: MoveCategory::Physical,
12110 move_type: PokemonType::GHOST,
12111 flags: Flags {
12112 protect: true,
12113 ..Default::default()
12114 },
12115 ..Default::default()
12116 },
12117 );
12118 moves.insert(
12119 Choices::POPULATIONBOMB,
12120 Choice {
12121 move_id: Choices::POPULATIONBOMB,
12122 accuracy: 90.0,
12123 base_power: 20.0,
12124 category: MoveCategory::Physical,
12125 move_type: PokemonType::NORMAL,
12126 flags: Flags {
12127 contact: true,
12128 protect: true,
12129 slicing: true,
12130 ..Default::default()
12131 },
12132 ..Default::default()
12133 },
12134 );
12135 moves.insert(
12136 Choices::POUNCE,
12137 Choice {
12138 move_id: Choices::POUNCE,
12139 base_power: 50.0,
12140 category: MoveCategory::Physical,
12141 move_type: PokemonType::BUG,
12142 flags: Flags {
12143 contact: true,
12144 protect: true,
12145 ..Default::default()
12146 },
12147 secondaries: Some(vec![Secondary {
12148 chance: 100.0,
12149 target: MoveTarget::Opponent,
12150 effect: Effect::Boost(StatBoosts {
12151 attack: 0,
12152 defense: 0,
12153 special_attack: 0,
12154 special_defense: 0,
12155 speed: -1,
12156 accuracy: 0,
12157 }),
12158 }]),
12159 ..Default::default()
12160 },
12161 );
12162 moves.insert(
12163 Choices::POUND,
12164 Choice {
12165 move_id: Choices::POUND,
12166 base_power: 40.0,
12167 category: MoveCategory::Physical,
12168 move_type: PokemonType::NORMAL,
12169 flags: Flags {
12170 contact: true,
12171 protect: true,
12172 ..Default::default()
12173 },
12174 ..Default::default()
12175 },
12176 );
12177 moves.insert(
12178 Choices::POWDER,
12179 Choice {
12180 move_id: Choices::POWDER,
12181 priority: 1,
12182 move_type: PokemonType::BUG,
12183 flags: Flags {
12184 powder: true,
12185 protect: true,
12186 reflectable: true,
12187 ..Default::default()
12188 },
12189 volatile_status: Some(VolatileStatus {
12190 target: MoveTarget::Opponent,
12191 volatile_status: PokemonVolatileStatus::POWDER,
12192 }),
12193 ..Default::default()
12194 },
12195 );
12196 moves.insert(
12197 Choices::POWDERSNOW,
12198 Choice {
12199 move_id: Choices::POWDERSNOW,
12200 base_power: 40.0,
12201 category: MoveCategory::Special,
12202 move_type: PokemonType::ICE,
12203 flags: Flags {
12204 protect: true,
12205 ..Default::default()
12206 },
12207 secondaries: Some(vec![Secondary {
12208 chance: 10.0,
12209 target: MoveTarget::Opponent,
12210 effect: Effect::Status(PokemonStatus::FREEZE),
12211 }]),
12212 ..Default::default()
12213 },
12214 );
12215 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
12216 moves.insert(
12217 Choices::POWERGEM,
12218 Choice {
12219 move_id: Choices::POWERGEM,
12220 base_power: 70.0,
12221 category: MoveCategory::Special,
12222 move_type: PokemonType::ROCK,
12223 flags: Flags {
12224 protect: true,
12225 ..Default::default()
12226 },
12227 ..Default::default()
12228 },
12229 );
12230 } else {
12231 moves.insert(
12232 Choices::POWERGEM,
12233 Choice {
12234 move_id: Choices::POWERGEM,
12235 base_power: 80.0,
12236 category: MoveCategory::Special,
12237 move_type: PokemonType::ROCK,
12238 flags: Flags {
12239 protect: true,
12240 ..Default::default()
12241 },
12242 ..Default::default()
12243 },
12244 );
12245 }
12246 moves.insert(
12247 Choices::POWERSHIFT,
12248 Choice {
12249 move_id: Choices::POWERSHIFT,
12250 target: MoveTarget::User,
12251 move_type: PokemonType::NORMAL,
12252 flags: Flags {
12253 ..Default::default()
12254 },
12255 volatile_status: Some(VolatileStatus {
12256 target: MoveTarget::User,
12257 volatile_status: PokemonVolatileStatus::POWERSHIFT,
12258 }),
12259 ..Default::default()
12260 },
12261 );
12262 moves.insert(
12263 Choices::POWERSPLIT,
12264 Choice {
12265 move_id: Choices::POWERSPLIT,
12266 move_type: PokemonType::PSYCHIC,
12267 flags: Flags {
12268 protect: true,
12269 ..Default::default()
12270 },
12271 ..Default::default()
12272 },
12273 );
12274 moves.insert(
12275 Choices::POWERSWAP,
12276 Choice {
12277 move_id: Choices::POWERSWAP,
12278 move_type: PokemonType::PSYCHIC,
12279 flags: Flags {
12280 protect: true,
12281 ..Default::default()
12282 },
12283 ..Default::default()
12284 },
12285 );
12286 moves.insert(
12287 Choices::POWERTRICK,
12288 Choice {
12289 move_id: Choices::POWERTRICK,
12290 target: MoveTarget::User,
12291 move_type: PokemonType::PSYCHIC,
12292 flags: Flags {
12293 ..Default::default()
12294 },
12295 volatile_status: Some(VolatileStatus {
12296 target: MoveTarget::User,
12297 volatile_status: PokemonVolatileStatus::POWERTRICK,
12298 }),
12299 ..Default::default()
12300 },
12301 );
12302 moves.insert(
12303 Choices::POWERTRIP,
12304 Choice {
12305 move_id: Choices::POWERTRIP,
12306 base_power: 20.0,
12307 category: MoveCategory::Physical,
12308 move_type: PokemonType::DARK,
12309 flags: Flags {
12310 contact: true,
12311 protect: true,
12312 ..Default::default()
12313 },
12314 ..Default::default()
12315 },
12316 );
12317 moves.insert(
12318 Choices::POWERUPPUNCH,
12319 Choice {
12320 move_id: Choices::POWERUPPUNCH,
12321 base_power: 40.0,
12322 category: MoveCategory::Physical,
12323 move_type: PokemonType::FIGHTING,
12324 flags: Flags {
12325 contact: true,
12326 protect: true,
12327 punch: true,
12328 ..Default::default()
12329 },
12330 secondaries: Some(vec![Secondary {
12331 chance: 100.0,
12332 target: MoveTarget::User,
12333 effect: Effect::Boost(StatBoosts {
12334 attack: 1,
12335 defense: 0,
12336 special_attack: 0,
12337 special_defense: 0,
12338 speed: 0,
12339 accuracy: 0,
12340 }),
12341 }]),
12342 ..Default::default()
12343 },
12344 );
12345 moves.insert(
12346 Choices::POWERWHIP,
12347 Choice {
12348 move_id: Choices::POWERWHIP,
12349 accuracy: 85.0,
12350 base_power: 120.0,
12351 category: MoveCategory::Physical,
12352 move_type: PokemonType::GRASS,
12353 flags: Flags {
12354 contact: true,
12355 protect: true,
12356 ..Default::default()
12357 },
12358 ..Default::default()
12359 },
12360 );
12361 moves.insert(
12362 Choices::PRECIPICEBLADES,
12363 Choice {
12364 move_id: Choices::PRECIPICEBLADES,
12365 accuracy: 85.0,
12366 base_power: 120.0,
12367 category: MoveCategory::Physical,
12368 move_type: PokemonType::GROUND,
12369 flags: Flags {
12370 protect: true,
12371 ..Default::default()
12372 },
12373 ..Default::default()
12374 },
12375 );
12376 moves.insert(
12377 Choices::PRESENT,
12378 Choice {
12379 move_id: Choices::PRESENT,
12380 accuracy: 90.0,
12381 category: MoveCategory::Physical,
12382 move_type: PokemonType::NORMAL,
12383 flags: Flags {
12384 protect: true,
12385 ..Default::default()
12386 },
12387 ..Default::default()
12388 },
12389 );
12390 moves.insert(
12391 Choices::PRISMATICLASER,
12392 Choice {
12393 move_id: Choices::PRISMATICLASER,
12394 base_power: 160.0,
12395 category: MoveCategory::Special,
12396 move_type: PokemonType::PSYCHIC,
12397 flags: Flags {
12398 protect: true,
12399 recharge: true,
12400 ..Default::default()
12401 },
12402 ..Default::default()
12403 },
12404 );
12405 moves.insert(
12406 Choices::PROTECT,
12407 Choice {
12408 move_id: Choices::PROTECT,
12409 priority: 4,
12410 target: MoveTarget::User,
12411 move_type: PokemonType::NORMAL,
12412 flags: Flags {
12413 ..Default::default()
12414 },
12415 volatile_status: Some(VolatileStatus {
12416 target: MoveTarget::User,
12417 volatile_status: PokemonVolatileStatus::PROTECT,
12418 }),
12419 ..Default::default()
12420 },
12421 );
12422 moves.insert(
12423 Choices::PSYBEAM,
12424 Choice {
12425 move_id: Choices::PSYBEAM,
12426 base_power: 65.0,
12427 category: MoveCategory::Special,
12428 move_type: PokemonType::PSYCHIC,
12429 flags: Flags {
12430 protect: true,
12431 ..Default::default()
12432 },
12433 secondaries: Some(vec![Secondary {
12434 chance: 10.0,
12435 target: MoveTarget::Opponent,
12436 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
12437 }]),
12438 ..Default::default()
12439 },
12440 );
12441 moves.insert(
12442 Choices::PSYBLADE,
12443 Choice {
12444 move_id: Choices::PSYBLADE,
12445 base_power: 80.0,
12446 category: MoveCategory::Physical,
12447 move_type: PokemonType::PSYCHIC,
12448 flags: Flags {
12449 contact: true,
12450 protect: true,
12451 slicing: true,
12452 ..Default::default()
12453 },
12454 ..Default::default()
12455 },
12456 );
12457 if cfg!(feature = "gen1") {
12458 moves.insert(
12459 Choices::PSYCHIC,
12460 Choice {
12461 move_id: Choices::PSYCHIC,
12462 base_power: 90.0,
12463 category: MoveCategory::Special,
12464 move_type: PokemonType::PSYCHIC,
12465 flags: Flags {
12466 protect: true,
12467 ..Default::default()
12468 },
12469 secondaries: Some(vec![Secondary {
12470 chance: 33.2,
12471 target: MoveTarget::Opponent,
12472 effect: Effect::Boost(StatBoosts {
12473 attack: 0,
12474 defense: 0,
12475 special_attack: -1,
12476 special_defense: 0,
12477 speed: 0,
12478 accuracy: 0,
12479 }),
12480 }]),
12481 ..Default::default()
12482 },
12483 );
12484 } else {
12485 moves.insert(
12486 Choices::PSYCHIC,
12487 Choice {
12488 move_id: Choices::PSYCHIC,
12489 base_power: 90.0,
12490 category: MoveCategory::Special,
12491 move_type: PokemonType::PSYCHIC,
12492 flags: Flags {
12493 protect: true,
12494 ..Default::default()
12495 },
12496 secondaries: Some(vec![Secondary {
12497 chance: 10.0,
12498 target: MoveTarget::Opponent,
12499 effect: Effect::Boost(StatBoosts {
12500 attack: 0,
12501 defense: 0,
12502 special_attack: 0,
12503 special_defense: -1,
12504 speed: 0,
12505 accuracy: 0,
12506 }),
12507 }]),
12508 ..Default::default()
12509 },
12510 );
12511 }
12512 moves.insert(
12513 Choices::PSYCHICFANGS,
12514 Choice {
12515 move_id: Choices::PSYCHICFANGS,
12516 base_power: 85.0,
12517 category: MoveCategory::Physical,
12518 move_type: PokemonType::PSYCHIC,
12519 flags: Flags {
12520 bite: true,
12521 contact: true,
12522 protect: true,
12523 ..Default::default()
12524 },
12525 ..Default::default()
12526 },
12527 );
12528 moves.insert(
12529 Choices::PSYCHICNOISE,
12530 Choice {
12531 move_id: Choices::PSYCHICNOISE,
12532 base_power: 75.0,
12533 category: MoveCategory::Special,
12534 move_type: PokemonType::PSYCHIC,
12535 flags: Flags {
12536 protect: true,
12537 sound: true,
12538 ..Default::default()
12539 },
12540 volatile_status: Some(VolatileStatus {
12541 target: MoveTarget::Opponent,
12542 volatile_status: PokemonVolatileStatus::HEALBLOCK,
12543 }),
12544 ..Default::default()
12545 },
12546 );
12547 moves.insert(
12548 Choices::PSYCHICTERRAIN,
12549 Choice {
12550 move_id: Choices::PSYCHICTERRAIN,
12551 move_type: PokemonType::PSYCHIC,
12552 flags: Flags {
12553 ..Default::default()
12554 },
12555 ..Default::default()
12556 },
12557 );
12558 moves.insert(
12559 Choices::PSYCHOBOOST,
12560 Choice {
12561 move_id: Choices::PSYCHOBOOST,
12562 accuracy: 90.0,
12563 base_power: 140.0,
12564 category: MoveCategory::Special,
12565 move_type: PokemonType::PSYCHIC,
12566 flags: Flags {
12567 protect: true,
12568 ..Default::default()
12569 },
12570 boost: Some(Boost {
12571 target: MoveTarget::User,
12572 boosts: StatBoosts {
12573 attack: 0,
12574 defense: 0,
12575 special_attack: -2,
12576 special_defense: 0,
12577 speed: 0,
12578 accuracy: 0,
12579 },
12580 }),
12581 ..Default::default()
12582 },
12583 );
12584 moves.insert(
12585 Choices::PSYCHOCUT,
12586 Choice {
12587 move_id: Choices::PSYCHOCUT,
12588 base_power: 70.0,
12589 category: MoveCategory::Physical,
12590 move_type: PokemonType::PSYCHIC,
12591 flags: Flags {
12592 protect: true,
12593 slicing: true,
12594 ..Default::default()
12595 },
12596 ..Default::default()
12597 },
12598 );
12599 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
12600 moves.insert(
12601 Choices::PSYCHOSHIFT,
12602 Choice {
12603 accuracy: 90.0,
12604 move_id: Choices::PSYCHOSHIFT,
12605 move_type: PokemonType::PSYCHIC,
12606 flags: Flags {
12607 protect: true,
12608 ..Default::default()
12609 },
12610 ..Default::default()
12611 },
12612 );
12613 } else {
12614 moves.insert(
12615 Choices::PSYCHOSHIFT,
12616 Choice {
12617 move_id: Choices::PSYCHOSHIFT,
12618 move_type: PokemonType::PSYCHIC,
12619 flags: Flags {
12620 protect: true,
12621 ..Default::default()
12622 },
12623 ..Default::default()
12624 },
12625 );
12626 }
12627 moves.insert(
12628 Choices::PSYCHUP,
12629 Choice {
12630 move_id: Choices::PSYCHUP,
12631 move_type: PokemonType::NORMAL,
12632 flags: Flags {
12633 ..Default::default()
12634 },
12635 ..Default::default()
12636 },
12637 );
12638 moves.insert(
12639 Choices::PSYSHIELDBASH,
12640 Choice {
12641 move_id: Choices::PSYSHIELDBASH,
12642 accuracy: 90.0,
12643 base_power: 70.0,
12644 category: MoveCategory::Physical,
12645 move_type: PokemonType::PSYCHIC,
12646 flags: Flags {
12647 contact: true,
12648 protect: true,
12649 ..Default::default()
12650 },
12651 secondaries: Some(vec![Secondary {
12652 chance: 100.0,
12653 target: MoveTarget::User,
12654 effect: Effect::Boost(StatBoosts {
12655 attack: 0,
12656 defense: 1,
12657 special_attack: 0,
12658 special_defense: 0,
12659 speed: 0,
12660 accuracy: 0,
12661 }),
12662 }]),
12663 ..Default::default()
12664 },
12665 );
12666 moves.insert(
12667 Choices::PSYSHOCK,
12668 Choice {
12669 move_id: Choices::PSYSHOCK,
12670 base_power: 80.0,
12671 category: MoveCategory::Special,
12672 move_type: PokemonType::PSYCHIC,
12673 flags: Flags {
12674 protect: true,
12675 ..Default::default()
12676 },
12677 ..Default::default()
12678 },
12679 );
12680 moves.insert(
12681 Choices::PSYSTRIKE,
12682 Choice {
12683 move_id: Choices::PSYSTRIKE,
12684 base_power: 100.0,
12685 category: MoveCategory::Special,
12686 move_type: PokemonType::PSYCHIC,
12687 flags: Flags {
12688 protect: true,
12689 ..Default::default()
12690 },
12691 ..Default::default()
12692 },
12693 );
12694 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
12695 moves.insert(
12696 Choices::PSYWAVE,
12697 Choice {
12698 accuracy: 90.0,
12699 move_id: Choices::PSYWAVE,
12700 category: MoveCategory::Special,
12701 move_type: PokemonType::PSYCHIC,
12702 flags: Flags {
12703 protect: true,
12704 ..Default::default()
12705 },
12706 ..Default::default()
12707 },
12708 );
12709 } else {
12710 moves.insert(
12711 Choices::PSYWAVE,
12712 Choice {
12713 move_id: Choices::PSYWAVE,
12714 category: MoveCategory::Special,
12715 move_type: PokemonType::PSYCHIC,
12716 flags: Flags {
12717 protect: true,
12718 ..Default::default()
12719 },
12720 ..Default::default()
12721 },
12722 );
12723 }
12724 moves.insert(
12725 Choices::PUNISHMENT,
12726 Choice {
12727 move_id: Choices::PUNISHMENT,
12728 category: MoveCategory::Physical,
12729 move_type: PokemonType::DARK,
12730 flags: Flags {
12731 contact: true,
12732 protect: true,
12733 ..Default::default()
12734 },
12735 ..Default::default()
12736 },
12737 );
12738 moves.insert(
12739 Choices::PURIFY,
12740 Choice {
12741 move_id: Choices::PURIFY,
12742 move_type: PokemonType::POISON,
12743 flags: Flags {
12744 heal: true,
12745 protect: true,
12746 reflectable: true,
12747 ..Default::default()
12748 },
12749 ..Default::default()
12750 },
12751 );
12752 moves.insert(
12753 Choices::PURSUIT,
12754 Choice {
12755 move_id: Choices::PURSUIT,
12756 base_power: 40.0,
12757 category: MoveCategory::Physical,
12758 move_type: PokemonType::DARK,
12759 flags: Flags {
12760 contact: true,
12761 protect: true,
12762 ..Default::default()
12763 },
12764 ..Default::default()
12765 },
12766 );
12767 moves.insert(
12768 Choices::PYROBALL,
12769 Choice {
12770 move_id: Choices::PYROBALL,
12771 accuracy: 90.0,
12772 base_power: 120.0,
12773 category: MoveCategory::Physical,
12774 move_type: PokemonType::FIRE,
12775 flags: Flags {
12776 bullet: true,
12777 protect: true,
12778 ..Default::default()
12779 },
12780 secondaries: Some(vec![Secondary {
12781 chance: 10.0,
12782 target: MoveTarget::Opponent,
12783 effect: Effect::Status(PokemonStatus::BURN),
12784 }]),
12785 ..Default::default()
12786 },
12787 );
12788 moves.insert(
12789 Choices::QUASH,
12790 Choice {
12791 move_id: Choices::QUASH,
12792 move_type: PokemonType::DARK,
12793 flags: Flags {
12794 protect: true,
12795 ..Default::default()
12796 },
12797 ..Default::default()
12798 },
12799 );
12800 moves.insert(
12801 Choices::QUICKATTACK,
12802 Choice {
12803 move_id: Choices::QUICKATTACK,
12804 base_power: 40.0,
12805 category: MoveCategory::Physical,
12806 priority: 1,
12807 move_type: PokemonType::NORMAL,
12808 flags: Flags {
12809 contact: true,
12810 protect: true,
12811 ..Default::default()
12812 },
12813 ..Default::default()
12814 },
12815 );
12816 moves.insert(
12817 Choices::QUICKGUARD,
12818 Choice {
12819 move_id: Choices::QUICKGUARD,
12820 priority: 3,
12821 target: MoveTarget::User,
12822 move_type: PokemonType::FIGHTING,
12823 flags: Flags {
12824 ..Default::default()
12825 },
12826 side_condition: Some(SideCondition {
12827 target: MoveTarget::User,
12828 condition: PokemonSideCondition::QuickGuard,
12829 }),
12830 ..Default::default()
12831 },
12832 );
12833 moves.insert(
12834 Choices::QUIVERDANCE,
12835 Choice {
12836 move_id: Choices::QUIVERDANCE,
12837 target: MoveTarget::User,
12838 move_type: PokemonType::BUG,
12839 flags: Flags {
12840 ..Default::default()
12841 },
12842 boost: Some(Boost {
12843 target: MoveTarget::User,
12844 boosts: StatBoosts {
12845 attack: 0,
12846 defense: 0,
12847 special_attack: 1,
12848 special_defense: 1,
12849 speed: 1,
12850 accuracy: 0,
12851 },
12852 }),
12853 ..Default::default()
12854 },
12855 );
12856 moves.insert(
12857 Choices::RAGE,
12858 Choice {
12859 move_id: Choices::RAGE,
12860 base_power: 20.0,
12861 category: MoveCategory::Physical,
12862 move_type: PokemonType::NORMAL,
12863 flags: Flags {
12864 contact: true,
12865 protect: true,
12866 ..Default::default()
12867 },
12868 ..Default::default()
12869 },
12870 );
12871 moves.insert(
12872 Choices::RAGEFIST,
12873 Choice {
12874 move_id: Choices::RAGEFIST,
12875 base_power: 50.0,
12876 category: MoveCategory::Physical,
12877 move_type: PokemonType::GHOST,
12878 flags: Flags {
12879 contact: true,
12880 protect: true,
12881 punch: true,
12882 ..Default::default()
12883 },
12884 ..Default::default()
12885 },
12886 );
12887 moves.insert(
12888 Choices::RAGEPOWDER,
12889 Choice {
12890 move_id: Choices::RAGEPOWDER,
12891 priority: 2,
12892 target: MoveTarget::User,
12893 move_type: PokemonType::BUG,
12894 flags: Flags {
12895 powder: true,
12896 ..Default::default()
12897 },
12898 volatile_status: Some(VolatileStatus {
12899 target: MoveTarget::User,
12900 volatile_status: PokemonVolatileStatus::RAGEPOWDER,
12901 }),
12902 ..Default::default()
12903 },
12904 );
12905 moves.insert(
12906 Choices::RAGINGBULL,
12907 Choice {
12908 move_id: Choices::RAGINGBULL,
12909 base_power: 90.0,
12910 category: MoveCategory::Physical,
12911 move_type: PokemonType::NORMAL,
12912 flags: Flags {
12913 contact: true,
12914 protect: true,
12915 ..Default::default()
12916 },
12917 ..Default::default()
12918 },
12919 );
12920 moves.insert(
12921 Choices::RAGINGFURY,
12922 Choice {
12923 move_id: Choices::RAGINGFURY,
12924 base_power: 120.0,
12925 category: MoveCategory::Physical,
12926 move_type: PokemonType::FIRE,
12927 flags: Flags {
12928 protect: true,
12929 ..Default::default()
12930 },
12931 volatile_status: Some(VolatileStatus {
12932 target: MoveTarget::User,
12933 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
12934 }),
12935 ..Default::default()
12936 },
12937 );
12938 moves.insert(
12939 Choices::RAINDANCE,
12940 Choice {
12941 move_id: Choices::RAINDANCE,
12942 move_type: PokemonType::WATER,
12943 flags: Flags {
12944 ..Default::default()
12945 },
12946 ..Default::default()
12947 },
12948 );
12949
12950 if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
12951 moves.insert(
12952 Choices::RAPIDSPIN,
12953 Choice {
12954 move_id: Choices::RAPIDSPIN,
12955 base_power: 50.0,
12956 category: MoveCategory::Physical,
12957 move_type: PokemonType::NORMAL,
12958 flags: Flags {
12959 contact: true,
12960 protect: true,
12961 ..Default::default()
12962 },
12963 secondaries: Some(vec![Secondary {
12964 chance: 100.0,
12965 target: MoveTarget::User,
12966 effect: Effect::Boost(StatBoosts {
12967 attack: 0,
12968 defense: 0,
12969 special_attack: 0,
12970 special_defense: 0,
12971 speed: 1,
12972 accuracy: 0,
12973 }),
12974 }]),
12975 ..Default::default()
12976 },
12977 );
12978 } else {
12979 moves.insert(
12980 Choices::RAPIDSPIN,
12981 Choice {
12982 move_id: Choices::RAPIDSPIN,
12983 base_power: 20.0,
12984 category: MoveCategory::Physical,
12985 move_type: PokemonType::NORMAL,
12986 flags: Flags {
12987 contact: true,
12988 protect: true,
12989 ..Default::default()
12990 },
12991 secondaries: None,
12992 ..Default::default()
12993 },
12994 );
12995 }
12996 moves.insert(
12997 Choices::RAZORLEAF,
12998 Choice {
12999 move_id: Choices::RAZORLEAF,
13000 accuracy: 95.0,
13001 base_power: 55.0,
13002 category: MoveCategory::Physical,
13003 move_type: PokemonType::GRASS,
13004 flags: Flags {
13005 protect: true,
13006 slicing: true,
13007 ..Default::default()
13008 },
13009 ..Default::default()
13010 },
13011 );
13012 moves.insert(
13013 Choices::RAZORSHELL,
13014 Choice {
13015 move_id: Choices::RAZORSHELL,
13016 accuracy: 95.0,
13017 base_power: 75.0,
13018 category: MoveCategory::Physical,
13019 move_type: PokemonType::WATER,
13020 flags: Flags {
13021 contact: true,
13022 protect: true,
13023 slicing: true,
13024 ..Default::default()
13025 },
13026 secondaries: Some(vec![Secondary {
13027 chance: 50.0,
13028 target: MoveTarget::Opponent,
13029 effect: Effect::Boost(StatBoosts {
13030 attack: 0,
13031 defense: -1,
13032 special_attack: 0,
13033 special_defense: 0,
13034 speed: 0,
13035 accuracy: 0,
13036 }),
13037 }]),
13038 ..Default::default()
13039 },
13040 );
13041 moves.insert(
13042 Choices::RAZORWIND,
13043 Choice {
13044 move_id: Choices::RAZORWIND,
13045 base_power: 80.0,
13046 category: MoveCategory::Special,
13047 move_type: PokemonType::NORMAL,
13048 flags: Flags {
13049 charge: true,
13050 protect: true,
13051 ..Default::default()
13052 },
13053 ..Default::default()
13054 },
13055 );
13056 moves.insert(
13057 Choices::RECHARGE,
13058 Choice {
13059 move_id: Choices::RECHARGE,
13060 target: MoveTarget::User,
13061 move_type: PokemonType::NORMAL,
13062 flags: Flags {
13063 ..Default::default()
13064 },
13065 ..Default::default()
13066 },
13067 );
13068 moves.insert(
13069 Choices::RECOVER,
13070 Choice {
13071 move_id: Choices::RECOVER,
13072 target: MoveTarget::User,
13073 move_type: PokemonType::NORMAL,
13074 flags: Flags {
13075 heal: true,
13076 ..Default::default()
13077 },
13078 heal: Some(Heal {
13079 target: MoveTarget::User,
13080 amount: 0.5,
13081 }),
13082 ..Default::default()
13083 },
13084 );
13085 moves.insert(
13086 Choices::RECYCLE,
13087 Choice {
13088 move_id: Choices::RECYCLE,
13089 target: MoveTarget::User,
13090 move_type: PokemonType::NORMAL,
13091 flags: Flags {
13092 ..Default::default()
13093 },
13094 ..Default::default()
13095 },
13096 );
13097 if cfg!(feature = "gen1") {
13098 moves.insert(
13099 Choices::REFLECT,
13100 Choice {
13101 move_id: Choices::REFLECT,
13102 target: MoveTarget::User,
13103 move_type: PokemonType::PSYCHIC,
13104 flags: Flags {
13105 ..Default::default()
13106 },
13107 volatile_status: Some(VolatileStatus {
13108 target: MoveTarget::User,
13109 volatile_status: PokemonVolatileStatus::REFLECT,
13110 }),
13111 ..Default::default()
13112 },
13113 );
13114 } else {
13115 moves.insert(
13116 Choices::REFLECT,
13117 Choice {
13118 move_id: Choices::REFLECT,
13119 target: MoveTarget::User,
13120 move_type: PokemonType::PSYCHIC,
13121 flags: Flags {
13122 ..Default::default()
13123 },
13124 side_condition: Some(SideCondition {
13125 target: MoveTarget::User,
13126 condition: PokemonSideCondition::Reflect,
13127 }),
13128 ..Default::default()
13129 },
13130 );
13131 }
13132 moves.insert(
13133 Choices::REFLECTTYPE,
13134 Choice {
13135 move_id: Choices::REFLECTTYPE,
13136 move_type: PokemonType::NORMAL,
13137 flags: Flags {
13138 protect: true,
13139 ..Default::default()
13140 },
13141 ..Default::default()
13142 },
13143 );
13144 moves.insert(
13145 Choices::REFRESH,
13146 Choice {
13147 move_id: Choices::REFRESH,
13148 target: MoveTarget::User,
13149 move_type: PokemonType::NORMAL,
13150 flags: Flags {
13151 ..Default::default()
13152 },
13153 ..Default::default()
13154 },
13155 );
13156 moves.insert(
13157 Choices::RELICSONG,
13158 Choice {
13159 move_id: Choices::RELICSONG,
13160 base_power: 75.0,
13161 category: MoveCategory::Special,
13162 move_type: PokemonType::NORMAL,
13163 flags: Flags {
13164 protect: true,
13165 sound: true,
13166 ..Default::default()
13167 },
13168 secondaries: Some(vec![Secondary {
13169 chance: 10.0,
13170 target: MoveTarget::Opponent,
13171 effect: Effect::Status(PokemonStatus::SLEEP),
13172 }]),
13173 ..Default::default()
13174 },
13175 );
13176 moves.insert(
13177 Choices::REST,
13178 Choice {
13179 move_id: Choices::REST,
13180 status: None, target: MoveTarget::User,
13182 move_type: PokemonType::PSYCHIC,
13183 flags: Flags {
13184 heal: true,
13185 ..Default::default()
13186 },
13187 heal: None, ..Default::default()
13189 },
13190 );
13191 moves.insert(
13192 Choices::RETALIATE,
13193 Choice {
13194 move_id: Choices::RETALIATE,
13195 base_power: 70.0,
13196 category: MoveCategory::Physical,
13197 move_type: PokemonType::NORMAL,
13198 flags: Flags {
13199 contact: true,
13200 protect: true,
13201 ..Default::default()
13202 },
13203 ..Default::default()
13204 },
13205 );
13206 moves.insert(
13207 Choices::RETURN,
13208 Choice {
13209 move_id: Choices::RETURN,
13210 base_power: 102.0,
13211 category: MoveCategory::Physical,
13212 move_type: PokemonType::NORMAL,
13213 flags: Flags {
13214 contact: true,
13215 protect: true,
13216 ..Default::default()
13217 },
13218 ..Default::default()
13219 },
13220 );
13221 moves.insert(
13222 Choices::RETURN102,
13223 Choice {
13224 move_id: Choices::RETURN102,
13225 base_power: 102.0,
13226 category: MoveCategory::Physical,
13227 move_type: PokemonType::NORMAL,
13228 flags: Flags {
13229 contact: true,
13230 protect: true,
13231 ..Default::default()
13232 },
13233 ..Default::default()
13234 },
13235 );
13236 moves.insert(
13237 Choices::REVELATIONDANCE,
13238 Choice {
13239 move_id: Choices::REVELATIONDANCE,
13240 base_power: 90.0,
13241 category: MoveCategory::Special,
13242 move_type: PokemonType::NORMAL,
13243 flags: Flags {
13244 protect: true,
13245 ..Default::default()
13246 },
13247 ..Default::default()
13248 },
13249 );
13250 moves.insert(
13251 Choices::REVENGE,
13252 Choice {
13253 move_id: Choices::REVENGE,
13254 base_power: 60.0,
13255 category: MoveCategory::Physical,
13256 priority: -4,
13257 move_type: PokemonType::FIGHTING,
13258 flags: Flags {
13259 contact: true,
13260 protect: true,
13261 ..Default::default()
13262 },
13263 ..Default::default()
13264 },
13265 );
13266 moves.insert(
13267 Choices::REVERSAL,
13268 Choice {
13269 move_id: Choices::REVERSAL,
13270 category: MoveCategory::Physical,
13271 move_type: PokemonType::FIGHTING,
13272 flags: Flags {
13273 contact: true,
13274 protect: true,
13275 ..Default::default()
13276 },
13277 ..Default::default()
13278 },
13279 );
13280 moves.insert(
13281 Choices::REVIVALBLESSING,
13282 Choice {
13283 move_id: Choices::REVIVALBLESSING,
13284 target: MoveTarget::User,
13285 move_type: PokemonType::NORMAL,
13286 flags: Flags {
13287 heal: true,
13288 ..Default::default()
13289 },
13290 ..Default::default()
13291 },
13292 );
13293 moves.insert(
13294 Choices::RISINGVOLTAGE,
13295 Choice {
13296 move_id: Choices::RISINGVOLTAGE,
13297 base_power: 70.0,
13298 category: MoveCategory::Special,
13299 move_type: PokemonType::ELECTRIC,
13300 flags: Flags {
13301 protect: true,
13302 ..Default::default()
13303 },
13304 ..Default::default()
13305 },
13306 );
13307 moves.insert(
13308 Choices::ROAR,
13309 Choice {
13310 move_id: Choices::ROAR,
13311 priority: -6,
13312 move_type: PokemonType::NORMAL,
13313 flags: Flags {
13314 drag: true,
13315 reflectable: true,
13316 sound: true,
13317 ..Default::default()
13318 },
13319 ..Default::default()
13320 },
13321 );
13322 moves.insert(
13323 Choices::ROAROFTIME,
13324 Choice {
13325 move_id: Choices::ROAROFTIME,
13326 accuracy: 90.0,
13327 base_power: 150.0,
13328 category: MoveCategory::Special,
13329 move_type: PokemonType::DRAGON,
13330 flags: Flags {
13331 protect: true,
13332 recharge: true,
13333 ..Default::default()
13334 },
13335 ..Default::default()
13336 },
13337 );
13338 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
13339 moves.insert(
13340 Choices::ROCKBLAST,
13341 Choice {
13342 move_id: Choices::ROCKBLAST,
13343 accuracy: 80.0,
13344 base_power: 25.0,
13345 category: MoveCategory::Physical,
13346 move_type: PokemonType::ROCK,
13347 flags: Flags {
13348 bullet: true,
13349 protect: true,
13350 ..Default::default()
13351 },
13352 ..Default::default()
13353 },
13354 );
13355 } else {
13356 moves.insert(
13357 Choices::ROCKBLAST,
13358 Choice {
13359 move_id: Choices::ROCKBLAST,
13360 accuracy: 90.0,
13361 base_power: 25.0,
13362 category: MoveCategory::Physical,
13363 move_type: PokemonType::ROCK,
13364 flags: Flags {
13365 bullet: true,
13366 protect: true,
13367 ..Default::default()
13368 },
13369 ..Default::default()
13370 },
13371 );
13372 }
13373 moves.insert(
13374 Choices::ROCKCLIMB,
13375 Choice {
13376 move_id: Choices::ROCKCLIMB,
13377 accuracy: 85.0,
13378 base_power: 90.0,
13379 category: MoveCategory::Physical,
13380 move_type: PokemonType::NORMAL,
13381 flags: Flags {
13382 contact: true,
13383 protect: true,
13384 ..Default::default()
13385 },
13386 secondaries: Some(vec![Secondary {
13387 chance: 20.0,
13388 target: MoveTarget::Opponent,
13389 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
13390 }]),
13391 ..Default::default()
13392 },
13393 );
13394 moves.insert(
13395 Choices::ROCKPOLISH,
13396 Choice {
13397 move_id: Choices::ROCKPOLISH,
13398 target: MoveTarget::User,
13399 move_type: PokemonType::ROCK,
13400 flags: Flags {
13401 ..Default::default()
13402 },
13403 boost: Some(Boost {
13404 target: MoveTarget::User,
13405 boosts: StatBoosts {
13406 attack: 0,
13407 defense: 0,
13408 special_attack: 0,
13409 special_defense: 0,
13410 speed: 2,
13411 accuracy: 0,
13412 },
13413 }),
13414 ..Default::default()
13415 },
13416 );
13417 if cfg!(feature = "gen1") {
13418 moves.insert(
13419 Choices::ROCKSLIDE,
13420 Choice {
13421 move_id: Choices::ROCKSLIDE,
13422 accuracy: 90.0,
13423 base_power: 75.0,
13424 category: MoveCategory::Physical,
13425 move_type: PokemonType::ROCK,
13426 flags: Flags {
13427 protect: true,
13428 ..Default::default()
13429 },
13430 ..Default::default()
13431 },
13432 );
13433 } else {
13434 moves.insert(
13435 Choices::ROCKSLIDE,
13436 Choice {
13437 move_id: Choices::ROCKSLIDE,
13438 accuracy: 90.0,
13439 base_power: 75.0,
13440 category: MoveCategory::Physical,
13441 move_type: PokemonType::ROCK,
13442 flags: Flags {
13443 protect: true,
13444 ..Default::default()
13445 },
13446 secondaries: Some(vec![Secondary {
13447 chance: 30.0,
13448 target: MoveTarget::Opponent,
13449 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
13450 }]),
13451 ..Default::default()
13452 },
13453 );
13454 }
13455 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
13456 moves.insert(
13457 Choices::ROCKSMASH,
13458 Choice {
13459 move_id: Choices::ROCKSMASH,
13460 base_power: 20.0,
13461 category: MoveCategory::Physical,
13462 move_type: PokemonType::FIGHTING,
13463 flags: Flags {
13464 contact: true,
13465 protect: true,
13466 ..Default::default()
13467 },
13468 secondaries: Some(vec![Secondary {
13469 chance: 50.0,
13470 target: MoveTarget::Opponent,
13471 effect: Effect::Boost(StatBoosts {
13472 attack: 0,
13473 defense: -1,
13474 special_attack: 0,
13475 special_defense: 0,
13476 speed: 0,
13477 accuracy: 0,
13478 }),
13479 }]),
13480 ..Default::default()
13481 },
13482 );
13483 } else {
13484 moves.insert(
13485 Choices::ROCKSMASH,
13486 Choice {
13487 move_id: Choices::ROCKSMASH,
13488 base_power: 40.0,
13489 category: MoveCategory::Physical,
13490 move_type: PokemonType::FIGHTING,
13491 flags: Flags {
13492 contact: true,
13493 protect: true,
13494 ..Default::default()
13495 },
13496 secondaries: Some(vec![Secondary {
13497 chance: 50.0,
13498 target: MoveTarget::Opponent,
13499 effect: Effect::Boost(StatBoosts {
13500 attack: 0,
13501 defense: -1,
13502 special_attack: 0,
13503 special_defense: 0,
13504 speed: 0,
13505 accuracy: 0,
13506 }),
13507 }]),
13508 ..Default::default()
13509 },
13510 );
13511 }
13512 if cfg!(feature = "gen1") {
13513 moves.insert(
13514 Choices::ROCKTHROW,
13515 Choice {
13516 move_id: Choices::ROCKTHROW,
13517 accuracy: 65.0,
13518 base_power: 50.0,
13519 category: MoveCategory::Physical,
13520 move_type: PokemonType::ROCK,
13521 flags: Flags {
13522 protect: true,
13523 ..Default::default()
13524 },
13525 ..Default::default()
13526 },
13527 );
13528 } else {
13529 moves.insert(
13530 Choices::ROCKTHROW,
13531 Choice {
13532 move_id: Choices::ROCKTHROW,
13533 accuracy: 90.0,
13534 base_power: 50.0,
13535 category: MoveCategory::Physical,
13536 move_type: PokemonType::ROCK,
13537 flags: Flags {
13538 protect: true,
13539 ..Default::default()
13540 },
13541 ..Default::default()
13542 },
13543 );
13544 }
13545 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
13546 moves.insert(
13547 Choices::ROCKTOMB,
13548 Choice {
13549 move_id: Choices::ROCKTOMB,
13550 accuracy: 80.0,
13551 base_power: 50.0,
13552 category: MoveCategory::Physical,
13553 move_type: PokemonType::ROCK,
13554 flags: Flags {
13555 protect: true,
13556 ..Default::default()
13557 },
13558 secondaries: Some(vec![Secondary {
13559 chance: 100.0,
13560 target: MoveTarget::Opponent,
13561 effect: Effect::Boost(StatBoosts {
13562 attack: 0,
13563 defense: 0,
13564 special_attack: 0,
13565 special_defense: 0,
13566 speed: -1,
13567 accuracy: 0,
13568 }),
13569 }]),
13570 ..Default::default()
13571 },
13572 );
13573 } else {
13574 moves.insert(
13575 Choices::ROCKTOMB,
13576 Choice {
13577 move_id: Choices::ROCKTOMB,
13578 accuracy: 95.0,
13579 base_power: 60.0,
13580 category: MoveCategory::Physical,
13581 move_type: PokemonType::ROCK,
13582 flags: Flags {
13583 protect: true,
13584 ..Default::default()
13585 },
13586 secondaries: Some(vec![Secondary {
13587 chance: 100.0,
13588 target: MoveTarget::Opponent,
13589 effect: Effect::Boost(StatBoosts {
13590 attack: 0,
13591 defense: 0,
13592 special_attack: 0,
13593 special_defense: 0,
13594 speed: -1,
13595 accuracy: 0,
13596 }),
13597 }]),
13598 ..Default::default()
13599 },
13600 );
13601 }
13602 moves.insert(
13603 Choices::ROCKWRECKER,
13604 Choice {
13605 move_id: Choices::ROCKWRECKER,
13606 accuracy: 90.0,
13607 base_power: 150.0,
13608 category: MoveCategory::Physical,
13609 move_type: PokemonType::ROCK,
13610 flags: Flags {
13611 bullet: true,
13612 protect: true,
13613 recharge: true,
13614 ..Default::default()
13615 },
13616 ..Default::default()
13617 },
13618 );
13619 moves.insert(
13620 Choices::ROLEPLAY,
13621 Choice {
13622 move_id: Choices::ROLEPLAY,
13623 move_type: PokemonType::PSYCHIC,
13624 flags: Flags {
13625 ..Default::default()
13626 },
13627 ..Default::default()
13628 },
13629 );
13630 moves.insert(
13631 Choices::ROLLINGKICK,
13632 Choice {
13633 move_id: Choices::ROLLINGKICK,
13634 accuracy: 85.0,
13635 base_power: 60.0,
13636 category: MoveCategory::Physical,
13637 move_type: PokemonType::FIGHTING,
13638 flags: Flags {
13639 contact: true,
13640 protect: true,
13641 ..Default::default()
13642 },
13643 secondaries: Some(vec![Secondary {
13644 chance: 30.0,
13645 target: MoveTarget::Opponent,
13646 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
13647 }]),
13648 ..Default::default()
13649 },
13650 );
13651 moves.insert(
13652 Choices::ROLLOUT,
13653 Choice {
13654 move_id: Choices::ROLLOUT,
13655 accuracy: 90.0,
13656 base_power: 30.0,
13657 category: MoveCategory::Physical,
13658 move_type: PokemonType::ROCK,
13659 flags: Flags {
13660 contact: true,
13661 protect: true,
13662 ..Default::default()
13663 },
13664 ..Default::default()
13665 },
13666 );
13667 moves.insert(
13668 Choices::ROOST,
13669 Choice {
13670 move_id: Choices::ROOST,
13671 target: MoveTarget::User,
13672 move_type: PokemonType::FLYING,
13673 flags: Flags {
13674 heal: true,
13675 ..Default::default()
13676 },
13677 volatile_status: Some(VolatileStatus {
13678 target: MoveTarget::User,
13679 volatile_status: PokemonVolatileStatus::ROOST,
13680 }),
13681 heal: Some(Heal {
13682 target: MoveTarget::User,
13683 amount: 0.5,
13684 }),
13685 ..Default::default()
13686 },
13687 );
13688 moves.insert(
13689 Choices::ROTOTILLER,
13690 Choice {
13691 move_id: Choices::ROTOTILLER,
13692 move_type: PokemonType::GROUND,
13693 flags: Flags {
13694 ..Default::default()
13695 },
13696 ..Default::default()
13697 },
13698 );
13699 moves.insert(
13700 Choices::ROUND,
13701 Choice {
13702 move_id: Choices::ROUND,
13703 base_power: 60.0,
13704 category: MoveCategory::Special,
13705 move_type: PokemonType::NORMAL,
13706 flags: Flags {
13707 protect: true,
13708 sound: true,
13709 ..Default::default()
13710 },
13711 ..Default::default()
13712 },
13713 );
13714 moves.insert(
13715 Choices::RUINATION,
13716 Choice {
13717 move_id: Choices::RUINATION,
13718 accuracy: 90.0,
13719 category: MoveCategory::Special,
13720 move_type: PokemonType::DARK,
13721 flags: Flags {
13722 protect: true,
13723 ..Default::default()
13724 },
13725 ..Default::default()
13726 },
13727 );
13728 moves.insert(
13729 Choices::SACREDFIRE,
13730 Choice {
13731 move_id: Choices::SACREDFIRE,
13732 accuracy: 95.0,
13733 base_power: 100.0,
13734 category: MoveCategory::Physical,
13735 move_type: PokemonType::FIRE,
13736 flags: Flags {
13737 protect: true,
13738 ..Default::default()
13739 },
13740 secondaries: Some(vec![Secondary {
13741 chance: 50.0,
13742 target: MoveTarget::Opponent,
13743 effect: Effect::Status(PokemonStatus::BURN),
13744 }]),
13745 ..Default::default()
13746 },
13747 );
13748 moves.insert(
13749 Choices::SACREDSWORD,
13750 Choice {
13751 move_id: Choices::SACREDSWORD,
13752 base_power: 90.0,
13753 category: MoveCategory::Physical,
13754 move_type: PokemonType::FIGHTING,
13755 flags: Flags {
13756 contact: true,
13757 protect: true,
13758 slicing: true,
13759 ..Default::default()
13760 },
13761 ..Default::default()
13762 },
13763 );
13764 moves.insert(
13765 Choices::SAFEGUARD,
13766 Choice {
13767 move_id: Choices::SAFEGUARD,
13768 target: MoveTarget::User,
13769 move_type: PokemonType::NORMAL,
13770 flags: Flags {
13771 ..Default::default()
13772 },
13773 side_condition: Some(SideCondition {
13774 target: MoveTarget::User,
13775 condition: PokemonSideCondition::Safeguard,
13776 }),
13777 ..Default::default()
13778 },
13779 );
13780 moves.insert(
13781 Choices::SALTCURE,
13782 Choice {
13783 move_id: Choices::SALTCURE,
13784 base_power: 40.0,
13785 category: MoveCategory::Physical,
13786 move_type: PokemonType::ROCK,
13787 flags: Flags {
13788 protect: true,
13789 ..Default::default()
13790 },
13791 volatile_status: Some(VolatileStatus {
13792 target: MoveTarget::Opponent,
13793 volatile_status: PokemonVolatileStatus::SALTCURE,
13794 }),
13795 ..Default::default()
13796 },
13797 );
13798 if cfg!(feature = "gen1") {
13799 moves.insert(
13800 Choices::SANDATTACK,
13801 Choice {
13802 move_id: Choices::SANDATTACK,
13803 move_type: PokemonType::NORMAL,
13804 flags: Flags {
13805 protect: true,
13806 reflectable: true,
13807 ..Default::default()
13808 },
13809 boost: Some(Boost {
13810 target: MoveTarget::Opponent,
13811 boosts: StatBoosts {
13812 attack: 0,
13813 defense: 0,
13814 special_attack: 0,
13815 special_defense: 0,
13816 speed: 0,
13817 accuracy: -1,
13818 },
13819 }),
13820 ..Default::default()
13821 },
13822 );
13823 } else {
13824 moves.insert(
13825 Choices::SANDATTACK,
13826 Choice {
13827 move_id: Choices::SANDATTACK,
13828 move_type: PokemonType::GROUND,
13829 flags: Flags {
13830 protect: true,
13831 reflectable: true,
13832 ..Default::default()
13833 },
13834 boost: Some(Boost {
13835 target: MoveTarget::Opponent,
13836 boosts: StatBoosts {
13837 attack: 0,
13838 defense: 0,
13839 special_attack: 0,
13840 special_defense: 0,
13841 speed: 0,
13842 accuracy: -1,
13843 },
13844 }),
13845 ..Default::default()
13846 },
13847 );
13848 }
13849 moves.insert(
13850 Choices::SANDSEARSTORM,
13851 Choice {
13852 move_id: Choices::SANDSEARSTORM,
13853 accuracy: 80.0,
13854 base_power: 100.0,
13855 category: MoveCategory::Special,
13856 move_type: PokemonType::GROUND,
13857 flags: Flags {
13858 protect: true,
13859 wind: true,
13860 ..Default::default()
13861 },
13862 secondaries: Some(vec![Secondary {
13863 chance: 20.0,
13864 target: MoveTarget::Opponent,
13865 effect: Effect::Status(PokemonStatus::BURN),
13866 }]),
13867 ..Default::default()
13868 },
13869 );
13870 moves.insert(
13871 Choices::SANDSTORM,
13872 Choice {
13873 move_id: Choices::SANDSTORM,
13874 move_type: PokemonType::ROCK,
13875 flags: Flags {
13876 wind: true,
13877 ..Default::default()
13878 },
13879 ..Default::default()
13880 },
13881 );
13882 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
13883 moves.insert(
13884 Choices::SANDTOMB,
13885 Choice {
13886 move_id: Choices::SANDTOMB,
13887 accuracy: 70.0,
13888 base_power: 15.0,
13889 category: MoveCategory::Physical,
13890 move_type: PokemonType::GROUND,
13891 flags: Flags {
13892 protect: true,
13893 ..Default::default()
13894 },
13895 volatile_status: Some(VolatileStatus {
13896 target: MoveTarget::Opponent,
13897 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
13898 }),
13899 ..Default::default()
13900 },
13901 );
13902 } else {
13903 moves.insert(
13904 Choices::SANDTOMB,
13905 Choice {
13906 move_id: Choices::SANDTOMB,
13907 accuracy: 85.0,
13908 base_power: 35.0,
13909 category: MoveCategory::Physical,
13910 move_type: PokemonType::GROUND,
13911 flags: Flags {
13912 protect: true,
13913 ..Default::default()
13914 },
13915 volatile_status: Some(VolatileStatus {
13916 target: MoveTarget::Opponent,
13917 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
13918 }),
13919 ..Default::default()
13920 },
13921 );
13922 }
13923 moves.insert(
13924 Choices::SAPPYSEED,
13925 Choice {
13926 move_id: Choices::SAPPYSEED,
13927 accuracy: 90.0,
13928 base_power: 100.0,
13929 category: MoveCategory::Physical,
13930 move_type: PokemonType::GRASS,
13931 flags: Flags {
13932 protect: true,
13933 reflectable: true,
13934 ..Default::default()
13935 },
13936 ..Default::default()
13937 },
13938 );
13939 moves.insert(
13940 Choices::SCALD,
13941 Choice {
13942 move_id: Choices::SCALD,
13943 base_power: 80.0,
13944 category: MoveCategory::Special,
13945 move_type: PokemonType::WATER,
13946 flags: Flags {
13947 protect: true,
13948 ..Default::default()
13949 },
13950 secondaries: Some(vec![Secondary {
13951 chance: 30.0,
13952 target: MoveTarget::Opponent,
13953 effect: Effect::Status(PokemonStatus::BURN),
13954 }]),
13955 ..Default::default()
13956 },
13957 );
13958 moves.insert(
13959 Choices::SCALESHOT,
13960 Choice {
13961 move_id: Choices::SCALESHOT,
13962 accuracy: 90.0,
13963 base_power: 25.0,
13964 category: MoveCategory::Physical,
13965 move_type: PokemonType::DRAGON,
13966 flags: Flags {
13967 protect: true,
13968 ..Default::default()
13969 },
13970 boost: Some(Boost {
13971 target: MoveTarget::User,
13972 boosts: StatBoosts {
13973 attack: 0,
13974 defense: -1,
13975 special_attack: 0,
13976 special_defense: 0,
13977 speed: 1,
13978 accuracy: 0,
13979 },
13980 }),
13981 ..Default::default()
13982 },
13983 );
13984 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
13985 moves.insert(
13986 Choices::SCARYFACE,
13987 Choice {
13988 move_id: Choices::SCARYFACE,
13989 accuracy: 90.0,
13990 move_type: PokemonType::NORMAL,
13991 flags: Flags {
13992 protect: true,
13993 reflectable: true,
13994 ..Default::default()
13995 },
13996 boost: Some(Boost {
13997 target: MoveTarget::Opponent,
13998 boosts: StatBoosts {
13999 attack: 0,
14000 defense: 0,
14001 special_attack: 0,
14002 special_defense: 0,
14003 speed: -2,
14004 accuracy: 0,
14005 },
14006 }),
14007 ..Default::default()
14008 },
14009 );
14010 } else {
14011 moves.insert(
14012 Choices::SCARYFACE,
14013 Choice {
14014 move_id: Choices::SCARYFACE,
14015 move_type: PokemonType::NORMAL,
14016 flags: Flags {
14017 protect: true,
14018 reflectable: true,
14019 ..Default::default()
14020 },
14021 boost: Some(Boost {
14022 target: MoveTarget::Opponent,
14023 boosts: StatBoosts {
14024 attack: 0,
14025 defense: 0,
14026 special_attack: 0,
14027 special_defense: 0,
14028 speed: -2,
14029 accuracy: 0,
14030 },
14031 }),
14032 ..Default::default()
14033 },
14034 );
14035 }
14036 moves.insert(
14037 Choices::SCORCHINGSANDS,
14038 Choice {
14039 move_id: Choices::SCORCHINGSANDS,
14040 base_power: 70.0,
14041 category: MoveCategory::Special,
14042 move_type: PokemonType::GROUND,
14043 flags: Flags {
14044 protect: true,
14045 ..Default::default()
14046 },
14047 secondaries: Some(vec![Secondary {
14048 chance: 30.0,
14049 target: MoveTarget::Opponent,
14050 effect: Effect::Status(PokemonStatus::BURN),
14051 }]),
14052 ..Default::default()
14053 },
14054 );
14055 moves.insert(
14056 Choices::SCRATCH,
14057 Choice {
14058 move_id: Choices::SCRATCH,
14059 base_power: 40.0,
14060 category: MoveCategory::Physical,
14061 move_type: PokemonType::NORMAL,
14062 flags: Flags {
14063 contact: true,
14064 protect: true,
14065 ..Default::default()
14066 },
14067 ..Default::default()
14068 },
14069 );
14070 moves.insert(
14071 Choices::SCREECH,
14072 Choice {
14073 move_id: Choices::SCREECH,
14074 accuracy: 85.0,
14075 move_type: PokemonType::NORMAL,
14076 flags: Flags {
14077 protect: true,
14078 reflectable: true,
14079 sound: true,
14080 ..Default::default()
14081 },
14082 boost: Some(Boost {
14083 target: MoveTarget::Opponent,
14084 boosts: StatBoosts {
14085 attack: 0,
14086 defense: -2,
14087 special_attack: 0,
14088 special_defense: 0,
14089 speed: 0,
14090 accuracy: 0,
14091 },
14092 }),
14093 ..Default::default()
14094 },
14095 );
14096 moves.insert(
14097 Choices::SEARINGSHOT,
14098 Choice {
14099 move_id: Choices::SEARINGSHOT,
14100 base_power: 100.0,
14101 category: MoveCategory::Special,
14102 move_type: PokemonType::FIRE,
14103 flags: Flags {
14104 bullet: true,
14105 protect: true,
14106 ..Default::default()
14107 },
14108 secondaries: Some(vec![Secondary {
14109 chance: 30.0,
14110 target: MoveTarget::Opponent,
14111 effect: Effect::Status(PokemonStatus::BURN),
14112 }]),
14113 ..Default::default()
14114 },
14115 );
14116 moves.insert(
14117 Choices::SECRETPOWER,
14118 Choice {
14119 move_id: Choices::SECRETPOWER,
14120 base_power: 70.0,
14121 category: MoveCategory::Physical,
14122 move_type: PokemonType::NORMAL,
14123 flags: Flags {
14124 protect: true,
14125 ..Default::default()
14126 },
14127 secondaries: Some(vec![Secondary {
14128 chance: 30.0,
14129 target: MoveTarget::Opponent,
14130 effect: Effect::Status(PokemonStatus::PARALYZE),
14131 }]),
14132 ..Default::default()
14133 },
14134 );
14135 moves.insert(
14136 Choices::SECRETSWORD,
14137 Choice {
14138 move_id: Choices::SECRETSWORD,
14139 base_power: 85.0,
14140 category: MoveCategory::Special,
14141 move_type: PokemonType::FIGHTING,
14142 flags: Flags {
14143 protect: true,
14144 slicing: true,
14145 ..Default::default()
14146 },
14147 ..Default::default()
14148 },
14149 );
14150 moves.insert(
14151 Choices::SEEDBOMB,
14152 Choice {
14153 move_id: Choices::SEEDBOMB,
14154 base_power: 80.0,
14155 category: MoveCategory::Physical,
14156 move_type: PokemonType::GRASS,
14157 flags: Flags {
14158 bullet: true,
14159 protect: true,
14160 ..Default::default()
14161 },
14162 ..Default::default()
14163 },
14164 );
14165 moves.insert(
14166 Choices::SEEDFLARE,
14167 Choice {
14168 move_id: Choices::SEEDFLARE,
14169 accuracy: 85.0,
14170 base_power: 120.0,
14171 category: MoveCategory::Special,
14172 move_type: PokemonType::GRASS,
14173 flags: Flags {
14174 protect: true,
14175 ..Default::default()
14176 },
14177 secondaries: Some(vec![Secondary {
14178 chance: 40.0,
14179 target: MoveTarget::Opponent,
14180 effect: Effect::Boost(StatBoosts {
14181 attack: 0,
14182 defense: 0,
14183 special_attack: 0,
14184 special_defense: -2,
14185 speed: 0,
14186 accuracy: 0,
14187 }),
14188 }]),
14189 ..Default::default()
14190 },
14191 );
14192 moves.insert(
14193 Choices::SEISMICTOSS,
14194 Choice {
14195 move_id: Choices::SEISMICTOSS,
14196 category: MoveCategory::Physical,
14197 move_type: PokemonType::FIGHTING,
14198 flags: Flags {
14199 contact: true,
14200 protect: true,
14201 ..Default::default()
14202 },
14203 ..Default::default()
14204 },
14205 );
14206 if cfg!(feature = "gen1") {
14207 moves.insert(
14208 Choices::SELFDESTRUCT,
14209 Choice {
14210 move_id: Choices::SELFDESTRUCT,
14211 base_power: 130.0,
14212 category: MoveCategory::Physical,
14213 move_type: PokemonType::NORMAL,
14214 flags: Flags {
14215 protect: true,
14216 ..Default::default()
14217 },
14218 ..Default::default()
14219 },
14220 );
14221 } else {
14222 moves.insert(
14223 Choices::SELFDESTRUCT,
14224 Choice {
14225 move_id: Choices::SELFDESTRUCT,
14226 base_power: 200.0,
14227 category: MoveCategory::Physical,
14228 move_type: PokemonType::NORMAL,
14229 flags: Flags {
14230 protect: true,
14231 ..Default::default()
14232 },
14233 ..Default::default()
14234 },
14235 );
14236 }
14237 moves.insert(
14238 Choices::SHADOWBALL,
14239 Choice {
14240 move_id: Choices::SHADOWBALL,
14241 base_power: 80.0,
14242 category: MoveCategory::Special,
14243 move_type: PokemonType::GHOST,
14244 flags: Flags {
14245 bullet: true,
14246 protect: true,
14247 ..Default::default()
14248 },
14249 secondaries: Some(vec![Secondary {
14250 chance: 20.0,
14251 target: MoveTarget::Opponent,
14252 effect: Effect::Boost(StatBoosts {
14253 attack: 0,
14254 defense: 0,
14255 special_attack: 0,
14256 special_defense: -1,
14257 speed: 0,
14258 accuracy: 0,
14259 }),
14260 }]),
14261 ..Default::default()
14262 },
14263 );
14264 moves.insert(
14265 Choices::SHADOWBONE,
14266 Choice {
14267 move_id: Choices::SHADOWBONE,
14268 base_power: 85.0,
14269 category: MoveCategory::Physical,
14270 move_type: PokemonType::GHOST,
14271 flags: Flags {
14272 protect: true,
14273 ..Default::default()
14274 },
14275 secondaries: Some(vec![Secondary {
14276 chance: 20.0,
14277 target: MoveTarget::Opponent,
14278 effect: Effect::Boost(StatBoosts {
14279 attack: 0,
14280 defense: -1,
14281 special_attack: 0,
14282 special_defense: 0,
14283 speed: 0,
14284 accuracy: 0,
14285 }),
14286 }]),
14287 ..Default::default()
14288 },
14289 );
14290 moves.insert(
14291 Choices::SHADOWCLAW,
14292 Choice {
14293 move_id: Choices::SHADOWCLAW,
14294 base_power: 70.0,
14295 category: MoveCategory::Physical,
14296 move_type: PokemonType::GHOST,
14297 flags: Flags {
14298 contact: true,
14299 protect: true,
14300 ..Default::default()
14301 },
14302 ..Default::default()
14303 },
14304 );
14305 moves.insert(
14306 Choices::SHADOWFORCE,
14307 Choice {
14308 move_id: Choices::SHADOWFORCE,
14309 base_power: 120.0,
14310 category: MoveCategory::Physical,
14311 move_type: PokemonType::GHOST,
14312 flags: Flags {
14313 charge: true,
14314 contact: true,
14315 ..Default::default()
14316 },
14317 ..Default::default()
14318 },
14319 );
14320 moves.insert(
14321 Choices::SHADOWPUNCH,
14322 Choice {
14323 move_id: Choices::SHADOWPUNCH,
14324 base_power: 60.0,
14325 category: MoveCategory::Physical,
14326 move_type: PokemonType::GHOST,
14327 flags: Flags {
14328 contact: true,
14329 protect: true,
14330 punch: true,
14331 ..Default::default()
14332 },
14333 ..Default::default()
14334 },
14335 );
14336 moves.insert(
14337 Choices::SHADOWSNEAK,
14338 Choice {
14339 move_id: Choices::SHADOWSNEAK,
14340 base_power: 40.0,
14341 category: MoveCategory::Physical,
14342 priority: 1,
14343 move_type: PokemonType::GHOST,
14344 flags: Flags {
14345 contact: true,
14346 protect: true,
14347 ..Default::default()
14348 },
14349 ..Default::default()
14350 },
14351 );
14352 moves.insert(
14353 Choices::SHADOWSTRIKE,
14354 Choice {
14355 move_id: Choices::SHADOWSTRIKE,
14356 accuracy: 95.0,
14357 base_power: 80.0,
14358 category: MoveCategory::Physical,
14359 move_type: PokemonType::GHOST,
14360 flags: Flags {
14361 contact: true,
14362 protect: true,
14363 ..Default::default()
14364 },
14365 secondaries: Some(vec![Secondary {
14366 chance: 50.0,
14367 target: MoveTarget::Opponent,
14368 effect: Effect::Boost(StatBoosts {
14369 attack: 0,
14370 defense: -1,
14371 special_attack: 0,
14372 special_defense: 0,
14373 speed: 0,
14374 accuracy: 0,
14375 }),
14376 }]),
14377 ..Default::default()
14378 },
14379 );
14380 moves.insert(
14381 Choices::SHARPEN,
14382 Choice {
14383 move_id: Choices::SHARPEN,
14384 target: MoveTarget::User,
14385 move_type: PokemonType::NORMAL,
14386 flags: Flags {
14387 ..Default::default()
14388 },
14389 boost: Some(Boost {
14390 target: MoveTarget::User,
14391 boosts: StatBoosts {
14392 attack: 1,
14393 defense: 0,
14394 special_attack: 0,
14395 special_defense: 0,
14396 speed: 0,
14397 accuracy: 0,
14398 },
14399 }),
14400 ..Default::default()
14401 },
14402 );
14403 moves.insert(
14404 Choices::SHEDTAIL,
14405 Choice {
14406 move_id: Choices::SHEDTAIL,
14407 target: MoveTarget::User,
14408 move_type: PokemonType::NORMAL,
14409 flags: Flags {
14410 pivot: true,
14411 ..Default::default()
14412 },
14413 volatile_status: Some(VolatileStatus {
14414 target: MoveTarget::User,
14415 volatile_status: PokemonVolatileStatus::SUBSTITUTE,
14416 }),
14417 ..Default::default()
14418 },
14419 );
14420 moves.insert(
14421 Choices::SHEERCOLD,
14422 Choice {
14423 move_id: Choices::SHEERCOLD,
14424 accuracy: 30.0,
14425 category: MoveCategory::Special,
14426 move_type: PokemonType::ICE,
14427 flags: Flags {
14428 protect: true,
14429 ..Default::default()
14430 },
14431 ..Default::default()
14432 },
14433 );
14434 moves.insert(
14435 Choices::SHELLSIDEARM,
14436 Choice {
14437 move_id: Choices::SHELLSIDEARM,
14438 base_power: 90.0,
14439 category: MoveCategory::Special,
14440 move_type: PokemonType::POISON,
14441 flags: Flags {
14442 protect: true,
14443 ..Default::default()
14444 },
14445 secondaries: Some(vec![Secondary {
14446 chance: 20.0,
14447 target: MoveTarget::Opponent,
14448 effect: Effect::Status(PokemonStatus::POISON),
14449 }]),
14450 ..Default::default()
14451 },
14452 );
14453 moves.insert(
14454 Choices::SHELLSMASH,
14455 Choice {
14456 move_id: Choices::SHELLSMASH,
14457 target: MoveTarget::User,
14458 move_type: PokemonType::NORMAL,
14459 flags: Flags {
14460 ..Default::default()
14461 },
14462 boost: Some(Boost {
14463 target: MoveTarget::User,
14464 boosts: StatBoosts {
14465 attack: 2,
14466 defense: -1,
14467 special_attack: 2,
14468 special_defense: -1,
14469 speed: 2,
14470 accuracy: 0,
14471 },
14472 }),
14473 ..Default::default()
14474 },
14475 );
14476 moves.insert(
14477 Choices::SHELLTRAP,
14478 Choice {
14479 move_id: Choices::SHELLTRAP,
14480 base_power: 150.0,
14481 category: MoveCategory::Special,
14482 priority: -3,
14483 move_type: PokemonType::FIRE,
14484 flags: Flags {
14485 protect: true,
14486 ..Default::default()
14487 },
14488 ..Default::default()
14489 },
14490 );
14491 moves.insert(
14492 Choices::SHELTER,
14493 Choice {
14494 move_id: Choices::SHELTER,
14495 target: MoveTarget::User,
14496 move_type: PokemonType::STEEL,
14497 flags: Flags {
14498 ..Default::default()
14499 },
14500 boost: Some(Boost {
14501 target: MoveTarget::User,
14502 boosts: StatBoosts {
14503 attack: 0,
14504 defense: 2,
14505 special_attack: 0,
14506 special_defense: 0,
14507 speed: 0,
14508 accuracy: 0,
14509 },
14510 }),
14511 ..Default::default()
14512 },
14513 );
14514 moves.insert(
14515 Choices::SHIFTGEAR,
14516 Choice {
14517 move_id: Choices::SHIFTGEAR,
14518 target: MoveTarget::User,
14519 move_type: PokemonType::STEEL,
14520 flags: Flags {
14521 ..Default::default()
14522 },
14523 boost: Some(Boost {
14524 target: MoveTarget::User,
14525 boosts: StatBoosts {
14526 attack: 1,
14527 defense: 0,
14528 special_attack: 0,
14529 special_defense: 0,
14530 speed: 2,
14531 accuracy: 0,
14532 },
14533 }),
14534 ..Default::default()
14535 },
14536 );
14537 moves.insert(
14538 Choices::SHOCKWAVE,
14539 Choice {
14540 move_id: Choices::SHOCKWAVE,
14541 base_power: 60.0,
14542 category: MoveCategory::Special,
14543 move_type: PokemonType::ELECTRIC,
14544 flags: Flags {
14545 protect: true,
14546 ..Default::default()
14547 },
14548 ..Default::default()
14549 },
14550 );
14551 moves.insert(
14552 Choices::SHOREUP,
14553 Choice {
14554 move_id: Choices::SHOREUP,
14555 target: MoveTarget::User,
14556 move_type: PokemonType::GROUND,
14557 flags: Flags {
14558 heal: true,
14559 ..Default::default()
14560 },
14561 heal: Some(Heal {
14562 target: MoveTarget::User,
14563 amount: 0.5,
14564 }),
14565 ..Default::default()
14566 },
14567 );
14568 moves.insert(
14569 Choices::SIGNALBEAM,
14570 Choice {
14571 move_id: Choices::SIGNALBEAM,
14572 base_power: 75.0,
14573 category: MoveCategory::Special,
14574 move_type: PokemonType::BUG,
14575 flags: Flags {
14576 protect: true,
14577 ..Default::default()
14578 },
14579 secondaries: Some(vec![Secondary {
14580 chance: 10.0,
14581 target: MoveTarget::Opponent,
14582 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
14583 }]),
14584 ..Default::default()
14585 },
14586 );
14587 moves.insert(
14588 Choices::SILKTRAP,
14589 Choice {
14590 move_id: Choices::SILKTRAP,
14591 priority: 4,
14592 target: MoveTarget::User,
14593 move_type: PokemonType::BUG,
14594 flags: Flags {
14595 ..Default::default()
14596 },
14597 volatile_status: Some(VolatileStatus {
14598 target: MoveTarget::User,
14599 volatile_status: PokemonVolatileStatus::SILKTRAP,
14600 }),
14601 ..Default::default()
14602 },
14603 );
14604 moves.insert(
14605 Choices::SILVERWIND,
14606 Choice {
14607 move_id: Choices::SILVERWIND,
14608 base_power: 60.0,
14609 category: MoveCategory::Special,
14610 move_type: PokemonType::BUG,
14611 flags: Flags {
14612 protect: true,
14613 ..Default::default()
14614 },
14615 secondaries: Some(vec![Secondary {
14616 chance: 10.0,
14617 target: MoveTarget::User,
14618 effect: Effect::Boost(StatBoosts {
14619 attack: 1,
14620 defense: 1,
14621 special_attack: 1,
14622 special_defense: 1,
14623 speed: 1,
14624 accuracy: 0,
14625 }),
14626 }]),
14627 ..Default::default()
14628 },
14629 );
14630 moves.insert(
14631 Choices::SIMPLEBEAM,
14632 Choice {
14633 move_id: Choices::SIMPLEBEAM,
14634 move_type: PokemonType::NORMAL,
14635 flags: Flags {
14636 protect: true,
14637 reflectable: true,
14638 ..Default::default()
14639 },
14640 ..Default::default()
14641 },
14642 );
14643 moves.insert(
14644 Choices::SING,
14645 Choice {
14646 move_id: Choices::SING,
14647 accuracy: 55.0,
14648 status: Some(Status {
14649 target: MoveTarget::Opponent,
14650 status: PokemonStatus::SLEEP,
14651 }),
14652 move_type: PokemonType::NORMAL,
14653 flags: Flags {
14654 protect: true,
14655 reflectable: true,
14656 sound: true,
14657 ..Default::default()
14658 },
14659 ..Default::default()
14660 },
14661 );
14662 moves.insert(
14663 Choices::SIZZLYSLIDE,
14664 Choice {
14665 move_id: Choices::SIZZLYSLIDE,
14666 base_power: 60.0,
14667 category: MoveCategory::Physical,
14668 move_type: PokemonType::FIRE,
14669 flags: Flags {
14670 contact: true,
14671 protect: true,
14672 ..Default::default()
14673 },
14674 secondaries: Some(vec![Secondary {
14675 chance: 100.0,
14676 target: MoveTarget::Opponent,
14677 effect: Effect::Status(PokemonStatus::BURN),
14678 }]),
14679 ..Default::default()
14680 },
14681 );
14682 moves.insert(
14683 Choices::SKETCH,
14684 Choice {
14685 move_id: Choices::SKETCH,
14686 move_type: PokemonType::NORMAL,
14687 flags: Flags {
14688 ..Default::default()
14689 },
14690 ..Default::default()
14691 },
14692 );
14693 moves.insert(
14694 Choices::SKILLSWAP,
14695 Choice {
14696 move_id: Choices::SKILLSWAP,
14697 move_type: PokemonType::PSYCHIC,
14698 flags: Flags {
14699 protect: true,
14700 ..Default::default()
14701 },
14702 ..Default::default()
14703 },
14704 );
14705 moves.insert(
14706 Choices::SKITTERSMACK,
14707 Choice {
14708 move_id: Choices::SKITTERSMACK,
14709 accuracy: 90.0,
14710 base_power: 70.0,
14711 category: MoveCategory::Physical,
14712 move_type: PokemonType::BUG,
14713 flags: Flags {
14714 contact: true,
14715 protect: true,
14716 ..Default::default()
14717 },
14718 secondaries: Some(vec![Secondary {
14719 chance: 100.0,
14720 target: MoveTarget::Opponent,
14721 effect: Effect::Boost(StatBoosts {
14722 attack: 0,
14723 defense: 0,
14724 special_attack: -1,
14725 special_defense: 0,
14726 speed: 0,
14727 accuracy: 0,
14728 }),
14729 }]),
14730 ..Default::default()
14731 },
14732 );
14733 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
14734 moves.insert(
14735 Choices::SKULLBASH,
14736 Choice {
14737 move_id: Choices::SKULLBASH,
14738 base_power: 100.0,
14739 category: MoveCategory::Physical,
14740 move_type: PokemonType::NORMAL,
14741 flags: Flags {
14742 charge: true,
14743 contact: true,
14744 protect: true,
14745 ..Default::default()
14746 },
14747 ..Default::default()
14748 },
14749 );
14750 } else {
14751 moves.insert(
14752 Choices::SKULLBASH,
14753 Choice {
14754 move_id: Choices::SKULLBASH,
14755 base_power: 130.0,
14756 category: MoveCategory::Physical,
14757 move_type: PokemonType::NORMAL,
14758 flags: Flags {
14759 charge: true,
14760 contact: true,
14761 protect: true,
14762 ..Default::default()
14763 },
14764 ..Default::default()
14765 },
14766 );
14767 }
14768 moves.insert(
14769 Choices::SKYATTACK,
14770 Choice {
14771 move_id: Choices::SKYATTACK,
14772 accuracy: 90.0,
14773 base_power: 140.0,
14774 category: MoveCategory::Physical,
14775 move_type: PokemonType::FLYING,
14776 flags: Flags {
14777 charge: true,
14778 protect: true,
14779 ..Default::default()
14780 },
14781 secondaries: Some(vec![Secondary {
14782 chance: 30.0,
14783 target: MoveTarget::Opponent,
14784 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
14785 }]),
14786 ..Default::default()
14787 },
14788 );
14789 moves.insert(
14790 Choices::SKYDROP,
14791 Choice {
14792 move_id: Choices::SKYDROP,
14793 base_power: 60.0,
14794 category: MoveCategory::Physical,
14795 move_type: PokemonType::FLYING,
14796 flags: Flags {
14797 charge: true,
14798 contact: true,
14799 protect: true,
14800 ..Default::default()
14801 },
14802 ..Default::default()
14803 },
14804 );
14805 moves.insert(
14806 Choices::SKYUPPERCUT,
14807 Choice {
14808 move_id: Choices::SKYUPPERCUT,
14809 accuracy: 90.0,
14810 base_power: 85.0,
14811 category: MoveCategory::Physical,
14812 move_type: PokemonType::FIGHTING,
14813 flags: Flags {
14814 contact: true,
14815 protect: true,
14816 punch: true,
14817 ..Default::default()
14818 },
14819 ..Default::default()
14820 },
14821 );
14822 moves.insert(
14823 Choices::SLACKOFF,
14824 Choice {
14825 move_id: Choices::SLACKOFF,
14826 target: MoveTarget::User,
14827 move_type: PokemonType::NORMAL,
14828 flags: Flags {
14829 heal: true,
14830 ..Default::default()
14831 },
14832 heal: Some(Heal {
14833 target: MoveTarget::User,
14834 amount: 0.5,
14835 }),
14836 ..Default::default()
14837 },
14838 );
14839 moves.insert(
14840 Choices::SLAM,
14841 Choice {
14842 move_id: Choices::SLAM,
14843 accuracy: 75.0,
14844 base_power: 80.0,
14845 category: MoveCategory::Physical,
14846 move_type: PokemonType::NORMAL,
14847 flags: Flags {
14848 contact: true,
14849 protect: true,
14850 ..Default::default()
14851 },
14852 ..Default::default()
14853 },
14854 );
14855 moves.insert(
14856 Choices::SLASH,
14857 Choice {
14858 move_id: Choices::SLASH,
14859 base_power: 70.0,
14860 category: MoveCategory::Physical,
14861 move_type: PokemonType::NORMAL,
14862 flags: Flags {
14863 contact: true,
14864 protect: true,
14865 slicing: true,
14866 ..Default::default()
14867 },
14868 ..Default::default()
14869 },
14870 );
14871 moves.insert(
14872 Choices::SLEEPPOWDER,
14873 Choice {
14874 move_id: Choices::SLEEPPOWDER,
14875 accuracy: 75.0,
14876 status: Some(Status {
14877 target: MoveTarget::Opponent,
14878 status: PokemonStatus::SLEEP,
14879 }),
14880 move_type: PokemonType::GRASS,
14881 flags: Flags {
14882 powder: true,
14883 protect: true,
14884 reflectable: true,
14885 ..Default::default()
14886 },
14887 ..Default::default()
14888 },
14889 );
14890 moves.insert(
14891 Choices::SLEEPTALK,
14892 Choice {
14893 move_id: Choices::SLEEPTALK,
14894 target: MoveTarget::User,
14895 move_type: PokemonType::NORMAL,
14896 flags: Flags {
14897 ..Default::default()
14898 },
14899 ..Default::default()
14900 },
14901 );
14902 if cfg!(feature = "gen1") {
14903 moves.insert(
14904 Choices::SLUDGE,
14905 Choice {
14906 move_id: Choices::SLUDGE,
14907 base_power: 65.0,
14908 category: MoveCategory::Special,
14909 move_type: PokemonType::POISON,
14910 flags: Flags {
14911 protect: true,
14912 ..Default::default()
14913 },
14914 secondaries: Some(vec![Secondary {
14915 chance: 40.0,
14916 target: MoveTarget::Opponent,
14917 effect: Effect::Status(PokemonStatus::POISON),
14918 }]),
14919 ..Default::default()
14920 },
14921 );
14922 } else {
14923 moves.insert(
14924 Choices::SLUDGE,
14925 Choice {
14926 move_id: Choices::SLUDGE,
14927 base_power: 65.0,
14928 category: MoveCategory::Special,
14929 move_type: PokemonType::POISON,
14930 flags: Flags {
14931 protect: true,
14932 ..Default::default()
14933 },
14934 secondaries: Some(vec![Secondary {
14935 chance: 30.0,
14936 target: MoveTarget::Opponent,
14937 effect: Effect::Status(PokemonStatus::POISON),
14938 }]),
14939 ..Default::default()
14940 },
14941 );
14942 }
14943 moves.insert(
14944 Choices::SLUDGEBOMB,
14945 Choice {
14946 move_id: Choices::SLUDGEBOMB,
14947 base_power: 90.0,
14948 category: MoveCategory::Special,
14949 move_type: PokemonType::POISON,
14950 flags: Flags {
14951 bullet: true,
14952 protect: true,
14953 ..Default::default()
14954 },
14955 secondaries: Some(vec![Secondary {
14956 chance: 30.0,
14957 target: MoveTarget::Opponent,
14958 effect: Effect::Status(PokemonStatus::POISON),
14959 }]),
14960 ..Default::default()
14961 },
14962 );
14963 moves.insert(
14964 Choices::SLUDGEWAVE,
14965 Choice {
14966 move_id: Choices::SLUDGEWAVE,
14967 base_power: 95.0,
14968 category: MoveCategory::Special,
14969 move_type: PokemonType::POISON,
14970 flags: Flags {
14971 protect: true,
14972 ..Default::default()
14973 },
14974 secondaries: Some(vec![Secondary {
14975 chance: 10.0,
14976 target: MoveTarget::Opponent,
14977 effect: Effect::Status(PokemonStatus::POISON),
14978 }]),
14979 ..Default::default()
14980 },
14981 );
14982 moves.insert(
14983 Choices::SMACKDOWN,
14984 Choice {
14985 move_id: Choices::SMACKDOWN,
14986 base_power: 50.0,
14987 category: MoveCategory::Physical,
14988 move_type: PokemonType::ROCK,
14989 flags: Flags {
14990 protect: true,
14991 ..Default::default()
14992 },
14993 volatile_status: Some(VolatileStatus {
14994 target: MoveTarget::Opponent,
14995 volatile_status: PokemonVolatileStatus::SMACKDOWN,
14996 }),
14997 ..Default::default()
14998 },
14999 );
15000 moves.insert(
15001 Choices::SMARTSTRIKE,
15002 Choice {
15003 move_id: Choices::SMARTSTRIKE,
15004 base_power: 70.0,
15005 category: MoveCategory::Physical,
15006 move_type: PokemonType::STEEL,
15007 flags: Flags {
15008 contact: true,
15009 protect: true,
15010 ..Default::default()
15011 },
15012 ..Default::default()
15013 },
15014 );
15015 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15016 moves.insert(
15017 Choices::SMELLINGSALTS,
15018 Choice {
15019 move_id: Choices::SMELLINGSALTS,
15020 base_power: 60.0,
15021 category: MoveCategory::Physical,
15022 move_type: PokemonType::NORMAL,
15023 flags: Flags {
15024 contact: true,
15025 protect: true,
15026 ..Default::default()
15027 },
15028 ..Default::default()
15029 },
15030 );
15031 } else {
15032 moves.insert(
15033 Choices::SMELLINGSALTS,
15034 Choice {
15035 move_id: Choices::SMELLINGSALTS,
15036 base_power: 70.0,
15037 category: MoveCategory::Physical,
15038 move_type: PokemonType::NORMAL,
15039 flags: Flags {
15040 contact: true,
15041 protect: true,
15042 ..Default::default()
15043 },
15044 ..Default::default()
15045 },
15046 );
15047 }
15048 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15049 moves.insert(
15050 Choices::SMOG,
15051 Choice {
15052 move_id: Choices::SMOG,
15053 accuracy: 70.0,
15054 base_power: 20.0,
15055 category: MoveCategory::Special,
15056 move_type: PokemonType::POISON,
15057 flags: Flags {
15058 protect: true,
15059 ..Default::default()
15060 },
15061 secondaries: Some(vec![Secondary {
15062 chance: 40.0,
15063 target: MoveTarget::Opponent,
15064 effect: Effect::Status(PokemonStatus::POISON),
15065 }]),
15066 ..Default::default()
15067 },
15068 );
15069 } else {
15070 moves.insert(
15071 Choices::SMOG,
15072 Choice {
15073 move_id: Choices::SMOG,
15074 accuracy: 70.0,
15075 base_power: 30.0,
15076 category: MoveCategory::Special,
15077 move_type: PokemonType::POISON,
15078 flags: Flags {
15079 protect: true,
15080 ..Default::default()
15081 },
15082 secondaries: Some(vec![Secondary {
15083 chance: 40.0,
15084 target: MoveTarget::Opponent,
15085 effect: Effect::Status(PokemonStatus::POISON),
15086 }]),
15087 ..Default::default()
15088 },
15089 );
15090 }
15091 moves.insert(
15092 Choices::SMOKESCREEN,
15093 Choice {
15094 move_id: Choices::SMOKESCREEN,
15095 move_type: PokemonType::NORMAL,
15096 flags: Flags {
15097 protect: true,
15098 reflectable: true,
15099 ..Default::default()
15100 },
15101 boost: Some(Boost {
15102 target: MoveTarget::Opponent,
15103 boosts: StatBoosts {
15104 attack: 0,
15105 defense: 0,
15106 special_attack: 0,
15107 special_defense: 0,
15108 speed: 0,
15109 accuracy: -1,
15110 },
15111 }),
15112 ..Default::default()
15113 },
15114 );
15115 moves.insert(
15116 Choices::SNAPTRAP,
15117 Choice {
15118 move_id: Choices::SNAPTRAP,
15119 base_power: 35.0,
15120 category: MoveCategory::Physical,
15121 move_type: PokemonType::GRASS,
15122 flags: Flags {
15123 contact: true,
15124 protect: true,
15125 ..Default::default()
15126 },
15127 volatile_status: Some(VolatileStatus {
15128 target: MoveTarget::Opponent,
15129 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
15130 }),
15131 ..Default::default()
15132 },
15133 );
15134 moves.insert(
15135 Choices::SNARL,
15136 Choice {
15137 move_id: Choices::SNARL,
15138 accuracy: 95.0,
15139 base_power: 55.0,
15140 category: MoveCategory::Special,
15141 move_type: PokemonType::DARK,
15142 flags: Flags {
15143 protect: true,
15144 sound: true,
15145 ..Default::default()
15146 },
15147 secondaries: Some(vec![Secondary {
15148 chance: 100.0,
15149 target: MoveTarget::Opponent,
15150 effect: Effect::Boost(StatBoosts {
15151 attack: 0,
15152 defense: 0,
15153 special_attack: -1,
15154 special_defense: 0,
15155 speed: 0,
15156 accuracy: 0,
15157 }),
15158 }]),
15159 ..Default::default()
15160 },
15161 );
15162 moves.insert(
15163 Choices::SNATCH,
15164 Choice {
15165 move_id: Choices::SNATCH,
15166 priority: 4,
15167 target: MoveTarget::User,
15168 move_type: PokemonType::DARK,
15169 flags: Flags {
15170 ..Default::default()
15171 },
15172 volatile_status: Some(VolatileStatus {
15173 target: MoveTarget::User,
15174 volatile_status: PokemonVolatileStatus::SNATCH,
15175 }),
15176 ..Default::default()
15177 },
15178 );
15179 moves.insert(
15180 Choices::SNIPESHOT,
15181 Choice {
15182 move_id: Choices::SNIPESHOT,
15183 base_power: 80.0,
15184 category: MoveCategory::Special,
15185 move_type: PokemonType::WATER,
15186 flags: Flags {
15187 protect: true,
15188 ..Default::default()
15189 },
15190 ..Default::default()
15191 },
15192 );
15193 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15194 moves.insert(
15195 Choices::SNORE,
15196 Choice {
15197 move_id: Choices::SNORE,
15198 base_power: 40.0,
15199 category: MoveCategory::Special,
15200 move_type: PokemonType::NORMAL,
15201 flags: Flags {
15202 protect: true,
15203 sound: true,
15204 ..Default::default()
15205 },
15206 secondaries: Some(vec![Secondary {
15207 chance: 30.0,
15208 target: MoveTarget::Opponent,
15209 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15210 }]),
15211 ..Default::default()
15212 },
15213 );
15214 } else {
15215 moves.insert(
15216 Choices::SNORE,
15217 Choice {
15218 move_id: Choices::SNORE,
15219 base_power: 50.0,
15220 category: MoveCategory::Special,
15221 move_type: PokemonType::NORMAL,
15222 flags: Flags {
15223 protect: true,
15224 sound: true,
15225 ..Default::default()
15226 },
15227 secondaries: Some(vec![Secondary {
15228 chance: 30.0,
15229 target: MoveTarget::Opponent,
15230 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15231 }]),
15232 ..Default::default()
15233 },
15234 );
15235 }
15236 moves.insert(
15237 Choices::SNOWSCAPE,
15238 Choice {
15239 move_id: Choices::SNOWSCAPE,
15240 move_type: PokemonType::ICE,
15241 flags: Flags {
15242 ..Default::default()
15243 },
15244 ..Default::default()
15245 },
15246 );
15247 moves.insert(
15248 Choices::SOAK,
15249 Choice {
15250 move_id: Choices::SOAK,
15251 move_type: PokemonType::WATER,
15252 flags: Flags {
15253 protect: true,
15254 reflectable: true,
15255 ..Default::default()
15256 },
15257 ..Default::default()
15258 },
15259 );
15260 moves.insert(
15261 Choices::SOFTBOILED,
15262 Choice {
15263 move_id: Choices::SOFTBOILED,
15264 target: MoveTarget::User,
15265 move_type: PokemonType::NORMAL,
15266 flags: Flags {
15267 heal: true,
15268 ..Default::default()
15269 },
15270 heal: Some(Heal {
15271 target: MoveTarget::User,
15272 amount: 0.5,
15273 }),
15274 ..Default::default()
15275 },
15276 );
15277 moves.insert(
15278 Choices::SOLARBEAM,
15279 Choice {
15280 move_id: Choices::SOLARBEAM,
15281 base_power: 120.0,
15282 category: MoveCategory::Special,
15283 move_type: PokemonType::GRASS,
15284 flags: Flags {
15285 charge: true,
15286 protect: true,
15287 ..Default::default()
15288 },
15289 ..Default::default()
15290 },
15291 );
15292 moves.insert(
15293 Choices::SOLARBLADE,
15294 Choice {
15295 move_id: Choices::SOLARBLADE,
15296 base_power: 125.0,
15297 category: MoveCategory::Physical,
15298 move_type: PokemonType::GRASS,
15299 flags: Flags {
15300 charge: true,
15301 contact: true,
15302 protect: true,
15303 slicing: true,
15304 ..Default::default()
15305 },
15306 ..Default::default()
15307 },
15308 );
15309 moves.insert(
15310 Choices::SONICBOOM,
15311 Choice {
15312 move_id: Choices::SONICBOOM,
15313 accuracy: 90.0,
15314 category: MoveCategory::Special,
15315 move_type: PokemonType::NORMAL,
15316 flags: Flags {
15317 protect: true,
15318 ..Default::default()
15319 },
15320 ..Default::default()
15321 },
15322 );
15323 moves.insert(
15324 Choices::SPACIALREND,
15325 Choice {
15326 move_id: Choices::SPACIALREND,
15327 accuracy: 95.0,
15328 base_power: 100.0,
15329 category: MoveCategory::Special,
15330 move_type: PokemonType::DRAGON,
15331 flags: Flags {
15332 protect: true,
15333 ..Default::default()
15334 },
15335 ..Default::default()
15336 },
15337 );
15338 moves.insert(
15339 Choices::SPARK,
15340 Choice {
15341 move_id: Choices::SPARK,
15342 base_power: 65.0,
15343 category: MoveCategory::Physical,
15344 move_type: PokemonType::ELECTRIC,
15345 flags: Flags {
15346 contact: true,
15347 protect: true,
15348 ..Default::default()
15349 },
15350 secondaries: Some(vec![Secondary {
15351 chance: 30.0,
15352 target: MoveTarget::Opponent,
15353 effect: Effect::Status(PokemonStatus::PARALYZE),
15354 }]),
15355 ..Default::default()
15356 },
15357 );
15358 moves.insert(
15359 Choices::SPARKLINGARIA,
15360 Choice {
15361 move_id: Choices::SPARKLINGARIA,
15362 base_power: 90.0,
15363 category: MoveCategory::Special,
15364 move_type: PokemonType::WATER,
15365 flags: Flags {
15366 protect: true,
15367 sound: true,
15368 ..Default::default()
15369 },
15370 secondaries: Some(vec![Secondary {
15371 chance: 100.0,
15372 target: MoveTarget::Opponent,
15373 effect: Effect::VolatileStatus(PokemonVolatileStatus::SPARKLINGARIA),
15374 }]),
15375 ..Default::default()
15376 },
15377 );
15378 moves.insert(
15379 Choices::SPARKLYSWIRL,
15380 Choice {
15381 move_id: Choices::SPARKLYSWIRL,
15382 accuracy: 85.0,
15383 base_power: 120.0,
15384 category: MoveCategory::Special,
15385 move_type: PokemonType::FAIRY,
15386 flags: Flags {
15387 protect: true,
15388 ..Default::default()
15389 },
15390 ..Default::default()
15391 },
15392 );
15393 moves.insert(
15394 Choices::SPECTRALTHIEF,
15395 Choice {
15396 move_id: Choices::SPECTRALTHIEF,
15397 base_power: 90.0,
15398 category: MoveCategory::Physical,
15399 move_type: PokemonType::GHOST,
15400 flags: Flags {
15401 contact: true,
15402 protect: true,
15403 ..Default::default()
15404 },
15405 ..Default::default()
15406 },
15407 );
15408 moves.insert(
15409 Choices::SPEEDSWAP,
15410 Choice {
15411 move_id: Choices::SPEEDSWAP,
15412 move_type: PokemonType::PSYCHIC,
15413 flags: Flags {
15414 protect: true,
15415 ..Default::default()
15416 },
15417 ..Default::default()
15418 },
15419 );
15420 moves.insert(
15421 Choices::SPICYEXTRACT,
15422 Choice {
15423 move_id: Choices::SPICYEXTRACT,
15424 move_type: PokemonType::GRASS,
15425 flags: Flags {
15426 protect: true,
15427 reflectable: true,
15428 ..Default::default()
15429 },
15430 boost: Some(Boost {
15431 target: MoveTarget::Opponent,
15432 boosts: StatBoosts {
15433 attack: 2,
15434 defense: -2,
15435 special_attack: 0,
15436 special_defense: 0,
15437 speed: 0,
15438 accuracy: 0,
15439 },
15440 }),
15441 ..Default::default()
15442 },
15443 );
15444 moves.insert(
15445 Choices::SPIDERWEB,
15446 Choice {
15447 move_id: Choices::SPIDERWEB,
15448 move_type: PokemonType::BUG,
15449 flags: Flags {
15450 protect: true,
15451 reflectable: true,
15452 ..Default::default()
15453 },
15454 ..Default::default()
15455 },
15456 );
15457 moves.insert(
15458 Choices::SPIKECANNON,
15459 Choice {
15460 move_id: Choices::SPIKECANNON,
15461 base_power: 20.0,
15462 category: MoveCategory::Physical,
15463 move_type: PokemonType::NORMAL,
15464 flags: Flags {
15465 protect: true,
15466 ..Default::default()
15467 },
15468 ..Default::default()
15469 },
15470 );
15471 moves.insert(
15472 Choices::SPIKES,
15473 Choice {
15474 move_id: Choices::SPIKES,
15475 move_type: PokemonType::GROUND,
15476 flags: Flags {
15477 reflectable: true,
15478 ..Default::default()
15479 },
15480 side_condition: Some(SideCondition {
15481 target: MoveTarget::Opponent,
15482 condition: PokemonSideCondition::Spikes,
15483 }),
15484 ..Default::default()
15485 },
15486 );
15487 moves.insert(
15488 Choices::SPIKYSHIELD,
15489 Choice {
15490 move_id: Choices::SPIKYSHIELD,
15491 priority: 4,
15492 target: MoveTarget::User,
15493 move_type: PokemonType::GRASS,
15494 flags: Flags {
15495 ..Default::default()
15496 },
15497 volatile_status: Some(VolatileStatus {
15498 target: MoveTarget::User,
15499 volatile_status: PokemonVolatileStatus::SPIKYSHIELD,
15500 }),
15501 ..Default::default()
15502 },
15503 );
15504 moves.insert(
15505 Choices::SPINOUT,
15506 Choice {
15507 move_id: Choices::SPINOUT,
15508 base_power: 100.0,
15509 category: MoveCategory::Physical,
15510 move_type: PokemonType::STEEL,
15511 flags: Flags {
15512 contact: true,
15513 protect: true,
15514 ..Default::default()
15515 },
15516 boost: Some(Boost {
15517 target: MoveTarget::User,
15518 boosts: StatBoosts {
15519 attack: 0,
15520 defense: 0,
15521 special_attack: 0,
15522 special_defense: 0,
15523 speed: -2,
15524 accuracy: 0,
15525 },
15526 }),
15527 ..Default::default()
15528 },
15529 );
15530 moves.insert(
15531 Choices::SPIRITBREAK,
15532 Choice {
15533 move_id: Choices::SPIRITBREAK,
15534 base_power: 75.0,
15535 category: MoveCategory::Physical,
15536 move_type: PokemonType::FAIRY,
15537 flags: Flags {
15538 contact: true,
15539 protect: true,
15540 ..Default::default()
15541 },
15542 secondaries: Some(vec![Secondary {
15543 chance: 100.0,
15544 target: MoveTarget::Opponent,
15545 effect: Effect::Boost(StatBoosts {
15546 attack: 0,
15547 defense: 0,
15548 special_attack: -1,
15549 special_defense: 0,
15550 speed: 0,
15551 accuracy: 0,
15552 }),
15553 }]),
15554 ..Default::default()
15555 },
15556 );
15557 moves.insert(
15558 Choices::SPIRITSHACKLE,
15559 Choice {
15560 move_id: Choices::SPIRITSHACKLE,
15561 base_power: 80.0,
15562 category: MoveCategory::Physical,
15563 move_type: PokemonType::GHOST,
15564 flags: Flags {
15565 protect: true,
15566 ..Default::default()
15567 },
15568 ..Default::default()
15569 },
15570 );
15571 moves.insert(
15572 Choices::SPITE,
15573 Choice {
15574 move_id: Choices::SPITE,
15575 move_type: PokemonType::GHOST,
15576 flags: Flags {
15577 protect: true,
15578 reflectable: true,
15579 ..Default::default()
15580 },
15581 ..Default::default()
15582 },
15583 );
15584 moves.insert(
15585 Choices::SPITUP,
15586 Choice {
15587 move_id: Choices::SPITUP,
15588 category: MoveCategory::Special,
15589 move_type: PokemonType::NORMAL,
15590 flags: Flags {
15591 protect: true,
15592 ..Default::default()
15593 },
15594 ..Default::default()
15595 },
15596 );
15597 moves.insert(
15598 Choices::SPLASH,
15599 Choice {
15600 move_id: Choices::SPLASH,
15601 target: MoveTarget::User,
15602 move_type: PokemonType::NORMAL,
15603 flags: Flags {
15604 ..Default::default()
15605 },
15606 ..Default::default()
15607 },
15608 );
15609 moves.insert(
15610 Choices::SPLISHYSPLASH,
15611 Choice {
15612 move_id: Choices::SPLISHYSPLASH,
15613 base_power: 90.0,
15614 category: MoveCategory::Special,
15615 move_type: PokemonType::WATER,
15616 flags: Flags {
15617 protect: true,
15618 ..Default::default()
15619 },
15620 secondaries: Some(vec![Secondary {
15621 chance: 30.0,
15622 target: MoveTarget::Opponent,
15623 effect: Effect::Status(PokemonStatus::PARALYZE),
15624 }]),
15625 ..Default::default()
15626 },
15627 );
15628 moves.insert(
15629 Choices::SPORE,
15630 Choice {
15631 move_id: Choices::SPORE,
15632 status: Some(Status {
15633 target: MoveTarget::Opponent,
15634 status: PokemonStatus::SLEEP,
15635 }),
15636 move_type: PokemonType::GRASS,
15637 flags: Flags {
15638 powder: true,
15639 protect: true,
15640 reflectable: true,
15641 ..Default::default()
15642 },
15643 ..Default::default()
15644 },
15645 );
15646 moves.insert(
15647 Choices::SPOTLIGHT,
15648 Choice {
15649 move_id: Choices::SPOTLIGHT,
15650 priority: 3,
15651 move_type: PokemonType::NORMAL,
15652 flags: Flags {
15653 protect: true,
15654 reflectable: true,
15655 ..Default::default()
15656 },
15657 volatile_status: Some(VolatileStatus {
15658 target: MoveTarget::Opponent,
15659 volatile_status: PokemonVolatileStatus::SPOTLIGHT,
15660 }),
15661 ..Default::default()
15662 },
15663 );
15664 moves.insert(
15665 Choices::SPRINGTIDESTORM,
15666 Choice {
15667 move_id: Choices::SPRINGTIDESTORM,
15668 accuracy: 80.0,
15669 base_power: 100.0,
15670 category: MoveCategory::Special,
15671 move_type: PokemonType::FAIRY,
15672 flags: Flags {
15673 protect: true,
15674 wind: true,
15675 ..Default::default()
15676 },
15677 secondaries: Some(vec![Secondary {
15678 chance: 30.0,
15679 target: MoveTarget::Opponent,
15680 effect: Effect::Boost(StatBoosts {
15681 attack: -1,
15682 defense: 0,
15683 special_attack: 0,
15684 special_defense: 0,
15685 speed: 0,
15686 accuracy: 0,
15687 }),
15688 }]),
15689 ..Default::default()
15690 },
15691 );
15692 moves.insert(
15693 Choices::STEALTHROCK,
15694 Choice {
15695 move_id: Choices::STEALTHROCK,
15696 move_type: PokemonType::ROCK,
15697 flags: Flags {
15698 reflectable: true,
15699 ..Default::default()
15700 },
15701 side_condition: Some(SideCondition {
15702 target: MoveTarget::Opponent,
15703 condition: PokemonSideCondition::Stealthrock,
15704 }),
15705 ..Default::default()
15706 },
15707 );
15708 moves.insert(
15709 Choices::STEAMERUPTION,
15710 Choice {
15711 move_id: Choices::STEAMERUPTION,
15712 accuracy: 95.0,
15713 base_power: 110.0,
15714 category: MoveCategory::Special,
15715 move_type: PokemonType::WATER,
15716 flags: Flags {
15717 protect: true,
15718 ..Default::default()
15719 },
15720 secondaries: Some(vec![Secondary {
15721 chance: 30.0,
15722 target: MoveTarget::Opponent,
15723 effect: Effect::Status(PokemonStatus::BURN),
15724 }]),
15725 ..Default::default()
15726 },
15727 );
15728 moves.insert(
15729 Choices::STEAMROLLER,
15730 Choice {
15731 move_id: Choices::STEAMROLLER,
15732 base_power: 65.0,
15733 category: MoveCategory::Physical,
15734 move_type: PokemonType::BUG,
15735 flags: Flags {
15736 contact: true,
15737 protect: true,
15738 ..Default::default()
15739 },
15740 secondaries: Some(vec![Secondary {
15741 chance: 30.0,
15742 target: MoveTarget::Opponent,
15743 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15744 }]),
15745 ..Default::default()
15746 },
15747 );
15748 moves.insert(
15749 Choices::STEELBEAM,
15750 Choice {
15751 move_id: Choices::STEELBEAM,
15752 accuracy: 95.0,
15753 base_power: 140.0,
15754 category: MoveCategory::Special,
15755 move_type: PokemonType::STEEL,
15756 flags: Flags {
15757 protect: true,
15758 ..Default::default()
15759 },
15760 heal: Some(Heal {
15761 target: MoveTarget::User,
15762 amount: -0.5,
15763 }),
15764 ..Default::default()
15765 },
15766 );
15767 moves.insert(
15768 Choices::STEELROLLER,
15769 Choice {
15770 move_id: Choices::STEELROLLER,
15771 base_power: 130.0,
15772 category: MoveCategory::Physical,
15773 move_type: PokemonType::STEEL,
15774 flags: Flags {
15775 contact: true,
15776 protect: true,
15777 ..Default::default()
15778 },
15779 ..Default::default()
15780 },
15781 );
15782 moves.insert(
15783 Choices::STEELWING,
15784 Choice {
15785 move_id: Choices::STEELWING,
15786 accuracy: 90.0,
15787 base_power: 70.0,
15788 category: MoveCategory::Physical,
15789 move_type: PokemonType::STEEL,
15790 flags: Flags {
15791 contact: true,
15792 protect: true,
15793 ..Default::default()
15794 },
15795 secondaries: Some(vec![Secondary {
15796 chance: 10.0,
15797 target: MoveTarget::User,
15798 effect: Effect::Boost(StatBoosts {
15799 attack: 0,
15800 defense: 1,
15801 special_attack: 0,
15802 special_defense: 0,
15803 speed: 0,
15804 accuracy: 0,
15805 }),
15806 }]),
15807 ..Default::default()
15808 },
15809 );
15810 moves.insert(
15811 Choices::STICKYWEB,
15812 Choice {
15813 move_id: Choices::STICKYWEB,
15814 move_type: PokemonType::BUG,
15815 flags: Flags {
15816 reflectable: true,
15817 ..Default::default()
15818 },
15819 side_condition: Some(SideCondition {
15820 target: MoveTarget::Opponent,
15821 condition: PokemonSideCondition::StickyWeb,
15822 }),
15823 ..Default::default()
15824 },
15825 );
15826 moves.insert(
15827 Choices::STOCKPILE,
15828 Choice {
15829 move_id: Choices::STOCKPILE,
15830 target: MoveTarget::User,
15831 move_type: PokemonType::NORMAL,
15832 flags: Flags {
15833 ..Default::default()
15834 },
15835 volatile_status: Some(VolatileStatus {
15836 target: MoveTarget::User,
15837 volatile_status: PokemonVolatileStatus::STOCKPILE,
15838 }),
15839 ..Default::default()
15840 },
15841 );
15842 moves.insert(
15843 Choices::STOMP,
15844 Choice {
15845 move_id: Choices::STOMP,
15846 base_power: 65.0,
15847 category: MoveCategory::Physical,
15848 move_type: PokemonType::NORMAL,
15849 flags: Flags {
15850 contact: true,
15851 protect: true,
15852 ..Default::default()
15853 },
15854 secondaries: Some(vec![Secondary {
15855 chance: 30.0,
15856 target: MoveTarget::Opponent,
15857 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15858 }]),
15859 ..Default::default()
15860 },
15861 );
15862 moves.insert(
15863 Choices::STOMPINGTANTRUM,
15864 Choice {
15865 move_id: Choices::STOMPINGTANTRUM,
15866 base_power: 75.0,
15867 category: MoveCategory::Physical,
15868 move_type: PokemonType::GROUND,
15869 flags: Flags {
15870 contact: true,
15871 protect: true,
15872 ..Default::default()
15873 },
15874 ..Default::default()
15875 },
15876 );
15877 moves.insert(
15878 Choices::STONEAXE,
15879 Choice {
15880 move_id: Choices::STONEAXE,
15881 accuracy: 90.0,
15882 base_power: 65.0,
15883 category: MoveCategory::Physical,
15884 move_type: PokemonType::ROCK,
15885 flags: Flags {
15886 contact: true,
15887 protect: true,
15888 slicing: true,
15889 ..Default::default()
15890 },
15891 side_condition: Some(SideCondition {
15892 target: MoveTarget::Opponent,
15893 condition: PokemonSideCondition::Stealthrock,
15894 }),
15895 ..Default::default()
15896 },
15897 );
15898 moves.insert(
15899 Choices::STONEEDGE,
15900 Choice {
15901 move_id: Choices::STONEEDGE,
15902 accuracy: 80.0,
15903 base_power: 100.0,
15904 category: MoveCategory::Physical,
15905 move_type: PokemonType::ROCK,
15906 flags: Flags {
15907 protect: true,
15908 ..Default::default()
15909 },
15910 ..Default::default()
15911 },
15912 );
15913 moves.insert(
15914 Choices::STOREDPOWER,
15915 Choice {
15916 move_id: Choices::STOREDPOWER,
15917 base_power: 20.0,
15918 category: MoveCategory::Special,
15919 move_type: PokemonType::PSYCHIC,
15920 flags: Flags {
15921 protect: true,
15922 ..Default::default()
15923 },
15924 ..Default::default()
15925 },
15926 );
15927 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15928 moves.insert(
15929 Choices::STORMTHROW,
15930 Choice {
15931 move_id: Choices::STORMTHROW,
15932 base_power: 40.0,
15933 category: MoveCategory::Physical,
15934 move_type: PokemonType::FIGHTING,
15935 flags: Flags {
15936 contact: true,
15937 protect: true,
15938 ..Default::default()
15939 },
15940 ..Default::default()
15941 },
15942 );
15943 } else {
15944 moves.insert(
15945 Choices::STORMTHROW,
15946 Choice {
15947 move_id: Choices::STORMTHROW,
15948 base_power: 60.0,
15949 category: MoveCategory::Physical,
15950 move_type: PokemonType::FIGHTING,
15951 flags: Flags {
15952 contact: true,
15953 protect: true,
15954 ..Default::default()
15955 },
15956 ..Default::default()
15957 },
15958 );
15959 }
15960 moves.insert(
15961 Choices::STRANGESTEAM,
15962 Choice {
15963 move_id: Choices::STRANGESTEAM,
15964 accuracy: 95.0,
15965 base_power: 90.0,
15966 category: MoveCategory::Special,
15967 move_type: PokemonType::FAIRY,
15968 flags: Flags {
15969 protect: true,
15970 ..Default::default()
15971 },
15972 secondaries: Some(vec![Secondary {
15973 chance: 20.0,
15974 target: MoveTarget::Opponent,
15975 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
15976 }]),
15977 ..Default::default()
15978 },
15979 );
15980 moves.insert(
15981 Choices::STRENGTH,
15982 Choice {
15983 move_id: Choices::STRENGTH,
15984 base_power: 80.0,
15985 category: MoveCategory::Physical,
15986 move_type: PokemonType::NORMAL,
15987 flags: Flags {
15988 contact: true,
15989 protect: true,
15990 ..Default::default()
15991 },
15992 ..Default::default()
15993 },
15994 );
15995 moves.insert(
15996 Choices::STRENGTHSAP,
15997 Choice {
15998 move_id: Choices::STRENGTHSAP,
15999 move_type: PokemonType::GRASS,
16000 flags: Flags {
16001 heal: true,
16002 protect: true,
16003 reflectable: true,
16004 ..Default::default()
16005 },
16006 ..Default::default()
16007 },
16008 );
16009 moves.insert(
16010 Choices::STRINGSHOT,
16011 Choice {
16012 move_id: Choices::STRINGSHOT,
16013 accuracy: 95.0,
16014 move_type: PokemonType::BUG,
16015 flags: Flags {
16016 protect: true,
16017 reflectable: true,
16018 ..Default::default()
16019 },
16020 boost: Some(Boost {
16021 target: MoveTarget::Opponent,
16022 boosts: StatBoosts {
16023 attack: 0,
16024 defense: 0,
16025 special_attack: 0,
16026 special_defense: 0,
16027 speed: -2,
16028 accuracy: 0,
16029 },
16030 }),
16031 ..Default::default()
16032 },
16033 );
16034 moves.insert(
16035 Choices::STRUGGLE,
16036 Choice {
16037 move_id: Choices::STRUGGLE,
16038 base_power: 50.0,
16039 category: MoveCategory::Physical,
16040 move_type: PokemonType::NORMAL,
16041 flags: Flags {
16042 contact: true,
16043 protect: true,
16044 ..Default::default()
16045 },
16046 ..Default::default()
16047 },
16048 );
16049 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16050 moves.insert(
16051 Choices::STRUGGLEBUG,
16052 Choice {
16053 move_id: Choices::STRUGGLEBUG,
16054 base_power: 30.0,
16055 category: MoveCategory::Special,
16056 move_type: PokemonType::BUG,
16057 flags: Flags {
16058 protect: true,
16059 ..Default::default()
16060 },
16061 secondaries: Some(vec![Secondary {
16062 chance: 100.0,
16063 target: MoveTarget::Opponent,
16064 effect: Effect::Boost(StatBoosts {
16065 attack: 0,
16066 defense: 0,
16067 special_attack: -1,
16068 special_defense: 0,
16069 speed: 0,
16070 accuracy: 0,
16071 }),
16072 }]),
16073 ..Default::default()
16074 },
16075 );
16076 } else {
16077 moves.insert(
16078 Choices::STRUGGLEBUG,
16079 Choice {
16080 move_id: Choices::STRUGGLEBUG,
16081 base_power: 50.0,
16082 category: MoveCategory::Special,
16083 move_type: PokemonType::BUG,
16084 flags: Flags {
16085 protect: true,
16086 ..Default::default()
16087 },
16088 secondaries: Some(vec![Secondary {
16089 chance: 100.0,
16090 target: MoveTarget::Opponent,
16091 effect: Effect::Boost(StatBoosts {
16092 attack: 0,
16093 defense: 0,
16094 special_attack: -1,
16095 special_defense: 0,
16096 speed: 0,
16097 accuracy: 0,
16098 }),
16099 }]),
16100 ..Default::default()
16101 },
16102 );
16103 }
16104 moves.insert(
16105 Choices::STUFFCHEEKS,
16106 Choice {
16107 move_id: Choices::STUFFCHEEKS,
16108 target: MoveTarget::User,
16109 move_type: PokemonType::NORMAL,
16110 flags: Flags {
16111 ..Default::default()
16112 },
16113 ..Default::default()
16114 },
16115 );
16116 moves.insert(
16117 Choices::STUNSPORE,
16118 Choice {
16119 move_id: Choices::STUNSPORE,
16120 accuracy: 75.0,
16121 status: Some(Status {
16122 target: MoveTarget::Opponent,
16123 status: PokemonStatus::PARALYZE,
16124 }),
16125 move_type: PokemonType::GRASS,
16126 flags: Flags {
16127 powder: true,
16128 protect: true,
16129 reflectable: true,
16130 ..Default::default()
16131 },
16132 ..Default::default()
16133 },
16134 );
16135 moves.insert(
16136 Choices::SUBMISSION,
16137 Choice {
16138 move_id: Choices::SUBMISSION,
16139 accuracy: 80.0,
16140 base_power: 80.0,
16141 category: MoveCategory::Physical,
16142 move_type: PokemonType::FIGHTING,
16143 flags: Flags {
16144 contact: true,
16145 protect: true,
16146 ..Default::default()
16147 },
16148 recoil: Some(0.25),
16149 ..Default::default()
16150 },
16151 );
16152 moves.insert(
16153 Choices::SUBSTITUTE,
16154 Choice {
16155 move_id: Choices::SUBSTITUTE,
16156 target: MoveTarget::User,
16157 move_type: PokemonType::NORMAL,
16158 flags: Flags {
16159 ..Default::default()
16160 },
16161 volatile_status: Some(VolatileStatus {
16162 target: MoveTarget::User,
16163 volatile_status: PokemonVolatileStatus::SUBSTITUTE,
16164 }),
16165 ..Default::default()
16166 },
16167 );
16168 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
16169 moves.insert(
16170 Choices::SUCKERPUNCH,
16171 Choice {
16172 move_id: Choices::SUCKERPUNCH,
16173 base_power: 80.0,
16174 category: MoveCategory::Physical,
16175 priority: 1,
16176 move_type: PokemonType::DARK,
16177 flags: Flags {
16178 contact: true,
16179 protect: true,
16180 ..Default::default()
16181 },
16182 ..Default::default()
16183 },
16184 );
16185 } else {
16186 moves.insert(
16187 Choices::SUCKERPUNCH,
16188 Choice {
16189 move_id: Choices::SUCKERPUNCH,
16190 base_power: 70.0,
16191 category: MoveCategory::Physical,
16192 priority: 1,
16193 move_type: PokemonType::DARK,
16194 flags: Flags {
16195 contact: true,
16196 protect: true,
16197 ..Default::default()
16198 },
16199 ..Default::default()
16200 },
16201 );
16202 }
16203 moves.insert(
16204 Choices::SUNNYDAY,
16205 Choice {
16206 move_id: Choices::SUNNYDAY,
16207 move_type: PokemonType::FIRE,
16208 flags: Flags {
16209 ..Default::default()
16210 },
16211 ..Default::default()
16212 },
16213 );
16214 moves.insert(
16215 Choices::SUNSTEELSTRIKE,
16216 Choice {
16217 move_id: Choices::SUNSTEELSTRIKE,
16218 base_power: 100.0,
16219 category: MoveCategory::Physical,
16220 move_type: PokemonType::STEEL,
16221 flags: Flags {
16222 contact: true,
16223 protect: true,
16224 ..Default::default()
16225 },
16226 ..Default::default()
16227 },
16228 );
16229 moves.insert(
16230 Choices::SUPERCELLSLAM,
16231 Choice {
16232 accuracy: 95.0,
16233 move_id: Choices::SUPERCELLSLAM,
16234 base_power: 100.0,
16235 category: MoveCategory::Physical,
16236 move_type: PokemonType::ELECTRIC,
16237 flags: Flags {
16238 contact: true,
16239 protect: true,
16240 ..Default::default()
16241 },
16242 crash: Some(0.5),
16243 ..Default::default()
16244 },
16245 );
16246 moves.insert(
16247 Choices::SUPERFANG,
16248 Choice {
16249 move_id: Choices::SUPERFANG,
16250 accuracy: 90.0,
16251 category: MoveCategory::Physical,
16252 move_type: PokemonType::NORMAL,
16253 flags: Flags {
16254 contact: true,
16255 protect: true,
16256 ..Default::default()
16257 },
16258 ..Default::default()
16259 },
16260 );
16261 moves.insert(
16262 Choices::SUPERPOWER,
16263 Choice {
16264 move_id: Choices::SUPERPOWER,
16265 base_power: 120.0,
16266 category: MoveCategory::Physical,
16267 move_type: PokemonType::FIGHTING,
16268 flags: Flags {
16269 contact: true,
16270 protect: true,
16271 ..Default::default()
16272 },
16273 boost: Some(Boost {
16274 target: MoveTarget::User,
16275 boosts: StatBoosts {
16276 attack: -1,
16277 defense: -1,
16278 special_attack: 0,
16279 special_defense: 0,
16280 speed: 0,
16281 accuracy: 0,
16282 },
16283 }),
16284 ..Default::default()
16285 },
16286 );
16287 moves.insert(
16288 Choices::SUPERSONIC,
16289 Choice {
16290 move_id: Choices::SUPERSONIC,
16291 accuracy: 55.0,
16292 move_type: PokemonType::NORMAL,
16293 flags: Flags {
16294 protect: true,
16295 reflectable: true,
16296 sound: true,
16297 ..Default::default()
16298 },
16299 volatile_status: Some(VolatileStatus {
16300 target: MoveTarget::Opponent,
16301 volatile_status: PokemonVolatileStatus::CONFUSION,
16302 }),
16303 ..Default::default()
16304 },
16305 );
16306 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16307 moves.insert(
16308 Choices::SURF,
16309 Choice {
16310 move_id: Choices::SURF,
16311 base_power: 95.0,
16312 category: MoveCategory::Special,
16313 move_type: PokemonType::WATER,
16314 flags: Flags {
16315 protect: true,
16316 ..Default::default()
16317 },
16318 ..Default::default()
16319 },
16320 );
16321 } else {
16322 moves.insert(
16323 Choices::SURF,
16324 Choice {
16325 move_id: Choices::SURF,
16326 base_power: 90.0,
16327 category: MoveCategory::Special,
16328 move_type: PokemonType::WATER,
16329 flags: Flags {
16330 protect: true,
16331 ..Default::default()
16332 },
16333 ..Default::default()
16334 },
16335 );
16336 }
16337 moves.insert(
16338 Choices::SURGINGSTRIKES,
16339 Choice {
16340 move_id: Choices::SURGINGSTRIKES,
16341 base_power: 25.0,
16342 category: MoveCategory::Physical,
16343 move_type: PokemonType::WATER,
16344 flags: Flags {
16345 contact: true,
16346 protect: true,
16347 punch: true,
16348 ..Default::default()
16349 },
16350 ..Default::default()
16351 },
16352 );
16353
16354 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
16355 moves.insert(
16356 Choices::SWAGGER,
16357 Choice {
16358 move_id: Choices::SWAGGER,
16359 accuracy: 85.0,
16360 move_type: PokemonType::NORMAL,
16361 flags: Flags {
16362 protect: true,
16363 reflectable: true,
16364 ..Default::default()
16365 },
16366 boost: Some(Boost {
16367 target: MoveTarget::Opponent,
16368 boosts: StatBoosts {
16369 attack: 2,
16370 defense: 0,
16371 special_attack: 0,
16372 special_defense: 0,
16373 speed: 0,
16374 accuracy: 0,
16375 },
16376 }),
16377 volatile_status: Some(VolatileStatus {
16378 target: MoveTarget::Opponent,
16379 volatile_status: PokemonVolatileStatus::CONFUSION,
16380 }),
16381 ..Default::default()
16382 },
16383 );
16384 } else {
16385 moves.insert(
16386 Choices::SWAGGER,
16387 Choice {
16388 move_id: Choices::SWAGGER,
16389 accuracy: 90.0,
16390 move_type: PokemonType::NORMAL,
16391 flags: Flags {
16392 protect: true,
16393 reflectable: true,
16394 ..Default::default()
16395 },
16396 boost: Some(Boost {
16397 target: MoveTarget::Opponent,
16398 boosts: StatBoosts {
16399 attack: 2,
16400 defense: 0,
16401 special_attack: 0,
16402 special_defense: 0,
16403 speed: 0,
16404 accuracy: 0,
16405 },
16406 }),
16407 volatile_status: Some(VolatileStatus {
16408 target: MoveTarget::Opponent,
16409 volatile_status: PokemonVolatileStatus::CONFUSION,
16410 }),
16411 ..Default::default()
16412 },
16413 );
16414 }
16415 moves.insert(
16416 Choices::SWALLOW,
16417 Choice {
16418 move_id: Choices::SWALLOW,
16419 target: MoveTarget::User,
16420 move_type: PokemonType::NORMAL,
16421 flags: Flags {
16422 heal: true,
16423 ..Default::default()
16424 },
16425 ..Default::default()
16426 },
16427 );
16428 moves.insert(
16429 Choices::SWEETKISS,
16430 Choice {
16431 move_id: Choices::SWEETKISS,
16432 accuracy: 75.0,
16433 move_type: PokemonType::FAIRY,
16434 flags: Flags {
16435 protect: true,
16436 reflectable: true,
16437 ..Default::default()
16438 },
16439 volatile_status: Some(VolatileStatus {
16440 target: MoveTarget::Opponent,
16441 volatile_status: PokemonVolatileStatus::CONFUSION,
16442 }),
16443 ..Default::default()
16444 },
16445 );
16446 moves.insert(
16447 Choices::SWEETSCENT,
16448 Choice {
16449 move_id: Choices::SWEETSCENT,
16450 move_type: PokemonType::NORMAL,
16451 flags: Flags {
16452 protect: true,
16453 reflectable: true,
16454 ..Default::default()
16455 },
16456 boost: Some(Boost {
16457 target: MoveTarget::Opponent,
16458 boosts: StatBoosts {
16459 attack: 0,
16460 defense: 0,
16461 special_attack: 0,
16462 special_defense: 0,
16463 speed: 0,
16464 accuracy: 0,
16465 },
16466 }),
16467 ..Default::default()
16468 },
16469 );
16470 moves.insert(
16471 Choices::SWIFT,
16472 Choice {
16473 move_id: Choices::SWIFT,
16474 base_power: 60.0,
16475 category: MoveCategory::Special,
16476 move_type: PokemonType::NORMAL,
16477 flags: Flags {
16478 protect: true,
16479 ..Default::default()
16480 },
16481 ..Default::default()
16482 },
16483 );
16484 moves.insert(
16485 Choices::SWITCHEROO,
16486 Choice {
16487 move_id: Choices::SWITCHEROO,
16488 move_type: PokemonType::DARK,
16489 flags: Flags {
16490 protect: true,
16491 ..Default::default()
16492 },
16493 ..Default::default()
16494 },
16495 );
16496 moves.insert(
16497 Choices::SWORDSDANCE,
16498 Choice {
16499 move_id: Choices::SWORDSDANCE,
16500 target: MoveTarget::User,
16501 move_type: PokemonType::NORMAL,
16502 flags: Flags {
16503 ..Default::default()
16504 },
16505 boost: Some(Boost {
16506 target: MoveTarget::User,
16507 boosts: StatBoosts {
16508 attack: 2,
16509 defense: 0,
16510 special_attack: 0,
16511 special_defense: 0,
16512 speed: 0,
16513 accuracy: 0,
16514 },
16515 }),
16516 ..Default::default()
16517 },
16518 );
16519 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16520 moves.insert(
16521 Choices::SYNCHRONOISE,
16522 Choice {
16523 move_id: Choices::SYNCHRONOISE,
16524 base_power: 70.0,
16525 category: MoveCategory::Special,
16526 move_type: PokemonType::PSYCHIC,
16527 flags: Flags {
16528 protect: true,
16529 ..Default::default()
16530 },
16531 ..Default::default()
16532 },
16533 );
16534 } else {
16535 moves.insert(
16536 Choices::SYNCHRONOISE,
16537 Choice {
16538 move_id: Choices::SYNCHRONOISE,
16539 base_power: 120.0,
16540 category: MoveCategory::Special,
16541 move_type: PokemonType::PSYCHIC,
16542 flags: Flags {
16543 protect: true,
16544 ..Default::default()
16545 },
16546 ..Default::default()
16547 },
16548 );
16549 }
16550 moves.insert(
16551 Choices::SYNTHESIS,
16552 Choice {
16553 move_id: Choices::SYNTHESIS,
16554 target: MoveTarget::User,
16555 move_type: PokemonType::GRASS,
16556 flags: Flags {
16557 heal: true,
16558 ..Default::default()
16559 },
16560 heal: Some(Heal {
16561 target: MoveTarget::User,
16562 amount: 0.5,
16563 }),
16564 ..Default::default()
16565 },
16566 );
16567 moves.insert(
16568 Choices::SYRUPBOMB,
16569 Choice {
16570 move_id: Choices::SYRUPBOMB,
16571 accuracy: 85.0,
16572 base_power: 60.0,
16573 category: MoveCategory::Special,
16574 move_type: PokemonType::GRASS,
16575 flags: Flags {
16576 bullet: true,
16577 protect: true,
16578 ..Default::default()
16579 },
16580 secondaries: Some(vec![Secondary {
16581 chance: 100.0,
16582 target: MoveTarget::Opponent,
16583 effect: Effect::VolatileStatus(PokemonVolatileStatus::SYRUPBOMB),
16584 }]),
16585 ..Default::default()
16586 },
16587 );
16588 moves.insert(
16589 Choices::TACHYONCUTTER,
16590 Choice {
16591 move_id: Choices::TACHYONCUTTER,
16592 base_power: 50.0,
16593 category: MoveCategory::Special,
16594 move_type: PokemonType::STEEL,
16595 flags: Flags {
16596 protect: true,
16597 slicing: true,
16598 ..Default::default()
16599 },
16600 ..Default::default()
16601 },
16602 );
16603 moves.insert(
16604 Choices::TACKLE,
16605 Choice {
16606 move_id: Choices::TACKLE,
16607 base_power: 40.0,
16608 category: MoveCategory::Physical,
16609 move_type: PokemonType::NORMAL,
16610 flags: Flags {
16611 contact: true,
16612 protect: true,
16613 ..Default::default()
16614 },
16615 ..Default::default()
16616 },
16617 );
16618 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
16619 moves.insert(
16620 Choices::TAILGLOW,
16621 Choice {
16622 move_id: Choices::TAILGLOW,
16623 target: MoveTarget::User,
16624 move_type: PokemonType::BUG,
16625 flags: Flags {
16626 ..Default::default()
16627 },
16628 boost: Some(Boost {
16629 target: MoveTarget::User,
16630 boosts: StatBoosts {
16631 attack: 0,
16632 defense: 0,
16633 special_attack: 2,
16634 special_defense: 0,
16635 speed: 0,
16636 accuracy: 0,
16637 },
16638 }),
16639 ..Default::default()
16640 },
16641 );
16642 } else {
16643 moves.insert(
16644 Choices::TAILGLOW,
16645 Choice {
16646 move_id: Choices::TAILGLOW,
16647 target: MoveTarget::User,
16648 move_type: PokemonType::BUG,
16649 flags: Flags {
16650 ..Default::default()
16651 },
16652 boost: Some(Boost {
16653 target: MoveTarget::User,
16654 boosts: StatBoosts {
16655 attack: 0,
16656 defense: 0,
16657 special_attack: 3,
16658 special_defense: 0,
16659 speed: 0,
16660 accuracy: 0,
16661 },
16662 }),
16663 ..Default::default()
16664 },
16665 );
16666 }
16667 moves.insert(
16668 Choices::TAILSLAP,
16669 Choice {
16670 move_id: Choices::TAILSLAP,
16671 accuracy: 85.0,
16672 base_power: 25.0,
16673 category: MoveCategory::Physical,
16674 move_type: PokemonType::NORMAL,
16675 flags: Flags {
16676 contact: true,
16677 protect: true,
16678 ..Default::default()
16679 },
16680 ..Default::default()
16681 },
16682 );
16683 moves.insert(
16684 Choices::TAILWHIP,
16685 Choice {
16686 move_id: Choices::TAILWHIP,
16687 move_type: PokemonType::NORMAL,
16688 flags: Flags {
16689 protect: true,
16690 reflectable: true,
16691 ..Default::default()
16692 },
16693 boost: Some(Boost {
16694 target: MoveTarget::Opponent,
16695 boosts: StatBoosts {
16696 attack: 0,
16697 defense: -1,
16698 special_attack: 0,
16699 special_defense: 0,
16700 speed: 0,
16701 accuracy: 0,
16702 },
16703 }),
16704 ..Default::default()
16705 },
16706 );
16707 moves.insert(
16708 Choices::TAILWIND,
16709 Choice {
16710 move_id: Choices::TAILWIND,
16711 target: MoveTarget::User,
16712 move_type: PokemonType::FLYING,
16713 flags: Flags {
16714 wind: true,
16715 ..Default::default()
16716 },
16717 side_condition: Some(SideCondition {
16718 target: MoveTarget::User,
16719 condition: PokemonSideCondition::Tailwind,
16720 }),
16721 ..Default::default()
16722 },
16723 );
16724 moves.insert(
16725 Choices::TAKEDOWN,
16726 Choice {
16727 move_id: Choices::TAKEDOWN,
16728 accuracy: 85.0,
16729 base_power: 90.0,
16730 category: MoveCategory::Physical,
16731 move_type: PokemonType::NORMAL,
16732 flags: Flags {
16733 contact: true,
16734 protect: true,
16735 ..Default::default()
16736 },
16737 recoil: Some(0.33),
16738 ..Default::default()
16739 },
16740 );
16741 moves.insert(
16742 Choices::TAKEHEART,
16743 Choice {
16744 move_id: Choices::TAKEHEART,
16745 target: MoveTarget::User,
16746 move_type: PokemonType::PSYCHIC,
16747 flags: Flags {
16748 ..Default::default()
16749 },
16750 ..Default::default()
16751 },
16752 );
16753 moves.insert(
16754 Choices::TARSHOT,
16755 Choice {
16756 move_id: Choices::TARSHOT,
16757 move_type: PokemonType::ROCK,
16758 flags: Flags {
16759 protect: true,
16760 reflectable: true,
16761 ..Default::default()
16762 },
16763 boost: Some(Boost {
16764 target: MoveTarget::Opponent,
16765 boosts: StatBoosts {
16766 attack: 0,
16767 defense: 0,
16768 special_attack: 0,
16769 special_defense: 0,
16770 speed: -1,
16771 accuracy: 0,
16772 },
16773 }),
16774 volatile_status: Some(VolatileStatus {
16775 target: MoveTarget::Opponent,
16776 volatile_status: PokemonVolatileStatus::TARSHOT,
16777 }),
16778 ..Default::default()
16779 },
16780 );
16781 moves.insert(
16782 Choices::TAUNT,
16783 Choice {
16784 move_id: Choices::TAUNT,
16785 move_type: PokemonType::DARK,
16786 flags: Flags {
16787 protect: true,
16788 reflectable: true,
16789 ..Default::default()
16790 },
16791 volatile_status: Some(VolatileStatus {
16792 target: MoveTarget::Opponent,
16793 volatile_status: PokemonVolatileStatus::TAUNT,
16794 }),
16795 ..Default::default()
16796 },
16797 );
16798 moves.insert(
16799 Choices::TEARFULLOOK,
16800 Choice {
16801 move_id: Choices::TEARFULLOOK,
16802 move_type: PokemonType::NORMAL,
16803 flags: Flags {
16804 reflectable: true,
16805 ..Default::default()
16806 },
16807 boost: Some(Boost {
16808 target: MoveTarget::Opponent,
16809 boosts: StatBoosts {
16810 attack: -1,
16811 defense: 0,
16812 special_attack: -1,
16813 special_defense: 0,
16814 speed: 0,
16815 accuracy: 0,
16816 },
16817 }),
16818 ..Default::default()
16819 },
16820 );
16821 moves.insert(
16822 Choices::TEATIME,
16823 Choice {
16824 move_id: Choices::TEATIME,
16825 move_type: PokemonType::NORMAL,
16826 flags: Flags {
16827 ..Default::default()
16828 },
16829 ..Default::default()
16830 },
16831 );
16832 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16833 moves.insert(
16834 Choices::TECHNOBLAST,
16835 Choice {
16836 move_id: Choices::TECHNOBLAST,
16837 base_power: 85.0,
16838 category: MoveCategory::Special,
16839 move_type: PokemonType::NORMAL,
16840 flags: Flags {
16841 protect: true,
16842 ..Default::default()
16843 },
16844 ..Default::default()
16845 },
16846 );
16847 } else {
16848 moves.insert(
16849 Choices::TECHNOBLAST,
16850 Choice {
16851 move_id: Choices::TECHNOBLAST,
16852 base_power: 120.0,
16853 category: MoveCategory::Special,
16854 move_type: PokemonType::NORMAL,
16855 flags: Flags {
16856 protect: true,
16857 ..Default::default()
16858 },
16859 ..Default::default()
16860 },
16861 );
16862 }
16863 moves.insert(
16864 Choices::TEETERDANCE,
16865 Choice {
16866 move_id: Choices::TEETERDANCE,
16867 move_type: PokemonType::NORMAL,
16868 flags: Flags {
16869 protect: true,
16870 ..Default::default()
16871 },
16872 volatile_status: Some(VolatileStatus {
16873 target: MoveTarget::Opponent,
16874 volatile_status: PokemonVolatileStatus::CONFUSION,
16875 }),
16876 ..Default::default()
16877 },
16878 );
16879 moves.insert(
16880 Choices::TELEKINESIS,
16881 Choice {
16882 move_id: Choices::TELEKINESIS,
16883 move_type: PokemonType::PSYCHIC,
16884 flags: Flags {
16885 protect: true,
16886 reflectable: true,
16887 ..Default::default()
16888 },
16889 volatile_status: Some(VolatileStatus {
16890 target: MoveTarget::Opponent,
16891 volatile_status: PokemonVolatileStatus::TELEKINESIS,
16892 }),
16893 ..Default::default()
16894 },
16895 );
16896
16897 if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
16898 moves.insert(
16899 Choices::TELEPORT,
16900 Choice {
16901 move_id: Choices::TELEPORT,
16902 priority: -6,
16903 target: MoveTarget::User,
16904 move_type: PokemonType::PSYCHIC,
16905 flags: Flags {
16906 pivot: true,
16907 ..Default::default()
16908 },
16909 ..Default::default()
16910 },
16911 );
16912 } else {
16913 moves.insert(
16914 Choices::TELEPORT,
16915 Choice {
16916 move_id: Choices::TELEPORT,
16917 priority: 0,
16918 target: MoveTarget::User,
16919 move_type: PokemonType::PSYCHIC,
16920 flags: Flags {
16921 ..Default::default()
16922 },
16923 ..Default::default()
16924 },
16925 );
16926 }
16927 moves.insert(
16928 Choices::TEMPERFLARE,
16929 Choice {
16930 move_id: Choices::TEMPERFLARE,
16931 base_power: 75.0,
16932 category: MoveCategory::Physical,
16933 move_type: PokemonType::FIRE,
16934 flags: Flags {
16935 contact: true,
16936 protect: true,
16937 ..Default::default()
16938 },
16939 ..Default::default()
16940 },
16941 );
16942 moves.insert(
16943 Choices::TERABLAST,
16944 Choice {
16945 move_id: Choices::TERABLAST,
16946 base_power: 80.0,
16947 category: MoveCategory::Special,
16948 move_type: PokemonType::NORMAL,
16949 flags: Flags {
16950 protect: true,
16951 ..Default::default()
16952 },
16953 ..Default::default()
16954 },
16955 );
16956 moves.insert(
16957 Choices::TERASTARSTORM,
16958 Choice {
16959 move_id: Choices::TERASTARSTORM,
16960 base_power: 120.0,
16961 category: MoveCategory::Special,
16962 move_type: PokemonType::NORMAL,
16963 flags: Flags {
16964 protect: true,
16965 ..Default::default()
16966 },
16967 ..Default::default()
16968 },
16969 );
16970 moves.insert(
16971 Choices::TERRAINPULSE,
16972 Choice {
16973 move_id: Choices::TERRAINPULSE,
16974 base_power: 50.0,
16975 category: MoveCategory::Special,
16976 move_type: PokemonType::NORMAL,
16977 flags: Flags {
16978 protect: true,
16979 pulse: true,
16980 ..Default::default()
16981 },
16982 ..Default::default()
16983 },
16984 );
16985 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16986 moves.insert(
16987 Choices::THIEF,
16988 Choice {
16989 move_id: Choices::THIEF,
16990 base_power: 40.0,
16991 category: MoveCategory::Physical,
16992 move_type: PokemonType::DARK,
16993 flags: Flags {
16994 contact: true,
16995 protect: true,
16996 ..Default::default()
16997 },
16998 ..Default::default()
16999 },
17000 );
17001 } else {
17002 moves.insert(
17003 Choices::THIEF,
17004 Choice {
17005 move_id: Choices::THIEF,
17006 base_power: 60.0,
17007 category: MoveCategory::Physical,
17008 move_type: PokemonType::DARK,
17009 flags: Flags {
17010 contact: true,
17011 protect: true,
17012 ..Default::default()
17013 },
17014 ..Default::default()
17015 },
17016 );
17017 }
17018 moves.insert(
17019 Choices::THOUSANDARROWS,
17020 Choice {
17021 move_id: Choices::THOUSANDARROWS,
17022 base_power: 90.0,
17023 category: MoveCategory::Physical,
17024 move_type: PokemonType::GROUND,
17025 flags: Flags {
17026 protect: true,
17027 ..Default::default()
17028 },
17029 volatile_status: Some(VolatileStatus {
17030 target: MoveTarget::Opponent,
17031 volatile_status: PokemonVolatileStatus::SMACKDOWN,
17032 }),
17033 ..Default::default()
17034 },
17035 );
17036 moves.insert(
17037 Choices::THOUSANDWAVES,
17038 Choice {
17039 move_id: Choices::THOUSANDWAVES,
17040 base_power: 90.0,
17041 category: MoveCategory::Physical,
17042 move_type: PokemonType::GROUND,
17043 flags: Flags {
17044 protect: true,
17045 ..Default::default()
17046 },
17047 ..Default::default()
17048 },
17049 );
17050 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17051 moves.insert(
17052 Choices::THRASH,
17053 Choice {
17054 move_id: Choices::THRASH,
17055 base_power: 90.0,
17056 category: MoveCategory::Physical,
17057 move_type: PokemonType::NORMAL,
17058 flags: Flags {
17059 contact: true,
17060 protect: true,
17061 ..Default::default()
17062 },
17063 volatile_status: Some(VolatileStatus {
17064 target: MoveTarget::User,
17065 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
17066 }),
17067 ..Default::default()
17068 },
17069 );
17070 } else {
17071 moves.insert(
17072 Choices::THRASH,
17073 Choice {
17074 move_id: Choices::THRASH,
17075 base_power: 120.0,
17076 category: MoveCategory::Physical,
17077 move_type: PokemonType::NORMAL,
17078 flags: Flags {
17079 contact: true,
17080 protect: true,
17081 ..Default::default()
17082 },
17083 volatile_status: Some(VolatileStatus {
17084 target: MoveTarget::User,
17085 volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
17086 }),
17087 ..Default::default()
17088 },
17089 );
17090 }
17091 moves.insert(
17092 Choices::THROATCHOP,
17093 Choice {
17094 move_id: Choices::THROATCHOP,
17095 base_power: 80.0,
17096 category: MoveCategory::Physical,
17097 move_type: PokemonType::DARK,
17098 flags: Flags {
17099 contact: true,
17100 protect: true,
17101 ..Default::default()
17102 },
17103 volatile_status: Some(VolatileStatus {
17104 target: MoveTarget::Opponent,
17105 volatile_status: PokemonVolatileStatus::THROATCHOP,
17106 }),
17107 ..Default::default()
17108 },
17109 );
17110 if cfg!(feature = "gen1") {
17111 moves.insert(
17112 Choices::THUNDER,
17113 Choice {
17114 move_id: Choices::THUNDER,
17115 accuracy: 70.0,
17116 base_power: 120.0,
17117 category: MoveCategory::Special,
17118 move_type: PokemonType::ELECTRIC,
17119 flags: Flags {
17120 protect: true,
17121 ..Default::default()
17122 },
17123 secondaries: Some(vec![Secondary {
17124 chance: 10.0,
17125 target: MoveTarget::Opponent,
17126 effect: Effect::Status(PokemonStatus::PARALYZE),
17127 }]),
17128 ..Default::default()
17129 },
17130 );
17131 } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
17132 moves.insert(
17133 Choices::THUNDER,
17134 Choice {
17135 move_id: Choices::THUNDER,
17136 accuracy: 70.0,
17137 base_power: 120.0,
17138 category: MoveCategory::Special,
17139 move_type: PokemonType::ELECTRIC,
17140 flags: Flags {
17141 protect: true,
17142 ..Default::default()
17143 },
17144 secondaries: Some(vec![Secondary {
17145 chance: 30.0,
17146 target: MoveTarget::Opponent,
17147 effect: Effect::Status(PokemonStatus::PARALYZE),
17148 }]),
17149 ..Default::default()
17150 },
17151 );
17152 } else {
17153 moves.insert(
17154 Choices::THUNDER,
17155 Choice {
17156 move_id: Choices::THUNDER,
17157 accuracy: 70.0,
17158 base_power: 110.0,
17159 category: MoveCategory::Special,
17160 move_type: PokemonType::ELECTRIC,
17161 flags: Flags {
17162 protect: true,
17163 ..Default::default()
17164 },
17165 secondaries: Some(vec![Secondary {
17166 chance: 30.0,
17167 target: MoveTarget::Opponent,
17168 effect: Effect::Status(PokemonStatus::PARALYZE),
17169 }]),
17170 ..Default::default()
17171 },
17172 );
17173 }
17174 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
17175 moves.insert(
17176 Choices::THUNDERBOLT,
17177 Choice {
17178 move_id: Choices::THUNDERBOLT,
17179 base_power: 95.0,
17180 category: MoveCategory::Special,
17181 move_type: PokemonType::ELECTRIC,
17182 flags: Flags {
17183 protect: true,
17184 ..Default::default()
17185 },
17186 secondaries: Some(vec![Secondary {
17187 chance: 10.0,
17188 target: MoveTarget::Opponent,
17189 effect: Effect::Status(PokemonStatus::PARALYZE),
17190 }]),
17191 ..Default::default()
17192 },
17193 );
17194 } else {
17195 moves.insert(
17196 Choices::THUNDERBOLT,
17197 Choice {
17198 move_id: Choices::THUNDERBOLT,
17199 base_power: 90.0,
17200 category: MoveCategory::Special,
17201 move_type: PokemonType::ELECTRIC,
17202 flags: Flags {
17203 protect: true,
17204 ..Default::default()
17205 },
17206 secondaries: Some(vec![Secondary {
17207 chance: 10.0,
17208 target: MoveTarget::Opponent,
17209 effect: Effect::Status(PokemonStatus::PARALYZE),
17210 }]),
17211 ..Default::default()
17212 },
17213 );
17214 }
17215 moves.insert(
17216 Choices::THUNDERCAGE,
17217 Choice {
17218 move_id: Choices::THUNDERCAGE,
17219 accuracy: 90.0,
17220 base_power: 80.0,
17221 category: MoveCategory::Special,
17222 move_type: PokemonType::ELECTRIC,
17223 flags: Flags {
17224 protect: true,
17225 ..Default::default()
17226 },
17227 volatile_status: Some(VolatileStatus {
17228 target: MoveTarget::Opponent,
17229 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
17230 }),
17231 ..Default::default()
17232 },
17233 );
17234 moves.insert(
17235 Choices::THUNDERCLAP,
17236 Choice {
17237 move_id: Choices::THUNDERCLAP,
17238 base_power: 70.0,
17239 priority: 1,
17240 category: MoveCategory::Special,
17241 move_type: PokemonType::ELECTRIC,
17242 flags: Flags {
17243 protect: true,
17244 ..Default::default()
17245 },
17246 ..Default::default()
17247 },
17248 );
17249 moves.insert(
17250 Choices::THUNDERFANG,
17251 Choice {
17252 move_id: Choices::THUNDERFANG,
17253 accuracy: 95.0,
17254 base_power: 65.0,
17255 category: MoveCategory::Physical,
17256 move_type: PokemonType::ELECTRIC,
17257 flags: Flags {
17258 bite: true,
17259 contact: true,
17260 protect: true,
17261 ..Default::default()
17262 },
17263 secondaries: Some(vec![
17264 Secondary {
17265 chance: 10.0,
17266 target: MoveTarget::Opponent,
17267 effect: Effect::Status(PokemonStatus::PARALYZE),
17268 },
17269 Secondary {
17270 chance: 10.0,
17271 target: MoveTarget::Opponent,
17272 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17273 },
17274 ]),
17275 ..Default::default()
17276 },
17277 );
17278 moves.insert(
17279 Choices::THUNDEROUSKICK,
17280 Choice {
17281 move_id: Choices::THUNDEROUSKICK,
17282 base_power: 90.0,
17283 category: MoveCategory::Physical,
17284 move_type: PokemonType::FIGHTING,
17285 flags: Flags {
17286 contact: true,
17287 protect: true,
17288 ..Default::default()
17289 },
17290 secondaries: Some(vec![Secondary {
17291 chance: 100.0,
17292 target: MoveTarget::Opponent,
17293 effect: Effect::Boost(StatBoosts {
17294 attack: 0,
17295 defense: -1,
17296 special_attack: 0,
17297 special_defense: 0,
17298 speed: 0,
17299 accuracy: 0,
17300 }),
17301 }]),
17302 ..Default::default()
17303 },
17304 );
17305 moves.insert(
17306 Choices::THUNDERPUNCH,
17307 Choice {
17308 move_id: Choices::THUNDERPUNCH,
17309 base_power: 75.0,
17310 category: MoveCategory::Physical,
17311 move_type: PokemonType::ELECTRIC,
17312 flags: Flags {
17313 contact: true,
17314 protect: true,
17315 punch: true,
17316 ..Default::default()
17317 },
17318 secondaries: Some(vec![Secondary {
17319 chance: 10.0,
17320 target: MoveTarget::Opponent,
17321 effect: Effect::Status(PokemonStatus::PARALYZE),
17322 }]),
17323 ..Default::default()
17324 },
17325 );
17326 moves.insert(
17327 Choices::THUNDERSHOCK,
17328 Choice {
17329 move_id: Choices::THUNDERSHOCK,
17330 base_power: 40.0,
17331 category: MoveCategory::Special,
17332 move_type: PokemonType::ELECTRIC,
17333 flags: Flags {
17334 protect: true,
17335 ..Default::default()
17336 },
17337 secondaries: Some(vec![Secondary {
17338 chance: 10.0,
17339 target: MoveTarget::Opponent,
17340 effect: Effect::Status(PokemonStatus::PARALYZE),
17341 }]),
17342 ..Default::default()
17343 },
17344 );
17345 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
17346 moves.insert(
17347 Choices::THUNDERWAVE,
17348 Choice {
17349 move_id: Choices::THUNDERWAVE,
17350 accuracy: 100.0,
17351 status: Some(Status {
17352 target: MoveTarget::Opponent,
17353 status: PokemonStatus::PARALYZE,
17354 }),
17355 move_type: PokemonType::ELECTRIC,
17356 flags: Flags {
17357 protect: true,
17358 reflectable: true,
17359 ..Default::default()
17360 },
17361 ..Default::default()
17362 },
17363 );
17364 } else {
17365 moves.insert(
17366 Choices::THUNDERWAVE,
17367 Choice {
17368 move_id: Choices::THUNDERWAVE,
17369 accuracy: 90.0,
17370 status: Some(Status {
17371 target: MoveTarget::Opponent,
17372 status: PokemonStatus::PARALYZE,
17373 }),
17374 move_type: PokemonType::ELECTRIC,
17375 flags: Flags {
17376 protect: true,
17377 reflectable: true,
17378 ..Default::default()
17379 },
17380 ..Default::default()
17381 },
17382 );
17383 }
17384 moves.insert(
17385 Choices::TICKLE,
17386 Choice {
17387 move_id: Choices::TICKLE,
17388 move_type: PokemonType::NORMAL,
17389 flags: Flags {
17390 protect: true,
17391 reflectable: true,
17392 ..Default::default()
17393 },
17394 boost: Some(Boost {
17395 target: MoveTarget::Opponent,
17396 boosts: StatBoosts {
17397 attack: -1,
17398 defense: -1,
17399 special_attack: 0,
17400 special_defense: 0,
17401 speed: 0,
17402 accuracy: 0,
17403 },
17404 }),
17405 ..Default::default()
17406 },
17407 );
17408 moves.insert(
17409 Choices::TIDYUP,
17410 Choice {
17411 move_id: Choices::TIDYUP,
17412 target: MoveTarget::User,
17413 move_type: PokemonType::NORMAL,
17414 flags: Flags {
17415 ..Default::default()
17416 },
17417 boost: Some(Boost {
17418 target: MoveTarget::User,
17419 boosts: StatBoosts {
17420 attack: 1,
17421 defense: 0,
17422 special_attack: 0,
17423 special_defense: 0,
17424 speed: 1,
17425 accuracy: 0,
17426 },
17427 }),
17428 ..Default::default()
17429 },
17430 );
17431 moves.insert(
17432 Choices::TOPSYTURVY,
17433 Choice {
17434 move_id: Choices::TOPSYTURVY,
17435 move_type: PokemonType::DARK,
17436 flags: Flags {
17437 protect: true,
17438 reflectable: true,
17439 ..Default::default()
17440 },
17441 ..Default::default()
17442 },
17443 );
17444 moves.insert(
17445 Choices::TORCHSONG,
17446 Choice {
17447 move_id: Choices::TORCHSONG,
17448 base_power: 80.0,
17449 category: MoveCategory::Special,
17450 move_type: PokemonType::FIRE,
17451 flags: Flags {
17452 protect: true,
17453 sound: true,
17454 ..Default::default()
17455 },
17456 secondaries: Some(vec![Secondary {
17457 chance: 100.0,
17458 target: MoveTarget::User,
17459 effect: Effect::Boost(StatBoosts {
17460 attack: 0,
17461 defense: 0,
17462 special_attack: 1,
17463 special_defense: 0,
17464 speed: 0,
17465 accuracy: 0,
17466 }),
17467 }]),
17468 ..Default::default()
17469 },
17470 );
17471 moves.insert(
17472 Choices::TORMENT,
17473 Choice {
17474 move_id: Choices::TORMENT,
17475 move_type: PokemonType::DARK,
17476 flags: Flags {
17477 protect: true,
17478 reflectable: true,
17479 ..Default::default()
17480 },
17481 volatile_status: Some(VolatileStatus {
17482 target: MoveTarget::Opponent,
17483 volatile_status: PokemonVolatileStatus::TORMENT,
17484 }),
17485 ..Default::default()
17486 },
17487 );
17488 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17489 moves.insert(
17490 Choices::TOXIC,
17491 Choice {
17492 move_id: Choices::TOXIC,
17493 accuracy: 85.0,
17494 status: Some(Status {
17495 target: MoveTarget::Opponent,
17496 status: PokemonStatus::TOXIC,
17497 }),
17498 move_type: PokemonType::POISON,
17499 flags: Flags {
17500 protect: true,
17501 reflectable: true,
17502 ..Default::default()
17503 },
17504 ..Default::default()
17505 },
17506 );
17507 } else {
17508 moves.insert(
17509 Choices::TOXIC,
17510 Choice {
17511 move_id: Choices::TOXIC,
17512 accuracy: 90.0,
17513 status: Some(Status {
17514 target: MoveTarget::Opponent,
17515 status: PokemonStatus::TOXIC,
17516 }),
17517 move_type: PokemonType::POISON,
17518 flags: Flags {
17519 protect: true,
17520 reflectable: true,
17521 ..Default::default()
17522 },
17523 ..Default::default()
17524 },
17525 );
17526 }
17527 moves.insert(
17528 Choices::TOXICSPIKES,
17529 Choice {
17530 move_id: Choices::TOXICSPIKES,
17531 move_type: PokemonType::POISON,
17532 flags: Flags {
17533 reflectable: true,
17534 ..Default::default()
17535 },
17536 side_condition: Some(SideCondition {
17537 target: MoveTarget::Opponent,
17538 condition: PokemonSideCondition::ToxicSpikes,
17539 }),
17540 ..Default::default()
17541 },
17542 );
17543 moves.insert(
17544 Choices::TOXICTHREAD,
17545 Choice {
17546 move_id: Choices::TOXICTHREAD,
17547 status: Some(Status {
17548 target: MoveTarget::Opponent,
17549 status: PokemonStatus::POISON,
17550 }),
17551 move_type: PokemonType::POISON,
17552 flags: Flags {
17553 protect: true,
17554 reflectable: true,
17555 ..Default::default()
17556 },
17557 boost: Some(Boost {
17558 target: MoveTarget::Opponent,
17559 boosts: StatBoosts {
17560 attack: 0,
17561 defense: 0,
17562 special_attack: 0,
17563 special_defense: 0,
17564 speed: -1,
17565 accuracy: 0,
17566 },
17567 }),
17568 ..Default::default()
17569 },
17570 );
17571 moves.insert(
17572 Choices::TRAILBLAZE,
17573 Choice {
17574 move_id: Choices::TRAILBLAZE,
17575 base_power: 50.0,
17576 category: MoveCategory::Physical,
17577 move_type: PokemonType::GRASS,
17578 flags: Flags {
17579 contact: true,
17580 protect: true,
17581 ..Default::default()
17582 },
17583 secondaries: Some(vec![Secondary {
17584 chance: 100.0,
17585 target: MoveTarget::User,
17586 effect: Effect::Boost(StatBoosts {
17587 attack: 0,
17588 defense: 0,
17589 special_attack: 0,
17590 special_defense: 0,
17591 speed: 1,
17592 accuracy: 0,
17593 }),
17594 }]),
17595 ..Default::default()
17596 },
17597 );
17598 moves.insert(
17599 Choices::TRANSFORM,
17600 Choice {
17601 move_id: Choices::TRANSFORM,
17602 move_type: PokemonType::NORMAL,
17603 flags: Flags {
17604 ..Default::default()
17605 },
17606 ..Default::default()
17607 },
17608 );
17609 if cfg!(feature = "gen1") {
17610 moves.insert(
17611 Choices::TRIATTACK,
17612 Choice {
17613 move_id: Choices::TRIATTACK,
17614 base_power: 80.0,
17615 category: MoveCategory::Special,
17616 move_type: PokemonType::NORMAL,
17617 flags: Flags {
17618 protect: true,
17619 ..Default::default()
17620 },
17621 ..Default::default()
17622 },
17623 );
17624 } else {
17625 moves.insert(
17626 Choices::TRIATTACK,
17627 Choice {
17628 move_id: Choices::TRIATTACK,
17629 base_power: 80.0,
17630 category: MoveCategory::Special,
17631 move_type: PokemonType::NORMAL,
17632 flags: Flags {
17633 protect: true,
17634 ..Default::default()
17635 },
17636 secondaries: Some(
17639 vec![
17640 Secondary {
17641 chance: 6.67,
17642 target: MoveTarget::Opponent,
17643 effect: Effect::Status(PokemonStatus::PARALYZE),
17644 },
17645 Secondary {
17646 chance: 6.67,
17647 target: MoveTarget::Opponent,
17648 effect: Effect::Status(PokemonStatus::BURN),
17649 },
17650 Secondary {
17651 chance: 6.67,
17652 target: MoveTarget::Opponent,
17653 effect: Effect::Status(PokemonStatus::FREEZE),
17654 },
17655 ]
17656 ),
17657 ..Default::default()
17658 },
17659 );
17660 }
17661 moves.insert(
17662 Choices::TRICK,
17663 Choice {
17664 move_id: Choices::TRICK,
17665 move_type: PokemonType::PSYCHIC,
17666 flags: Flags {
17667 protect: true,
17668 ..Default::default()
17669 },
17670 ..Default::default()
17671 },
17672 );
17673 moves.insert(
17674 Choices::TRICKORTREAT,
17675 Choice {
17676 move_id: Choices::TRICKORTREAT,
17677 move_type: PokemonType::GHOST,
17678 flags: Flags {
17679 protect: true,
17680 reflectable: true,
17681 ..Default::default()
17682 },
17683 ..Default::default()
17684 },
17685 );
17686 moves.insert(
17687 Choices::TRICKROOM,
17688 Choice {
17689 move_id: Choices::TRICKROOM,
17690 priority: -7,
17691 move_type: PokemonType::PSYCHIC,
17692 flags: Flags {
17693 ..Default::default()
17694 },
17695 ..Default::default()
17696 },
17697 );
17698 moves.insert(
17699 Choices::TRIPLEARROWS,
17700 Choice {
17701 move_id: Choices::TRIPLEARROWS,
17702 base_power: 90.0,
17703 category: MoveCategory::Physical,
17704 move_type: PokemonType::FIGHTING,
17705 flags: Flags {
17706 protect: true,
17707 ..Default::default()
17708 },
17709 secondaries: Some(vec![
17710 Secondary {
17711 chance: 50.0,
17712 target: MoveTarget::Opponent,
17713 effect: Effect::Boost(StatBoosts {
17714 attack: 0,
17715 defense: -1,
17716 special_attack: 0,
17717 special_defense: 0,
17718 speed: 0,
17719 accuracy: 0,
17720 }),
17721 },
17722 Secondary {
17723 chance: 30.0,
17724 target: MoveTarget::Opponent,
17725 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17726 },
17727 ]),
17728 ..Default::default()
17729 },
17730 );
17731 moves.insert(
17732 Choices::TRIPLEAXEL,
17733 Choice {
17734 move_id: Choices::TRIPLEAXEL,
17735 accuracy: 90.0,
17736 base_power: 40.0,
17737 category: MoveCategory::Physical,
17738 move_type: PokemonType::ICE,
17739 flags: Flags {
17740 contact: true,
17741 protect: true,
17742 ..Default::default()
17743 },
17744 ..Default::default()
17745 },
17746 );
17747 moves.insert(
17748 Choices::TRIPLEDIVE,
17749 Choice {
17750 move_id: Choices::TRIPLEDIVE,
17751 accuracy: 95.0,
17752 base_power: 30.0,
17753 category: MoveCategory::Physical,
17754 move_type: PokemonType::WATER,
17755 flags: Flags {
17756 contact: true,
17757 protect: true,
17758 ..Default::default()
17759 },
17760 ..Default::default()
17761 },
17762 );
17763 moves.insert(
17764 Choices::TRIPLEKICK,
17765 Choice {
17766 move_id: Choices::TRIPLEKICK,
17767 accuracy: 90.0,
17768 base_power: 10.0,
17769 category: MoveCategory::Physical,
17770 move_type: PokemonType::FIGHTING,
17771 flags: Flags {
17772 contact: true,
17773 protect: true,
17774 ..Default::default()
17775 },
17776 ..Default::default()
17777 },
17778 );
17779 moves.insert(
17780 Choices::TROPKICK,
17781 Choice {
17782 move_id: Choices::TROPKICK,
17783 base_power: 70.0,
17784 category: MoveCategory::Physical,
17785 move_type: PokemonType::GRASS,
17786 flags: Flags {
17787 contact: true,
17788 protect: true,
17789 ..Default::default()
17790 },
17791 secondaries: Some(vec![Secondary {
17792 chance: 100.0,
17793 target: MoveTarget::Opponent,
17794 effect: Effect::Boost(StatBoosts {
17795 attack: -1,
17796 defense: 0,
17797 special_attack: 0,
17798 special_defense: 0,
17799 speed: 0,
17800 accuracy: 0,
17801 }),
17802 }]),
17803 ..Default::default()
17804 },
17805 );
17806 moves.insert(
17807 Choices::TRUMPCARD,
17808 Choice {
17809 move_id: Choices::TRUMPCARD,
17810 category: MoveCategory::Special,
17811 move_type: PokemonType::NORMAL,
17812 flags: Flags {
17813 contact: true,
17814 protect: true,
17815 ..Default::default()
17816 },
17817 ..Default::default()
17818 },
17819 );
17820 moves.insert(
17821 Choices::TWINBEAM,
17822 Choice {
17823 move_id: Choices::TWINBEAM,
17824 base_power: 40.0,
17825 category: MoveCategory::Special,
17826 move_type: PokemonType::PSYCHIC,
17827 flags: Flags {
17828 protect: true,
17829 ..Default::default()
17830 },
17831 ..Default::default()
17832 },
17833 );
17834 moves.insert(
17835 Choices::TWINEEDLE,
17836 Choice {
17837 move_id: Choices::TWINEEDLE,
17838 base_power: 25.0,
17839 category: MoveCategory::Physical,
17840 move_type: PokemonType::BUG,
17841 flags: Flags {
17842 protect: true,
17843 ..Default::default()
17844 },
17845 secondaries: Some(vec![Secondary {
17846 chance: 20.0,
17847 target: MoveTarget::Opponent,
17848 effect: Effect::Status(PokemonStatus::POISON),
17849 }]),
17850 ..Default::default()
17851 },
17852 );
17853 moves.insert(
17854 Choices::TWISTER,
17855 Choice {
17856 move_id: Choices::TWISTER,
17857 base_power: 40.0,
17858 category: MoveCategory::Special,
17859 move_type: PokemonType::DRAGON,
17860 flags: Flags {
17861 protect: true,
17862 wind: true,
17863 ..Default::default()
17864 },
17865 secondaries: Some(vec![Secondary {
17866 chance: 20.0,
17867 target: MoveTarget::Opponent,
17868 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17869 }]),
17870 ..Default::default()
17871 },
17872 );
17873 moves.insert(
17874 Choices::UPPERHAND,
17875 Choice {
17876 move_id: Choices::UPPERHAND,
17877 base_power: 65.0,
17878 priority: 3,
17879 category: MoveCategory::Physical,
17880 move_type: PokemonType::FIGHTING,
17881 flags: Flags {
17882 contact: true,
17883 protect: true,
17884 ..Default::default()
17885 },
17886 secondaries: Some(vec![Secondary {
17887 chance: 100.0,
17888 target: MoveTarget::Opponent,
17889 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17890 }]),
17891 ..Default::default()
17892 },
17893 );
17894 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17895 moves.insert(
17896 Choices::UPROAR,
17897 Choice {
17898 move_id: Choices::UPROAR,
17899 base_power: 50.0,
17900 category: MoveCategory::Special,
17901 move_type: PokemonType::NORMAL,
17902 flags: Flags {
17903 protect: true,
17904 sound: true,
17905 ..Default::default()
17906 },
17907 ..Default::default()
17908 },
17909 );
17910 } else {
17911 moves.insert(
17912 Choices::UPROAR,
17913 Choice {
17914 move_id: Choices::UPROAR,
17915 base_power: 90.0,
17916 category: MoveCategory::Special,
17917 move_type: PokemonType::NORMAL,
17918 flags: Flags {
17919 protect: true,
17920 sound: true,
17921 ..Default::default()
17922 },
17923 ..Default::default()
17924 },
17925 );
17926 }
17927 moves.insert(
17928 Choices::UTURN,
17929 Choice {
17930 move_id: Choices::UTURN,
17931 base_power: 70.0,
17932 category: MoveCategory::Physical,
17933 move_type: PokemonType::BUG,
17934 flags: Flags {
17935 contact: true,
17936 protect: true,
17937 pivot: true,
17938 ..Default::default()
17939 },
17940 ..Default::default()
17941 },
17942 );
17943 moves.insert(
17944 Choices::VACUUMWAVE,
17945 Choice {
17946 move_id: Choices::VACUUMWAVE,
17947 base_power: 40.0,
17948 category: MoveCategory::Special,
17949 priority: 1,
17950 move_type: PokemonType::FIGHTING,
17951 flags: Flags {
17952 protect: true,
17953 ..Default::default()
17954 },
17955 ..Default::default()
17956 },
17957 );
17958 moves.insert(
17959 Choices::VCREATE,
17960 Choice {
17961 move_id: Choices::VCREATE,
17962 accuracy: 95.0,
17963 base_power: 180.0,
17964 category: MoveCategory::Physical,
17965 move_type: PokemonType::FIRE,
17966 flags: Flags {
17967 contact: true,
17968 protect: true,
17969 ..Default::default()
17970 },
17971 boost: Some(Boost {
17972 target: MoveTarget::User,
17973 boosts: StatBoosts {
17974 attack: 0,
17975 defense: -1,
17976 special_attack: 0,
17977 special_defense: -1,
17978 speed: -1,
17979 accuracy: 0,
17980 },
17981 }),
17982 ..Default::default()
17983 },
17984 );
17985 moves.insert(
17986 Choices::VEEVEEVOLLEY,
17987 Choice {
17988 move_id: Choices::VEEVEEVOLLEY,
17989 category: MoveCategory::Physical,
17990 move_type: PokemonType::NORMAL,
17991 flags: Flags {
17992 contact: true,
17993 protect: true,
17994 ..Default::default()
17995 },
17996 ..Default::default()
17997 },
17998 );
17999 moves.insert(
18000 Choices::VENOMDRENCH,
18001 Choice {
18002 move_id: Choices::VENOMDRENCH,
18003 move_type: PokemonType::POISON,
18004 flags: Flags {
18005 protect: true,
18006 reflectable: true,
18007 ..Default::default()
18008 },
18009 ..Default::default()
18010 },
18011 );
18012 moves.insert(
18013 Choices::VENOSHOCK,
18014 Choice {
18015 move_id: Choices::VENOSHOCK,
18016 base_power: 65.0,
18017 category: MoveCategory::Special,
18018 move_type: PokemonType::POISON,
18019 flags: Flags {
18020 protect: true,
18021 ..Default::default()
18022 },
18023 ..Default::default()
18024 },
18025 );
18026 moves.insert(
18027 Choices::VICTORYDANCE,
18028 Choice {
18029 move_id: Choices::VICTORYDANCE,
18030 target: MoveTarget::User,
18031 move_type: PokemonType::FIGHTING,
18032 flags: Flags {
18033 ..Default::default()
18034 },
18035 boost: Some(Boost {
18036 target: MoveTarget::User,
18037 boosts: StatBoosts {
18038 attack: 1,
18039 defense: 1,
18040 special_attack: 0,
18041 special_defense: 0,
18042 speed: 1,
18043 accuracy: 0,
18044 },
18045 }),
18046 ..Default::default()
18047 },
18048 );
18049 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18050 moves.insert(
18051 Choices::VINEWHIP,
18052 Choice {
18053 move_id: Choices::VINEWHIP,
18054 base_power: 35.0,
18055 category: MoveCategory::Physical,
18056 move_type: PokemonType::GRASS,
18057 flags: Flags {
18058 contact: true,
18059 protect: true,
18060 ..Default::default()
18061 },
18062 ..Default::default()
18063 },
18064 );
18065 } else {
18066 moves.insert(
18067 Choices::VINEWHIP,
18068 Choice {
18069 move_id: Choices::VINEWHIP,
18070 base_power: 45.0,
18071 category: MoveCategory::Physical,
18072 move_type: PokemonType::GRASS,
18073 flags: Flags {
18074 contact: true,
18075 protect: true,
18076 ..Default::default()
18077 },
18078 ..Default::default()
18079 },
18080 );
18081 }
18082 moves.insert(
18083 Choices::VISEGRIP,
18084 Choice {
18085 move_id: Choices::VISEGRIP,
18086 base_power: 55.0,
18087 category: MoveCategory::Physical,
18088 move_type: PokemonType::NORMAL,
18089 flags: Flags {
18090 contact: true,
18091 protect: true,
18092 ..Default::default()
18093 },
18094 ..Default::default()
18095 },
18096 );
18097 moves.insert(
18098 Choices::VITALTHROW,
18099 Choice {
18100 move_id: Choices::VITALTHROW,
18101 base_power: 70.0,
18102 category: MoveCategory::Physical,
18103 priority: -1,
18104 move_type: PokemonType::FIGHTING,
18105 flags: Flags {
18106 contact: true,
18107 protect: true,
18108 ..Default::default()
18109 },
18110 ..Default::default()
18111 },
18112 );
18113 moves.insert(
18114 Choices::VOLTSWITCH,
18115 Choice {
18116 move_id: Choices::VOLTSWITCH,
18117 base_power: 70.0,
18118 category: MoveCategory::Special,
18119 move_type: PokemonType::ELECTRIC,
18120 flags: Flags {
18121 protect: true,
18122 pivot: true,
18123 ..Default::default()
18124 },
18125 ..Default::default()
18126 },
18127 );
18128 moves.insert(
18129 Choices::VOLTTACKLE,
18130 Choice {
18131 move_id: Choices::VOLTTACKLE,
18132 base_power: 120.0,
18133 category: MoveCategory::Physical,
18134 move_type: PokemonType::ELECTRIC,
18135 flags: Flags {
18136 contact: true,
18137 protect: true,
18138 ..Default::default()
18139 },
18140 secondaries: Some(vec![Secondary {
18141 chance: 10.0,
18142 target: MoveTarget::Opponent,
18143 effect: Effect::Status(PokemonStatus::PARALYZE),
18144 }]),
18145 recoil: Some(0.33),
18146 ..Default::default()
18147 },
18148 );
18149 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18150 moves.insert(
18151 Choices::WAKEUPSLAP,
18152 Choice {
18153 move_id: Choices::WAKEUPSLAP,
18154 base_power: 60.0,
18155 category: MoveCategory::Physical,
18156 move_type: PokemonType::FIGHTING,
18157 flags: Flags {
18158 contact: true,
18159 protect: true,
18160 ..Default::default()
18161 },
18162 ..Default::default()
18163 },
18164 );
18165 } else {
18166 moves.insert(
18167 Choices::WAKEUPSLAP,
18168 Choice {
18169 move_id: Choices::WAKEUPSLAP,
18170 base_power: 70.0,
18171 category: MoveCategory::Physical,
18172 move_type: PokemonType::FIGHTING,
18173 flags: Flags {
18174 contact: true,
18175 protect: true,
18176 ..Default::default()
18177 },
18178 ..Default::default()
18179 },
18180 );
18181 }
18182 moves.insert(
18183 Choices::WATERFALL,
18184 Choice {
18185 move_id: Choices::WATERFALL,
18186 base_power: 80.0,
18187 category: MoveCategory::Physical,
18188 move_type: PokemonType::WATER,
18189 flags: Flags {
18190 contact: true,
18191 protect: true,
18192 ..Default::default()
18193 },
18194 secondaries: Some(vec![Secondary {
18195 chance: 20.0,
18196 target: MoveTarget::Opponent,
18197 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18198 }]),
18199 ..Default::default()
18200 },
18201 );
18202 moves.insert(
18203 Choices::WATERGUN,
18204 Choice {
18205 move_id: Choices::WATERGUN,
18206 base_power: 40.0,
18207 category: MoveCategory::Special,
18208 move_type: PokemonType::WATER,
18209 flags: Flags {
18210 protect: true,
18211 ..Default::default()
18212 },
18213 ..Default::default()
18214 },
18215 );
18216 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18217 moves.insert(
18218 Choices::WATERPLEDGE,
18219 Choice {
18220 move_id: Choices::WATERPLEDGE,
18221 base_power: 50.0,
18222 category: MoveCategory::Special,
18223 move_type: PokemonType::WATER,
18224 flags: Flags {
18225 protect: true,
18226 ..Default::default()
18227 },
18228 ..Default::default()
18229 },
18230 );
18231 } else {
18232 moves.insert(
18233 Choices::WATERPLEDGE,
18234 Choice {
18235 move_id: Choices::WATERPLEDGE,
18236 base_power: 80.0,
18237 category: MoveCategory::Special,
18238 move_type: PokemonType::WATER,
18239 flags: Flags {
18240 protect: true,
18241 ..Default::default()
18242 },
18243 ..Default::default()
18244 },
18245 );
18246 }
18247 moves.insert(
18248 Choices::WATERPULSE,
18249 Choice {
18250 move_id: Choices::WATERPULSE,
18251 base_power: 60.0,
18252 category: MoveCategory::Special,
18253 move_type: PokemonType::WATER,
18254 flags: Flags {
18255 protect: true,
18256 pulse: true,
18257 ..Default::default()
18258 },
18259 secondaries: Some(vec![Secondary {
18260 chance: 20.0,
18261 target: MoveTarget::Opponent,
18262 effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
18263 }]),
18264 ..Default::default()
18265 },
18266 );
18267
18268 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
18269 moves.insert(
18270 Choices::WATERSHURIKEN,
18271 Choice {
18272 move_id: Choices::WATERSHURIKEN,
18273 base_power: 15.0,
18274 category: MoveCategory::Physical,
18275 priority: 1,
18276 move_type: PokemonType::WATER,
18277 flags: Flags {
18278 protect: true,
18279 ..Default::default()
18280 },
18281 ..Default::default()
18282 },
18283 );
18284 } else {
18285 moves.insert(
18286 Choices::WATERSHURIKEN,
18287 Choice {
18288 move_id: Choices::WATERSHURIKEN,
18289 base_power: 15.0,
18290 category: MoveCategory::Special,
18291 priority: 1,
18292 move_type: PokemonType::WATER,
18293 flags: Flags {
18294 protect: true,
18295 ..Default::default()
18296 },
18297 ..Default::default()
18298 },
18299 );
18300 }
18301
18302 moves.insert(
18303 Choices::WATERSPORT,
18304 Choice {
18305 move_id: Choices::WATERSPORT,
18306 move_type: PokemonType::WATER,
18307 flags: Flags {
18308 ..Default::default()
18309 },
18310 ..Default::default()
18311 },
18312 );
18313 moves.insert(
18314 Choices::WATERSPOUT,
18315 Choice {
18316 move_id: Choices::WATERSPOUT,
18317 base_power: 150.0,
18318 category: MoveCategory::Special,
18319 move_type: PokemonType::WATER,
18320 flags: Flags {
18321 protect: true,
18322 ..Default::default()
18323 },
18324 ..Default::default()
18325 },
18326 );
18327 moves.insert(
18328 Choices::WAVECRASH,
18329 Choice {
18330 move_id: Choices::WAVECRASH,
18331 base_power: 120.0,
18332 category: MoveCategory::Physical,
18333 move_type: PokemonType::WATER,
18334 flags: Flags {
18335 contact: true,
18336 protect: true,
18337 ..Default::default()
18338 },
18339 recoil: Some(0.33),
18340 ..Default::default()
18341 },
18342 );
18343 moves.insert(
18344 Choices::WEATHERBALL,
18345 Choice {
18346 move_id: Choices::WEATHERBALL,
18347 base_power: 50.0,
18348 category: MoveCategory::Special,
18349 move_type: PokemonType::NORMAL,
18350 flags: Flags {
18351 bullet: true,
18352 protect: true,
18353 ..Default::default()
18354 },
18355 ..Default::default()
18356 },
18357 );
18358 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
18359 moves.insert(
18360 Choices::WHIRLPOOL,
18361 Choice {
18362 move_id: Choices::WHIRLPOOL,
18363 accuracy: 70.0,
18364 base_power: 15.0,
18365 category: MoveCategory::Special,
18366 move_type: PokemonType::WATER,
18367 flags: Flags {
18368 protect: true,
18369 ..Default::default()
18370 },
18371 volatile_status: Some(VolatileStatus {
18372 target: MoveTarget::Opponent,
18373 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18374 }),
18375 ..Default::default()
18376 },
18377 );
18378 } else {
18379 moves.insert(
18380 Choices::WHIRLPOOL,
18381 Choice {
18382 move_id: Choices::WHIRLPOOL,
18383 accuracy: 85.0,
18384 base_power: 35.0,
18385 category: MoveCategory::Special,
18386 move_type: PokemonType::WATER,
18387 flags: Flags {
18388 protect: true,
18389 ..Default::default()
18390 },
18391 volatile_status: Some(VolatileStatus {
18392 target: MoveTarget::Opponent,
18393 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18394 }),
18395 ..Default::default()
18396 },
18397 );
18398 }
18399 moves.insert(
18400 Choices::WHIRLWIND,
18401 Choice {
18402 move_id: Choices::WHIRLWIND,
18403 priority: -6,
18404 move_type: PokemonType::NORMAL,
18405 flags: Flags {
18406 drag: true,
18407 reflectable: true,
18408 wind: true,
18409 ..Default::default()
18410 },
18411 ..Default::default()
18412 },
18413 );
18414
18415 if cfg!(feature = "gen9") {
18416 moves.insert(
18417 Choices::WICKEDBLOW,
18418 Choice {
18419 move_id: Choices::WICKEDBLOW,
18420 base_power: 75.0,
18421 category: MoveCategory::Physical,
18422 move_type: PokemonType::DARK,
18423 flags: Flags {
18424 contact: true,
18425 protect: true,
18426 punch: true,
18427 ..Default::default()
18428 },
18429 ..Default::default()
18430 },
18431 );
18432 } else {
18433 moves.insert(
18434 Choices::WICKEDBLOW,
18435 Choice {
18436 move_id: Choices::WICKEDBLOW,
18437 base_power: 80.0,
18438 category: MoveCategory::Physical,
18439 move_type: PokemonType::DARK,
18440 flags: Flags {
18441 contact: true,
18442 protect: true,
18443 punch: true,
18444 ..Default::default()
18445 },
18446 ..Default::default()
18447 },
18448 );
18449 }
18450
18451 moves.insert(
18452 Choices::WICKEDTORQUE,
18453 Choice {
18454 move_id: Choices::WICKEDTORQUE,
18455 base_power: 80.0,
18456 category: MoveCategory::Physical,
18457 move_type: PokemonType::DARK,
18458 flags: Flags {
18459 protect: true,
18460 ..Default::default()
18461 },
18462 secondaries: Some(vec![Secondary {
18463 chance: 10.0,
18464 target: MoveTarget::Opponent,
18465 effect: Effect::Status(PokemonStatus::SLEEP),
18466 }]),
18467 ..Default::default()
18468 },
18469 );
18470 moves.insert(
18471 Choices::WIDEGUARD,
18472 Choice {
18473 move_id: Choices::WIDEGUARD,
18474 priority: 3,
18475 target: MoveTarget::User,
18476 move_type: PokemonType::ROCK,
18477 flags: Flags {
18478 ..Default::default()
18479 },
18480 side_condition: Some(SideCondition {
18481 target: MoveTarget::User,
18482 condition: PokemonSideCondition::WideGuard,
18483 }),
18484 ..Default::default()
18485 },
18486 );
18487 moves.insert(
18488 Choices::WILDBOLTSTORM,
18489 Choice {
18490 move_id: Choices::WILDBOLTSTORM,
18491 accuracy: 80.0,
18492 base_power: 100.0,
18493 category: MoveCategory::Special,
18494 move_type: PokemonType::ELECTRIC,
18495 flags: Flags {
18496 protect: true,
18497 wind: true,
18498 ..Default::default()
18499 },
18500 secondaries: Some(vec![Secondary {
18501 chance: 20.0,
18502 target: MoveTarget::Opponent,
18503 effect: Effect::Status(PokemonStatus::PARALYZE),
18504 }]),
18505 ..Default::default()
18506 },
18507 );
18508 moves.insert(
18509 Choices::WILDCHARGE,
18510 Choice {
18511 move_id: Choices::WILDCHARGE,
18512 base_power: 90.0,
18513 category: MoveCategory::Physical,
18514 move_type: PokemonType::ELECTRIC,
18515 flags: Flags {
18516 contact: true,
18517 protect: true,
18518 ..Default::default()
18519 },
18520 recoil: Some(0.25),
18521 ..Default::default()
18522 },
18523 );
18524 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18525 moves.insert(
18526 Choices::WILLOWISP,
18527 Choice {
18528 move_id: Choices::WILLOWISP,
18529 accuracy: 75.0,
18530 status: Some(Status {
18531 target: MoveTarget::Opponent,
18532 status: PokemonStatus::BURN,
18533 }),
18534 move_type: PokemonType::FIRE,
18535 flags: Flags {
18536 protect: true,
18537 reflectable: true,
18538 ..Default::default()
18539 },
18540 ..Default::default()
18541 },
18542 );
18543 } else {
18544 moves.insert(
18545 Choices::WILLOWISP,
18546 Choice {
18547 move_id: Choices::WILLOWISP,
18548 accuracy: 85.0,
18549 status: Some(Status {
18550 target: MoveTarget::Opponent,
18551 status: PokemonStatus::BURN,
18552 }),
18553 move_type: PokemonType::FIRE,
18554 flags: Flags {
18555 protect: true,
18556 reflectable: true,
18557 ..Default::default()
18558 },
18559 ..Default::default()
18560 },
18561 );
18562 }
18563 if cfg!(feature = "gen1") {
18564 moves.insert(
18565 Choices::WINGATTACK,
18566 Choice {
18567 move_id: Choices::WINGATTACK,
18568 base_power: 35.0,
18569 category: MoveCategory::Physical,
18570 move_type: PokemonType::FLYING,
18571 flags: Flags {
18572 contact: true,
18573 protect: true,
18574 ..Default::default()
18575 },
18576 ..Default::default()
18577 },
18578 );
18579 } else {
18580 moves.insert(
18581 Choices::WINGATTACK,
18582 Choice {
18583 move_id: Choices::WINGATTACK,
18584 base_power: 60.0,
18585 category: MoveCategory::Physical,
18586 move_type: PokemonType::FLYING,
18587 flags: Flags {
18588 contact: true,
18589 protect: true,
18590 ..Default::default()
18591 },
18592 ..Default::default()
18593 },
18594 );
18595 }
18596 moves.insert(
18597 Choices::WISH,
18598 Choice {
18599 move_id: Choices::WISH,
18600 target: MoveTarget::User,
18601 move_type: PokemonType::NORMAL,
18602 flags: Flags {
18603 heal: true,
18604 ..Default::default()
18605 },
18606 ..Default::default()
18607 },
18608 );
18609 moves.insert(
18610 Choices::WITHDRAW,
18611 Choice {
18612 move_id: Choices::WITHDRAW,
18613 target: MoveTarget::User,
18614 move_type: PokemonType::WATER,
18615 flags: Flags {
18616 ..Default::default()
18617 },
18618 boost: Some(Boost {
18619 target: MoveTarget::User,
18620 boosts: StatBoosts {
18621 attack: 0,
18622 defense: 1,
18623 special_attack: 0,
18624 special_defense: 0,
18625 speed: 0,
18626 accuracy: 0,
18627 },
18628 }),
18629 ..Default::default()
18630 },
18631 );
18632 moves.insert(
18633 Choices::WONDERROOM,
18634 Choice {
18635 move_id: Choices::WONDERROOM,
18636 move_type: PokemonType::PSYCHIC,
18637 flags: Flags {
18638 ..Default::default()
18639 },
18640 ..Default::default()
18641 },
18642 );
18643 moves.insert(
18644 Choices::WOODHAMMER,
18645 Choice {
18646 move_id: Choices::WOODHAMMER,
18647 base_power: 120.0,
18648 category: MoveCategory::Physical,
18649 move_type: PokemonType::GRASS,
18650 flags: Flags {
18651 contact: true,
18652 protect: true,
18653 ..Default::default()
18654 },
18655 recoil: Some(0.33),
18656 ..Default::default()
18657 },
18658 );
18659 moves.insert(
18660 Choices::WORKUP,
18661 Choice {
18662 move_id: Choices::WORKUP,
18663 target: MoveTarget::User,
18664 move_type: PokemonType::NORMAL,
18665 flags: Flags {
18666 ..Default::default()
18667 },
18668 boost: Some(Boost {
18669 target: MoveTarget::User,
18670 boosts: StatBoosts {
18671 attack: 1,
18672 defense: 0,
18673 special_attack: 1,
18674 special_defense: 0,
18675 speed: 0,
18676 accuracy: 0,
18677 },
18678 }),
18679 ..Default::default()
18680 },
18681 );
18682 moves.insert(
18683 Choices::WORRYSEED,
18684 Choice {
18685 move_id: Choices::WORRYSEED,
18686 move_type: PokemonType::GRASS,
18687 flags: Flags {
18688 protect: true,
18689 reflectable: true,
18690 ..Default::default()
18691 },
18692 ..Default::default()
18693 },
18694 );
18695 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
18696 moves.insert(
18697 Choices::WRAP,
18698 Choice {
18699 move_id: Choices::WRAP,
18700 accuracy: 85.0,
18701 base_power: 15.0,
18702 category: MoveCategory::Physical,
18703 move_type: PokemonType::NORMAL,
18704 flags: Flags {
18705 contact: true,
18706 protect: true,
18707 ..Default::default()
18708 },
18709 volatile_status: Some(VolatileStatus {
18710 target: MoveTarget::Opponent,
18711 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18712 }),
18713 ..Default::default()
18714 },
18715 );
18716 } else {
18717 moves.insert(
18718 Choices::WRAP,
18719 Choice {
18720 move_id: Choices::WRAP,
18721 accuracy: 90.0,
18722 base_power: 15.0,
18723 category: MoveCategory::Physical,
18724 move_type: PokemonType::NORMAL,
18725 flags: Flags {
18726 contact: true,
18727 protect: true,
18728 ..Default::default()
18729 },
18730 volatile_status: Some(VolatileStatus {
18731 target: MoveTarget::Opponent,
18732 volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18733 }),
18734 ..Default::default()
18735 },
18736 );
18737 }
18738 moves.insert(
18739 Choices::WRINGOUT,
18740 Choice {
18741 move_id: Choices::WRINGOUT,
18742 category: MoveCategory::Special,
18743 move_type: PokemonType::NORMAL,
18744 flags: Flags {
18745 contact: true,
18746 protect: true,
18747 ..Default::default()
18748 },
18749 ..Default::default()
18750 },
18751 );
18752 moves.insert(
18753 Choices::XSCISSOR,
18754 Choice {
18755 move_id: Choices::XSCISSOR,
18756 base_power: 80.0,
18757 category: MoveCategory::Physical,
18758 move_type: PokemonType::BUG,
18759 flags: Flags {
18760 contact: true,
18761 protect: true,
18762 slicing: true,
18763 ..Default::default()
18764 },
18765 ..Default::default()
18766 },
18767 );
18768 moves.insert(
18769 Choices::YAWN,
18770 Choice {
18771 move_id: Choices::YAWN,
18772 move_type: PokemonType::NORMAL,
18773 flags: Flags {
18774 protect: true,
18775 reflectable: true,
18776 ..Default::default()
18777 },
18778 volatile_status: Some(VolatileStatus {
18779 target: MoveTarget::Opponent,
18780 volatile_status: PokemonVolatileStatus::YAWN,
18781 }),
18782 ..Default::default()
18783 },
18784 );
18785 if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
18786 moves.insert(
18787 Choices::ZAPCANNON,
18788 Choice {
18789 move_id: Choices::ZAPCANNON,
18790 accuracy: 50.0,
18791 base_power: 100.0,
18792 category: MoveCategory::Special,
18793 move_type: PokemonType::ELECTRIC,
18794 flags: Flags {
18795 bullet: true,
18796 protect: true,
18797 ..Default::default()
18798 },
18799 secondaries: Some(vec![Secondary {
18800 chance: 100.0,
18801 target: MoveTarget::Opponent,
18802 effect: Effect::Status(PokemonStatus::PARALYZE),
18803 }]),
18804 ..Default::default()
18805 },
18806 );
18807 } else {
18808 moves.insert(
18809 Choices::ZAPCANNON,
18810 Choice {
18811 move_id: Choices::ZAPCANNON,
18812 accuracy: 50.0,
18813 base_power: 120.0,
18814 category: MoveCategory::Special,
18815 move_type: PokemonType::ELECTRIC,
18816 flags: Flags {
18817 bullet: true,
18818 protect: true,
18819 ..Default::default()
18820 },
18821 secondaries: Some(vec![Secondary {
18822 chance: 100.0,
18823 target: MoveTarget::Opponent,
18824 effect: Effect::Status(PokemonStatus::PARALYZE),
18825 }]),
18826 ..Default::default()
18827 },
18828 );
18829 }
18830 moves.insert(
18831 Choices::ZENHEADBUTT,
18832 Choice {
18833 move_id: Choices::ZENHEADBUTT,
18834 accuracy: 90.0,
18835 base_power: 80.0,
18836 category: MoveCategory::Physical,
18837 move_type: PokemonType::PSYCHIC,
18838 flags: Flags {
18839 contact: true,
18840 protect: true,
18841 ..Default::default()
18842 },
18843 secondaries: Some(vec![Secondary {
18844 chance: 20.0,
18845 target: MoveTarget::Opponent,
18846 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18847 }]),
18848 ..Default::default()
18849 },
18850 );
18851 moves.insert(
18852 Choices::ZINGZAP,
18853 Choice {
18854 move_id: Choices::ZINGZAP,
18855 base_power: 80.0,
18856 category: MoveCategory::Physical,
18857 move_type: PokemonType::ELECTRIC,
18858 flags: Flags {
18859 contact: true,
18860 protect: true,
18861 ..Default::default()
18862 },
18863 secondaries: Some(vec![Secondary {
18864 chance: 30.0,
18865 target: MoveTarget::Opponent,
18866 effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18867 }]),
18868 ..Default::default()
18869 },
18870 );
18871 moves.insert(
18872 Choices::ZIPPYZAP,
18873 Choice {
18874 move_id: Choices::ZIPPYZAP,
18875 base_power: 80.0,
18876 category: MoveCategory::Physical,
18877 priority: 2,
18878 move_type: PokemonType::ELECTRIC,
18879 flags: Flags {
18880 contact: true,
18881 protect: true,
18882 ..Default::default()
18883 },
18884 secondaries: Some(vec![Secondary {
18885 chance: 100.0,
18886 target: MoveTarget::User,
18887 effect: Effect::Boost(StatBoosts {
18888 attack: 0,
18889 defense: 0,
18890 special_attack: 0,
18891 special_defense: 0,
18892 speed: 0,
18893 accuracy: 0,
18894 }),
18895 }]),
18896 ..Default::default()
18897 },
18898 );
18899
18900 #[cfg(any(feature = "gen1", feature = "gen2", feature = "gen3"))]
18901 undo_physical_special_split(&mut moves);
18902
18903 moves
18904 };
18905}
18906
18907#[derive(Debug, PartialEq, Clone, Copy)]
18908pub enum MoveCategory {
18909 Physical,
18910 Special,
18911 Status,
18912 Switch,
18913}
18914
18915#[derive(PartialEq, Debug, Clone)]
18916pub enum MoveTarget {
18917 User,
18918 Opponent,
18919}
18920
18921#[derive(Debug, Clone)]
18922pub struct VolatileStatus {
18923 pub target: MoveTarget,
18924 pub volatile_status: PokemonVolatileStatus,
18925}
18926
18927#[derive(Debug, Clone)]
18928pub struct SideCondition {
18929 pub target: MoveTarget,
18930 pub condition: PokemonSideCondition,
18931}
18932
18933#[derive(Debug, Clone)]
18934pub struct Boost {
18935 pub target: MoveTarget,
18936 pub boosts: StatBoosts,
18937}
18938
18939#[derive(Debug, Clone)]
18940pub struct Heal {
18941 pub target: MoveTarget,
18942 pub amount: f32,
18943}
18944
18945#[derive(Debug, Clone)]
18946pub struct Status {
18947 pub target: MoveTarget,
18948 pub status: PokemonStatus,
18949}
18950
18951#[derive(Debug, Clone, PartialEq)]
18952pub struct StatBoosts {
18953 pub attack: i8,
18954 pub defense: i8,
18955 pub special_attack: i8,
18956 pub special_defense: i8,
18957 pub speed: i8,
18958 pub accuracy: i8,
18959}
18960
18961impl Default for StatBoosts {
18962 fn default() -> StatBoosts {
18963 StatBoosts {
18964 attack: 0,
18965 defense: 0,
18966 special_attack: 0,
18967 special_defense: 0,
18968 speed: 0,
18969 accuracy: 0,
18970 }
18971 }
18972}
18973
18974impl StatBoosts {
18975 pub fn get_as_pokemon_boostable(&self) -> [(PokemonBoostableStat, i8); 6] {
18976 [
18977 (PokemonBoostableStat::Attack, self.attack),
18978 (PokemonBoostableStat::Defense, self.defense),
18979 (PokemonBoostableStat::SpecialAttack, self.special_attack),
18980 (PokemonBoostableStat::SpecialDefense, self.special_defense),
18981 (PokemonBoostableStat::Speed, self.speed),
18982 (PokemonBoostableStat::Accuracy, self.accuracy),
18983 ]
18984 }
18985}
18986
18987#[derive(Debug)]
18988pub struct Myself {
18989 pub volatile_status: Option<VolatileStatus>,
18990 pub boosts: StatBoosts,
18991}
18992
18993#[derive(Debug, Clone)]
18994pub struct Flags {
18995 pub bite: bool,
18996 pub bullet: bool,
18997 pub charge: bool,
18998 pub contact: bool,
18999 pub drag: bool,
19000 pub heal: bool,
19001 pub powder: bool,
19002 pub protect: bool,
19003 pub pulse: bool,
19004 pub punch: bool,
19005 pub recharge: bool,
19006 pub reflectable: bool,
19007 pub slicing: bool,
19008 pub sound: bool,
19009 pub pivot: bool,
19010 pub wind: bool,
19011}
19012
19013impl Default for Flags {
19014 fn default() -> Flags {
19015 Flags {
19016 bite: false,
19017 bullet: false,
19018 charge: false,
19019 contact: false,
19020 drag: false,
19021 heal: false,
19022 powder: false,
19023 protect: false,
19024 pulse: false,
19025 punch: false,
19026 recharge: false,
19027 reflectable: false,
19028 slicing: false,
19029 sound: false,
19030 pivot: false,
19031 wind: false,
19032 }
19033 }
19034}
19035
19036impl Flags {
19037 pub fn clear_all(&mut self) {
19038 self.bite = false;
19039 self.bullet = false;
19040 self.charge = false;
19041 self.contact = false;
19042 self.drag = false;
19043 self.heal = false;
19044 self.powder = false;
19045 self.protect = false;
19046 self.pulse = false;
19047 self.punch = false;
19048 self.recharge = false;
19049 self.reflectable = false;
19050 self.slicing = false;
19051 self.sound = false;
19052 self.pivot = false;
19053 self.wind = false;
19054 }
19055}
19056
19057#[derive(Debug, Clone)]
19058pub struct Secondary {
19059 pub chance: f32,
19060 pub target: MoveTarget,
19061 pub effect: Effect,
19062}
19063
19064#[derive(Debug, Clone, PartialEq)]
19065pub enum Effect {
19066 VolatileStatus(PokemonVolatileStatus),
19067 Boost(StatBoosts),
19068 Status(PokemonStatus),
19069 Heal(f32),
19070 RemoveItem,
19071}
19072
19073#[derive(PartialEq)]
19074pub enum MultiHitMove {
19075 None,
19076 DoubleHit,
19077 TripleHit,
19078 TwoToFiveHits,
19079 PopulationBomb,
19080 TripleAxel,
19081}
19082
19083#[derive(PartialEq)]
19084pub enum MultiAccuracyMove {
19085 None,
19086 TripleHit,
19087 TenHits,
19088}
19089
19090define_enum_with_from_str! {
19091 #[repr(u16)]
19092 #[derive(Eq, PartialEq, Debug, Hash, Copy, Clone)]
19093 Choices {
19094 NONE,
19095 ABSORB,
19096 ACCELEROCK,
19097 ACID,
19098 ACIDARMOR,
19099 ACIDSPRAY,
19100 ACROBATICS,
19101 ACUPRESSURE,
19102 AERIALACE,
19103 AEROBLAST,
19104 AFTERYOU,
19105 AGILITY,
19106 AIRCUTTER,
19107 AIRSLASH,
19108 ALLURINGVOICE,
19109 ALLYSWITCH,
19110 AMNESIA,
19111 ANCHORSHOT,
19112 ANCIENTPOWER,
19113 APPLEACID,
19114 AQUACUTTER,
19115 AQUAJET,
19116 AQUARING,
19117 AQUASTEP,
19118 AQUATAIL,
19119 ARMORCANNON,
19120 ARMTHRUST,
19121 AROMATHERAPY,
19122 AROMATICMIST,
19123 ASSIST,
19124 ASSURANCE,
19125 ASTONISH,
19126 ASTRALBARRAGE,
19127 ATTACKORDER,
19128 ATTRACT,
19129 AURASPHERE,
19130 AURAWHEEL,
19131 AURORABEAM,
19132 AURORAVEIL,
19133 AUTOTOMIZE,
19134 AVALANCHE,
19135 AXEKICK,
19136 BABYDOLLEYES,
19137 BADDYBAD,
19138 BANEFULBUNKER,
19139 BARBBARRAGE,
19140 BARRAGE,
19141 BARRIER,
19142 BATONPASS,
19143 BEAKBLAST,
19144 BEATUP,
19145 BEHEMOTHBASH,
19146 BEHEMOTHBLADE,
19147 BELCH,
19148 BELLYDRUM,
19149 BESTOW,
19150 BIDE,
19151 BIND,
19152 BITE,
19153 BITTERBLADE,
19154 BITTERMALICE,
19155 BLASTBURN,
19156 BLAZEKICK,
19157 BLAZINGTORQUE,
19158 BLEAKWINDSTORM,
19159 BLIZZARD,
19160 BLOCK,
19161 BLOODMOON,
19162 BLUEFLARE,
19163 BODYPRESS,
19164 BODYSLAM,
19165 BOLTBEAK,
19166 BOLTSTRIKE,
19167 BONECLUB,
19168 BONEMERANG,
19169 BONERUSH,
19170 BOOMBURST,
19171 BOUNCE,
19172 BOUNCYBUBBLE,
19173 BRANCHPOKE,
19174 BRAVEBIRD,
19175 BREAKINGSWIPE,
19176 BRICKBREAK,
19177 BRINE,
19178 BRUTALSWING,
19179 BUBBLE,
19180 BUBBLEBEAM,
19181 BUGBITE,
19182 BUGBUZZ,
19183 BULKUP,
19184 BULLDOZE,
19185 BULLETPUNCH,
19186 BULLETSEED,
19187 BURNINGBULWARK,
19188 BURNINGJEALOUSY,
19189 BURNUP,
19190 BUZZYBUZZ,
19191 CALMMIND,
19192 CAMOUFLAGE,
19193 CAPTIVATE,
19194 CEASELESSEDGE,
19195 CELEBRATE,
19196 CHARGE,
19197 CHARGEBEAM,
19198 CHARM,
19199 CHATTER,
19200 CHILLINGWATER,
19201 CHILLYRECEPTION,
19202 CHIPAWAY,
19203 CHLOROBLAST,
19204 CIRCLETHROW,
19205 CLAMP,
19206 CLANGINGSCALES,
19207 CLANGOROUSSOUL,
19208 CLEARSMOG,
19209 CLOSECOMBAT,
19210 COACHING,
19211 COIL,
19212 COLLISIONCOURSE,
19213 COMBATTORQUE,
19214 COMETPUNCH,
19215 COMEUPPANCE,
19216 CONFIDE,
19217 CONFUSERAY,
19218 CONFUSION,
19219 CONSTRICT,
19220 CONVERSION,
19221 CONVERSION2,
19222 COPYCAT,
19223 COREENFORCER,
19224 CORROSIVEGAS,
19225 COSMICPOWER,
19226 COTTONGUARD,
19227 COTTONSPORE,
19228 COUNTER,
19229 COURTCHANGE,
19230 COVET,
19231 CRABHAMMER,
19232 CRAFTYSHIELD,
19233 CROSSCHOP,
19234 CROSSPOISON,
19235 CRUNCH,
19236 CRUSHCLAW,
19237 CRUSHGRIP,
19238 CURSE,
19239 CUT,
19240 DARKESTLARIAT,
19241 DARKPULSE,
19242 DARKVOID,
19243 DAZZLINGGLEAM,
19244 DECORATE,
19245 DEFENDORDER,
19246 DEFENSECURL,
19247 DEFOG,
19248 DESTINYBOND,
19249 DETECT,
19250 DIAMONDSTORM,
19251 DIG,
19252 DIRECLAW,
19253 DISABLE,
19254 DISARMINGVOICE,
19255 DISCHARGE,
19256 DIVE,
19257 DIZZYPUNCH,
19258 DOODLE,
19259 DOOMDESIRE,
19260 DOUBLEEDGE,
19261 DOUBLEHIT,
19262 DOUBLEIRONBASH,
19263 DOUBLEKICK,
19264 DOUBLESHOCK,
19265 DOUBLESLAP,
19266 DOUBLETEAM,
19267 DRACOMETEOR,
19268 DRAGONASCENT,
19269 DRAGONBREATH,
19270 DRAGONCHEER,
19271 DRAGONCLAW,
19272 DRAGONDANCE,
19273 DRAGONDARTS,
19274 DRAGONENERGY,
19275 DRAGONHAMMER,
19276 DRAGONPULSE,
19277 DRAGONRAGE,
19278 DRAGONRUSH,
19279 DRAGONTAIL,
19280 DRAININGKISS,
19281 DRAINPUNCH,
19282 DREAMEATER,
19283 DRILLPECK,
19284 DRILLRUN,
19285 DRUMBEATING,
19286 DUALCHOP,
19287 DUALWINGBEAT,
19288 DYNAMAXCANNON,
19289 DYNAMICPUNCH,
19290 EARTHPOWER,
19291 EARTHQUAKE,
19292 ECHOEDVOICE,
19293 EERIEIMPULSE,
19294 EERIESPELL,
19295 EGGBOMB,
19296 ELECTRICTERRAIN,
19297 ELECTRIFY,
19298 ELECTROBALL,
19299 ELECTRODRIFT,
19300 ELECTROSHOT,
19301 ELECTROWEB,
19302 EMBARGO,
19303 EMBER,
19304 ENCORE,
19305 ENDEAVOR,
19306 ENDURE,
19307 ENERGYBALL,
19308 ENTRAINMENT,
19309 ERUPTION,
19310 ESPERWING,
19311 ETERNABEAM,
19312 EXPANDINGFORCE,
19313 EXPLOSION,
19314 EXTRASENSORY,
19315 EXTREMESPEED,
19316 FACADE,
19317 FAIRYLOCK,
19318 FAIRYWIND,
19319 FAKEOUT,
19320 FAKETEARS,
19321 FALSESURRENDER,
19322 FALSESWIPE,
19323 FEATHERDANCE,
19324 FEINT,
19325 FEINTATTACK,
19326 FELLSTINGER,
19327 FICKLEBEAM,
19328 FIERYDANCE,
19329 FIERYWRATH,
19330 FILLETAWAY,
19331 FINALGAMBIT,
19332 FIREBLAST,
19333 FIREFANG,
19334 FIRELASH,
19335 FIREPLEDGE,
19336 FIREPUNCH,
19337 FIRESPIN,
19338 FIRSTIMPRESSION,
19339 FISHIOUSREND,
19340 FISSURE,
19341 FLAIL,
19342 FLAMEBURST,
19343 FLAMECHARGE,
19344 FLAMETHROWER,
19345 FLAMEWHEEL,
19346 FLAREBLITZ,
19347 FLASH,
19348 FLASHCANNON,
19349 FLATTER,
19350 FLEURCANNON,
19351 FLING,
19352 FLIPTURN,
19353 FLOATYFALL,
19354 FLORALHEALING,
19355 FLOWERSHIELD,
19356 FLOWERTRICK,
19357 FLY,
19358 FLYINGPRESS,
19359 FOCUSBLAST,
19360 FOCUSENERGY,
19361 FOCUSPUNCH,
19362 FOLLOWME,
19363 FORCEPALM,
19364 FORESIGHT,
19365 FORESTSCURSE,
19366 FOULPLAY,
19367 FREEZEDRY,
19368 FREEZESHOCK,
19369 FREEZINGGLARE,
19370 FREEZYFROST,
19371 FRENZYPLANT,
19372 FROSTBREATH,
19373 FRUSTRATION,
19374 FURYATTACK,
19375 FURYCUTTER,
19376 FURYSWIPES,
19377 FUSIONBOLT,
19378 FUSIONFLARE,
19379 FUTURESIGHT,
19380 GASTROACID,
19381 GEARGRIND,
19382 GEARUP,
19383 GEOMANCY,
19384 GIGADRAIN,
19385 GIGAIMPACT,
19386 GIGATONHAMMER,
19387 GLACIALLANCE,
19388 GLACIATE,
19389 GLAIVERUSH,
19390 GLARE,
19391 GLITZYGLOW,
19392 GRASSKNOT,
19393 GRASSPLEDGE,
19394 GRASSWHISTLE,
19395 GRASSYGLIDE,
19396 GRASSYTERRAIN,
19397 GRAVAPPLE,
19398 GRAVITY,
19399 GROWL,
19400 GROWTH,
19401 GRUDGE,
19402 GUARDSPLIT,
19403 GUARDSWAP,
19404 GUILLOTINE,
19405 GUNKSHOT,
19406 GUST,
19407 GYROBALL,
19408 HAIL,
19409 HAMMERARM,
19410 HAPPYHOUR,
19411 HARDEN,
19412 HARDPRESS,
19413 HAZE,
19414 HEADBUTT,
19415 HEADCHARGE,
19416 HEADLONGRUSH,
19417 HEADSMASH,
19418 HEALBELL,
19419 HEALBLOCK,
19420 HEALINGWISH,
19421 HEALORDER,
19422 HEALPULSE,
19423 HEARTSTAMP,
19424 HEARTSWAP,
19425 HEATCRASH,
19426 HEATWAVE,
19427 HEAVYSLAM,
19428 HELPINGHAND,
19429 HEX,
19430 HIDDENPOWER,
19431 HIDDENPOWERBUG60,
19432 HIDDENPOWERBUG70,
19433 HIDDENPOWERDARK60,
19434 HIDDENPOWERDARK70,
19435 HIDDENPOWERDRAGON60,
19436 HIDDENPOWERDRAGON70,
19437 HIDDENPOWERELECTRIC60,
19438 HIDDENPOWERELECTRIC70,
19439 HIDDENPOWERFIGHTING60,
19440 HIDDENPOWERFIGHTING70,
19441 HIDDENPOWERFIRE60,
19442 HIDDENPOWERFIRE70,
19443 HIDDENPOWERFLYING60,
19444 HIDDENPOWERFLYING70,
19445 HIDDENPOWERGHOST60,
19446 HIDDENPOWERGHOST70,
19447 HIDDENPOWERGRASS60,
19448 HIDDENPOWERGRASS70,
19449 HIDDENPOWERGROUND60,
19450 HIDDENPOWERGROUND70,
19451 HIDDENPOWERICE60,
19452 HIDDENPOWERICE70,
19453 HIDDENPOWERPOISON60,
19454 HIDDENPOWERPOISON70,
19455 HIDDENPOWERPSYCHIC60,
19456 HIDDENPOWERPSYCHIC70,
19457 HIDDENPOWERROCK60,
19458 HIDDENPOWERROCK70,
19459 HIDDENPOWERSTEEL60,
19460 HIDDENPOWERSTEEL70,
19461 HIDDENPOWERWATER60,
19462 HIDDENPOWERWATER70,
19463 HIGHHORSEPOWER,
19464 HIGHJUMPKICK,
19465 HOLDBACK,
19466 HOLDHANDS,
19467 HONECLAWS,
19468 HORNATTACK,
19469 HORNDRILL,
19470 HORNLEECH,
19471 HOWL,
19472 HURRICANE,
19473 HYDROCANNON,
19474 HYDROPUMP,
19475 HYDROSTEAM,
19476 HYPERBEAM,
19477 HYPERDRILL,
19478 HYPERFANG,
19479 HYPERSPACEFURY,
19480 HYPERSPACEHOLE,
19481 HYPERVOICE,
19482 HYPNOSIS,
19483 ICEBALL,
19484 ICEBEAM,
19485 ICEBURN,
19486 ICEFANG,
19487 ICEHAMMER,
19488 ICEPUNCH,
19489 ICESHARD,
19490 ICESPINNER,
19491 ICICLECRASH,
19492 ICICLESPEAR,
19493 ICYWIND,
19494 IMPRISON,
19495 INCINERATE,
19496 INFERNALPARADE,
19497 INFERNO,
19498 INFESTATION,
19499 INGRAIN,
19500 INSTRUCT,
19501 IONDELUGE,
19502 IRONDEFENSE,
19503 IRONHEAD,
19504 IRONTAIL,
19505 IVYCUDGEL,
19506 JAWLOCK,
19507 JETPUNCH,
19508 JUDGMENT,
19509 JUMPKICK,
19510 JUNGLEHEALING,
19511 KARATECHOP,
19512 KINESIS,
19513 KINGSSHIELD,
19514 KNOCKOFF,
19515 KOWTOWCLEAVE,
19516 LANDSWRATH,
19517 LASERFOCUS,
19518 LASHOUT,
19519 LASTRESORT,
19520 LASTRESPECTS,
19521 LAVAPLUME,
19522 LEAFAGE,
19523 LEAFBLADE,
19524 LEAFSTORM,
19525 LEAFTORNADO,
19526 LEECHLIFE,
19527 LEECHSEED,
19528 LEER,
19529 LICK,
19530 LIFEDEW,
19531 LIGHTOFRUIN,
19532 LIGHTSCREEN,
19533 LIQUIDATION,
19534 LOCKON,
19535 LOVELYKISS,
19536 LOWKICK,
19537 LOWSWEEP,
19538 LUCKYCHANT,
19539 LUMINACRASH,
19540 LUNARBLESSING,
19541 LUNARDANCE,
19542 LUNGE,
19543 LUSTERPURGE,
19544 MACHPUNCH,
19545 MAGICALLEAF,
19546 MAGICALTORQUE,
19547 MAGICCOAT,
19548 MAGICPOWDER,
19549 MAGICROOM,
19550 MAGMASTORM,
19551 MAGNETBOMB,
19552 MAGNETICFLUX,
19553 MAGNETRISE,
19554 MAGNITUDE,
19555 MAKEITRAIN,
19556 MALIGNANTCHAIN,
19557 MATBLOCK,
19558 MATCHAGOTCHA,
19559 MEANLOOK,
19560 MEDITATE,
19561 MEFIRST,
19562 MEGADRAIN,
19563 MEGAHORN,
19564 MEGAKICK,
19565 MEGAPUNCH,
19566 MEMENTO,
19567 METALBURST,
19568 METALCLAW,
19569 METALSOUND,
19570 METEORASSAULT,
19571 METEORBEAM,
19572 METEORMASH,
19573 METRONOME,
19574 MIGHTYCLEAVE,
19575 MILKDRINK,
19576 MIMIC,
19577 MINDBLOWN,
19578 MINDREADER,
19579 MINIMIZE,
19580 MIRACLEEYE,
19581 MIRRORCOAT,
19582 MIRRORMOVE,
19583 MIRRORSHOT,
19584 MIST,
19585 MISTBALL,
19586 MISTYEXPLOSION,
19587 MISTYTERRAIN,
19588 MOONBLAST,
19589 MOONGEISTBEAM,
19590 MOONLIGHT,
19591 MORNINGSUN,
19592 MORTALSPIN,
19593 MOUNTAINGALE,
19594 MUDBOMB,
19595 MUDDYWATER,
19596 MUDSHOT,
19597 MUDSLAP,
19598 MUDSPORT,
19599 MULTIATTACK,
19600 MYSTICALFIRE,
19601 MYSTICALPOWER,
19602 NASTYPLOT,
19603 NATURALGIFT,
19604 NATUREPOWER,
19605 NATURESMADNESS,
19606 NEEDLEARM,
19607 NIGHTDAZE,
19608 NIGHTMARE,
19609 NIGHTSHADE,
19610 NIGHTSLASH,
19611 NOBLEROAR,
19612 NORETREAT,
19613 NOTHING,
19614 NOXIOUSTORQUE,
19615 NUZZLE,
19616 OBLIVIONWING,
19617 OBSTRUCT,
19618 OCTAZOOKA,
19619 OCTOLOCK,
19620 ODORSLEUTH,
19621 OMINOUSWIND,
19622 ORDERUP,
19623 ORIGINPULSE,
19624 OUTRAGE,
19625 OVERDRIVE,
19626 OVERHEAT,
19627 PAINSPLIT,
19628 PALEOWAVE,
19629 PARABOLICCHARGE,
19630 PARTINGSHOT,
19631 PAYBACK,
19632 PAYDAY,
19633 PECK,
19634 PERISHSONG,
19635 PETALBLIZZARD,
19636 PETALDANCE,
19637 PHANTOMFORCE,
19638 PHOTONGEYSER,
19639 PIKAPAPOW,
19640 PINMISSILE,
19641 PLASMAFISTS,
19642 PLAYNICE,
19643 PLAYROUGH,
19644 PLUCK,
19645 POISONFANG,
19646 POISONGAS,
19647 POISONJAB,
19648 POISONPOWDER,
19649 POISONSTING,
19650 POISONTAIL,
19651 POLLENPUFF,
19652 POLTERGEIST,
19653 POPULATIONBOMB,
19654 POUNCE,
19655 POUND,
19656 POWDER,
19657 POWDERSNOW,
19658 POWERGEM,
19659 POWERSHIFT,
19660 POWERSPLIT,
19661 POWERSWAP,
19662 POWERTRICK,
19663 POWERTRIP,
19664 POWERUPPUNCH,
19665 POWERWHIP,
19666 PRECIPICEBLADES,
19667 PRESENT,
19668 PRISMATICLASER,
19669 PROTECT,
19670 PSYBEAM,
19671 PSYBLADE,
19672 PSYCHIC,
19673 PSYCHICFANGS,
19674 PSYCHICNOISE,
19675 PSYCHICTERRAIN,
19676 PSYCHOBOOST,
19677 PSYCHOCUT,
19678 PSYCHOSHIFT,
19679 PSYCHUP,
19680 PSYSHIELDBASH,
19681 PSYSHOCK,
19682 PSYSTRIKE,
19683 PSYWAVE,
19684 PUNISHMENT,
19685 PURIFY,
19686 PURSUIT,
19687 PYROBALL,
19688 QUASH,
19689 QUICKATTACK,
19690 QUICKGUARD,
19691 QUIVERDANCE,
19692 RAGE,
19693 RAGEFIST,
19694 RAGEPOWDER,
19695 RAGINGBULL,
19696 RAGINGFURY,
19697 RAINDANCE,
19698 RAPIDSPIN,
19699 RAZORLEAF,
19700 RAZORSHELL,
19701 RAZORWIND,
19702 RECHARGE,
19703 RECOVER,
19704 RECYCLE,
19705 REFLECT,
19706 REFLECTTYPE,
19707 REFRESH,
19708 RELICSONG,
19709 REST,
19710 RETALIATE,
19711 RETURN,
19712 RETURN102,
19713 REVELATIONDANCE,
19714 REVENGE,
19715 REVERSAL,
19716 REVIVALBLESSING,
19717 RISINGVOLTAGE,
19718 ROAR,
19719 ROAROFTIME,
19720 ROCKBLAST,
19721 ROCKCLIMB,
19722 ROCKPOLISH,
19723 ROCKSLIDE,
19724 ROCKSMASH,
19725 ROCKTHROW,
19726 ROCKTOMB,
19727 ROCKWRECKER,
19728 ROLEPLAY,
19729 ROLLINGKICK,
19730 ROLLOUT,
19731 ROOST,
19732 ROTOTILLER,
19733 ROUND,
19734 RUINATION,
19735 SACREDFIRE,
19736 SACREDSWORD,
19737 SAFEGUARD,
19738 SALTCURE,
19739 SANDATTACK,
19740 SANDSEARSTORM,
19741 SANDSTORM,
19742 SANDTOMB,
19743 SAPPYSEED,
19744 SCALD,
19745 SCALESHOT,
19746 SCARYFACE,
19747 SCORCHINGSANDS,
19748 SCRATCH,
19749 SCREECH,
19750 SEARINGSHOT,
19751 SECRETPOWER,
19752 SECRETSWORD,
19753 SEEDBOMB,
19754 SEEDFLARE,
19755 SEISMICTOSS,
19756 SELFDESTRUCT,
19757 SHADOWBALL,
19758 SHADOWBONE,
19759 SHADOWCLAW,
19760 SHADOWFORCE,
19761 SHADOWPUNCH,
19762 SHADOWSNEAK,
19763 SHADOWSTRIKE,
19764 SHARPEN,
19765 SHEDTAIL,
19766 SHEERCOLD,
19767 SHELLSIDEARM,
19768 SHELLSMASH,
19769 SHELLTRAP,
19770 SHELTER,
19771 SHIFTGEAR,
19772 SHOCKWAVE,
19773 SHOREUP,
19774 SIGNALBEAM,
19775 SILKTRAP,
19776 SILVERWIND,
19777 SIMPLEBEAM,
19778 SING,
19779 SIZZLYSLIDE,
19780 SKETCH,
19781 SKILLSWAP,
19782 SKITTERSMACK,
19783 SKULLBASH,
19784 SKYATTACK,
19785 SKYDROP,
19786 SKYUPPERCUT,
19787 SLACKOFF,
19788 SLAM,
19789 SLASH,
19790 SLEEPPOWDER,
19791 SLEEPTALK,
19792 SLUDGE,
19793 SLUDGEBOMB,
19794 SLUDGEWAVE,
19795 SMACKDOWN,
19796 SMARTSTRIKE,
19797 SMELLINGSALTS,
19798 SMOG,
19799 SMOKESCREEN,
19800 SNAPTRAP,
19801 SNARL,
19802 SNATCH,
19803 SNIPESHOT,
19804 SNORE,
19805 SNOWSCAPE,
19806 SOAK,
19807 SOFTBOILED,
19808 SOLARBEAM,
19809 SOLARBLADE,
19810 SONICBOOM,
19811 SPACIALREND,
19812 SPARK,
19813 SPARKLINGARIA,
19814 SPARKLYSWIRL,
19815 SPECTRALTHIEF,
19816 SPEEDSWAP,
19817 SPICYEXTRACT,
19818 SPIDERWEB,
19819 SPIKECANNON,
19820 SPIKES,
19821 SPIKYSHIELD,
19822 SPINOUT,
19823 SPIRITBREAK,
19824 SPIRITSHACKLE,
19825 SPITE,
19826 SPITUP,
19827 SPLASH,
19828 SPLISHYSPLASH,
19829 SPORE,
19830 SPOTLIGHT,
19831 SPRINGTIDESTORM,
19832 STEALTHROCK,
19833 STEAMERUPTION,
19834 STEAMROLLER,
19835 STEELBEAM,
19836 STEELROLLER,
19837 STEELWING,
19838 STICKYWEB,
19839 STOCKPILE,
19840 STOMP,
19841 STOMPINGTANTRUM,
19842 STONEAXE,
19843 STONEEDGE,
19844 STOREDPOWER,
19845 STORMTHROW,
19846 STRANGESTEAM,
19847 STRENGTH,
19848 STRENGTHSAP,
19849 STRINGSHOT,
19850 STRUGGLE,
19851 STRUGGLEBUG,
19852 STUFFCHEEKS,
19853 STUNSPORE,
19854 SUBMISSION,
19855 SUBSTITUTE,
19856 SUCKERPUNCH,
19857 SUNNYDAY,
19858 SUNSTEELSTRIKE,
19859 SUPERCELLSLAM,
19860 SUPERFANG,
19861 SUPERPOWER,
19862 SUPERSONIC,
19863 SURF,
19864 SURGINGSTRIKES,
19865 SWAGGER,
19866 SWALLOW,
19867 SWEETKISS,
19868 SWEETSCENT,
19869 SWIFT,
19870 SWITCHEROO,
19871 SWORDSDANCE,
19872 SYNCHRONOISE,
19873 SYNTHESIS,
19874 SYRUPBOMB,
19875 TACHYONCUTTER,
19876 TACKLE,
19877 TAILGLOW,
19878 TAILSLAP,
19879 TAILWHIP,
19880 TAILWIND,
19881 TAKEDOWN,
19882 TAKEHEART,
19883 TARSHOT,
19884 TAUNT,
19885 TEARFULLOOK,
19886 TEATIME,
19887 TECHNOBLAST,
19888 TEETERDANCE,
19889 TELEKINESIS,
19890 TELEPORT,
19891 TEMPERFLARE,
19892 TERABLAST,
19893 TERASTARSTORM,
19894 TERRAINPULSE,
19895 THIEF,
19896 THOUSANDARROWS,
19897 THOUSANDWAVES,
19898 THRASH,
19899 THROATCHOP,
19900 THUNDER,
19901 THUNDERBOLT,
19902 THUNDERCAGE,
19903 THUNDERCLAP,
19904 THUNDERFANG,
19905 THUNDEROUSKICK,
19906 THUNDERPUNCH,
19907 THUNDERSHOCK,
19908 THUNDERWAVE,
19909 TICKLE,
19910 TIDYUP,
19911 TOPSYTURVY,
19912 TORCHSONG,
19913 TORMENT,
19914 TOXIC,
19915 TOXICSPIKES,
19916 TOXICTHREAD,
19917 TRAILBLAZE,
19918 TRANSFORM,
19919 TRIATTACK,
19920 TRICK,
19921 TRICKORTREAT,
19922 TRICKROOM,
19923 TRIPLEARROWS,
19924 TRIPLEAXEL,
19925 TRIPLEDIVE,
19926 TRIPLEKICK,
19927 TROPKICK,
19928 TRUMPCARD,
19929 TWINBEAM,
19930 TWINEEDLE,
19931 TWISTER,
19932 UPPERHAND,
19933 UPROAR,
19934 UTURN,
19935 VACUUMWAVE,
19936 VCREATE,
19937 VEEVEEVOLLEY,
19938 VENOMDRENCH,
19939 VENOSHOCK,
19940 VICTORYDANCE,
19941 VINEWHIP,
19942 VISEGRIP,
19943 VITALTHROW,
19944 VOLTSWITCH,
19945 VOLTTACKLE,
19946 WAKEUPSLAP,
19947 WATERFALL,
19948 WATERGUN,
19949 WATERPLEDGE,
19950 WATERPULSE,
19951 WATERSHURIKEN,
19952 WATERSPORT,
19953 WATERSPOUT,
19954 WAVECRASH,
19955 WEATHERBALL,
19956 WHIRLPOOL,
19957 WHIRLWIND,
19958 WICKEDBLOW,
19959 WICKEDTORQUE,
19960 WIDEGUARD,
19961 WILDBOLTSTORM,
19962 WILDCHARGE,
19963 WILLOWISP,
19964 WINGATTACK,
19965 WISH,
19966 WITHDRAW,
19967 WONDERROOM,
19968 WOODHAMMER,
19969 WORKUP,
19970 WORRYSEED,
19971 WRAP,
19972 WRINGOUT,
19973 XSCISSOR,
19974 YAWN,
19975 ZAPCANNON,
19976 ZENHEADBUTT,
19977 ZINGZAP,
19978 ZIPPYZAP,
19979 },
19980 default = NONE
19981}
19982
19983impl Choices {
19984 pub fn is_hiddenpower(&self) -> bool {
19985 match self {
19986 Choices::HIDDENPOWER
19987 | Choices::HIDDENPOWERBUG60
19988 | Choices::HIDDENPOWERBUG70
19989 | Choices::HIDDENPOWERDARK60
19990 | Choices::HIDDENPOWERDARK70
19991 | Choices::HIDDENPOWERDRAGON60
19992 | Choices::HIDDENPOWERDRAGON70
19993 | Choices::HIDDENPOWERELECTRIC60
19994 | Choices::HIDDENPOWERELECTRIC70
19995 | Choices::HIDDENPOWERFIGHTING60
19996 | Choices::HIDDENPOWERFIGHTING70
19997 | Choices::HIDDENPOWERFIRE60
19998 | Choices::HIDDENPOWERFIRE70
19999 | Choices::HIDDENPOWERFLYING60
20000 | Choices::HIDDENPOWERFLYING70
20001 | Choices::HIDDENPOWERGHOST60
20002 | Choices::HIDDENPOWERGHOST70
20003 | Choices::HIDDENPOWERGRASS60
20004 | Choices::HIDDENPOWERGRASS70
20005 | Choices::HIDDENPOWERGROUND60
20006 | Choices::HIDDENPOWERGROUND70
20007 | Choices::HIDDENPOWERICE60
20008 | Choices::HIDDENPOWERICE70
20009 | Choices::HIDDENPOWERPOISON60
20010 | Choices::HIDDENPOWERPOISON70
20011 | Choices::HIDDENPOWERPSYCHIC60
20012 | Choices::HIDDENPOWERPSYCHIC70
20013 | Choices::HIDDENPOWERROCK60
20014 | Choices::HIDDENPOWERROCK70
20015 | Choices::HIDDENPOWERSTEEL60
20016 | Choices::HIDDENPOWERSTEEL70
20017 | Choices::HIDDENPOWERWATER60
20018 | Choices::HIDDENPOWERWATER70 => true,
20019 _ => false,
20020 }
20021 }
20022 pub fn increased_crit_ratio(&self) -> bool {
20023 match self {
20024 Choices::AEROBLAST
20025 | Choices::AIRCUTTER
20026 | Choices::AQUACUTTER
20027 | Choices::ATTACKORDER
20028 | Choices::BLAZEKICK
20029 | Choices::CRABHAMMER
20030 | Choices::CROSSCHOP
20031 | Choices::CROSSPOISON
20032 | Choices::DIRECLAW
20033 | Choices::DRILLRUN
20034 | Choices::ESPERWING
20035 | Choices::IVYCUDGEL
20036 | Choices::KARATECHOP
20037 | Choices::LEAFBLADE
20038 | Choices::NIGHTSLASH
20039 | Choices::POISONTAIL
20040 | Choices::PSYCHOCUT
20041 | Choices::RAZORLEAF
20042 | Choices::RAZORWIND
20043 | Choices::SHADOWCLAW
20044 | Choices::SKYATTACK
20045 | Choices::SLASH
20046 | Choices::SNIPESHOT
20047 | Choices::SPACIALREND
20048 | Choices::STONEEDGE
20049 | Choices::TRIPLEARROWS => true,
20050 _ => false,
20051 }
20052 }
20053 pub fn guaranteed_crit(&self) -> bool {
20054 match self {
20055 Choices::WICKEDBLOW
20056 | Choices::SURGINGSTRIKES
20057 | Choices::FLOWERTRICK
20058 | Choices::STORMTHROW
20059 | Choices::FROSTBREATH => true,
20060 _ => false,
20061 }
20062 }
20063}
20064
20065#[derive(Clone)]
20066pub struct Choice {
20067 pub move_id: Choices, pub move_index: PokemonMoveIndex,
20070 pub switch_id: PokemonIndex,
20071 pub move_type: PokemonType,
20072 pub accuracy: f32,
20073 pub category: MoveCategory,
20074 pub base_power: f32,
20075 pub boost: Option<Boost>,
20076 pub priority: i8,
20077 pub flags: Flags,
20078 pub drain: Option<f32>,
20079 pub recoil: Option<f32>,
20080 pub crash: Option<f32>,
20081 pub heal: Option<Heal>,
20082 pub status: Option<Status>,
20083 pub volatile_status: Option<VolatileStatus>,
20084 pub side_condition: Option<SideCondition>,
20085 pub secondaries: Option<Vec<Secondary>>,
20086
20087 pub target: MoveTarget,
20088
20089 pub first_move: bool,
20090 pub sleep_talk_move: bool,
20091}
20092
20093impl fmt::Debug for Choice {
20094 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20095 write!(f, "Choice: {:?}", self.move_id)
20096 }
20097}
20098
20099impl Choice {
20100 pub fn multi_accuracy(&self) -> MultiAccuracyMove {
20101 match self.move_id {
20102 Choices::TRIPLEAXEL => MultiAccuracyMove::TripleHit,
20103 Choices::TRIPLEKICK => MultiAccuracyMove::TripleHit,
20104 Choices::POPULATIONBOMB => MultiAccuracyMove::TenHits,
20105 _ => MultiAccuracyMove::None,
20106 }
20107 }
20108 pub fn multi_hit(&self) -> MultiHitMove {
20109 match self.move_id {
20110 Choices::ARMTHRUST => MultiHitMove::TwoToFiveHits,
20111 Choices::BARRAGE => MultiHitMove::TwoToFiveHits,
20112 Choices::BONEMERANG => MultiHitMove::DoubleHit,
20113 Choices::BONERUSH => MultiHitMove::TwoToFiveHits,
20114 Choices::BULLETSEED => MultiHitMove::TwoToFiveHits,
20115 Choices::COMETPUNCH => MultiHitMove::TwoToFiveHits,
20116 Choices::DOUBLEHIT => MultiHitMove::DoubleHit,
20117 Choices::DOUBLEIRONBASH => MultiHitMove::DoubleHit,
20118 Choices::DOUBLEKICK => MultiHitMove::DoubleHit,
20119 Choices::DOUBLESLAP => MultiHitMove::TwoToFiveHits,
20120 Choices::DRAGONDARTS => MultiHitMove::DoubleHit,
20121 Choices::DUALCHOP => MultiHitMove::DoubleHit,
20122 Choices::DUALWINGBEAT => MultiHitMove::DoubleHit,
20123 Choices::FURYATTACK => MultiHitMove::TwoToFiveHits,
20124 Choices::FURYSWIPES => MultiHitMove::TwoToFiveHits,
20125 Choices::GEARGRIND => MultiHitMove::DoubleHit,
20126 Choices::ICICLESPEAR => MultiHitMove::TwoToFiveHits,
20127 Choices::PINMISSILE => MultiHitMove::TwoToFiveHits,
20128 Choices::ROCKBLAST => MultiHitMove::TwoToFiveHits,
20129 Choices::SCALESHOT => MultiHitMove::TwoToFiveHits,
20130 Choices::SPIKECANNON => MultiHitMove::TwoToFiveHits,
20131 Choices::SURGINGSTRIKES => MultiHitMove::TripleHit,
20132 Choices::TACHYONCUTTER => MultiHitMove::DoubleHit,
20133 Choices::TAILSLAP => MultiHitMove::TwoToFiveHits,
20134 Choices::TRIPLEDIVE => MultiHitMove::TripleHit,
20135 Choices::TWINBEAM => MultiHitMove::DoubleHit,
20136 Choices::TWINEEDLE => MultiHitMove::DoubleHit,
20137 Choices::WATERSHURIKEN => MultiHitMove::TwoToFiveHits,
20138
20139 Choices::POPULATIONBOMB => MultiHitMove::PopulationBomb,
20142 Choices::TRIPLEAXEL => MultiHitMove::TripleAxel,
20143 _ => MultiHitMove::None,
20144 }
20145 }
20146 pub fn targets_special_defense(&self) -> bool {
20147 self.category == MoveCategory::Special
20148 && !(self.move_id == Choices::PSYSHOCK
20149 || self.move_id == Choices::SECRETSWORD
20150 || self.move_id == Choices::PSYSTRIKE)
20151 }
20152 pub fn add_or_create_secondaries(&mut self, secondary: Secondary) {
20153 if let Some(secondaries) = &mut self.secondaries {
20154 secondaries.push(secondary);
20155 } else {
20156 self.secondaries = Some(vec![secondary]);
20157 }
20158 }
20159 pub fn remove_effects_for_protect(&mut self) {
20160 self.base_power = 0.0;
20163 self.category = MoveCategory::Status;
20164 self.accuracy = 100.0;
20165 self.flags.drag = false;
20166 self.flags.pivot = false;
20167 self.heal = None;
20168 self.drain = None;
20169 self.recoil = None;
20170 self.boost = None;
20171 self.status = None;
20172 self.volatile_status = None;
20173 self.side_condition = None;
20174 self.secondaries = None;
20175 }
20176 pub fn remove_all_effects(&mut self) {
20177 self.category = MoveCategory::Status;
20178 self.flags.clear_all();
20179 self.base_power = 0.0;
20180 self.accuracy = 100.0;
20181 self.heal = None;
20182 self.drain = None;
20183 self.recoil = None;
20184 self.crash = None;
20185 self.heal = None;
20186 self.boost = None;
20187 self.status = None;
20188 self.volatile_status = None;
20189 self.side_condition = None;
20190 self.secondaries = None;
20191 }
20192}
20193
20194impl Default for Choice {
20195 fn default() -> Choice {
20196 Choice {
20197 move_id: Choices::NONE,
20198 move_index: PokemonMoveIndex::M0,
20199 switch_id: PokemonIndex::P0,
20200 move_type: PokemonType::NORMAL,
20201 accuracy: 100.0,
20202 category: MoveCategory::Status,
20203 base_power: 0.0,
20204 boost: None,
20205 priority: 0,
20206 flags: Flags {
20207 ..Default::default()
20208 },
20209 drain: None,
20210 recoil: None,
20211 crash: None,
20212 heal: None,
20213 status: None,
20214 volatile_status: None,
20215 side_condition: None,
20216 secondaries: None,
20217 target: MoveTarget::Opponent,
20218 first_move: true,
20219 sleep_talk_move: false,
20220 }
20221 }
20222}
20223
20224pub fn undo_physical_special_split(moves: &mut HashMap<Choices, Choice>) {
20225 for (_, choice) in moves.iter_mut() {
20226 if choice.category == MoveCategory::Status {
20227 continue;
20228 }
20229 match choice.move_type {
20230 PokemonType::NORMAL
20231 | PokemonType::FIGHTING
20232 | PokemonType::POISON
20233 | PokemonType::GROUND
20234 | PokemonType::FLYING
20235 | PokemonType::BUG
20236 | PokemonType::ROCK
20237 | PokemonType::GHOST
20238 | PokemonType::STEEL => {
20239 choice.category = MoveCategory::Physical;
20240 }
20241 _ => {
20242 choice.category = MoveCategory::Special;
20243 }
20244 }
20245 }
20246}