poke_engine/
choices.rs

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,  // Rest implemented in choice_special_effect()
13181                target: MoveTarget::User,
13182                move_type: PokemonType::PSYCHIC,
13183                flags: Flags {
13184                    heal: true,
13185                    ..Default::default()
13186                },
13187                heal: None,  // Rest implemented in choice_special_effect()
13188                ..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: false, // Shed Tail implemented in choice_special_effect()
14411                    ..Default::default()
14412                },
14413                volatile_status: None, // Shed Tail implemented in choice_special_effect()
14414                ..Default::default()
14415            },
14416        );
14417        moves.insert(
14418            Choices::SHEERCOLD,
14419            Choice {
14420                move_id: Choices::SHEERCOLD,
14421                accuracy: 30.0,
14422                category: MoveCategory::Special,
14423                move_type: PokemonType::ICE,
14424                flags: Flags {
14425                    protect: true,
14426                    ..Default::default()
14427                },
14428                ..Default::default()
14429            },
14430        );
14431        moves.insert(
14432            Choices::SHELLSIDEARM,
14433            Choice {
14434                move_id: Choices::SHELLSIDEARM,
14435                base_power: 90.0,
14436                category: MoveCategory::Special,
14437                move_type: PokemonType::POISON,
14438                flags: Flags {
14439                    protect: true,
14440                    ..Default::default()
14441                },
14442                secondaries: Some(vec![Secondary {
14443                    chance: 20.0,
14444                    target: MoveTarget::Opponent,
14445                    effect: Effect::Status(PokemonStatus::POISON),
14446                }]),
14447                ..Default::default()
14448            },
14449        );
14450        moves.insert(
14451            Choices::SHELLSMASH,
14452            Choice {
14453                move_id: Choices::SHELLSMASH,
14454                target: MoveTarget::User,
14455                move_type: PokemonType::NORMAL,
14456                flags: Flags {
14457                    ..Default::default()
14458                },
14459                boost: Some(Boost {
14460                    target: MoveTarget::User,
14461                    boosts: StatBoosts {
14462                        attack: 2,
14463                        defense: -1,
14464                        special_attack: 2,
14465                        special_defense: -1,
14466                        speed: 2,
14467                        accuracy: 0,
14468                    },
14469                }),
14470                ..Default::default()
14471            },
14472        );
14473        moves.insert(
14474            Choices::SHELLTRAP,
14475            Choice {
14476                move_id: Choices::SHELLTRAP,
14477                base_power: 150.0,
14478                category: MoveCategory::Special,
14479                priority: -3,
14480                move_type: PokemonType::FIRE,
14481                flags: Flags {
14482                    protect: true,
14483                    ..Default::default()
14484                },
14485                ..Default::default()
14486            },
14487        );
14488        moves.insert(
14489            Choices::SHELTER,
14490            Choice {
14491                move_id: Choices::SHELTER,
14492                target: MoveTarget::User,
14493                move_type: PokemonType::STEEL,
14494                flags: Flags {
14495                    ..Default::default()
14496                },
14497                boost: Some(Boost {
14498                    target: MoveTarget::User,
14499                    boosts: StatBoosts {
14500                        attack: 0,
14501                        defense: 2,
14502                        special_attack: 0,
14503                        special_defense: 0,
14504                        speed: 0,
14505                        accuracy: 0,
14506                    },
14507                }),
14508                ..Default::default()
14509            },
14510        );
14511        moves.insert(
14512            Choices::SHIFTGEAR,
14513            Choice {
14514                move_id: Choices::SHIFTGEAR,
14515                target: MoveTarget::User,
14516                move_type: PokemonType::STEEL,
14517                flags: Flags {
14518                    ..Default::default()
14519                },
14520                boost: Some(Boost {
14521                    target: MoveTarget::User,
14522                    boosts: StatBoosts {
14523                        attack: 1,
14524                        defense: 0,
14525                        special_attack: 0,
14526                        special_defense: 0,
14527                        speed: 2,
14528                        accuracy: 0,
14529                    },
14530                }),
14531                ..Default::default()
14532            },
14533        );
14534        moves.insert(
14535            Choices::SHOCKWAVE,
14536            Choice {
14537                move_id: Choices::SHOCKWAVE,
14538                base_power: 60.0,
14539                category: MoveCategory::Special,
14540                move_type: PokemonType::ELECTRIC,
14541                flags: Flags {
14542                    protect: true,
14543                    ..Default::default()
14544                },
14545                ..Default::default()
14546            },
14547        );
14548        moves.insert(
14549            Choices::SHOREUP,
14550            Choice {
14551                move_id: Choices::SHOREUP,
14552                target: MoveTarget::User,
14553                move_type: PokemonType::GROUND,
14554                flags: Flags {
14555                    heal: true,
14556                    ..Default::default()
14557                },
14558                heal: Some(Heal {
14559                    target: MoveTarget::User,
14560                    amount: 0.5,
14561                }),
14562                ..Default::default()
14563            },
14564        );
14565        moves.insert(
14566            Choices::SIGNALBEAM,
14567            Choice {
14568                move_id: Choices::SIGNALBEAM,
14569                base_power: 75.0,
14570                category: MoveCategory::Special,
14571                move_type: PokemonType::BUG,
14572                flags: Flags {
14573                    protect: true,
14574                    ..Default::default()
14575                },
14576                secondaries: Some(vec![Secondary {
14577                    chance: 10.0,
14578                    target: MoveTarget::Opponent,
14579                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
14580                }]),
14581                ..Default::default()
14582            },
14583        );
14584        moves.insert(
14585            Choices::SILKTRAP,
14586            Choice {
14587                move_id: Choices::SILKTRAP,
14588                priority: 4,
14589                target: MoveTarget::User,
14590                move_type: PokemonType::BUG,
14591                flags: Flags {
14592                    ..Default::default()
14593                },
14594                volatile_status: Some(VolatileStatus {
14595                    target: MoveTarget::User,
14596                    volatile_status: PokemonVolatileStatus::SILKTRAP,
14597                }),
14598                ..Default::default()
14599            },
14600        );
14601        moves.insert(
14602            Choices::SILVERWIND,
14603            Choice {
14604                move_id: Choices::SILVERWIND,
14605                base_power: 60.0,
14606                category: MoveCategory::Special,
14607                move_type: PokemonType::BUG,
14608                flags: Flags {
14609                    protect: true,
14610                    ..Default::default()
14611                },
14612                secondaries: Some(vec![Secondary {
14613                    chance: 10.0,
14614                    target: MoveTarget::User,
14615                    effect: Effect::Boost(StatBoosts {
14616                        attack: 1,
14617                        defense: 1,
14618                        special_attack: 1,
14619                        special_defense: 1,
14620                        speed: 1,
14621                        accuracy: 0,
14622                    }),
14623                }]),
14624                ..Default::default()
14625            },
14626        );
14627        moves.insert(
14628            Choices::SIMPLEBEAM,
14629            Choice {
14630                move_id: Choices::SIMPLEBEAM,
14631                move_type: PokemonType::NORMAL,
14632                flags: Flags {
14633                    protect: true,
14634                    reflectable: true,
14635                    ..Default::default()
14636                },
14637                ..Default::default()
14638            },
14639        );
14640        moves.insert(
14641            Choices::SING,
14642            Choice {
14643                move_id: Choices::SING,
14644                accuracy: 55.0,
14645                status: Some(Status {
14646                    target: MoveTarget::Opponent,
14647                    status: PokemonStatus::SLEEP,
14648                }),
14649                move_type: PokemonType::NORMAL,
14650                flags: Flags {
14651                    protect: true,
14652                    reflectable: true,
14653                    sound: true,
14654                    ..Default::default()
14655                },
14656                ..Default::default()
14657            },
14658        );
14659        moves.insert(
14660            Choices::SIZZLYSLIDE,
14661            Choice {
14662                move_id: Choices::SIZZLYSLIDE,
14663                base_power: 60.0,
14664                category: MoveCategory::Physical,
14665                move_type: PokemonType::FIRE,
14666                flags: Flags {
14667                    contact: true,
14668                    protect: true,
14669                    ..Default::default()
14670                },
14671                secondaries: Some(vec![Secondary {
14672                    chance: 100.0,
14673                    target: MoveTarget::Opponent,
14674                    effect: Effect::Status(PokemonStatus::BURN),
14675                }]),
14676                ..Default::default()
14677            },
14678        );
14679        moves.insert(
14680            Choices::SKETCH,
14681            Choice {
14682                move_id: Choices::SKETCH,
14683                move_type: PokemonType::NORMAL,
14684                flags: Flags {
14685                    ..Default::default()
14686                },
14687                ..Default::default()
14688            },
14689        );
14690        moves.insert(
14691            Choices::SKILLSWAP,
14692            Choice {
14693                move_id: Choices::SKILLSWAP,
14694                move_type: PokemonType::PSYCHIC,
14695                flags: Flags {
14696                    protect: true,
14697                    ..Default::default()
14698                },
14699                ..Default::default()
14700            },
14701        );
14702        moves.insert(
14703            Choices::SKITTERSMACK,
14704            Choice {
14705                move_id: Choices::SKITTERSMACK,
14706                accuracy: 90.0,
14707                base_power: 70.0,
14708                category: MoveCategory::Physical,
14709                move_type: PokemonType::BUG,
14710                flags: Flags {
14711                    contact: true,
14712                    protect: true,
14713                    ..Default::default()
14714                },
14715                secondaries: Some(vec![Secondary {
14716                    chance: 100.0,
14717                    target: MoveTarget::Opponent,
14718                    effect: Effect::Boost(StatBoosts {
14719                        attack: 0,
14720                        defense: 0,
14721                        special_attack: -1,
14722                        special_defense: 0,
14723                        speed: 0,
14724                        accuracy: 0,
14725                    }),
14726                }]),
14727                ..Default::default()
14728            },
14729        );
14730        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
14731            moves.insert(
14732                Choices::SKULLBASH,
14733                Choice {
14734                    move_id: Choices::SKULLBASH,
14735                    base_power: 100.0,
14736                    category: MoveCategory::Physical,
14737                    move_type: PokemonType::NORMAL,
14738                    flags: Flags {
14739                        charge: true,
14740                        contact: true,
14741                            protect: true,
14742                        ..Default::default()
14743                    },
14744                    ..Default::default()
14745                },
14746            );
14747        } else {
14748            moves.insert(
14749                Choices::SKULLBASH,
14750                Choice {
14751                    move_id: Choices::SKULLBASH,
14752                    base_power: 130.0,
14753                    category: MoveCategory::Physical,
14754                    move_type: PokemonType::NORMAL,
14755                    flags: Flags {
14756                        charge: true,
14757                        contact: true,
14758                            protect: true,
14759                        ..Default::default()
14760                    },
14761                    ..Default::default()
14762                },
14763            );
14764        }
14765        moves.insert(
14766            Choices::SKYATTACK,
14767            Choice {
14768                move_id: Choices::SKYATTACK,
14769                accuracy: 90.0,
14770                base_power: 140.0,
14771                category: MoveCategory::Physical,
14772                move_type: PokemonType::FLYING,
14773                flags: Flags {
14774                    charge: true,
14775                    protect: true,
14776                    ..Default::default()
14777                },
14778                secondaries: Some(vec![Secondary {
14779                    chance: 30.0,
14780                    target: MoveTarget::Opponent,
14781                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
14782                }]),
14783                ..Default::default()
14784            },
14785        );
14786        moves.insert(
14787            Choices::SKYDROP,
14788            Choice {
14789                move_id: Choices::SKYDROP,
14790                base_power: 60.0,
14791                category: MoveCategory::Physical,
14792                move_type: PokemonType::FLYING,
14793                flags: Flags {
14794                    charge: true,
14795                    contact: true,
14796                    protect: true,
14797                    ..Default::default()
14798                },
14799                ..Default::default()
14800            },
14801        );
14802        moves.insert(
14803            Choices::SKYUPPERCUT,
14804            Choice {
14805                move_id: Choices::SKYUPPERCUT,
14806                accuracy: 90.0,
14807                base_power: 85.0,
14808                category: MoveCategory::Physical,
14809                move_type: PokemonType::FIGHTING,
14810                flags: Flags {
14811                    contact: true,
14812                    protect: true,
14813                    punch: true,
14814                    ..Default::default()
14815                },
14816                ..Default::default()
14817            },
14818        );
14819        moves.insert(
14820            Choices::SLACKOFF,
14821            Choice {
14822                move_id: Choices::SLACKOFF,
14823                target: MoveTarget::User,
14824                move_type: PokemonType::NORMAL,
14825                flags: Flags {
14826                    heal: true,
14827                    ..Default::default()
14828                },
14829                heal: Some(Heal {
14830                    target: MoveTarget::User,
14831                    amount: 0.5,
14832                }),
14833                ..Default::default()
14834            },
14835        );
14836        moves.insert(
14837            Choices::SLAM,
14838            Choice {
14839                move_id: Choices::SLAM,
14840                accuracy: 75.0,
14841                base_power: 80.0,
14842                category: MoveCategory::Physical,
14843                move_type: PokemonType::NORMAL,
14844                flags: Flags {
14845                    contact: true,
14846                    protect: true,
14847                    ..Default::default()
14848                },
14849                ..Default::default()
14850            },
14851        );
14852        moves.insert(
14853            Choices::SLASH,
14854            Choice {
14855                move_id: Choices::SLASH,
14856                base_power: 70.0,
14857                category: MoveCategory::Physical,
14858                move_type: PokemonType::NORMAL,
14859                flags: Flags {
14860                    contact: true,
14861                    protect: true,
14862                    slicing: true,
14863                    ..Default::default()
14864                },
14865                ..Default::default()
14866            },
14867        );
14868        moves.insert(
14869            Choices::SLEEPPOWDER,
14870            Choice {
14871                move_id: Choices::SLEEPPOWDER,
14872                accuracy: 75.0,
14873                status: Some(Status {
14874                    target: MoveTarget::Opponent,
14875                    status: PokemonStatus::SLEEP,
14876                }),
14877                move_type: PokemonType::GRASS,
14878                flags: Flags {
14879                    powder: true,
14880                    protect: true,
14881                    reflectable: true,
14882                    ..Default::default()
14883                },
14884                ..Default::default()
14885            },
14886        );
14887        moves.insert(
14888            Choices::SLEEPTALK,
14889            Choice {
14890                move_id: Choices::SLEEPTALK,
14891                target: MoveTarget::User,
14892                move_type: PokemonType::NORMAL,
14893                flags: Flags {
14894                    ..Default::default()
14895                },
14896                ..Default::default()
14897            },
14898        );
14899        if cfg!(feature = "gen1") {
14900            moves.insert(
14901                Choices::SLUDGE,
14902                Choice {
14903                    move_id: Choices::SLUDGE,
14904                    base_power: 65.0,
14905                    category: MoveCategory::Special,
14906                    move_type: PokemonType::POISON,
14907                    flags: Flags {
14908                        protect: true,
14909                        ..Default::default()
14910                    },
14911                    secondaries: Some(vec![Secondary {
14912                        chance: 40.0,
14913                        target: MoveTarget::Opponent,
14914                        effect: Effect::Status(PokemonStatus::POISON),
14915                    }]),
14916                    ..Default::default()
14917                },
14918            );
14919        } else {
14920            moves.insert(
14921                Choices::SLUDGE,
14922                Choice {
14923                    move_id: Choices::SLUDGE,
14924                    base_power: 65.0,
14925                    category: MoveCategory::Special,
14926                    move_type: PokemonType::POISON,
14927                    flags: Flags {
14928                        protect: true,
14929                        ..Default::default()
14930                    },
14931                    secondaries: Some(vec![Secondary {
14932                        chance: 30.0,
14933                        target: MoveTarget::Opponent,
14934                        effect: Effect::Status(PokemonStatus::POISON),
14935                    }]),
14936                    ..Default::default()
14937                },
14938            );
14939        }
14940        moves.insert(
14941            Choices::SLUDGEBOMB,
14942            Choice {
14943                move_id: Choices::SLUDGEBOMB,
14944                base_power: 90.0,
14945                category: MoveCategory::Special,
14946                move_type: PokemonType::POISON,
14947                flags: Flags {
14948                    bullet: true,
14949                    protect: true,
14950                    ..Default::default()
14951                },
14952                secondaries: Some(vec![Secondary {
14953                    chance: 30.0,
14954                    target: MoveTarget::Opponent,
14955                    effect: Effect::Status(PokemonStatus::POISON),
14956                }]),
14957                ..Default::default()
14958            },
14959        );
14960        moves.insert(
14961            Choices::SLUDGEWAVE,
14962            Choice {
14963                move_id: Choices::SLUDGEWAVE,
14964                base_power: 95.0,
14965                category: MoveCategory::Special,
14966                move_type: PokemonType::POISON,
14967                flags: Flags {
14968                    protect: true,
14969                    ..Default::default()
14970                },
14971                secondaries: Some(vec![Secondary {
14972                    chance: 10.0,
14973                    target: MoveTarget::Opponent,
14974                    effect: Effect::Status(PokemonStatus::POISON),
14975                }]),
14976                ..Default::default()
14977            },
14978        );
14979        moves.insert(
14980            Choices::SMACKDOWN,
14981            Choice {
14982                move_id: Choices::SMACKDOWN,
14983                base_power: 50.0,
14984                category: MoveCategory::Physical,
14985                move_type: PokemonType::ROCK,
14986                flags: Flags {
14987                    protect: true,
14988                    ..Default::default()
14989                },
14990                volatile_status: Some(VolatileStatus {
14991                    target: MoveTarget::Opponent,
14992                    volatile_status: PokemonVolatileStatus::SMACKDOWN,
14993                }),
14994                ..Default::default()
14995            },
14996        );
14997        moves.insert(
14998            Choices::SMARTSTRIKE,
14999            Choice {
15000                move_id: Choices::SMARTSTRIKE,
15001                base_power: 70.0,
15002                category: MoveCategory::Physical,
15003                move_type: PokemonType::STEEL,
15004                flags: Flags {
15005                    contact: true,
15006                    protect: true,
15007                    ..Default::default()
15008                },
15009                ..Default::default()
15010            },
15011        );
15012        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15013            moves.insert(
15014                Choices::SMELLINGSALTS,
15015                Choice {
15016                    move_id: Choices::SMELLINGSALTS,
15017                    base_power: 60.0,
15018                    category: MoveCategory::Physical,
15019                    move_type: PokemonType::NORMAL,
15020                    flags: Flags {
15021                        contact: true,
15022                            protect: true,
15023                        ..Default::default()
15024                    },
15025                    ..Default::default()
15026                },
15027            );
15028        } else {
15029            moves.insert(
15030                Choices::SMELLINGSALTS,
15031                Choice {
15032                    move_id: Choices::SMELLINGSALTS,
15033                    base_power: 70.0,
15034                    category: MoveCategory::Physical,
15035                    move_type: PokemonType::NORMAL,
15036                    flags: Flags {
15037                        contact: true,
15038                            protect: true,
15039                        ..Default::default()
15040                    },
15041                    ..Default::default()
15042                },
15043            );
15044        }
15045        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15046            moves.insert(
15047                Choices::SMOG,
15048                Choice {
15049                    move_id: Choices::SMOG,
15050                    accuracy: 70.0,
15051                    base_power: 20.0,
15052                    category: MoveCategory::Special,
15053                    move_type: PokemonType::POISON,
15054                    flags: Flags {
15055                            protect: true,
15056                        ..Default::default()
15057                    },
15058                    secondaries: Some(vec![Secondary {
15059                        chance: 40.0,
15060                        target: MoveTarget::Opponent,
15061                        effect: Effect::Status(PokemonStatus::POISON),
15062                    }]),
15063                    ..Default::default()
15064                },
15065            );
15066        } else {
15067            moves.insert(
15068                Choices::SMOG,
15069                Choice {
15070                    move_id: Choices::SMOG,
15071                    accuracy: 70.0,
15072                    base_power: 30.0,
15073                    category: MoveCategory::Special,
15074                    move_type: PokemonType::POISON,
15075                    flags: Flags {
15076                            protect: true,
15077                        ..Default::default()
15078                    },
15079                    secondaries: Some(vec![Secondary {
15080                        chance: 40.0,
15081                        target: MoveTarget::Opponent,
15082                        effect: Effect::Status(PokemonStatus::POISON),
15083                    }]),
15084                    ..Default::default()
15085                },
15086            );
15087        }
15088        moves.insert(
15089            Choices::SMOKESCREEN,
15090            Choice {
15091                move_id: Choices::SMOKESCREEN,
15092                move_type: PokemonType::NORMAL,
15093                flags: Flags {
15094                    protect: true,
15095                    reflectable: true,
15096                    ..Default::default()
15097                },
15098                boost: Some(Boost {
15099                    target: MoveTarget::Opponent,
15100                    boosts: StatBoosts {
15101                        attack: 0,
15102                        defense: 0,
15103                        special_attack: 0,
15104                        special_defense: 0,
15105                        speed: 0,
15106                        accuracy: -1,
15107                    },
15108                }),
15109                ..Default::default()
15110            },
15111        );
15112        moves.insert(
15113            Choices::SNAPTRAP,
15114            Choice {
15115                move_id: Choices::SNAPTRAP,
15116                base_power: 35.0,
15117                category: MoveCategory::Physical,
15118                move_type: PokemonType::GRASS,
15119                flags: Flags {
15120                    contact: true,
15121                    protect: true,
15122                    ..Default::default()
15123                },
15124                volatile_status: Some(VolatileStatus {
15125                    target: MoveTarget::Opponent,
15126                    volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
15127                }),
15128                ..Default::default()
15129            },
15130        );
15131        moves.insert(
15132            Choices::SNARL,
15133            Choice {
15134                move_id: Choices::SNARL,
15135                accuracy: 95.0,
15136                base_power: 55.0,
15137                category: MoveCategory::Special,
15138                move_type: PokemonType::DARK,
15139                flags: Flags {
15140                    protect: true,
15141                    sound: true,
15142                    ..Default::default()
15143                },
15144                secondaries: Some(vec![Secondary {
15145                    chance: 100.0,
15146                    target: MoveTarget::Opponent,
15147                    effect: Effect::Boost(StatBoosts {
15148                        attack: 0,
15149                        defense: 0,
15150                        special_attack: -1,
15151                        special_defense: 0,
15152                        speed: 0,
15153                        accuracy: 0,
15154                    }),
15155                }]),
15156                ..Default::default()
15157            },
15158        );
15159        moves.insert(
15160            Choices::SNATCH,
15161            Choice {
15162                move_id: Choices::SNATCH,
15163                priority: 4,
15164                target: MoveTarget::User,
15165                move_type: PokemonType::DARK,
15166                flags: Flags {
15167                    ..Default::default()
15168                },
15169                volatile_status: Some(VolatileStatus {
15170                    target: MoveTarget::User,
15171                    volatile_status: PokemonVolatileStatus::SNATCH,
15172                }),
15173                ..Default::default()
15174            },
15175        );
15176        moves.insert(
15177            Choices::SNIPESHOT,
15178            Choice {
15179                move_id: Choices::SNIPESHOT,
15180                base_power: 80.0,
15181                category: MoveCategory::Special,
15182                move_type: PokemonType::WATER,
15183                flags: Flags {
15184                    protect: true,
15185                    ..Default::default()
15186                },
15187                ..Default::default()
15188            },
15189        );
15190        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15191            moves.insert(
15192                Choices::SNORE,
15193                Choice {
15194                    move_id: Choices::SNORE,
15195                    base_power: 40.0,
15196                    category: MoveCategory::Special,
15197                    move_type: PokemonType::NORMAL,
15198                    flags: Flags {
15199                            protect: true,
15200                        sound: true,
15201                        ..Default::default()
15202                    },
15203                    secondaries: Some(vec![Secondary {
15204                        chance: 30.0,
15205                        target: MoveTarget::Opponent,
15206                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15207                    }]),
15208                    ..Default::default()
15209                },
15210            );
15211        } else {
15212            moves.insert(
15213                Choices::SNORE,
15214                Choice {
15215                    move_id: Choices::SNORE,
15216                    base_power: 50.0,
15217                    category: MoveCategory::Special,
15218                    move_type: PokemonType::NORMAL,
15219                    flags: Flags {
15220                            protect: true,
15221                        sound: true,
15222                        ..Default::default()
15223                    },
15224                    secondaries: Some(vec![Secondary {
15225                        chance: 30.0,
15226                        target: MoveTarget::Opponent,
15227                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15228                    }]),
15229                    ..Default::default()
15230                },
15231            );
15232        }
15233        moves.insert(
15234            Choices::SNOWSCAPE,
15235            Choice {
15236                move_id: Choices::SNOWSCAPE,
15237                move_type: PokemonType::ICE,
15238                flags: Flags {
15239                    ..Default::default()
15240                },
15241                ..Default::default()
15242            },
15243        );
15244        moves.insert(
15245            Choices::SOAK,
15246            Choice {
15247                move_id: Choices::SOAK,
15248                move_type: PokemonType::WATER,
15249                flags: Flags {
15250                    protect: true,
15251                    reflectable: true,
15252                    ..Default::default()
15253                },
15254                ..Default::default()
15255            },
15256        );
15257        moves.insert(
15258            Choices::SOFTBOILED,
15259            Choice {
15260                move_id: Choices::SOFTBOILED,
15261                target: MoveTarget::User,
15262                move_type: PokemonType::NORMAL,
15263                flags: Flags {
15264                    heal: true,
15265                    ..Default::default()
15266                },
15267                heal: Some(Heal {
15268                    target: MoveTarget::User,
15269                    amount: 0.5,
15270                }),
15271                ..Default::default()
15272            },
15273        );
15274        moves.insert(
15275            Choices::SOLARBEAM,
15276            Choice {
15277                move_id: Choices::SOLARBEAM,
15278                base_power: 120.0,
15279                category: MoveCategory::Special,
15280                move_type: PokemonType::GRASS,
15281                flags: Flags {
15282                    charge: true,
15283                    protect: true,
15284                    ..Default::default()
15285                },
15286                ..Default::default()
15287            },
15288        );
15289        moves.insert(
15290            Choices::SOLARBLADE,
15291            Choice {
15292                move_id: Choices::SOLARBLADE,
15293                base_power: 125.0,
15294                category: MoveCategory::Physical,
15295                move_type: PokemonType::GRASS,
15296                flags: Flags {
15297                    charge: true,
15298                    contact: true,
15299                    protect: true,
15300                    slicing: true,
15301                    ..Default::default()
15302                },
15303                ..Default::default()
15304            },
15305        );
15306        moves.insert(
15307            Choices::SONICBOOM,
15308            Choice {
15309                move_id: Choices::SONICBOOM,
15310                accuracy: 90.0,
15311                category: MoveCategory::Special,
15312                move_type: PokemonType::NORMAL,
15313                flags: Flags {
15314                    protect: true,
15315                    ..Default::default()
15316                },
15317                ..Default::default()
15318            },
15319        );
15320        moves.insert(
15321            Choices::SPACIALREND,
15322            Choice {
15323                move_id: Choices::SPACIALREND,
15324                accuracy: 95.0,
15325                base_power: 100.0,
15326                category: MoveCategory::Special,
15327                move_type: PokemonType::DRAGON,
15328                flags: Flags {
15329                    protect: true,
15330                    ..Default::default()
15331                },
15332                ..Default::default()
15333            },
15334        );
15335        moves.insert(
15336            Choices::SPARK,
15337            Choice {
15338                move_id: Choices::SPARK,
15339                base_power: 65.0,
15340                category: MoveCategory::Physical,
15341                move_type: PokemonType::ELECTRIC,
15342                flags: Flags {
15343                    contact: true,
15344                    protect: true,
15345                    ..Default::default()
15346                },
15347                secondaries: Some(vec![Secondary {
15348                    chance: 30.0,
15349                    target: MoveTarget::Opponent,
15350                    effect: Effect::Status(PokemonStatus::PARALYZE),
15351                }]),
15352                ..Default::default()
15353            },
15354        );
15355        moves.insert(
15356            Choices::SPARKLINGARIA,
15357            Choice {
15358                move_id: Choices::SPARKLINGARIA,
15359                base_power: 90.0,
15360                category: MoveCategory::Special,
15361                move_type: PokemonType::WATER,
15362                flags: Flags {
15363                    protect: true,
15364                    sound: true,
15365                    ..Default::default()
15366                },
15367                secondaries: Some(vec![Secondary {
15368                    chance: 100.0,
15369                    target: MoveTarget::Opponent,
15370                    effect: Effect::VolatileStatus(PokemonVolatileStatus::SPARKLINGARIA),
15371                }]),
15372                ..Default::default()
15373            },
15374        );
15375        moves.insert(
15376            Choices::SPARKLYSWIRL,
15377            Choice {
15378                move_id: Choices::SPARKLYSWIRL,
15379                accuracy: 85.0,
15380                base_power: 120.0,
15381                category: MoveCategory::Special,
15382                move_type: PokemonType::FAIRY,
15383                flags: Flags {
15384                    protect: true,
15385                    ..Default::default()
15386                },
15387                ..Default::default()
15388            },
15389        );
15390        moves.insert(
15391            Choices::SPECTRALTHIEF,
15392            Choice {
15393                move_id: Choices::SPECTRALTHIEF,
15394                base_power: 90.0,
15395                category: MoveCategory::Physical,
15396                move_type: PokemonType::GHOST,
15397                flags: Flags {
15398                    contact: true,
15399                    protect: true,
15400                    ..Default::default()
15401                },
15402                ..Default::default()
15403            },
15404        );
15405        moves.insert(
15406            Choices::SPEEDSWAP,
15407            Choice {
15408                move_id: Choices::SPEEDSWAP,
15409                move_type: PokemonType::PSYCHIC,
15410                flags: Flags {
15411                    protect: true,
15412                    ..Default::default()
15413                },
15414                ..Default::default()
15415            },
15416        );
15417        moves.insert(
15418            Choices::SPICYEXTRACT,
15419            Choice {
15420                move_id: Choices::SPICYEXTRACT,
15421                move_type: PokemonType::GRASS,
15422                flags: Flags {
15423                    protect: true,
15424                    reflectable: true,
15425                    ..Default::default()
15426                },
15427                boost: Some(Boost {
15428                    target: MoveTarget::Opponent,
15429                    boosts: StatBoosts {
15430                        attack: 2,
15431                        defense: -2,
15432                        special_attack: 0,
15433                        special_defense: 0,
15434                        speed: 0,
15435                        accuracy: 0,
15436                    },
15437                }),
15438                ..Default::default()
15439            },
15440        );
15441        moves.insert(
15442            Choices::SPIDERWEB,
15443            Choice {
15444                move_id: Choices::SPIDERWEB,
15445                move_type: PokemonType::BUG,
15446                flags: Flags {
15447                    protect: true,
15448                    reflectable: true,
15449                    ..Default::default()
15450                },
15451                ..Default::default()
15452            },
15453        );
15454        moves.insert(
15455            Choices::SPIKECANNON,
15456            Choice {
15457                move_id: Choices::SPIKECANNON,
15458                base_power: 20.0,
15459                category: MoveCategory::Physical,
15460                move_type: PokemonType::NORMAL,
15461                flags: Flags {
15462                    protect: true,
15463                    ..Default::default()
15464                },
15465                ..Default::default()
15466            },
15467        );
15468        moves.insert(
15469            Choices::SPIKES,
15470            Choice {
15471                move_id: Choices::SPIKES,
15472                move_type: PokemonType::GROUND,
15473                flags: Flags {
15474                    reflectable: true,
15475                    ..Default::default()
15476                },
15477                side_condition: Some(SideCondition {
15478                    target: MoveTarget::Opponent,
15479                    condition: PokemonSideCondition::Spikes,
15480                }),
15481                ..Default::default()
15482            },
15483        );
15484        moves.insert(
15485            Choices::SPIKYSHIELD,
15486            Choice {
15487                move_id: Choices::SPIKYSHIELD,
15488                priority: 4,
15489                target: MoveTarget::User,
15490                move_type: PokemonType::GRASS,
15491                flags: Flags {
15492                    ..Default::default()
15493                },
15494                volatile_status: Some(VolatileStatus {
15495                    target: MoveTarget::User,
15496                    volatile_status: PokemonVolatileStatus::SPIKYSHIELD,
15497                }),
15498                ..Default::default()
15499            },
15500        );
15501        moves.insert(
15502            Choices::SPINOUT,
15503            Choice {
15504                move_id: Choices::SPINOUT,
15505                base_power: 100.0,
15506                category: MoveCategory::Physical,
15507                move_type: PokemonType::STEEL,
15508                flags: Flags {
15509                    contact: true,
15510                    protect: true,
15511                    ..Default::default()
15512                },
15513                boost: Some(Boost {
15514                    target: MoveTarget::User,
15515                    boosts: StatBoosts {
15516                        attack: 0,
15517                        defense: 0,
15518                        special_attack: 0,
15519                        special_defense: 0,
15520                        speed: -2,
15521                        accuracy: 0,
15522                    },
15523                }),
15524                ..Default::default()
15525            },
15526        );
15527        moves.insert(
15528            Choices::SPIRITBREAK,
15529            Choice {
15530                move_id: Choices::SPIRITBREAK,
15531                base_power: 75.0,
15532                category: MoveCategory::Physical,
15533                move_type: PokemonType::FAIRY,
15534                flags: Flags {
15535                    contact: true,
15536                    protect: true,
15537                    ..Default::default()
15538                },
15539                secondaries: Some(vec![Secondary {
15540                    chance: 100.0,
15541                    target: MoveTarget::Opponent,
15542                    effect: Effect::Boost(StatBoosts {
15543                        attack: 0,
15544                        defense: 0,
15545                        special_attack: -1,
15546                        special_defense: 0,
15547                        speed: 0,
15548                        accuracy: 0,
15549                    }),
15550                }]),
15551                ..Default::default()
15552            },
15553        );
15554        moves.insert(
15555            Choices::SPIRITSHACKLE,
15556            Choice {
15557                move_id: Choices::SPIRITSHACKLE,
15558                base_power: 80.0,
15559                category: MoveCategory::Physical,
15560                move_type: PokemonType::GHOST,
15561                flags: Flags {
15562                    protect: true,
15563                    ..Default::default()
15564                },
15565                ..Default::default()
15566            },
15567        );
15568        moves.insert(
15569            Choices::SPITE,
15570            Choice {
15571                move_id: Choices::SPITE,
15572                move_type: PokemonType::GHOST,
15573                flags: Flags {
15574                    protect: true,
15575                    reflectable: true,
15576                    ..Default::default()
15577                },
15578                ..Default::default()
15579            },
15580        );
15581        moves.insert(
15582            Choices::SPITUP,
15583            Choice {
15584                move_id: Choices::SPITUP,
15585                category: MoveCategory::Special,
15586                move_type: PokemonType::NORMAL,
15587                flags: Flags {
15588                    protect: true,
15589                    ..Default::default()
15590                },
15591                ..Default::default()
15592            },
15593        );
15594        moves.insert(
15595            Choices::SPLASH,
15596            Choice {
15597                move_id: Choices::SPLASH,
15598                target: MoveTarget::User,
15599                move_type: PokemonType::NORMAL,
15600                flags: Flags {
15601                    ..Default::default()
15602                },
15603                ..Default::default()
15604            },
15605        );
15606        moves.insert(
15607            Choices::SPLISHYSPLASH,
15608            Choice {
15609                move_id: Choices::SPLISHYSPLASH,
15610                base_power: 90.0,
15611                category: MoveCategory::Special,
15612                move_type: PokemonType::WATER,
15613                flags: Flags {
15614                    protect: true,
15615                    ..Default::default()
15616                },
15617                secondaries: Some(vec![Secondary {
15618                    chance: 30.0,
15619                    target: MoveTarget::Opponent,
15620                    effect: Effect::Status(PokemonStatus::PARALYZE),
15621                }]),
15622                ..Default::default()
15623            },
15624        );
15625        moves.insert(
15626            Choices::SPORE,
15627            Choice {
15628                move_id: Choices::SPORE,
15629                status: Some(Status {
15630                    target: MoveTarget::Opponent,
15631                    status: PokemonStatus::SLEEP,
15632                }),
15633                move_type: PokemonType::GRASS,
15634                flags: Flags {
15635                    powder: true,
15636                    protect: true,
15637                    reflectable: true,
15638                    ..Default::default()
15639                },
15640                ..Default::default()
15641            },
15642        );
15643        moves.insert(
15644            Choices::SPOTLIGHT,
15645            Choice {
15646                move_id: Choices::SPOTLIGHT,
15647                priority: 3,
15648                move_type: PokemonType::NORMAL,
15649                flags: Flags {
15650                    protect: true,
15651                    reflectable: true,
15652                    ..Default::default()
15653                },
15654                volatile_status: Some(VolatileStatus {
15655                    target: MoveTarget::Opponent,
15656                    volatile_status: PokemonVolatileStatus::SPOTLIGHT,
15657                }),
15658                ..Default::default()
15659            },
15660        );
15661        moves.insert(
15662            Choices::SPRINGTIDESTORM,
15663            Choice {
15664                move_id: Choices::SPRINGTIDESTORM,
15665                accuracy: 80.0,
15666                base_power: 100.0,
15667                category: MoveCategory::Special,
15668                move_type: PokemonType::FAIRY,
15669                flags: Flags {
15670                    protect: true,
15671                    wind: true,
15672                    ..Default::default()
15673                },
15674                secondaries: Some(vec![Secondary {
15675                    chance: 30.0,
15676                    target: MoveTarget::Opponent,
15677                    effect: Effect::Boost(StatBoosts {
15678                        attack: -1,
15679                        defense: 0,
15680                        special_attack: 0,
15681                        special_defense: 0,
15682                        speed: 0,
15683                        accuracy: 0,
15684                    }),
15685                }]),
15686                ..Default::default()
15687            },
15688        );
15689        moves.insert(
15690            Choices::STEALTHROCK,
15691            Choice {
15692                move_id: Choices::STEALTHROCK,
15693                move_type: PokemonType::ROCK,
15694                flags: Flags {
15695                    reflectable: true,
15696                    ..Default::default()
15697                },
15698                side_condition: Some(SideCondition {
15699                    target: MoveTarget::Opponent,
15700                    condition: PokemonSideCondition::Stealthrock,
15701                }),
15702                ..Default::default()
15703            },
15704        );
15705        moves.insert(
15706            Choices::STEAMERUPTION,
15707            Choice {
15708                move_id: Choices::STEAMERUPTION,
15709                accuracy: 95.0,
15710                base_power: 110.0,
15711                category: MoveCategory::Special,
15712                move_type: PokemonType::WATER,
15713                flags: Flags {
15714                    protect: true,
15715                    ..Default::default()
15716                },
15717                secondaries: Some(vec![Secondary {
15718                    chance: 30.0,
15719                    target: MoveTarget::Opponent,
15720                    effect: Effect::Status(PokemonStatus::BURN),
15721                }]),
15722                ..Default::default()
15723            },
15724        );
15725        moves.insert(
15726            Choices::STEAMROLLER,
15727            Choice {
15728                move_id: Choices::STEAMROLLER,
15729                base_power: 65.0,
15730                category: MoveCategory::Physical,
15731                move_type: PokemonType::BUG,
15732                flags: Flags {
15733                    contact: true,
15734                    protect: true,
15735                    ..Default::default()
15736                },
15737                secondaries: Some(vec![Secondary {
15738                    chance: 30.0,
15739                    target: MoveTarget::Opponent,
15740                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15741                }]),
15742                ..Default::default()
15743            },
15744        );
15745        moves.insert(
15746            Choices::STEELBEAM,
15747            Choice {
15748                move_id: Choices::STEELBEAM,
15749                accuracy: 95.0,
15750                base_power: 140.0,
15751                category: MoveCategory::Special,
15752                move_type: PokemonType::STEEL,
15753                flags: Flags {
15754                    protect: true,
15755                    ..Default::default()
15756                },
15757                heal: Some(Heal {
15758                    target: MoveTarget::User,
15759                    amount: -0.5,
15760                }),
15761                ..Default::default()
15762            },
15763        );
15764        moves.insert(
15765            Choices::STEELROLLER,
15766            Choice {
15767                move_id: Choices::STEELROLLER,
15768                base_power: 130.0,
15769                category: MoveCategory::Physical,
15770                move_type: PokemonType::STEEL,
15771                flags: Flags {
15772                    contact: true,
15773                    protect: true,
15774                    ..Default::default()
15775                },
15776                ..Default::default()
15777            },
15778        );
15779        moves.insert(
15780            Choices::STEELWING,
15781            Choice {
15782                move_id: Choices::STEELWING,
15783                accuracy: 90.0,
15784                base_power: 70.0,
15785                category: MoveCategory::Physical,
15786                move_type: PokemonType::STEEL,
15787                flags: Flags {
15788                    contact: true,
15789                    protect: true,
15790                    ..Default::default()
15791                },
15792                secondaries: Some(vec![Secondary {
15793                    chance: 10.0,
15794                    target: MoveTarget::User,
15795                    effect: Effect::Boost(StatBoosts {
15796                        attack: 0,
15797                        defense: 1,
15798                        special_attack: 0,
15799                        special_defense: 0,
15800                        speed: 0,
15801                        accuracy: 0,
15802                    }),
15803                }]),
15804                ..Default::default()
15805            },
15806        );
15807        moves.insert(
15808            Choices::STICKYWEB,
15809            Choice {
15810                move_id: Choices::STICKYWEB,
15811                move_type: PokemonType::BUG,
15812                flags: Flags {
15813                    reflectable: true,
15814                    ..Default::default()
15815                },
15816                side_condition: Some(SideCondition {
15817                    target: MoveTarget::Opponent,
15818                    condition: PokemonSideCondition::StickyWeb,
15819                }),
15820                ..Default::default()
15821            },
15822        );
15823        moves.insert(
15824            Choices::STOCKPILE,
15825            Choice {
15826                move_id: Choices::STOCKPILE,
15827                target: MoveTarget::User,
15828                move_type: PokemonType::NORMAL,
15829                flags: Flags {
15830                    ..Default::default()
15831                },
15832                volatile_status: Some(VolatileStatus {
15833                    target: MoveTarget::User,
15834                    volatile_status: PokemonVolatileStatus::STOCKPILE,
15835                }),
15836                ..Default::default()
15837            },
15838        );
15839        moves.insert(
15840            Choices::STOMP,
15841            Choice {
15842                move_id: Choices::STOMP,
15843                base_power: 65.0,
15844                category: MoveCategory::Physical,
15845                move_type: PokemonType::NORMAL,
15846                flags: Flags {
15847                    contact: true,
15848                    protect: true,
15849                    ..Default::default()
15850                },
15851                secondaries: Some(vec![Secondary {
15852                    chance: 30.0,
15853                    target: MoveTarget::Opponent,
15854                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15855                }]),
15856                ..Default::default()
15857            },
15858        );
15859        moves.insert(
15860            Choices::STOMPINGTANTRUM,
15861            Choice {
15862                move_id: Choices::STOMPINGTANTRUM,
15863                base_power: 75.0,
15864                category: MoveCategory::Physical,
15865                move_type: PokemonType::GROUND,
15866                flags: Flags {
15867                    contact: true,
15868                    protect: true,
15869                    ..Default::default()
15870                },
15871                ..Default::default()
15872            },
15873        );
15874        moves.insert(
15875            Choices::STONEAXE,
15876            Choice {
15877                move_id: Choices::STONEAXE,
15878                accuracy: 90.0,
15879                base_power: 65.0,
15880                category: MoveCategory::Physical,
15881                move_type: PokemonType::ROCK,
15882                flags: Flags {
15883                    contact: true,
15884                    protect: true,
15885                    slicing: true,
15886                    ..Default::default()
15887                },
15888                side_condition: Some(SideCondition {
15889                    target: MoveTarget::Opponent,
15890                    condition: PokemonSideCondition::Stealthrock,
15891                }),
15892                ..Default::default()
15893            },
15894        );
15895        moves.insert(
15896            Choices::STONEEDGE,
15897            Choice {
15898                move_id: Choices::STONEEDGE,
15899                accuracy: 80.0,
15900                base_power: 100.0,
15901                category: MoveCategory::Physical,
15902                move_type: PokemonType::ROCK,
15903                flags: Flags {
15904                    protect: true,
15905                    ..Default::default()
15906                },
15907                ..Default::default()
15908            },
15909        );
15910        moves.insert(
15911            Choices::STOREDPOWER,
15912            Choice {
15913                move_id: Choices::STOREDPOWER,
15914                base_power: 20.0,
15915                category: MoveCategory::Special,
15916                move_type: PokemonType::PSYCHIC,
15917                flags: Flags {
15918                    protect: true,
15919                    ..Default::default()
15920                },
15921                ..Default::default()
15922            },
15923        );
15924        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15925            moves.insert(
15926                Choices::STORMTHROW,
15927                Choice {
15928                    move_id: Choices::STORMTHROW,
15929                    base_power: 40.0,
15930                    category: MoveCategory::Physical,
15931                    move_type: PokemonType::FIGHTING,
15932                    flags: Flags {
15933                        contact: true,
15934                            protect: true,
15935                        ..Default::default()
15936                    },
15937                    ..Default::default()
15938                },
15939            );
15940        } else {
15941            moves.insert(
15942                Choices::STORMTHROW,
15943                Choice {
15944                    move_id: Choices::STORMTHROW,
15945                    base_power: 60.0,
15946                    category: MoveCategory::Physical,
15947                    move_type: PokemonType::FIGHTING,
15948                    flags: Flags {
15949                        contact: true,
15950                            protect: true,
15951                        ..Default::default()
15952                    },
15953                    ..Default::default()
15954                },
15955            );
15956        }
15957        moves.insert(
15958            Choices::STRANGESTEAM,
15959            Choice {
15960                move_id: Choices::STRANGESTEAM,
15961                accuracy: 95.0,
15962                base_power: 90.0,
15963                category: MoveCategory::Special,
15964                move_type: PokemonType::FAIRY,
15965                flags: Flags {
15966                    protect: true,
15967                    ..Default::default()
15968                },
15969                secondaries: Some(vec![Secondary {
15970                    chance: 20.0,
15971                    target: MoveTarget::Opponent,
15972                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
15973                }]),
15974                ..Default::default()
15975            },
15976        );
15977        moves.insert(
15978            Choices::STRENGTH,
15979            Choice {
15980                move_id: Choices::STRENGTH,
15981                base_power: 80.0,
15982                category: MoveCategory::Physical,
15983                move_type: PokemonType::NORMAL,
15984                flags: Flags {
15985                    contact: true,
15986                    protect: true,
15987                    ..Default::default()
15988                },
15989                ..Default::default()
15990            },
15991        );
15992        moves.insert(
15993            Choices::STRENGTHSAP,
15994            Choice {
15995                move_id: Choices::STRENGTHSAP,
15996                move_type: PokemonType::GRASS,
15997                flags: Flags {
15998                    heal: true,
15999                    protect: true,
16000                    reflectable: true,
16001                    ..Default::default()
16002                },
16003                ..Default::default()
16004            },
16005        );
16006        moves.insert(
16007            Choices::STRINGSHOT,
16008            Choice {
16009                move_id: Choices::STRINGSHOT,
16010                accuracy: 95.0,
16011                move_type: PokemonType::BUG,
16012                flags: Flags {
16013                    protect: true,
16014                    reflectable: true,
16015                    ..Default::default()
16016                },
16017                boost: Some(Boost {
16018                    target: MoveTarget::Opponent,
16019                    boosts: StatBoosts {
16020                        attack: 0,
16021                        defense: 0,
16022                        special_attack: 0,
16023                        special_defense: 0,
16024                        speed: -2,
16025                        accuracy: 0,
16026                    },
16027                }),
16028                ..Default::default()
16029            },
16030        );
16031        moves.insert(
16032            Choices::STRUGGLE,
16033            Choice {
16034                move_id: Choices::STRUGGLE,
16035                base_power: 50.0,
16036                category: MoveCategory::Physical,
16037                move_type: PokemonType::NORMAL,
16038                flags: Flags {
16039                    contact: true,
16040                    protect: true,
16041                    ..Default::default()
16042                },
16043                ..Default::default()
16044            },
16045        );
16046        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16047            moves.insert(
16048                Choices::STRUGGLEBUG,
16049                Choice {
16050                    move_id: Choices::STRUGGLEBUG,
16051                    base_power: 30.0,
16052                    category: MoveCategory::Special,
16053                    move_type: PokemonType::BUG,
16054                    flags: Flags {
16055                            protect: true,
16056                        ..Default::default()
16057                    },
16058                    secondaries: Some(vec![Secondary {
16059                        chance: 100.0,
16060                        target: MoveTarget::Opponent,
16061                        effect: Effect::Boost(StatBoosts {
16062                            attack: 0,
16063                            defense: 0,
16064                            special_attack: -1,
16065                            special_defense: 0,
16066                            speed: 0,
16067                            accuracy: 0,
16068                        }),
16069                    }]),
16070                    ..Default::default()
16071                },
16072            );
16073        } else {
16074            moves.insert(
16075                Choices::STRUGGLEBUG,
16076                Choice {
16077                    move_id: Choices::STRUGGLEBUG,
16078                    base_power: 50.0,
16079                    category: MoveCategory::Special,
16080                    move_type: PokemonType::BUG,
16081                    flags: Flags {
16082                            protect: true,
16083                        ..Default::default()
16084                    },
16085                    secondaries: Some(vec![Secondary {
16086                        chance: 100.0,
16087                        target: MoveTarget::Opponent,
16088                        effect: Effect::Boost(StatBoosts {
16089                            attack: 0,
16090                            defense: 0,
16091                            special_attack: -1,
16092                            special_defense: 0,
16093                            speed: 0,
16094                            accuracy: 0,
16095                        }),
16096                    }]),
16097                    ..Default::default()
16098                },
16099            );
16100        }
16101        moves.insert(
16102            Choices::STUFFCHEEKS,
16103            Choice {
16104                move_id: Choices::STUFFCHEEKS,
16105                target: MoveTarget::User,
16106                move_type: PokemonType::NORMAL,
16107                flags: Flags {
16108                    ..Default::default()
16109                },
16110                ..Default::default()
16111            },
16112        );
16113        moves.insert(
16114            Choices::STUNSPORE,
16115            Choice {
16116                move_id: Choices::STUNSPORE,
16117                accuracy: 75.0,
16118                status: Some(Status {
16119                    target: MoveTarget::Opponent,
16120                    status: PokemonStatus::PARALYZE,
16121                }),
16122                move_type: PokemonType::GRASS,
16123                flags: Flags {
16124                    powder: true,
16125                    protect: true,
16126                    reflectable: true,
16127                    ..Default::default()
16128                },
16129                ..Default::default()
16130            },
16131        );
16132        moves.insert(
16133            Choices::SUBMISSION,
16134            Choice {
16135                move_id: Choices::SUBMISSION,
16136                accuracy: 80.0,
16137                base_power: 80.0,
16138                category: MoveCategory::Physical,
16139                move_type: PokemonType::FIGHTING,
16140                flags: Flags {
16141                    contact: true,
16142                    protect: true,
16143                    ..Default::default()
16144                },
16145                recoil: Some(0.25),
16146                ..Default::default()
16147            },
16148        );
16149        moves.insert(
16150            Choices::SUBSTITUTE,
16151            Choice {
16152                move_id: Choices::SUBSTITUTE,
16153                target: MoveTarget::User,
16154                move_type: PokemonType::NORMAL,
16155                flags: Flags {
16156                    ..Default::default()
16157                },
16158                volatile_status: Some(VolatileStatus {
16159                    target: MoveTarget::User,
16160                    volatile_status: PokemonVolatileStatus::SUBSTITUTE,
16161                }),
16162                ..Default::default()
16163            },
16164        );
16165        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
16166            moves.insert(
16167                Choices::SUCKERPUNCH,
16168                Choice {
16169                    move_id: Choices::SUCKERPUNCH,
16170                    base_power: 80.0,
16171                    category: MoveCategory::Physical,
16172                    priority: 1,
16173                    move_type: PokemonType::DARK,
16174                    flags: Flags {
16175                        contact: true,
16176                            protect: true,
16177                        ..Default::default()
16178                    },
16179                    ..Default::default()
16180                },
16181            );
16182        } else {
16183            moves.insert(
16184                Choices::SUCKERPUNCH,
16185                Choice {
16186                    move_id: Choices::SUCKERPUNCH,
16187                    base_power: 70.0,
16188                    category: MoveCategory::Physical,
16189                    priority: 1,
16190                    move_type: PokemonType::DARK,
16191                    flags: Flags {
16192                        contact: true,
16193                            protect: true,
16194                        ..Default::default()
16195                    },
16196                    ..Default::default()
16197                },
16198            );
16199        }
16200        moves.insert(
16201            Choices::SUNNYDAY,
16202            Choice {
16203                move_id: Choices::SUNNYDAY,
16204                move_type: PokemonType::FIRE,
16205                flags: Flags {
16206                    ..Default::default()
16207                },
16208                ..Default::default()
16209            },
16210        );
16211        moves.insert(
16212            Choices::SUNSTEELSTRIKE,
16213            Choice {
16214                move_id: Choices::SUNSTEELSTRIKE,
16215                base_power: 100.0,
16216                category: MoveCategory::Physical,
16217                move_type: PokemonType::STEEL,
16218                flags: Flags {
16219                    contact: true,
16220                    protect: true,
16221                    ..Default::default()
16222                },
16223                ..Default::default()
16224            },
16225        );
16226        moves.insert(
16227            Choices::SUPERCELLSLAM,
16228            Choice {
16229                accuracy: 95.0,
16230                move_id: Choices::SUPERCELLSLAM,
16231                base_power: 100.0,
16232                category: MoveCategory::Physical,
16233                move_type: PokemonType::ELECTRIC,
16234                flags: Flags {
16235                    contact: true,
16236                    protect: true,
16237                    ..Default::default()
16238                },
16239                crash: Some(0.5),
16240                ..Default::default()
16241            },
16242        );
16243        moves.insert(
16244            Choices::SUPERFANG,
16245            Choice {
16246                move_id: Choices::SUPERFANG,
16247                accuracy: 90.0,
16248                category: MoveCategory::Physical,
16249                move_type: PokemonType::NORMAL,
16250                flags: Flags {
16251                    contact: true,
16252                    protect: true,
16253                    ..Default::default()
16254                },
16255                ..Default::default()
16256            },
16257        );
16258        moves.insert(
16259            Choices::SUPERPOWER,
16260            Choice {
16261                move_id: Choices::SUPERPOWER,
16262                base_power: 120.0,
16263                category: MoveCategory::Physical,
16264                move_type: PokemonType::FIGHTING,
16265                flags: Flags {
16266                    contact: true,
16267                    protect: true,
16268                    ..Default::default()
16269                },
16270                boost: Some(Boost {
16271                    target: MoveTarget::User,
16272                    boosts: StatBoosts {
16273                        attack: -1,
16274                        defense: -1,
16275                        special_attack: 0,
16276                        special_defense: 0,
16277                        speed: 0,
16278                        accuracy: 0,
16279                    },
16280                }),
16281                ..Default::default()
16282            },
16283        );
16284        moves.insert(
16285            Choices::SUPERSONIC,
16286            Choice {
16287                move_id: Choices::SUPERSONIC,
16288                accuracy: 55.0,
16289                move_type: PokemonType::NORMAL,
16290                flags: Flags {
16291                    protect: true,
16292                    reflectable: true,
16293                    sound: true,
16294                    ..Default::default()
16295                },
16296                volatile_status: Some(VolatileStatus {
16297                    target: MoveTarget::Opponent,
16298                    volatile_status: PokemonVolatileStatus::CONFUSION,
16299                }),
16300                ..Default::default()
16301            },
16302        );
16303        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16304            moves.insert(
16305                Choices::SURF,
16306                Choice {
16307                    move_id: Choices::SURF,
16308                    base_power: 95.0,
16309                    category: MoveCategory::Special,
16310                    move_type: PokemonType::WATER,
16311                    flags: Flags {
16312                                protect: true,
16313                        ..Default::default()
16314                    },
16315                    ..Default::default()
16316                },
16317            );
16318        } else {
16319            moves.insert(
16320                Choices::SURF,
16321                Choice {
16322                    move_id: Choices::SURF,
16323                    base_power: 90.0,
16324                    category: MoveCategory::Special,
16325                    move_type: PokemonType::WATER,
16326                    flags: Flags {
16327                                protect: true,
16328                        ..Default::default()
16329                    },
16330                    ..Default::default()
16331                },
16332            );
16333        }
16334        moves.insert(
16335            Choices::SURGINGSTRIKES,
16336            Choice {
16337                move_id: Choices::SURGINGSTRIKES,
16338                base_power: 25.0,
16339                category: MoveCategory::Physical,
16340                move_type: PokemonType::WATER,
16341                flags: Flags {
16342                    contact: true,
16343                    protect: true,
16344                    punch: true,
16345                    ..Default::default()
16346                },
16347                ..Default::default()
16348            },
16349        );
16350
16351        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
16352            moves.insert(
16353                Choices::SWAGGER,
16354                Choice {
16355                    move_id: Choices::SWAGGER,
16356                    accuracy: 85.0,
16357                    move_type: PokemonType::NORMAL,
16358                    flags: Flags {
16359                            protect: true,
16360                        reflectable: true,
16361                        ..Default::default()
16362                    },
16363                    boost: Some(Boost {
16364                        target: MoveTarget::Opponent,
16365                        boosts: StatBoosts {
16366                            attack: 2,
16367                            defense: 0,
16368                            special_attack: 0,
16369                            special_defense: 0,
16370                            speed: 0,
16371                            accuracy: 0,
16372                        },
16373                    }),
16374                    volatile_status: Some(VolatileStatus {
16375                        target: MoveTarget::Opponent,
16376                        volatile_status: PokemonVolatileStatus::CONFUSION,
16377                    }),
16378                    ..Default::default()
16379                },
16380            );
16381        } else {
16382            moves.insert(
16383                Choices::SWAGGER,
16384                Choice {
16385                    move_id: Choices::SWAGGER,
16386                    accuracy: 90.0,
16387                    move_type: PokemonType::NORMAL,
16388                    flags: Flags {
16389                            protect: true,
16390                        reflectable: true,
16391                        ..Default::default()
16392                    },
16393                    boost: Some(Boost {
16394                        target: MoveTarget::Opponent,
16395                        boosts: StatBoosts {
16396                            attack: 2,
16397                            defense: 0,
16398                            special_attack: 0,
16399                            special_defense: 0,
16400                            speed: 0,
16401                            accuracy: 0,
16402                        },
16403                    }),
16404                    volatile_status: Some(VolatileStatus {
16405                        target: MoveTarget::Opponent,
16406                        volatile_status: PokemonVolatileStatus::CONFUSION,
16407                    }),
16408                    ..Default::default()
16409                },
16410            );
16411        }
16412        moves.insert(
16413            Choices::SWALLOW,
16414            Choice {
16415                move_id: Choices::SWALLOW,
16416                target: MoveTarget::User,
16417                move_type: PokemonType::NORMAL,
16418                flags: Flags {
16419                    heal: true,
16420                    ..Default::default()
16421                },
16422                ..Default::default()
16423            },
16424        );
16425        moves.insert(
16426            Choices::SWEETKISS,
16427            Choice {
16428                move_id: Choices::SWEETKISS,
16429                accuracy: 75.0,
16430                move_type: PokemonType::FAIRY,
16431                flags: Flags {
16432                    protect: true,
16433                    reflectable: true,
16434                    ..Default::default()
16435                },
16436                volatile_status: Some(VolatileStatus {
16437                    target: MoveTarget::Opponent,
16438                    volatile_status: PokemonVolatileStatus::CONFUSION,
16439                }),
16440                ..Default::default()
16441            },
16442        );
16443        moves.insert(
16444            Choices::SWEETSCENT,
16445            Choice {
16446                move_id: Choices::SWEETSCENT,
16447                move_type: PokemonType::NORMAL,
16448                flags: Flags {
16449                    protect: true,
16450                    reflectable: true,
16451                    ..Default::default()
16452                },
16453                boost: Some(Boost {
16454                    target: MoveTarget::Opponent,
16455                    boosts: StatBoosts {
16456                        attack: 0,
16457                        defense: 0,
16458                        special_attack: 0,
16459                        special_defense: 0,
16460                        speed: 0,
16461                        accuracy: 0,
16462                    },
16463                }),
16464                ..Default::default()
16465            },
16466        );
16467        moves.insert(
16468            Choices::SWIFT,
16469            Choice {
16470                move_id: Choices::SWIFT,
16471                base_power: 60.0,
16472                category: MoveCategory::Special,
16473                move_type: PokemonType::NORMAL,
16474                flags: Flags {
16475                    protect: true,
16476                    ..Default::default()
16477                },
16478                ..Default::default()
16479            },
16480        );
16481        moves.insert(
16482            Choices::SWITCHEROO,
16483            Choice {
16484                move_id: Choices::SWITCHEROO,
16485                move_type: PokemonType::DARK,
16486                flags: Flags {
16487                    protect: true,
16488                    ..Default::default()
16489                },
16490                ..Default::default()
16491            },
16492        );
16493        moves.insert(
16494            Choices::SWORDSDANCE,
16495            Choice {
16496                move_id: Choices::SWORDSDANCE,
16497                target: MoveTarget::User,
16498                move_type: PokemonType::NORMAL,
16499                flags: Flags {
16500                    ..Default::default()
16501                },
16502                boost: Some(Boost {
16503                    target: MoveTarget::User,
16504                    boosts: StatBoosts {
16505                        attack: 2,
16506                        defense: 0,
16507                        special_attack: 0,
16508                        special_defense: 0,
16509                        speed: 0,
16510                        accuracy: 0,
16511                    },
16512                }),
16513                ..Default::default()
16514            },
16515        );
16516        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16517            moves.insert(
16518                Choices::SYNCHRONOISE,
16519                Choice {
16520                    move_id: Choices::SYNCHRONOISE,
16521                    base_power: 70.0,
16522                    category: MoveCategory::Special,
16523                    move_type: PokemonType::PSYCHIC,
16524                    flags: Flags {
16525                            protect: true,
16526                        ..Default::default()
16527                    },
16528                    ..Default::default()
16529                },
16530            );
16531        } else {
16532            moves.insert(
16533                Choices::SYNCHRONOISE,
16534                Choice {
16535                    move_id: Choices::SYNCHRONOISE,
16536                    base_power: 120.0,
16537                    category: MoveCategory::Special,
16538                    move_type: PokemonType::PSYCHIC,
16539                    flags: Flags {
16540                            protect: true,
16541                        ..Default::default()
16542                    },
16543                    ..Default::default()
16544                },
16545            );
16546        }
16547        moves.insert(
16548            Choices::SYNTHESIS,
16549            Choice {
16550                move_id: Choices::SYNTHESIS,
16551                target: MoveTarget::User,
16552                move_type: PokemonType::GRASS,
16553                flags: Flags {
16554                    heal: true,
16555                    ..Default::default()
16556                },
16557                heal: Some(Heal {
16558                    target: MoveTarget::User,
16559                    amount: 0.5,
16560                }),
16561                ..Default::default()
16562            },
16563        );
16564        moves.insert(
16565            Choices::SYRUPBOMB,
16566            Choice {
16567                move_id: Choices::SYRUPBOMB,
16568                accuracy: 85.0,
16569                base_power: 60.0,
16570                category: MoveCategory::Special,
16571                move_type: PokemonType::GRASS,
16572                flags: Flags {
16573                    bullet: true,
16574                    protect: true,
16575                    ..Default::default()
16576                },
16577                secondaries: Some(vec![Secondary {
16578                    chance: 100.0,
16579                    target: MoveTarget::Opponent,
16580                    effect: Effect::VolatileStatus(PokemonVolatileStatus::SYRUPBOMB),
16581                }]),
16582                ..Default::default()
16583            },
16584        );
16585        moves.insert(
16586            Choices::TACHYONCUTTER,
16587            Choice {
16588                move_id: Choices::TACHYONCUTTER,
16589                base_power: 50.0,
16590                category: MoveCategory::Special,
16591                move_type: PokemonType::STEEL,
16592                flags: Flags {
16593                    protect: true,
16594                    slicing: true,
16595                    ..Default::default()
16596                },
16597                ..Default::default()
16598            },
16599        );
16600        moves.insert(
16601            Choices::TACKLE,
16602            Choice {
16603                move_id: Choices::TACKLE,
16604                base_power: 40.0,
16605                category: MoveCategory::Physical,
16606                move_type: PokemonType::NORMAL,
16607                flags: Flags {
16608                    contact: true,
16609                    protect: true,
16610                    ..Default::default()
16611                },
16612                ..Default::default()
16613            },
16614        );
16615        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
16616            moves.insert(
16617                Choices::TAILGLOW,
16618                Choice {
16619                    move_id: Choices::TAILGLOW,
16620                    target: MoveTarget::User,
16621                    move_type: PokemonType::BUG,
16622                    flags: Flags {
16623                            ..Default::default()
16624                    },
16625                    boost: Some(Boost {
16626                        target: MoveTarget::User,
16627                        boosts: StatBoosts {
16628                            attack: 0,
16629                            defense: 0,
16630                            special_attack: 2,
16631                            special_defense: 0,
16632                            speed: 0,
16633                            accuracy: 0,
16634                        },
16635                    }),
16636                    ..Default::default()
16637                },
16638            );
16639        } else {
16640            moves.insert(
16641                Choices::TAILGLOW,
16642                Choice {
16643                    move_id: Choices::TAILGLOW,
16644                    target: MoveTarget::User,
16645                    move_type: PokemonType::BUG,
16646                    flags: Flags {
16647                            ..Default::default()
16648                    },
16649                    boost: Some(Boost {
16650                        target: MoveTarget::User,
16651                        boosts: StatBoosts {
16652                            attack: 0,
16653                            defense: 0,
16654                            special_attack: 3,
16655                            special_defense: 0,
16656                            speed: 0,
16657                            accuracy: 0,
16658                        },
16659                    }),
16660                    ..Default::default()
16661                },
16662            );
16663        }
16664        moves.insert(
16665            Choices::TAILSLAP,
16666            Choice {
16667                move_id: Choices::TAILSLAP,
16668                accuracy: 85.0,
16669                base_power: 25.0,
16670                category: MoveCategory::Physical,
16671                move_type: PokemonType::NORMAL,
16672                flags: Flags {
16673                    contact: true,
16674                    protect: true,
16675                    ..Default::default()
16676                },
16677                ..Default::default()
16678            },
16679        );
16680        moves.insert(
16681            Choices::TAILWHIP,
16682            Choice {
16683                move_id: Choices::TAILWHIP,
16684                move_type: PokemonType::NORMAL,
16685                flags: Flags {
16686                    protect: true,
16687                    reflectable: true,
16688                    ..Default::default()
16689                },
16690                boost: Some(Boost {
16691                    target: MoveTarget::Opponent,
16692                    boosts: StatBoosts {
16693                        attack: 0,
16694                        defense: -1,
16695                        special_attack: 0,
16696                        special_defense: 0,
16697                        speed: 0,
16698                        accuracy: 0,
16699                    },
16700                }),
16701                ..Default::default()
16702            },
16703        );
16704        moves.insert(
16705            Choices::TAILWIND,
16706            Choice {
16707                move_id: Choices::TAILWIND,
16708                target: MoveTarget::User,
16709                move_type: PokemonType::FLYING,
16710                flags: Flags {
16711                    wind: true,
16712                    ..Default::default()
16713                },
16714                side_condition: Some(SideCondition {
16715                    target: MoveTarget::User,
16716                    condition: PokemonSideCondition::Tailwind,
16717                }),
16718                ..Default::default()
16719            },
16720        );
16721        moves.insert(
16722            Choices::TAKEDOWN,
16723            Choice {
16724                move_id: Choices::TAKEDOWN,
16725                accuracy: 85.0,
16726                base_power: 90.0,
16727                category: MoveCategory::Physical,
16728                move_type: PokemonType::NORMAL,
16729                flags: Flags {
16730                    contact: true,
16731                    protect: true,
16732                    ..Default::default()
16733                },
16734                recoil: Some(0.33),
16735                ..Default::default()
16736            },
16737        );
16738        moves.insert(
16739            Choices::TAKEHEART,
16740            Choice {
16741                move_id: Choices::TAKEHEART,
16742                target: MoveTarget::User,
16743                move_type: PokemonType::PSYCHIC,
16744                flags: Flags {
16745                    ..Default::default()
16746                },
16747                ..Default::default()
16748            },
16749        );
16750        moves.insert(
16751            Choices::TARSHOT,
16752            Choice {
16753                move_id: Choices::TARSHOT,
16754                move_type: PokemonType::ROCK,
16755                flags: Flags {
16756                    protect: true,
16757                    reflectable: true,
16758                    ..Default::default()
16759                },
16760                boost: Some(Boost {
16761                    target: MoveTarget::Opponent,
16762                    boosts: StatBoosts {
16763                        attack: 0,
16764                        defense: 0,
16765                        special_attack: 0,
16766                        special_defense: 0,
16767                        speed: -1,
16768                        accuracy: 0,
16769                    },
16770                }),
16771                volatile_status: Some(VolatileStatus {
16772                    target: MoveTarget::Opponent,
16773                    volatile_status: PokemonVolatileStatus::TARSHOT,
16774                }),
16775                ..Default::default()
16776            },
16777        );
16778        moves.insert(
16779            Choices::TAUNT,
16780            Choice {
16781                move_id: Choices::TAUNT,
16782                move_type: PokemonType::DARK,
16783                flags: Flags {
16784                    protect: true,
16785                    reflectable: true,
16786                    ..Default::default()
16787                },
16788                volatile_status: Some(VolatileStatus {
16789                    target: MoveTarget::Opponent,
16790                    volatile_status: PokemonVolatileStatus::TAUNT,
16791                }),
16792                ..Default::default()
16793            },
16794        );
16795        moves.insert(
16796            Choices::TEARFULLOOK,
16797            Choice {
16798                move_id: Choices::TEARFULLOOK,
16799                move_type: PokemonType::NORMAL,
16800                flags: Flags {
16801                    reflectable: true,
16802                    ..Default::default()
16803                },
16804                boost: Some(Boost {
16805                    target: MoveTarget::Opponent,
16806                    boosts: StatBoosts {
16807                        attack: -1,
16808                        defense: 0,
16809                        special_attack: -1,
16810                        special_defense: 0,
16811                        speed: 0,
16812                        accuracy: 0,
16813                    },
16814                }),
16815                ..Default::default()
16816            },
16817        );
16818        moves.insert(
16819            Choices::TEATIME,
16820            Choice {
16821                move_id: Choices::TEATIME,
16822                move_type: PokemonType::NORMAL,
16823                flags: Flags {
16824                    ..Default::default()
16825                },
16826                ..Default::default()
16827            },
16828        );
16829        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16830            moves.insert(
16831                Choices::TECHNOBLAST,
16832                Choice {
16833                    move_id: Choices::TECHNOBLAST,
16834                    base_power: 85.0,
16835                    category: MoveCategory::Special,
16836                    move_type: PokemonType::NORMAL,
16837                    flags: Flags {
16838                            protect: true,
16839                        ..Default::default()
16840                    },
16841                    ..Default::default()
16842                },
16843            );
16844        } else {
16845            moves.insert(
16846                Choices::TECHNOBLAST,
16847                Choice {
16848                    move_id: Choices::TECHNOBLAST,
16849                    base_power: 120.0,
16850                    category: MoveCategory::Special,
16851                    move_type: PokemonType::NORMAL,
16852                    flags: Flags {
16853                            protect: true,
16854                        ..Default::default()
16855                    },
16856                    ..Default::default()
16857                },
16858            );
16859        }
16860        moves.insert(
16861            Choices::TEETERDANCE,
16862            Choice {
16863                move_id: Choices::TEETERDANCE,
16864                move_type: PokemonType::NORMAL,
16865                flags: Flags {
16866                    protect: true,
16867                    ..Default::default()
16868                },
16869                volatile_status: Some(VolatileStatus {
16870                    target: MoveTarget::Opponent,
16871                    volatile_status: PokemonVolatileStatus::CONFUSION,
16872                }),
16873                ..Default::default()
16874            },
16875        );
16876        moves.insert(
16877            Choices::TELEKINESIS,
16878            Choice {
16879                move_id: Choices::TELEKINESIS,
16880                move_type: PokemonType::PSYCHIC,
16881                flags: Flags {
16882                    protect: true,
16883                    reflectable: true,
16884                    ..Default::default()
16885                },
16886                volatile_status: Some(VolatileStatus {
16887                    target: MoveTarget::Opponent,
16888                    volatile_status: PokemonVolatileStatus::TELEKINESIS,
16889                }),
16890                ..Default::default()
16891            },
16892        );
16893
16894        if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
16895            moves.insert(
16896                Choices::TELEPORT,
16897                Choice {
16898                    move_id: Choices::TELEPORT,
16899                    priority: -6,
16900                    target: MoveTarget::User,
16901                    move_type: PokemonType::PSYCHIC,
16902                    flags: Flags {
16903                        pivot: true,
16904                        ..Default::default()
16905                    },
16906                    ..Default::default()
16907                },
16908            );
16909        } else {
16910            moves.insert(
16911                Choices::TELEPORT,
16912                Choice {
16913                    move_id: Choices::TELEPORT,
16914                    priority: 0,
16915                    target: MoveTarget::User,
16916                    move_type: PokemonType::PSYCHIC,
16917                    flags: Flags {
16918                        ..Default::default()
16919                    },
16920                    ..Default::default()
16921                },
16922            );
16923        }
16924        moves.insert(
16925            Choices::TEMPERFLARE,
16926            Choice {
16927                move_id: Choices::TEMPERFLARE,
16928                base_power: 75.0,
16929                category: MoveCategory::Physical,
16930                move_type: PokemonType::FIRE,
16931                flags: Flags {
16932                    contact: true,
16933                    protect: true,
16934                    ..Default::default()
16935                },
16936                ..Default::default()
16937            },
16938        );
16939        moves.insert(
16940            Choices::TERABLAST,
16941            Choice {
16942                move_id: Choices::TERABLAST,
16943                base_power: 80.0,
16944                category: MoveCategory::Special,
16945                move_type: PokemonType::NORMAL,
16946                flags: Flags {
16947                    protect: true,
16948                    ..Default::default()
16949                },
16950                ..Default::default()
16951            },
16952        );
16953        moves.insert(
16954            Choices::TERASTARSTORM,
16955            Choice {
16956                move_id: Choices::TERASTARSTORM,
16957                base_power: 120.0,
16958                category: MoveCategory::Special,
16959                move_type: PokemonType::NORMAL,
16960                flags: Flags {
16961                    protect: true,
16962                    ..Default::default()
16963                },
16964                ..Default::default()
16965            },
16966        );
16967        moves.insert(
16968            Choices::TERRAINPULSE,
16969            Choice {
16970                move_id: Choices::TERRAINPULSE,
16971                base_power: 50.0,
16972                category: MoveCategory::Special,
16973                move_type: PokemonType::NORMAL,
16974                flags: Flags {
16975                    protect: true,
16976                    pulse: true,
16977                    ..Default::default()
16978                },
16979                ..Default::default()
16980            },
16981        );
16982        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16983            moves.insert(
16984                Choices::THIEF,
16985                Choice {
16986                    move_id: Choices::THIEF,
16987                    base_power: 40.0,
16988                    category: MoveCategory::Physical,
16989                    move_type: PokemonType::DARK,
16990                    flags: Flags {
16991                        contact: true,
16992                            protect: true,
16993                        ..Default::default()
16994                    },
16995                    ..Default::default()
16996                },
16997            );
16998        } else {
16999            moves.insert(
17000                Choices::THIEF,
17001                Choice {
17002                    move_id: Choices::THIEF,
17003                    base_power: 60.0,
17004                    category: MoveCategory::Physical,
17005                    move_type: PokemonType::DARK,
17006                    flags: Flags {
17007                        contact: true,
17008                            protect: true,
17009                        ..Default::default()
17010                    },
17011                    ..Default::default()
17012                },
17013            );
17014        }
17015        moves.insert(
17016            Choices::THOUSANDARROWS,
17017            Choice {
17018                move_id: Choices::THOUSANDARROWS,
17019                base_power: 90.0,
17020                category: MoveCategory::Physical,
17021                move_type: PokemonType::GROUND,
17022                flags: Flags {
17023                    protect: true,
17024                    ..Default::default()
17025                },
17026                volatile_status: Some(VolatileStatus {
17027                    target: MoveTarget::Opponent,
17028                    volatile_status: PokemonVolatileStatus::SMACKDOWN,
17029                }),
17030                ..Default::default()
17031            },
17032        );
17033        moves.insert(
17034            Choices::THOUSANDWAVES,
17035            Choice {
17036                move_id: Choices::THOUSANDWAVES,
17037                base_power: 90.0,
17038                category: MoveCategory::Physical,
17039                move_type: PokemonType::GROUND,
17040                flags: Flags {
17041                    protect: true,
17042                    ..Default::default()
17043                },
17044                ..Default::default()
17045            },
17046        );
17047        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17048            moves.insert(
17049                Choices::THRASH,
17050                Choice {
17051                    move_id: Choices::THRASH,
17052                    base_power: 90.0,
17053                    category: MoveCategory::Physical,
17054                    move_type: PokemonType::NORMAL,
17055                    flags: Flags {
17056                        contact: true,
17057                            protect: true,
17058                        ..Default::default()
17059                    },
17060                    volatile_status: Some(VolatileStatus {
17061                        target: MoveTarget::User,
17062                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
17063                    }),
17064                    ..Default::default()
17065                },
17066            );
17067        } else {
17068            moves.insert(
17069                Choices::THRASH,
17070                Choice {
17071                    move_id: Choices::THRASH,
17072                    base_power: 120.0,
17073                    category: MoveCategory::Physical,
17074                    move_type: PokemonType::NORMAL,
17075                    flags: Flags {
17076                        contact: true,
17077                            protect: true,
17078                        ..Default::default()
17079                    },
17080                    volatile_status: Some(VolatileStatus {
17081                        target: MoveTarget::User,
17082                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
17083                    }),
17084                    ..Default::default()
17085                },
17086            );
17087        }
17088        moves.insert(
17089            Choices::THROATCHOP,
17090            Choice {
17091                move_id: Choices::THROATCHOP,
17092                base_power: 80.0,
17093                category: MoveCategory::Physical,
17094                move_type: PokemonType::DARK,
17095                flags: Flags {
17096                    contact: true,
17097                    protect: true,
17098                    ..Default::default()
17099                },
17100                volatile_status: Some(VolatileStatus {
17101                    target: MoveTarget::Opponent,
17102                    volatile_status: PokemonVolatileStatus::THROATCHOP,
17103                }),
17104                ..Default::default()
17105            },
17106        );
17107        if cfg!(feature = "gen1") {
17108            moves.insert(
17109                Choices::THUNDER,
17110                Choice {
17111                    move_id: Choices::THUNDER,
17112                    accuracy: 70.0,
17113                    base_power: 120.0,
17114                    category: MoveCategory::Special,
17115                    move_type: PokemonType::ELECTRIC,
17116                    flags: Flags {
17117                            protect: true,
17118                        ..Default::default()
17119                    },
17120                    secondaries: Some(vec![Secondary {
17121                        chance: 10.0,
17122                        target: MoveTarget::Opponent,
17123                        effect: Effect::Status(PokemonStatus::PARALYZE),
17124                    }]),
17125                    ..Default::default()
17126                },
17127            );
17128        } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
17129            moves.insert(
17130                Choices::THUNDER,
17131                Choice {
17132                    move_id: Choices::THUNDER,
17133                    accuracy: 70.0,
17134                    base_power: 120.0,
17135                    category: MoveCategory::Special,
17136                    move_type: PokemonType::ELECTRIC,
17137                    flags: Flags {
17138                            protect: true,
17139                        ..Default::default()
17140                    },
17141                    secondaries: Some(vec![Secondary {
17142                        chance: 30.0,
17143                        target: MoveTarget::Opponent,
17144                        effect: Effect::Status(PokemonStatus::PARALYZE),
17145                    }]),
17146                    ..Default::default()
17147                },
17148            );
17149        } else {
17150            moves.insert(
17151                Choices::THUNDER,
17152                Choice {
17153                    move_id: Choices::THUNDER,
17154                    accuracy: 70.0,
17155                    base_power: 110.0,
17156                    category: MoveCategory::Special,
17157                    move_type: PokemonType::ELECTRIC,
17158                    flags: Flags {
17159                            protect: true,
17160                        ..Default::default()
17161                    },
17162                    secondaries: Some(vec![Secondary {
17163                        chance: 30.0,
17164                        target: MoveTarget::Opponent,
17165                        effect: Effect::Status(PokemonStatus::PARALYZE),
17166                    }]),
17167                    ..Default::default()
17168                },
17169            );
17170        }
17171        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
17172            moves.insert(
17173                Choices::THUNDERBOLT,
17174                Choice {
17175                    move_id: Choices::THUNDERBOLT,
17176                    base_power: 95.0,
17177                    category: MoveCategory::Special,
17178                    move_type: PokemonType::ELECTRIC,
17179                    flags: Flags {
17180                            protect: true,
17181                        ..Default::default()
17182                    },
17183                    secondaries: Some(vec![Secondary {
17184                        chance: 10.0,
17185                        target: MoveTarget::Opponent,
17186                        effect: Effect::Status(PokemonStatus::PARALYZE),
17187                    }]),
17188                    ..Default::default()
17189                },
17190            );
17191        } else {
17192            moves.insert(
17193                Choices::THUNDERBOLT,
17194                Choice {
17195                    move_id: Choices::THUNDERBOLT,
17196                    base_power: 90.0,
17197                    category: MoveCategory::Special,
17198                    move_type: PokemonType::ELECTRIC,
17199                    flags: Flags {
17200                            protect: true,
17201                        ..Default::default()
17202                    },
17203                    secondaries: Some(vec![Secondary {
17204                        chance: 10.0,
17205                        target: MoveTarget::Opponent,
17206                        effect: Effect::Status(PokemonStatus::PARALYZE),
17207                    }]),
17208                    ..Default::default()
17209                },
17210            );
17211        }
17212        moves.insert(
17213            Choices::THUNDERCAGE,
17214            Choice {
17215                move_id: Choices::THUNDERCAGE,
17216                accuracy: 90.0,
17217                base_power: 80.0,
17218                category: MoveCategory::Special,
17219                move_type: PokemonType::ELECTRIC,
17220                flags: Flags {
17221                    protect: true,
17222                    ..Default::default()
17223                },
17224                volatile_status: Some(VolatileStatus {
17225                    target: MoveTarget::Opponent,
17226                    volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
17227                }),
17228                ..Default::default()
17229            },
17230        );
17231        moves.insert(
17232            Choices::THUNDERCLAP,
17233            Choice {
17234                move_id: Choices::THUNDERCLAP,
17235                base_power: 70.0,
17236                priority: 1,
17237                category: MoveCategory::Special,
17238                move_type: PokemonType::ELECTRIC,
17239                flags: Flags {
17240                    protect: true,
17241                    ..Default::default()
17242                },
17243                ..Default::default()
17244            },
17245        );
17246        moves.insert(
17247            Choices::THUNDERFANG,
17248            Choice {
17249                move_id: Choices::THUNDERFANG,
17250                accuracy: 95.0,
17251                base_power: 65.0,
17252                category: MoveCategory::Physical,
17253                move_type: PokemonType::ELECTRIC,
17254                flags: Flags {
17255                    bite: true,
17256                    contact: true,
17257                    protect: true,
17258                    ..Default::default()
17259                },
17260                secondaries: Some(vec![
17261                    Secondary {
17262                        chance: 10.0,
17263                        target: MoveTarget::Opponent,
17264                        effect: Effect::Status(PokemonStatus::PARALYZE),
17265                    },
17266                    Secondary {
17267                        chance: 10.0,
17268                        target: MoveTarget::Opponent,
17269                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17270                    },
17271                ]),
17272                ..Default::default()
17273            },
17274        );
17275        moves.insert(
17276            Choices::THUNDEROUSKICK,
17277            Choice {
17278                move_id: Choices::THUNDEROUSKICK,
17279                base_power: 90.0,
17280                category: MoveCategory::Physical,
17281                move_type: PokemonType::FIGHTING,
17282                flags: Flags {
17283                    contact: true,
17284                    protect: true,
17285                    ..Default::default()
17286                },
17287                secondaries: Some(vec![Secondary {
17288                    chance: 100.0,
17289                    target: MoveTarget::Opponent,
17290                    effect: Effect::Boost(StatBoosts {
17291                        attack: 0,
17292                        defense: -1,
17293                        special_attack: 0,
17294                        special_defense: 0,
17295                        speed: 0,
17296                        accuracy: 0,
17297                    }),
17298                }]),
17299                ..Default::default()
17300            },
17301        );
17302        moves.insert(
17303            Choices::THUNDERPUNCH,
17304            Choice {
17305                move_id: Choices::THUNDERPUNCH,
17306                base_power: 75.0,
17307                category: MoveCategory::Physical,
17308                move_type: PokemonType::ELECTRIC,
17309                flags: Flags {
17310                    contact: true,
17311                    protect: true,
17312                    punch: true,
17313                    ..Default::default()
17314                },
17315                secondaries: Some(vec![Secondary {
17316                    chance: 10.0,
17317                    target: MoveTarget::Opponent,
17318                    effect: Effect::Status(PokemonStatus::PARALYZE),
17319                }]),
17320                ..Default::default()
17321            },
17322        );
17323        moves.insert(
17324            Choices::THUNDERSHOCK,
17325            Choice {
17326                move_id: Choices::THUNDERSHOCK,
17327                base_power: 40.0,
17328                category: MoveCategory::Special,
17329                move_type: PokemonType::ELECTRIC,
17330                flags: Flags {
17331                    protect: true,
17332                    ..Default::default()
17333                },
17334                secondaries: Some(vec![Secondary {
17335                    chance: 10.0,
17336                    target: MoveTarget::Opponent,
17337                    effect: Effect::Status(PokemonStatus::PARALYZE),
17338                }]),
17339                ..Default::default()
17340            },
17341        );
17342        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
17343            moves.insert(
17344                Choices::THUNDERWAVE,
17345                Choice {
17346                    move_id: Choices::THUNDERWAVE,
17347                    accuracy: 100.0,
17348                    status: Some(Status {
17349                        target: MoveTarget::Opponent,
17350                        status: PokemonStatus::PARALYZE,
17351                    }),
17352                    move_type: PokemonType::ELECTRIC,
17353                    flags: Flags {
17354                            protect: true,
17355                        reflectable: true,
17356                        ..Default::default()
17357                    },
17358                    ..Default::default()
17359                },
17360            );
17361        } else {
17362            moves.insert(
17363                Choices::THUNDERWAVE,
17364                Choice {
17365                    move_id: Choices::THUNDERWAVE,
17366                    accuracy: 90.0,
17367                    status: Some(Status {
17368                        target: MoveTarget::Opponent,
17369                        status: PokemonStatus::PARALYZE,
17370                    }),
17371                    move_type: PokemonType::ELECTRIC,
17372                    flags: Flags {
17373                            protect: true,
17374                        reflectable: true,
17375                        ..Default::default()
17376                    },
17377                    ..Default::default()
17378                },
17379            );
17380        }
17381        moves.insert(
17382            Choices::TICKLE,
17383            Choice {
17384                move_id: Choices::TICKLE,
17385                move_type: PokemonType::NORMAL,
17386                flags: Flags {
17387                    protect: true,
17388                    reflectable: true,
17389                    ..Default::default()
17390                },
17391                boost: Some(Boost {
17392                    target: MoveTarget::Opponent,
17393                    boosts: StatBoosts {
17394                        attack: -1,
17395                        defense: -1,
17396                        special_attack: 0,
17397                        special_defense: 0,
17398                        speed: 0,
17399                        accuracy: 0,
17400                    },
17401                }),
17402                ..Default::default()
17403            },
17404        );
17405        moves.insert(
17406            Choices::TIDYUP,
17407            Choice {
17408                move_id: Choices::TIDYUP,
17409                target: MoveTarget::User,
17410                move_type: PokemonType::NORMAL,
17411                flags: Flags {
17412                    ..Default::default()
17413                },
17414                boost: Some(Boost {
17415                    target: MoveTarget::User,
17416                    boosts: StatBoosts {
17417                        attack: 1,
17418                        defense: 0,
17419                        special_attack: 0,
17420                        special_defense: 0,
17421                        speed: 1,
17422                        accuracy: 0,
17423                    },
17424                }),
17425                ..Default::default()
17426            },
17427        );
17428        moves.insert(
17429            Choices::TOPSYTURVY,
17430            Choice {
17431                move_id: Choices::TOPSYTURVY,
17432                move_type: PokemonType::DARK,
17433                flags: Flags {
17434                    protect: true,
17435                    reflectable: true,
17436                    ..Default::default()
17437                },
17438                ..Default::default()
17439            },
17440        );
17441        moves.insert(
17442            Choices::TORCHSONG,
17443            Choice {
17444                move_id: Choices::TORCHSONG,
17445                base_power: 80.0,
17446                category: MoveCategory::Special,
17447                move_type: PokemonType::FIRE,
17448                flags: Flags {
17449                    protect: true,
17450                    sound: true,
17451                    ..Default::default()
17452                },
17453                secondaries: Some(vec![Secondary {
17454                    chance: 100.0,
17455                    target: MoveTarget::User,
17456                    effect: Effect::Boost(StatBoosts {
17457                        attack: 0,
17458                        defense: 0,
17459                        special_attack: 1,
17460                        special_defense: 0,
17461                        speed: 0,
17462                        accuracy: 0,
17463                    }),
17464                }]),
17465                ..Default::default()
17466            },
17467        );
17468        moves.insert(
17469            Choices::TORMENT,
17470            Choice {
17471                move_id: Choices::TORMENT,
17472                move_type: PokemonType::DARK,
17473                flags: Flags {
17474                    protect: true,
17475                    reflectable: true,
17476                    ..Default::default()
17477                },
17478                volatile_status: Some(VolatileStatus {
17479                    target: MoveTarget::Opponent,
17480                    volatile_status: PokemonVolatileStatus::TORMENT,
17481                }),
17482                ..Default::default()
17483            },
17484        );
17485        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17486            moves.insert(
17487                Choices::TOXIC,
17488                Choice {
17489                    move_id: Choices::TOXIC,
17490                    accuracy: 85.0,
17491                    status: Some(Status {
17492                        target: MoveTarget::Opponent,
17493                        status: PokemonStatus::TOXIC,
17494                    }),
17495                    move_type: PokemonType::POISON,
17496                    flags: Flags {
17497                            protect: true,
17498                        reflectable: true,
17499                        ..Default::default()
17500                    },
17501                    ..Default::default()
17502                },
17503            );
17504        } else {
17505            moves.insert(
17506                Choices::TOXIC,
17507                Choice {
17508                    move_id: Choices::TOXIC,
17509                    accuracy: 90.0,
17510                    status: Some(Status {
17511                        target: MoveTarget::Opponent,
17512                        status: PokemonStatus::TOXIC,
17513                    }),
17514                    move_type: PokemonType::POISON,
17515                    flags: Flags {
17516                            protect: true,
17517                        reflectable: true,
17518                        ..Default::default()
17519                    },
17520                    ..Default::default()
17521                },
17522            );
17523        }
17524        moves.insert(
17525            Choices::TOXICSPIKES,
17526            Choice {
17527                move_id: Choices::TOXICSPIKES,
17528                move_type: PokemonType::POISON,
17529                flags: Flags {
17530                    reflectable: true,
17531                    ..Default::default()
17532                },
17533                side_condition: Some(SideCondition {
17534                    target: MoveTarget::Opponent,
17535                    condition: PokemonSideCondition::ToxicSpikes,
17536                }),
17537                ..Default::default()
17538            },
17539        );
17540        moves.insert(
17541            Choices::TOXICTHREAD,
17542            Choice {
17543                move_id: Choices::TOXICTHREAD,
17544                status: Some(Status {
17545                    target: MoveTarget::Opponent,
17546                    status: PokemonStatus::POISON,
17547                }),
17548                move_type: PokemonType::POISON,
17549                flags: Flags {
17550                    protect: true,
17551                    reflectable: true,
17552                    ..Default::default()
17553                },
17554                boost: Some(Boost {
17555                    target: MoveTarget::Opponent,
17556                    boosts: StatBoosts {
17557                        attack: 0,
17558                        defense: 0,
17559                        special_attack: 0,
17560                        special_defense: 0,
17561                        speed: -1,
17562                        accuracy: 0,
17563                    },
17564                }),
17565                ..Default::default()
17566            },
17567        );
17568        moves.insert(
17569            Choices::TRAILBLAZE,
17570            Choice {
17571                move_id: Choices::TRAILBLAZE,
17572                base_power: 50.0,
17573                category: MoveCategory::Physical,
17574                move_type: PokemonType::GRASS,
17575                flags: Flags {
17576                    contact: true,
17577                    protect: true,
17578                    ..Default::default()
17579                },
17580                secondaries: Some(vec![Secondary {
17581                    chance: 100.0,
17582                    target: MoveTarget::User,
17583                    effect: Effect::Boost(StatBoosts {
17584                        attack: 0,
17585                        defense: 0,
17586                        special_attack: 0,
17587                        special_defense: 0,
17588                        speed: 1,
17589                        accuracy: 0,
17590                    }),
17591                }]),
17592                ..Default::default()
17593            },
17594        );
17595        moves.insert(
17596            Choices::TRANSFORM,
17597            Choice {
17598                move_id: Choices::TRANSFORM,
17599                move_type: PokemonType::NORMAL,
17600                flags: Flags {
17601                    ..Default::default()
17602                },
17603                ..Default::default()
17604            },
17605        );
17606        if cfg!(feature = "gen1") {
17607            moves.insert(
17608                Choices::TRIATTACK,
17609                Choice {
17610                    move_id: Choices::TRIATTACK,
17611                    base_power: 80.0,
17612                    category: MoveCategory::Special,
17613                    move_type: PokemonType::NORMAL,
17614                    flags: Flags {
17615                        protect: true,
17616                        ..Default::default()
17617                    },
17618                    ..Default::default()
17619                },
17620            );
17621        } else {
17622            moves.insert(
17623                Choices::TRIATTACK,
17624                Choice {
17625                    move_id: Choices::TRIATTACK,
17626                    base_power: 80.0,
17627                    category: MoveCategory::Special,
17628                    move_type: PokemonType::NORMAL,
17629                    flags: Flags {
17630                        protect: true,
17631                        ..Default::default()
17632                    },
17633                    // not technically correct but idgaf
17634                    // this should roll 20% chance to inflict, and then roll for the status
17635                    secondaries: Some(
17636                        vec![
17637                            Secondary {
17638                                chance: 6.67,
17639                                target: MoveTarget::Opponent,
17640                                effect: Effect::Status(PokemonStatus::PARALYZE),
17641                            },
17642                            Secondary {
17643                                chance: 6.67,
17644                                target: MoveTarget::Opponent,
17645                                effect: Effect::Status(PokemonStatus::BURN),
17646                            },
17647                            Secondary {
17648                                chance: 6.67,
17649                                target: MoveTarget::Opponent,
17650                                effect: Effect::Status(PokemonStatus::FREEZE),
17651                            },
17652                        ]
17653                    ),
17654                    ..Default::default()
17655                },
17656            );
17657        }
17658        moves.insert(
17659            Choices::TRICK,
17660            Choice {
17661                move_id: Choices::TRICK,
17662                move_type: PokemonType::PSYCHIC,
17663                flags: Flags {
17664                    protect: true,
17665                    ..Default::default()
17666                },
17667                ..Default::default()
17668            },
17669        );
17670        moves.insert(
17671            Choices::TRICKORTREAT,
17672            Choice {
17673                move_id: Choices::TRICKORTREAT,
17674                move_type: PokemonType::GHOST,
17675                flags: Flags {
17676                    protect: true,
17677                    reflectable: true,
17678                    ..Default::default()
17679                },
17680                ..Default::default()
17681            },
17682        );
17683        moves.insert(
17684            Choices::TRICKROOM,
17685            Choice {
17686                move_id: Choices::TRICKROOM,
17687                priority: -7,
17688                move_type: PokemonType::PSYCHIC,
17689                flags: Flags {
17690                    ..Default::default()
17691                },
17692                ..Default::default()
17693            },
17694        );
17695        moves.insert(
17696            Choices::TRIPLEARROWS,
17697            Choice {
17698                move_id: Choices::TRIPLEARROWS,
17699                base_power: 90.0,
17700                category: MoveCategory::Physical,
17701                move_type: PokemonType::FIGHTING,
17702                flags: Flags {
17703                    protect: true,
17704                    ..Default::default()
17705                },
17706                secondaries: Some(vec![
17707                    Secondary {
17708                        chance: 50.0,
17709                        target: MoveTarget::Opponent,
17710                        effect: Effect::Boost(StatBoosts {
17711                            attack: 0,
17712                            defense: -1,
17713                            special_attack: 0,
17714                            special_defense: 0,
17715                            speed: 0,
17716                            accuracy: 0,
17717                        }),
17718                    },
17719                    Secondary {
17720                        chance: 30.0,
17721                        target: MoveTarget::Opponent,
17722                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17723                    },
17724                ]),
17725                ..Default::default()
17726            },
17727        );
17728        moves.insert(
17729            Choices::TRIPLEAXEL,
17730            Choice {
17731                move_id: Choices::TRIPLEAXEL,
17732                accuracy: 90.0,
17733                base_power: 40.0,
17734                category: MoveCategory::Physical,
17735                move_type: PokemonType::ICE,
17736                flags: Flags {
17737                    contact: true,
17738                    protect: true,
17739                    ..Default::default()
17740                },
17741                ..Default::default()
17742            },
17743        );
17744        moves.insert(
17745            Choices::TRIPLEDIVE,
17746            Choice {
17747                move_id: Choices::TRIPLEDIVE,
17748                accuracy: 95.0,
17749                base_power: 30.0,
17750                category: MoveCategory::Physical,
17751                move_type: PokemonType::WATER,
17752                flags: Flags {
17753                    contact: true,
17754                    protect: true,
17755                    ..Default::default()
17756                },
17757                ..Default::default()
17758            },
17759        );
17760        moves.insert(
17761            Choices::TRIPLEKICK,
17762            Choice {
17763                move_id: Choices::TRIPLEKICK,
17764                accuracy: 90.0,
17765                base_power: 10.0,
17766                category: MoveCategory::Physical,
17767                move_type: PokemonType::FIGHTING,
17768                flags: Flags {
17769                    contact: true,
17770                    protect: true,
17771                    ..Default::default()
17772                },
17773                ..Default::default()
17774            },
17775        );
17776        moves.insert(
17777            Choices::TROPKICK,
17778            Choice {
17779                move_id: Choices::TROPKICK,
17780                base_power: 70.0,
17781                category: MoveCategory::Physical,
17782                move_type: PokemonType::GRASS,
17783                flags: Flags {
17784                    contact: true,
17785                    protect: true,
17786                    ..Default::default()
17787                },
17788                secondaries: Some(vec![Secondary {
17789                    chance: 100.0,
17790                    target: MoveTarget::Opponent,
17791                    effect: Effect::Boost(StatBoosts {
17792                        attack: -1,
17793                        defense: 0,
17794                        special_attack: 0,
17795                        special_defense: 0,
17796                        speed: 0,
17797                        accuracy: 0,
17798                    }),
17799                }]),
17800                ..Default::default()
17801            },
17802        );
17803        moves.insert(
17804            Choices::TRUMPCARD,
17805            Choice {
17806                move_id: Choices::TRUMPCARD,
17807                category: MoveCategory::Special,
17808                move_type: PokemonType::NORMAL,
17809                flags: Flags {
17810                    contact: true,
17811                    protect: true,
17812                    ..Default::default()
17813                },
17814                ..Default::default()
17815            },
17816        );
17817        moves.insert(
17818            Choices::TWINBEAM,
17819            Choice {
17820                move_id: Choices::TWINBEAM,
17821                base_power: 40.0,
17822                category: MoveCategory::Special,
17823                move_type: PokemonType::PSYCHIC,
17824                flags: Flags {
17825                    protect: true,
17826                    ..Default::default()
17827                },
17828                ..Default::default()
17829            },
17830        );
17831        moves.insert(
17832            Choices::TWINEEDLE,
17833            Choice {
17834                move_id: Choices::TWINEEDLE,
17835                base_power: 25.0,
17836                category: MoveCategory::Physical,
17837                move_type: PokemonType::BUG,
17838                flags: Flags {
17839                    protect: true,
17840                    ..Default::default()
17841                },
17842                secondaries: Some(vec![Secondary {
17843                    chance: 20.0,
17844                    target: MoveTarget::Opponent,
17845                    effect: Effect::Status(PokemonStatus::POISON),
17846                }]),
17847                ..Default::default()
17848            },
17849        );
17850        moves.insert(
17851            Choices::TWISTER,
17852            Choice {
17853                move_id: Choices::TWISTER,
17854                base_power: 40.0,
17855                category: MoveCategory::Special,
17856                move_type: PokemonType::DRAGON,
17857                flags: Flags {
17858                    protect: true,
17859                    wind: true,
17860                    ..Default::default()
17861                },
17862                secondaries: Some(vec![Secondary {
17863                    chance: 20.0,
17864                    target: MoveTarget::Opponent,
17865                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17866                }]),
17867                ..Default::default()
17868            },
17869        );
17870        moves.insert(
17871            Choices::UPPERHAND,
17872            Choice {
17873                move_id: Choices::UPPERHAND,
17874                base_power: 65.0,
17875                priority: 3,
17876                category: MoveCategory::Physical,
17877                move_type: PokemonType::FIGHTING,
17878                flags: Flags {
17879                    contact: true,
17880                    protect: true,
17881                    ..Default::default()
17882                },
17883                secondaries: Some(vec![Secondary {
17884                    chance: 100.0,
17885                    target: MoveTarget::Opponent,
17886                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17887                }]),
17888                ..Default::default()
17889            },
17890        );
17891        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17892            moves.insert(
17893                Choices::UPROAR,
17894                Choice {
17895                    move_id: Choices::UPROAR,
17896                    base_power: 50.0,
17897                    category: MoveCategory::Special,
17898                    move_type: PokemonType::NORMAL,
17899                    flags: Flags {
17900                            protect: true,
17901                        sound: true,
17902                        ..Default::default()
17903                    },
17904                    ..Default::default()
17905                },
17906            );
17907        } else {
17908            moves.insert(
17909                Choices::UPROAR,
17910                Choice {
17911                    move_id: Choices::UPROAR,
17912                    base_power: 90.0,
17913                    category: MoveCategory::Special,
17914                    move_type: PokemonType::NORMAL,
17915                    flags: Flags {
17916                            protect: true,
17917                        sound: true,
17918                        ..Default::default()
17919                    },
17920                    ..Default::default()
17921                },
17922            );
17923        }
17924        moves.insert(
17925            Choices::UTURN,
17926            Choice {
17927                move_id: Choices::UTURN,
17928                base_power: 70.0,
17929                category: MoveCategory::Physical,
17930                move_type: PokemonType::BUG,
17931                flags: Flags {
17932                    contact: true,
17933                    protect: true,
17934                    pivot: true,
17935                    ..Default::default()
17936                },
17937                ..Default::default()
17938            },
17939        );
17940        moves.insert(
17941            Choices::VACUUMWAVE,
17942            Choice {
17943                move_id: Choices::VACUUMWAVE,
17944                base_power: 40.0,
17945                category: MoveCategory::Special,
17946                priority: 1,
17947                move_type: PokemonType::FIGHTING,
17948                flags: Flags {
17949                    protect: true,
17950                    ..Default::default()
17951                },
17952                ..Default::default()
17953            },
17954        );
17955        moves.insert(
17956            Choices::VCREATE,
17957            Choice {
17958                move_id: Choices::VCREATE,
17959                accuracy: 95.0,
17960                base_power: 180.0,
17961                category: MoveCategory::Physical,
17962                move_type: PokemonType::FIRE,
17963                flags: Flags {
17964                    contact: true,
17965                    protect: true,
17966                    ..Default::default()
17967                },
17968                boost: Some(Boost {
17969                    target: MoveTarget::User,
17970                    boosts: StatBoosts {
17971                        attack: 0,
17972                        defense: -1,
17973                        special_attack: 0,
17974                        special_defense: -1,
17975                        speed: -1,
17976                        accuracy: 0,
17977                    },
17978                }),
17979                ..Default::default()
17980            },
17981        );
17982        moves.insert(
17983            Choices::VEEVEEVOLLEY,
17984            Choice {
17985                move_id: Choices::VEEVEEVOLLEY,
17986                category: MoveCategory::Physical,
17987                move_type: PokemonType::NORMAL,
17988                flags: Flags {
17989                    contact: true,
17990                    protect: true,
17991                    ..Default::default()
17992                },
17993                ..Default::default()
17994            },
17995        );
17996        moves.insert(
17997            Choices::VENOMDRENCH,
17998            Choice {
17999                move_id: Choices::VENOMDRENCH,
18000                move_type: PokemonType::POISON,
18001                flags: Flags {
18002                    protect: true,
18003                    reflectable: true,
18004                    ..Default::default()
18005                },
18006                ..Default::default()
18007            },
18008        );
18009        moves.insert(
18010            Choices::VENOSHOCK,
18011            Choice {
18012                move_id: Choices::VENOSHOCK,
18013                base_power: 65.0,
18014                category: MoveCategory::Special,
18015                move_type: PokemonType::POISON,
18016                flags: Flags {
18017                    protect: true,
18018                    ..Default::default()
18019                },
18020                ..Default::default()
18021            },
18022        );
18023        moves.insert(
18024            Choices::VICTORYDANCE,
18025            Choice {
18026                move_id: Choices::VICTORYDANCE,
18027                target: MoveTarget::User,
18028                move_type: PokemonType::FIGHTING,
18029                flags: Flags {
18030                    ..Default::default()
18031                },
18032                boost: Some(Boost {
18033                    target: MoveTarget::User,
18034                    boosts: StatBoosts {
18035                        attack: 1,
18036                        defense: 1,
18037                        special_attack: 0,
18038                        special_defense: 0,
18039                        speed: 1,
18040                        accuracy: 0,
18041                    },
18042                }),
18043                ..Default::default()
18044            },
18045        );
18046        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18047            moves.insert(
18048                Choices::VINEWHIP,
18049                Choice {
18050                    move_id: Choices::VINEWHIP,
18051                    base_power: 35.0,
18052                    category: MoveCategory::Physical,
18053                    move_type: PokemonType::GRASS,
18054                    flags: Flags {
18055                        contact: true,
18056                            protect: true,
18057                        ..Default::default()
18058                    },
18059                    ..Default::default()
18060                },
18061            );
18062        } else {
18063            moves.insert(
18064                Choices::VINEWHIP,
18065                Choice {
18066                    move_id: Choices::VINEWHIP,
18067                    base_power: 45.0,
18068                    category: MoveCategory::Physical,
18069                    move_type: PokemonType::GRASS,
18070                    flags: Flags {
18071                        contact: true,
18072                            protect: true,
18073                        ..Default::default()
18074                    },
18075                    ..Default::default()
18076                },
18077            );
18078        }
18079        moves.insert(
18080            Choices::VISEGRIP,
18081            Choice {
18082                move_id: Choices::VISEGRIP,
18083                base_power: 55.0,
18084                category: MoveCategory::Physical,
18085                move_type: PokemonType::NORMAL,
18086                flags: Flags {
18087                    contact: true,
18088                    protect: true,
18089                    ..Default::default()
18090                },
18091                ..Default::default()
18092            },
18093        );
18094        moves.insert(
18095            Choices::VITALTHROW,
18096            Choice {
18097                move_id: Choices::VITALTHROW,
18098                base_power: 70.0,
18099                category: MoveCategory::Physical,
18100                priority: -1,
18101                move_type: PokemonType::FIGHTING,
18102                flags: Flags {
18103                    contact: true,
18104                    protect: true,
18105                    ..Default::default()
18106                },
18107                ..Default::default()
18108            },
18109        );
18110        moves.insert(
18111            Choices::VOLTSWITCH,
18112            Choice {
18113                move_id: Choices::VOLTSWITCH,
18114                base_power: 70.0,
18115                category: MoveCategory::Special,
18116                move_type: PokemonType::ELECTRIC,
18117                flags: Flags {
18118                    protect: true,
18119                    pivot: true,
18120                    ..Default::default()
18121                },
18122                ..Default::default()
18123            },
18124        );
18125        moves.insert(
18126            Choices::VOLTTACKLE,
18127            Choice {
18128                move_id: Choices::VOLTTACKLE,
18129                base_power: 120.0,
18130                category: MoveCategory::Physical,
18131                move_type: PokemonType::ELECTRIC,
18132                flags: Flags {
18133                    contact: true,
18134                    protect: true,
18135                    ..Default::default()
18136                },
18137                secondaries: Some(vec![Secondary {
18138                    chance: 10.0,
18139                    target: MoveTarget::Opponent,
18140                    effect: Effect::Status(PokemonStatus::PARALYZE),
18141                }]),
18142                recoil: Some(0.33),
18143                ..Default::default()
18144            },
18145        );
18146        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18147            moves.insert(
18148                Choices::WAKEUPSLAP,
18149                Choice {
18150                    move_id: Choices::WAKEUPSLAP,
18151                    base_power: 60.0,
18152                    category: MoveCategory::Physical,
18153                    move_type: PokemonType::FIGHTING,
18154                    flags: Flags {
18155                        contact: true,
18156                            protect: true,
18157                        ..Default::default()
18158                    },
18159                    ..Default::default()
18160                },
18161            );
18162        } else {
18163            moves.insert(
18164                Choices::WAKEUPSLAP,
18165                Choice {
18166                    move_id: Choices::WAKEUPSLAP,
18167                    base_power: 70.0,
18168                    category: MoveCategory::Physical,
18169                    move_type: PokemonType::FIGHTING,
18170                    flags: Flags {
18171                        contact: true,
18172                            protect: true,
18173                        ..Default::default()
18174                    },
18175                    ..Default::default()
18176                },
18177            );
18178        }
18179        moves.insert(
18180            Choices::WATERFALL,
18181            Choice {
18182                move_id: Choices::WATERFALL,
18183                base_power: 80.0,
18184                category: MoveCategory::Physical,
18185                move_type: PokemonType::WATER,
18186                flags: Flags {
18187                    contact: true,
18188                    protect: true,
18189                    ..Default::default()
18190                },
18191                secondaries: Some(vec![Secondary {
18192                    chance: 20.0,
18193                    target: MoveTarget::Opponent,
18194                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18195                }]),
18196                ..Default::default()
18197            },
18198        );
18199        moves.insert(
18200            Choices::WATERGUN,
18201            Choice {
18202                move_id: Choices::WATERGUN,
18203                base_power: 40.0,
18204                category: MoveCategory::Special,
18205                move_type: PokemonType::WATER,
18206                flags: Flags {
18207                    protect: true,
18208                    ..Default::default()
18209                },
18210                ..Default::default()
18211            },
18212        );
18213        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18214            moves.insert(
18215                Choices::WATERPLEDGE,
18216                Choice {
18217                    move_id: Choices::WATERPLEDGE,
18218                    base_power: 50.0,
18219                    category: MoveCategory::Special,
18220                    move_type: PokemonType::WATER,
18221                    flags: Flags {
18222                                protect: true,
18223                        ..Default::default()
18224                    },
18225                    ..Default::default()
18226                },
18227            );
18228        } else {
18229            moves.insert(
18230                Choices::WATERPLEDGE,
18231                Choice {
18232                    move_id: Choices::WATERPLEDGE,
18233                    base_power: 80.0,
18234                    category: MoveCategory::Special,
18235                    move_type: PokemonType::WATER,
18236                    flags: Flags {
18237                                protect: true,
18238                        ..Default::default()
18239                    },
18240                    ..Default::default()
18241                },
18242            );
18243        }
18244        moves.insert(
18245            Choices::WATERPULSE,
18246            Choice {
18247                move_id: Choices::WATERPULSE,
18248                base_power: 60.0,
18249                category: MoveCategory::Special,
18250                move_type: PokemonType::WATER,
18251                flags: Flags {
18252                    protect: true,
18253                    pulse: true,
18254                    ..Default::default()
18255                },
18256                secondaries: Some(vec![Secondary {
18257                    chance: 20.0,
18258                    target: MoveTarget::Opponent,
18259                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
18260                }]),
18261                ..Default::default()
18262            },
18263        );
18264
18265        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
18266            moves.insert(
18267                Choices::WATERSHURIKEN,
18268                Choice {
18269                    move_id: Choices::WATERSHURIKEN,
18270                    base_power: 15.0,
18271                    category: MoveCategory::Physical,
18272                    priority: 1,
18273                    move_type: PokemonType::WATER,
18274                    flags: Flags {
18275                            protect: true,
18276                        ..Default::default()
18277                    },
18278                    ..Default::default()
18279                },
18280            );
18281        } else {
18282            moves.insert(
18283                Choices::WATERSHURIKEN,
18284                Choice {
18285                    move_id: Choices::WATERSHURIKEN,
18286                    base_power: 15.0,
18287                    category: MoveCategory::Special,
18288                    priority: 1,
18289                    move_type: PokemonType::WATER,
18290                    flags: Flags {
18291                            protect: true,
18292                        ..Default::default()
18293                    },
18294                    ..Default::default()
18295                },
18296            );
18297        }
18298
18299        moves.insert(
18300            Choices::WATERSPORT,
18301            Choice {
18302                move_id: Choices::WATERSPORT,
18303                move_type: PokemonType::WATER,
18304                flags: Flags {
18305                    ..Default::default()
18306                },
18307                ..Default::default()
18308            },
18309        );
18310        moves.insert(
18311            Choices::WATERSPOUT,
18312            Choice {
18313                move_id: Choices::WATERSPOUT,
18314                base_power: 150.0,
18315                category: MoveCategory::Special,
18316                move_type: PokemonType::WATER,
18317                flags: Flags {
18318                    protect: true,
18319                    ..Default::default()
18320                },
18321                ..Default::default()
18322            },
18323        );
18324        moves.insert(
18325            Choices::WAVECRASH,
18326            Choice {
18327                move_id: Choices::WAVECRASH,
18328                base_power: 120.0,
18329                category: MoveCategory::Physical,
18330                move_type: PokemonType::WATER,
18331                flags: Flags {
18332                    contact: true,
18333                    protect: true,
18334                    ..Default::default()
18335                },
18336                recoil: Some(0.33),
18337                ..Default::default()
18338            },
18339        );
18340        moves.insert(
18341            Choices::WEATHERBALL,
18342            Choice {
18343                move_id: Choices::WEATHERBALL,
18344                base_power: 50.0,
18345                category: MoveCategory::Special,
18346                move_type: PokemonType::NORMAL,
18347                flags: Flags {
18348                    bullet: true,
18349                    protect: true,
18350                    ..Default::default()
18351                },
18352                ..Default::default()
18353            },
18354        );
18355        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
18356            moves.insert(
18357                Choices::WHIRLPOOL,
18358                Choice {
18359                    move_id: Choices::WHIRLPOOL,
18360                    accuracy: 70.0,
18361                    base_power: 15.0,
18362                    category: MoveCategory::Special,
18363                    move_type: PokemonType::WATER,
18364                    flags: Flags {
18365                            protect: true,
18366                        ..Default::default()
18367                    },
18368                    volatile_status: Some(VolatileStatus {
18369                        target: MoveTarget::Opponent,
18370                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18371                    }),
18372                    ..Default::default()
18373                },
18374            );
18375        } else {
18376            moves.insert(
18377                Choices::WHIRLPOOL,
18378                Choice {
18379                    move_id: Choices::WHIRLPOOL,
18380                    accuracy: 85.0,
18381                    base_power: 35.0,
18382                    category: MoveCategory::Special,
18383                    move_type: PokemonType::WATER,
18384                    flags: Flags {
18385                            protect: true,
18386                        ..Default::default()
18387                    },
18388                    volatile_status: Some(VolatileStatus {
18389                        target: MoveTarget::Opponent,
18390                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18391                    }),
18392                    ..Default::default()
18393                },
18394            );
18395        }
18396        moves.insert(
18397            Choices::WHIRLWIND,
18398            Choice {
18399                move_id: Choices::WHIRLWIND,
18400                priority: -6,
18401                move_type: PokemonType::NORMAL,
18402                flags: Flags {
18403                    drag: true,
18404                    reflectable: true,
18405                    wind: true,
18406                    ..Default::default()
18407                },
18408                ..Default::default()
18409            },
18410        );
18411
18412        if cfg!(feature = "gen9") {
18413            moves.insert(
18414                Choices::WICKEDBLOW,
18415                Choice {
18416                    move_id: Choices::WICKEDBLOW,
18417                    base_power: 75.0,
18418                    category: MoveCategory::Physical,
18419                    move_type: PokemonType::DARK,
18420                    flags: Flags {
18421                        contact: true,
18422                            protect: true,
18423                        punch: true,
18424                        ..Default::default()
18425                    },
18426                    ..Default::default()
18427                },
18428            );
18429        } else {
18430            moves.insert(
18431                Choices::WICKEDBLOW,
18432                Choice {
18433                    move_id: Choices::WICKEDBLOW,
18434                    base_power: 80.0,
18435                    category: MoveCategory::Physical,
18436                    move_type: PokemonType::DARK,
18437                    flags: Flags {
18438                        contact: true,
18439                            protect: true,
18440                        punch: true,
18441                        ..Default::default()
18442                    },
18443                    ..Default::default()
18444                },
18445            );
18446        }
18447
18448        moves.insert(
18449            Choices::WICKEDTORQUE,
18450            Choice {
18451                move_id: Choices::WICKEDTORQUE,
18452                base_power: 80.0,
18453                category: MoveCategory::Physical,
18454                move_type: PokemonType::DARK,
18455                flags: Flags {
18456                    protect: true,
18457                    ..Default::default()
18458                },
18459                secondaries: Some(vec![Secondary {
18460                    chance: 10.0,
18461                    target: MoveTarget::Opponent,
18462                    effect: Effect::Status(PokemonStatus::SLEEP),
18463                }]),
18464                ..Default::default()
18465            },
18466        );
18467        moves.insert(
18468            Choices::WIDEGUARD,
18469            Choice {
18470                move_id: Choices::WIDEGUARD,
18471                priority: 3,
18472                target: MoveTarget::User,
18473                move_type: PokemonType::ROCK,
18474                flags: Flags {
18475                    ..Default::default()
18476                },
18477                side_condition: Some(SideCondition {
18478                    target: MoveTarget::User,
18479                    condition: PokemonSideCondition::WideGuard,
18480                }),
18481                ..Default::default()
18482            },
18483        );
18484        moves.insert(
18485            Choices::WILDBOLTSTORM,
18486            Choice {
18487                move_id: Choices::WILDBOLTSTORM,
18488                accuracy: 80.0,
18489                base_power: 100.0,
18490                category: MoveCategory::Special,
18491                move_type: PokemonType::ELECTRIC,
18492                flags: Flags {
18493                    protect: true,
18494                    wind: true,
18495                    ..Default::default()
18496                },
18497                secondaries: Some(vec![Secondary {
18498                    chance: 20.0,
18499                    target: MoveTarget::Opponent,
18500                    effect: Effect::Status(PokemonStatus::PARALYZE),
18501                }]),
18502                ..Default::default()
18503            },
18504        );
18505        moves.insert(
18506            Choices::WILDCHARGE,
18507            Choice {
18508                move_id: Choices::WILDCHARGE,
18509                base_power: 90.0,
18510                category: MoveCategory::Physical,
18511                move_type: PokemonType::ELECTRIC,
18512                flags: Flags {
18513                    contact: true,
18514                    protect: true,
18515                    ..Default::default()
18516                },
18517                recoil: Some(0.25),
18518                ..Default::default()
18519            },
18520        );
18521        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18522            moves.insert(
18523                Choices::WILLOWISP,
18524                Choice {
18525                    move_id: Choices::WILLOWISP,
18526                    accuracy: 75.0,
18527                    status: Some(Status {
18528                        target: MoveTarget::Opponent,
18529                        status: PokemonStatus::BURN,
18530                    }),
18531                    move_type: PokemonType::FIRE,
18532                    flags: Flags {
18533                            protect: true,
18534                        reflectable: true,
18535                        ..Default::default()
18536                    },
18537                    ..Default::default()
18538                },
18539            );
18540        } else {
18541            moves.insert(
18542                Choices::WILLOWISP,
18543                Choice {
18544                    move_id: Choices::WILLOWISP,
18545                    accuracy: 85.0,
18546                    status: Some(Status {
18547                        target: MoveTarget::Opponent,
18548                        status: PokemonStatus::BURN,
18549                    }),
18550                    move_type: PokemonType::FIRE,
18551                    flags: Flags {
18552                            protect: true,
18553                        reflectable: true,
18554                        ..Default::default()
18555                    },
18556                    ..Default::default()
18557                },
18558            );
18559        }
18560        if cfg!(feature = "gen1") {
18561            moves.insert(
18562                Choices::WINGATTACK,
18563                Choice {
18564                    move_id: Choices::WINGATTACK,
18565                    base_power: 35.0,
18566                    category: MoveCategory::Physical,
18567                    move_type: PokemonType::FLYING,
18568                    flags: Flags {
18569                        contact: true,
18570                        protect: true,
18571                        ..Default::default()
18572                    },
18573                    ..Default::default()
18574                },
18575            );
18576        } else {
18577            moves.insert(
18578                Choices::WINGATTACK,
18579                Choice {
18580                    move_id: Choices::WINGATTACK,
18581                    base_power: 60.0,
18582                    category: MoveCategory::Physical,
18583                    move_type: PokemonType::FLYING,
18584                    flags: Flags {
18585                        contact: true,
18586                        protect: true,
18587                        ..Default::default()
18588                    },
18589                    ..Default::default()
18590                },
18591            );
18592        }
18593        moves.insert(
18594            Choices::WISH,
18595            Choice {
18596                move_id: Choices::WISH,
18597                target: MoveTarget::User,
18598                move_type: PokemonType::NORMAL,
18599                flags: Flags {
18600                    heal: true,
18601                    ..Default::default()
18602                },
18603                ..Default::default()
18604            },
18605        );
18606        moves.insert(
18607            Choices::WITHDRAW,
18608            Choice {
18609                move_id: Choices::WITHDRAW,
18610                target: MoveTarget::User,
18611                move_type: PokemonType::WATER,
18612                flags: Flags {
18613                    ..Default::default()
18614                },
18615                boost: Some(Boost {
18616                    target: MoveTarget::User,
18617                    boosts: StatBoosts {
18618                        attack: 0,
18619                        defense: 1,
18620                        special_attack: 0,
18621                        special_defense: 0,
18622                        speed: 0,
18623                        accuracy: 0,
18624                    },
18625                }),
18626                ..Default::default()
18627            },
18628        );
18629        moves.insert(
18630            Choices::WONDERROOM,
18631            Choice {
18632                move_id: Choices::WONDERROOM,
18633                move_type: PokemonType::PSYCHIC,
18634                flags: Flags {
18635                    ..Default::default()
18636                },
18637                ..Default::default()
18638            },
18639        );
18640        moves.insert(
18641            Choices::WOODHAMMER,
18642            Choice {
18643                move_id: Choices::WOODHAMMER,
18644                base_power: 120.0,
18645                category: MoveCategory::Physical,
18646                move_type: PokemonType::GRASS,
18647                flags: Flags {
18648                    contact: true,
18649                    protect: true,
18650                    ..Default::default()
18651                },
18652                recoil: Some(0.33),
18653                ..Default::default()
18654            },
18655        );
18656        moves.insert(
18657            Choices::WORKUP,
18658            Choice {
18659                move_id: Choices::WORKUP,
18660                target: MoveTarget::User,
18661                move_type: PokemonType::NORMAL,
18662                flags: Flags {
18663                    ..Default::default()
18664                },
18665                boost: Some(Boost {
18666                    target: MoveTarget::User,
18667                    boosts: StatBoosts {
18668                        attack: 1,
18669                        defense: 0,
18670                        special_attack: 1,
18671                        special_defense: 0,
18672                        speed: 0,
18673                        accuracy: 0,
18674                    },
18675                }),
18676                ..Default::default()
18677            },
18678        );
18679        moves.insert(
18680            Choices::WORRYSEED,
18681            Choice {
18682                move_id: Choices::WORRYSEED,
18683                move_type: PokemonType::GRASS,
18684                flags: Flags {
18685                    protect: true,
18686                    reflectable: true,
18687                    ..Default::default()
18688                },
18689                ..Default::default()
18690            },
18691        );
18692        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
18693            moves.insert(
18694                Choices::WRAP,
18695                Choice {
18696                    move_id: Choices::WRAP,
18697                    accuracy: 85.0,
18698                    base_power: 15.0,
18699                    category: MoveCategory::Physical,
18700                    move_type: PokemonType::NORMAL,
18701                    flags: Flags {
18702                        contact: true,
18703                        protect: true,
18704                        ..Default::default()
18705                    },
18706                    volatile_status: Some(VolatileStatus {
18707                        target: MoveTarget::Opponent,
18708                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18709                    }),
18710                    ..Default::default()
18711                },
18712            );
18713        } else {
18714            moves.insert(
18715                Choices::WRAP,
18716                Choice {
18717                    move_id: Choices::WRAP,
18718                    accuracy: 90.0,
18719                    base_power: 15.0,
18720                    category: MoveCategory::Physical,
18721                    move_type: PokemonType::NORMAL,
18722                    flags: Flags {
18723                        contact: true,
18724                        protect: true,
18725                        ..Default::default()
18726                    },
18727                    volatile_status: Some(VolatileStatus {
18728                        target: MoveTarget::Opponent,
18729                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18730                    }),
18731                    ..Default::default()
18732                },
18733            );
18734        }
18735        moves.insert(
18736            Choices::WRINGOUT,
18737            Choice {
18738                move_id: Choices::WRINGOUT,
18739                category: MoveCategory::Special,
18740                move_type: PokemonType::NORMAL,
18741                flags: Flags {
18742                    contact: true,
18743                    protect: true,
18744                    ..Default::default()
18745                },
18746                ..Default::default()
18747            },
18748        );
18749        moves.insert(
18750            Choices::XSCISSOR,
18751            Choice {
18752                move_id: Choices::XSCISSOR,
18753                base_power: 80.0,
18754                category: MoveCategory::Physical,
18755                move_type: PokemonType::BUG,
18756                flags: Flags {
18757                    contact: true,
18758                    protect: true,
18759                    slicing: true,
18760                    ..Default::default()
18761                },
18762                ..Default::default()
18763            },
18764        );
18765        moves.insert(
18766            Choices::YAWN,
18767            Choice {
18768                move_id: Choices::YAWN,
18769                move_type: PokemonType::NORMAL,
18770                flags: Flags {
18771                    protect: true,
18772                    reflectable: true,
18773                    ..Default::default()
18774                },
18775                volatile_status: Some(VolatileStatus {
18776                    target: MoveTarget::Opponent,
18777                    volatile_status: PokemonVolatileStatus::YAWN,
18778                }),
18779                ..Default::default()
18780            },
18781        );
18782        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
18783            moves.insert(
18784                Choices::ZAPCANNON,
18785                Choice {
18786                    move_id: Choices::ZAPCANNON,
18787                    accuracy: 50.0,
18788                    base_power: 100.0,
18789                    category: MoveCategory::Special,
18790                    move_type: PokemonType::ELECTRIC,
18791                    flags: Flags {
18792                        bullet: true,
18793                        protect: true,
18794                        ..Default::default()
18795                    },
18796                    secondaries: Some(vec![Secondary {
18797                        chance: 100.0,
18798                        target: MoveTarget::Opponent,
18799                        effect: Effect::Status(PokemonStatus::PARALYZE),
18800                    }]),
18801                    ..Default::default()
18802                },
18803            );
18804        } else {
18805            moves.insert(
18806                Choices::ZAPCANNON,
18807                Choice {
18808                    move_id: Choices::ZAPCANNON,
18809                    accuracy: 50.0,
18810                    base_power: 120.0,
18811                    category: MoveCategory::Special,
18812                    move_type: PokemonType::ELECTRIC,
18813                    flags: Flags {
18814                        bullet: true,
18815                        protect: true,
18816                        ..Default::default()
18817                    },
18818                    secondaries: Some(vec![Secondary {
18819                        chance: 100.0,
18820                        target: MoveTarget::Opponent,
18821                        effect: Effect::Status(PokemonStatus::PARALYZE),
18822                    }]),
18823                    ..Default::default()
18824                },
18825            );
18826        }
18827        moves.insert(
18828            Choices::ZENHEADBUTT,
18829            Choice {
18830                move_id: Choices::ZENHEADBUTT,
18831                accuracy: 90.0,
18832                base_power: 80.0,
18833                category: MoveCategory::Physical,
18834                move_type: PokemonType::PSYCHIC,
18835                flags: Flags {
18836                    contact: true,
18837                    protect: true,
18838                    ..Default::default()
18839                },
18840                secondaries: Some(vec![Secondary {
18841                    chance: 20.0,
18842                    target: MoveTarget::Opponent,
18843                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18844                }]),
18845                ..Default::default()
18846            },
18847        );
18848        moves.insert(
18849            Choices::ZINGZAP,
18850            Choice {
18851                move_id: Choices::ZINGZAP,
18852                base_power: 80.0,
18853                category: MoveCategory::Physical,
18854                move_type: PokemonType::ELECTRIC,
18855                flags: Flags {
18856                    contact: true,
18857                    protect: true,
18858                    ..Default::default()
18859                },
18860                secondaries: Some(vec![Secondary {
18861                    chance: 30.0,
18862                    target: MoveTarget::Opponent,
18863                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18864                }]),
18865                ..Default::default()
18866            },
18867        );
18868        moves.insert(
18869            Choices::ZIPPYZAP,
18870            Choice {
18871                move_id: Choices::ZIPPYZAP,
18872                base_power: 80.0,
18873                category: MoveCategory::Physical,
18874                priority: 2,
18875                move_type: PokemonType::ELECTRIC,
18876                flags: Flags {
18877                    contact: true,
18878                    protect: true,
18879                    ..Default::default()
18880                },
18881                secondaries: Some(vec![Secondary {
18882                    chance: 100.0,
18883                    target: MoveTarget::User,
18884                    effect: Effect::Boost(StatBoosts {
18885                        attack: 0,
18886                        defense: 0,
18887                        special_attack: 0,
18888                        special_defense: 0,
18889                        speed: 0,
18890                        accuracy: 0,
18891                    }),
18892                }]),
18893                ..Default::default()
18894            },
18895        );
18896
18897        #[cfg(any(feature = "gen1", feature = "gen2", feature = "gen3"))]
18898        undo_physical_special_split(&mut moves);
18899
18900        moves
18901    };
18902}
18903
18904#[derive(Debug, PartialEq, Clone, Copy)]
18905pub enum MoveCategory {
18906    Physical,
18907    Special,
18908    Status,
18909    Switch,
18910}
18911
18912#[derive(PartialEq, Debug, Clone)]
18913pub enum MoveTarget {
18914    User,
18915    Opponent,
18916}
18917
18918#[derive(Debug, Clone)]
18919pub struct VolatileStatus {
18920    pub target: MoveTarget,
18921    pub volatile_status: PokemonVolatileStatus,
18922}
18923
18924#[derive(Debug, Clone)]
18925pub struct SideCondition {
18926    pub target: MoveTarget,
18927    pub condition: PokemonSideCondition,
18928}
18929
18930#[derive(Debug, Clone)]
18931pub struct Boost {
18932    pub target: MoveTarget,
18933    pub boosts: StatBoosts,
18934}
18935
18936#[derive(Debug, Clone)]
18937pub struct Heal {
18938    pub target: MoveTarget,
18939    pub amount: f32,
18940}
18941
18942#[derive(Debug, Clone)]
18943pub struct Status {
18944    pub target: MoveTarget,
18945    pub status: PokemonStatus,
18946}
18947
18948#[derive(Debug, Clone, PartialEq)]
18949pub struct StatBoosts {
18950    pub attack: i8,
18951    pub defense: i8,
18952    pub special_attack: i8,
18953    pub special_defense: i8,
18954    pub speed: i8,
18955    pub accuracy: i8,
18956}
18957
18958impl Default for StatBoosts {
18959    fn default() -> StatBoosts {
18960        StatBoosts {
18961            attack: 0,
18962            defense: 0,
18963            special_attack: 0,
18964            special_defense: 0,
18965            speed: 0,
18966            accuracy: 0,
18967        }
18968    }
18969}
18970
18971impl StatBoosts {
18972    pub fn get_as_pokemon_boostable(&self) -> [(PokemonBoostableStat, i8); 6] {
18973        [
18974            (PokemonBoostableStat::Attack, self.attack),
18975            (PokemonBoostableStat::Defense, self.defense),
18976            (PokemonBoostableStat::SpecialAttack, self.special_attack),
18977            (PokemonBoostableStat::SpecialDefense, self.special_defense),
18978            (PokemonBoostableStat::Speed, self.speed),
18979            (PokemonBoostableStat::Accuracy, self.accuracy),
18980        ]
18981    }
18982}
18983
18984#[derive(Debug)]
18985pub struct Myself {
18986    pub volatile_status: Option<VolatileStatus>,
18987    pub boosts: StatBoosts,
18988}
18989
18990#[derive(Debug, Clone)]
18991pub struct Flags {
18992    pub bite: bool,
18993    pub bullet: bool,
18994    pub charge: bool,
18995    pub contact: bool,
18996    pub drag: bool,
18997    pub heal: bool,
18998    pub powder: bool,
18999    pub protect: bool,
19000    pub pulse: bool,
19001    pub punch: bool,
19002    pub recharge: bool,
19003    pub reflectable: bool,
19004    pub slicing: bool,
19005    pub sound: bool,
19006    pub pivot: bool,
19007    pub wind: bool,
19008}
19009
19010impl Default for Flags {
19011    fn default() -> Flags {
19012        Flags {
19013            bite: false,
19014            bullet: false,
19015            charge: false,
19016            contact: false,
19017            drag: false,
19018            heal: false,
19019            powder: false,
19020            protect: false,
19021            pulse: false,
19022            punch: false,
19023            recharge: false,
19024            reflectable: false,
19025            slicing: false,
19026            sound: false,
19027            pivot: false,
19028            wind: false,
19029        }
19030    }
19031}
19032
19033impl Flags {
19034    pub fn clear_all(&mut self) {
19035        self.bite = false;
19036        self.bullet = false;
19037        self.charge = false;
19038        self.contact = false;
19039        self.drag = false;
19040        self.heal = false;
19041        self.powder = false;
19042        self.protect = false;
19043        self.pulse = false;
19044        self.punch = false;
19045        self.recharge = false;
19046        self.reflectable = false;
19047        self.slicing = false;
19048        self.sound = false;
19049        self.pivot = false;
19050        self.wind = false;
19051    }
19052}
19053
19054#[derive(Debug, Clone)]
19055pub struct Secondary {
19056    pub chance: f32,
19057    pub target: MoveTarget,
19058    pub effect: Effect,
19059}
19060
19061#[derive(Debug, Clone, PartialEq)]
19062pub enum Effect {
19063    VolatileStatus(PokemonVolatileStatus),
19064    Boost(StatBoosts),
19065    Status(PokemonStatus),
19066    Heal(f32),
19067    RemoveItem,
19068}
19069
19070#[derive(PartialEq)]
19071pub enum MultiHitMove {
19072    None,
19073    DoubleHit,
19074    TripleHit,
19075    TwoToFiveHits,
19076    PopulationBomb,
19077    TripleAxel,
19078}
19079
19080#[derive(PartialEq)]
19081pub enum MultiAccuracyMove {
19082    None,
19083    TripleHit,
19084    TenHits,
19085}
19086
19087define_enum_with_from_str! {
19088    #[repr(u16)]
19089    #[derive(Eq, PartialEq, Debug, Hash, Copy, Clone)]
19090    Choices {
19091        NONE,
19092        ABSORB,
19093        ACCELEROCK,
19094        ACID,
19095        ACIDARMOR,
19096        ACIDSPRAY,
19097        ACROBATICS,
19098        ACUPRESSURE,
19099        AERIALACE,
19100        AEROBLAST,
19101        AFTERYOU,
19102        AGILITY,
19103        AIRCUTTER,
19104        AIRSLASH,
19105        ALLURINGVOICE,
19106        ALLYSWITCH,
19107        AMNESIA,
19108        ANCHORSHOT,
19109        ANCIENTPOWER,
19110        APPLEACID,
19111        AQUACUTTER,
19112        AQUAJET,
19113        AQUARING,
19114        AQUASTEP,
19115        AQUATAIL,
19116        ARMORCANNON,
19117        ARMTHRUST,
19118        AROMATHERAPY,
19119        AROMATICMIST,
19120        ASSIST,
19121        ASSURANCE,
19122        ASTONISH,
19123        ASTRALBARRAGE,
19124        ATTACKORDER,
19125        ATTRACT,
19126        AURASPHERE,
19127        AURAWHEEL,
19128        AURORABEAM,
19129        AURORAVEIL,
19130        AUTOTOMIZE,
19131        AVALANCHE,
19132        AXEKICK,
19133        BABYDOLLEYES,
19134        BADDYBAD,
19135        BANEFULBUNKER,
19136        BARBBARRAGE,
19137        BARRAGE,
19138        BARRIER,
19139        BATONPASS,
19140        BEAKBLAST,
19141        BEATUP,
19142        BEHEMOTHBASH,
19143        BEHEMOTHBLADE,
19144        BELCH,
19145        BELLYDRUM,
19146        BESTOW,
19147        BIDE,
19148        BIND,
19149        BITE,
19150        BITTERBLADE,
19151        BITTERMALICE,
19152        BLASTBURN,
19153        BLAZEKICK,
19154        BLAZINGTORQUE,
19155        BLEAKWINDSTORM,
19156        BLIZZARD,
19157        BLOCK,
19158        BLOODMOON,
19159        BLUEFLARE,
19160        BODYPRESS,
19161        BODYSLAM,
19162        BOLTBEAK,
19163        BOLTSTRIKE,
19164        BONECLUB,
19165        BONEMERANG,
19166        BONERUSH,
19167        BOOMBURST,
19168        BOUNCE,
19169        BOUNCYBUBBLE,
19170        BRANCHPOKE,
19171        BRAVEBIRD,
19172        BREAKINGSWIPE,
19173        BRICKBREAK,
19174        BRINE,
19175        BRUTALSWING,
19176        BUBBLE,
19177        BUBBLEBEAM,
19178        BUGBITE,
19179        BUGBUZZ,
19180        BULKUP,
19181        BULLDOZE,
19182        BULLETPUNCH,
19183        BULLETSEED,
19184        BURNINGBULWARK,
19185        BURNINGJEALOUSY,
19186        BURNUP,
19187        BUZZYBUZZ,
19188        CALMMIND,
19189        CAMOUFLAGE,
19190        CAPTIVATE,
19191        CEASELESSEDGE,
19192        CELEBRATE,
19193        CHARGE,
19194        CHARGEBEAM,
19195        CHARM,
19196        CHATTER,
19197        CHILLINGWATER,
19198        CHILLYRECEPTION,
19199        CHIPAWAY,
19200        CHLOROBLAST,
19201        CIRCLETHROW,
19202        CLAMP,
19203        CLANGINGSCALES,
19204        CLANGOROUSSOUL,
19205        CLEARSMOG,
19206        CLOSECOMBAT,
19207        COACHING,
19208        COIL,
19209        COLLISIONCOURSE,
19210        COMBATTORQUE,
19211        COMETPUNCH,
19212        COMEUPPANCE,
19213        CONFIDE,
19214        CONFUSERAY,
19215        CONFUSION,
19216        CONSTRICT,
19217        CONVERSION,
19218        CONVERSION2,
19219        COPYCAT,
19220        COREENFORCER,
19221        CORROSIVEGAS,
19222        COSMICPOWER,
19223        COTTONGUARD,
19224        COTTONSPORE,
19225        COUNTER,
19226        COURTCHANGE,
19227        COVET,
19228        CRABHAMMER,
19229        CRAFTYSHIELD,
19230        CROSSCHOP,
19231        CROSSPOISON,
19232        CRUNCH,
19233        CRUSHCLAW,
19234        CRUSHGRIP,
19235        CURSE,
19236        CUT,
19237        DARKESTLARIAT,
19238        DARKPULSE,
19239        DARKVOID,
19240        DAZZLINGGLEAM,
19241        DECORATE,
19242        DEFENDORDER,
19243        DEFENSECURL,
19244        DEFOG,
19245        DESTINYBOND,
19246        DETECT,
19247        DIAMONDSTORM,
19248        DIG,
19249        DIRECLAW,
19250        DISABLE,
19251        DISARMINGVOICE,
19252        DISCHARGE,
19253        DIVE,
19254        DIZZYPUNCH,
19255        DOODLE,
19256        DOOMDESIRE,
19257        DOUBLEEDGE,
19258        DOUBLEHIT,
19259        DOUBLEIRONBASH,
19260        DOUBLEKICK,
19261        DOUBLESHOCK,
19262        DOUBLESLAP,
19263        DOUBLETEAM,
19264        DRACOMETEOR,
19265        DRAGONASCENT,
19266        DRAGONBREATH,
19267        DRAGONCHEER,
19268        DRAGONCLAW,
19269        DRAGONDANCE,
19270        DRAGONDARTS,
19271        DRAGONENERGY,
19272        DRAGONHAMMER,
19273        DRAGONPULSE,
19274        DRAGONRAGE,
19275        DRAGONRUSH,
19276        DRAGONTAIL,
19277        DRAININGKISS,
19278        DRAINPUNCH,
19279        DREAMEATER,
19280        DRILLPECK,
19281        DRILLRUN,
19282        DRUMBEATING,
19283        DUALCHOP,
19284        DUALWINGBEAT,
19285        DYNAMAXCANNON,
19286        DYNAMICPUNCH,
19287        EARTHPOWER,
19288        EARTHQUAKE,
19289        ECHOEDVOICE,
19290        EERIEIMPULSE,
19291        EERIESPELL,
19292        EGGBOMB,
19293        ELECTRICTERRAIN,
19294        ELECTRIFY,
19295        ELECTROBALL,
19296        ELECTRODRIFT,
19297        ELECTROSHOT,
19298        ELECTROWEB,
19299        EMBARGO,
19300        EMBER,
19301        ENCORE,
19302        ENDEAVOR,
19303        ENDURE,
19304        ENERGYBALL,
19305        ENTRAINMENT,
19306        ERUPTION,
19307        ESPERWING,
19308        ETERNABEAM,
19309        EXPANDINGFORCE,
19310        EXPLOSION,
19311        EXTRASENSORY,
19312        EXTREMESPEED,
19313        FACADE,
19314        FAIRYLOCK,
19315        FAIRYWIND,
19316        FAKEOUT,
19317        FAKETEARS,
19318        FALSESURRENDER,
19319        FALSESWIPE,
19320        FEATHERDANCE,
19321        FEINT,
19322        FEINTATTACK,
19323        FELLSTINGER,
19324        FICKLEBEAM,
19325        FIERYDANCE,
19326        FIERYWRATH,
19327        FILLETAWAY,
19328        FINALGAMBIT,
19329        FIREBLAST,
19330        FIREFANG,
19331        FIRELASH,
19332        FIREPLEDGE,
19333        FIREPUNCH,
19334        FIRESPIN,
19335        FIRSTIMPRESSION,
19336        FISHIOUSREND,
19337        FISSURE,
19338        FLAIL,
19339        FLAMEBURST,
19340        FLAMECHARGE,
19341        FLAMETHROWER,
19342        FLAMEWHEEL,
19343        FLAREBLITZ,
19344        FLASH,
19345        FLASHCANNON,
19346        FLATTER,
19347        FLEURCANNON,
19348        FLING,
19349        FLIPTURN,
19350        FLOATYFALL,
19351        FLORALHEALING,
19352        FLOWERSHIELD,
19353        FLOWERTRICK,
19354        FLY,
19355        FLYINGPRESS,
19356        FOCUSBLAST,
19357        FOCUSENERGY,
19358        FOCUSPUNCH,
19359        FOLLOWME,
19360        FORCEPALM,
19361        FORESIGHT,
19362        FORESTSCURSE,
19363        FOULPLAY,
19364        FREEZEDRY,
19365        FREEZESHOCK,
19366        FREEZINGGLARE,
19367        FREEZYFROST,
19368        FRENZYPLANT,
19369        FROSTBREATH,
19370        FRUSTRATION,
19371        FURYATTACK,
19372        FURYCUTTER,
19373        FURYSWIPES,
19374        FUSIONBOLT,
19375        FUSIONFLARE,
19376        FUTURESIGHT,
19377        GASTROACID,
19378        GEARGRIND,
19379        GEARUP,
19380        GEOMANCY,
19381        GIGADRAIN,
19382        GIGAIMPACT,
19383        GIGATONHAMMER,
19384        GLACIALLANCE,
19385        GLACIATE,
19386        GLAIVERUSH,
19387        GLARE,
19388        GLITZYGLOW,
19389        GRASSKNOT,
19390        GRASSPLEDGE,
19391        GRASSWHISTLE,
19392        GRASSYGLIDE,
19393        GRASSYTERRAIN,
19394        GRAVAPPLE,
19395        GRAVITY,
19396        GROWL,
19397        GROWTH,
19398        GRUDGE,
19399        GUARDSPLIT,
19400        GUARDSWAP,
19401        GUILLOTINE,
19402        GUNKSHOT,
19403        GUST,
19404        GYROBALL,
19405        HAIL,
19406        HAMMERARM,
19407        HAPPYHOUR,
19408        HARDEN,
19409        HARDPRESS,
19410        HAZE,
19411        HEADBUTT,
19412        HEADCHARGE,
19413        HEADLONGRUSH,
19414        HEADSMASH,
19415        HEALBELL,
19416        HEALBLOCK,
19417        HEALINGWISH,
19418        HEALORDER,
19419        HEALPULSE,
19420        HEARTSTAMP,
19421        HEARTSWAP,
19422        HEATCRASH,
19423        HEATWAVE,
19424        HEAVYSLAM,
19425        HELPINGHAND,
19426        HEX,
19427        HIDDENPOWER,
19428        HIDDENPOWERBUG60,
19429        HIDDENPOWERBUG70,
19430        HIDDENPOWERDARK60,
19431        HIDDENPOWERDARK70,
19432        HIDDENPOWERDRAGON60,
19433        HIDDENPOWERDRAGON70,
19434        HIDDENPOWERELECTRIC60,
19435        HIDDENPOWERELECTRIC70,
19436        HIDDENPOWERFIGHTING60,
19437        HIDDENPOWERFIGHTING70,
19438        HIDDENPOWERFIRE60,
19439        HIDDENPOWERFIRE70,
19440        HIDDENPOWERFLYING60,
19441        HIDDENPOWERFLYING70,
19442        HIDDENPOWERGHOST60,
19443        HIDDENPOWERGHOST70,
19444        HIDDENPOWERGRASS60,
19445        HIDDENPOWERGRASS70,
19446        HIDDENPOWERGROUND60,
19447        HIDDENPOWERGROUND70,
19448        HIDDENPOWERICE60,
19449        HIDDENPOWERICE70,
19450        HIDDENPOWERPOISON60,
19451        HIDDENPOWERPOISON70,
19452        HIDDENPOWERPSYCHIC60,
19453        HIDDENPOWERPSYCHIC70,
19454        HIDDENPOWERROCK60,
19455        HIDDENPOWERROCK70,
19456        HIDDENPOWERSTEEL60,
19457        HIDDENPOWERSTEEL70,
19458        HIDDENPOWERWATER60,
19459        HIDDENPOWERWATER70,
19460        HIGHHORSEPOWER,
19461        HIGHJUMPKICK,
19462        HOLDBACK,
19463        HOLDHANDS,
19464        HONECLAWS,
19465        HORNATTACK,
19466        HORNDRILL,
19467        HORNLEECH,
19468        HOWL,
19469        HURRICANE,
19470        HYDROCANNON,
19471        HYDROPUMP,
19472        HYDROSTEAM,
19473        HYPERBEAM,
19474        HYPERDRILL,
19475        HYPERFANG,
19476        HYPERSPACEFURY,
19477        HYPERSPACEHOLE,
19478        HYPERVOICE,
19479        HYPNOSIS,
19480        ICEBALL,
19481        ICEBEAM,
19482        ICEBURN,
19483        ICEFANG,
19484        ICEHAMMER,
19485        ICEPUNCH,
19486        ICESHARD,
19487        ICESPINNER,
19488        ICICLECRASH,
19489        ICICLESPEAR,
19490        ICYWIND,
19491        IMPRISON,
19492        INCINERATE,
19493        INFERNALPARADE,
19494        INFERNO,
19495        INFESTATION,
19496        INGRAIN,
19497        INSTRUCT,
19498        IONDELUGE,
19499        IRONDEFENSE,
19500        IRONHEAD,
19501        IRONTAIL,
19502        IVYCUDGEL,
19503        JAWLOCK,
19504        JETPUNCH,
19505        JUDGMENT,
19506        JUMPKICK,
19507        JUNGLEHEALING,
19508        KARATECHOP,
19509        KINESIS,
19510        KINGSSHIELD,
19511        KNOCKOFF,
19512        KOWTOWCLEAVE,
19513        LANDSWRATH,
19514        LASERFOCUS,
19515        LASHOUT,
19516        LASTRESORT,
19517        LASTRESPECTS,
19518        LAVAPLUME,
19519        LEAFAGE,
19520        LEAFBLADE,
19521        LEAFSTORM,
19522        LEAFTORNADO,
19523        LEECHLIFE,
19524        LEECHSEED,
19525        LEER,
19526        LICK,
19527        LIFEDEW,
19528        LIGHTOFRUIN,
19529        LIGHTSCREEN,
19530        LIQUIDATION,
19531        LOCKON,
19532        LOVELYKISS,
19533        LOWKICK,
19534        LOWSWEEP,
19535        LUCKYCHANT,
19536        LUMINACRASH,
19537        LUNARBLESSING,
19538        LUNARDANCE,
19539        LUNGE,
19540        LUSTERPURGE,
19541        MACHPUNCH,
19542        MAGICALLEAF,
19543        MAGICALTORQUE,
19544        MAGICCOAT,
19545        MAGICPOWDER,
19546        MAGICROOM,
19547        MAGMASTORM,
19548        MAGNETBOMB,
19549        MAGNETICFLUX,
19550        MAGNETRISE,
19551        MAGNITUDE,
19552        MAKEITRAIN,
19553        MALIGNANTCHAIN,
19554        MATBLOCK,
19555        MATCHAGOTCHA,
19556        MEANLOOK,
19557        MEDITATE,
19558        MEFIRST,
19559        MEGADRAIN,
19560        MEGAHORN,
19561        MEGAKICK,
19562        MEGAPUNCH,
19563        MEMENTO,
19564        METALBURST,
19565        METALCLAW,
19566        METALSOUND,
19567        METEORASSAULT,
19568        METEORBEAM,
19569        METEORMASH,
19570        METRONOME,
19571        MIGHTYCLEAVE,
19572        MILKDRINK,
19573        MIMIC,
19574        MINDBLOWN,
19575        MINDREADER,
19576        MINIMIZE,
19577        MIRACLEEYE,
19578        MIRRORCOAT,
19579        MIRRORMOVE,
19580        MIRRORSHOT,
19581        MIST,
19582        MISTBALL,
19583        MISTYEXPLOSION,
19584        MISTYTERRAIN,
19585        MOONBLAST,
19586        MOONGEISTBEAM,
19587        MOONLIGHT,
19588        MORNINGSUN,
19589        MORTALSPIN,
19590        MOUNTAINGALE,
19591        MUDBOMB,
19592        MUDDYWATER,
19593        MUDSHOT,
19594        MUDSLAP,
19595        MUDSPORT,
19596        MULTIATTACK,
19597        MYSTICALFIRE,
19598        MYSTICALPOWER,
19599        NASTYPLOT,
19600        NATURALGIFT,
19601        NATUREPOWER,
19602        NATURESMADNESS,
19603        NEEDLEARM,
19604        NIGHTDAZE,
19605        NIGHTMARE,
19606        NIGHTSHADE,
19607        NIGHTSLASH,
19608        NOBLEROAR,
19609        NORETREAT,
19610        NOTHING,
19611        NOXIOUSTORQUE,
19612        NUZZLE,
19613        OBLIVIONWING,
19614        OBSTRUCT,
19615        OCTAZOOKA,
19616        OCTOLOCK,
19617        ODORSLEUTH,
19618        OMINOUSWIND,
19619        ORDERUP,
19620        ORIGINPULSE,
19621        OUTRAGE,
19622        OVERDRIVE,
19623        OVERHEAT,
19624        PAINSPLIT,
19625        PALEOWAVE,
19626        PARABOLICCHARGE,
19627        PARTINGSHOT,
19628        PAYBACK,
19629        PAYDAY,
19630        PECK,
19631        PERISHSONG,
19632        PETALBLIZZARD,
19633        PETALDANCE,
19634        PHANTOMFORCE,
19635        PHOTONGEYSER,
19636        PIKAPAPOW,
19637        PINMISSILE,
19638        PLASMAFISTS,
19639        PLAYNICE,
19640        PLAYROUGH,
19641        PLUCK,
19642        POISONFANG,
19643        POISONGAS,
19644        POISONJAB,
19645        POISONPOWDER,
19646        POISONSTING,
19647        POISONTAIL,
19648        POLLENPUFF,
19649        POLTERGEIST,
19650        POPULATIONBOMB,
19651        POUNCE,
19652        POUND,
19653        POWDER,
19654        POWDERSNOW,
19655        POWERGEM,
19656        POWERSHIFT,
19657        POWERSPLIT,
19658        POWERSWAP,
19659        POWERTRICK,
19660        POWERTRIP,
19661        POWERUPPUNCH,
19662        POWERWHIP,
19663        PRECIPICEBLADES,
19664        PRESENT,
19665        PRISMATICLASER,
19666        PROTECT,
19667        PSYBEAM,
19668        PSYBLADE,
19669        PSYCHIC,
19670        PSYCHICFANGS,
19671        PSYCHICNOISE,
19672        PSYCHICTERRAIN,
19673        PSYCHOBOOST,
19674        PSYCHOCUT,
19675        PSYCHOSHIFT,
19676        PSYCHUP,
19677        PSYSHIELDBASH,
19678        PSYSHOCK,
19679        PSYSTRIKE,
19680        PSYWAVE,
19681        PUNISHMENT,
19682        PURIFY,
19683        PURSUIT,
19684        PYROBALL,
19685        QUASH,
19686        QUICKATTACK,
19687        QUICKGUARD,
19688        QUIVERDANCE,
19689        RAGE,
19690        RAGEFIST,
19691        RAGEPOWDER,
19692        RAGINGBULL,
19693        RAGINGFURY,
19694        RAINDANCE,
19695        RAPIDSPIN,
19696        RAZORLEAF,
19697        RAZORSHELL,
19698        RAZORWIND,
19699        RECHARGE,
19700        RECOVER,
19701        RECYCLE,
19702        REFLECT,
19703        REFLECTTYPE,
19704        REFRESH,
19705        RELICSONG,
19706        REST,
19707        RETALIATE,
19708        RETURN,
19709        RETURN102,
19710        REVELATIONDANCE,
19711        REVENGE,
19712        REVERSAL,
19713        REVIVALBLESSING,
19714        RISINGVOLTAGE,
19715        ROAR,
19716        ROAROFTIME,
19717        ROCKBLAST,
19718        ROCKCLIMB,
19719        ROCKPOLISH,
19720        ROCKSLIDE,
19721        ROCKSMASH,
19722        ROCKTHROW,
19723        ROCKTOMB,
19724        ROCKWRECKER,
19725        ROLEPLAY,
19726        ROLLINGKICK,
19727        ROLLOUT,
19728        ROOST,
19729        ROTOTILLER,
19730        ROUND,
19731        RUINATION,
19732        SACREDFIRE,
19733        SACREDSWORD,
19734        SAFEGUARD,
19735        SALTCURE,
19736        SANDATTACK,
19737        SANDSEARSTORM,
19738        SANDSTORM,
19739        SANDTOMB,
19740        SAPPYSEED,
19741        SCALD,
19742        SCALESHOT,
19743        SCARYFACE,
19744        SCORCHINGSANDS,
19745        SCRATCH,
19746        SCREECH,
19747        SEARINGSHOT,
19748        SECRETPOWER,
19749        SECRETSWORD,
19750        SEEDBOMB,
19751        SEEDFLARE,
19752        SEISMICTOSS,
19753        SELFDESTRUCT,
19754        SHADOWBALL,
19755        SHADOWBONE,
19756        SHADOWCLAW,
19757        SHADOWFORCE,
19758        SHADOWPUNCH,
19759        SHADOWSNEAK,
19760        SHADOWSTRIKE,
19761        SHARPEN,
19762        SHEDTAIL,
19763        SHEERCOLD,
19764        SHELLSIDEARM,
19765        SHELLSMASH,
19766        SHELLTRAP,
19767        SHELTER,
19768        SHIFTGEAR,
19769        SHOCKWAVE,
19770        SHOREUP,
19771        SIGNALBEAM,
19772        SILKTRAP,
19773        SILVERWIND,
19774        SIMPLEBEAM,
19775        SING,
19776        SIZZLYSLIDE,
19777        SKETCH,
19778        SKILLSWAP,
19779        SKITTERSMACK,
19780        SKULLBASH,
19781        SKYATTACK,
19782        SKYDROP,
19783        SKYUPPERCUT,
19784        SLACKOFF,
19785        SLAM,
19786        SLASH,
19787        SLEEPPOWDER,
19788        SLEEPTALK,
19789        SLUDGE,
19790        SLUDGEBOMB,
19791        SLUDGEWAVE,
19792        SMACKDOWN,
19793        SMARTSTRIKE,
19794        SMELLINGSALTS,
19795        SMOG,
19796        SMOKESCREEN,
19797        SNAPTRAP,
19798        SNARL,
19799        SNATCH,
19800        SNIPESHOT,
19801        SNORE,
19802        SNOWSCAPE,
19803        SOAK,
19804        SOFTBOILED,
19805        SOLARBEAM,
19806        SOLARBLADE,
19807        SONICBOOM,
19808        SPACIALREND,
19809        SPARK,
19810        SPARKLINGARIA,
19811        SPARKLYSWIRL,
19812        SPECTRALTHIEF,
19813        SPEEDSWAP,
19814        SPICYEXTRACT,
19815        SPIDERWEB,
19816        SPIKECANNON,
19817        SPIKES,
19818        SPIKYSHIELD,
19819        SPINOUT,
19820        SPIRITBREAK,
19821        SPIRITSHACKLE,
19822        SPITE,
19823        SPITUP,
19824        SPLASH,
19825        SPLISHYSPLASH,
19826        SPORE,
19827        SPOTLIGHT,
19828        SPRINGTIDESTORM,
19829        STEALTHROCK,
19830        STEAMERUPTION,
19831        STEAMROLLER,
19832        STEELBEAM,
19833        STEELROLLER,
19834        STEELWING,
19835        STICKYWEB,
19836        STOCKPILE,
19837        STOMP,
19838        STOMPINGTANTRUM,
19839        STONEAXE,
19840        STONEEDGE,
19841        STOREDPOWER,
19842        STORMTHROW,
19843        STRANGESTEAM,
19844        STRENGTH,
19845        STRENGTHSAP,
19846        STRINGSHOT,
19847        STRUGGLE,
19848        STRUGGLEBUG,
19849        STUFFCHEEKS,
19850        STUNSPORE,
19851        SUBMISSION,
19852        SUBSTITUTE,
19853        SUCKERPUNCH,
19854        SUNNYDAY,
19855        SUNSTEELSTRIKE,
19856        SUPERCELLSLAM,
19857        SUPERFANG,
19858        SUPERPOWER,
19859        SUPERSONIC,
19860        SURF,
19861        SURGINGSTRIKES,
19862        SWAGGER,
19863        SWALLOW,
19864        SWEETKISS,
19865        SWEETSCENT,
19866        SWIFT,
19867        SWITCHEROO,
19868        SWORDSDANCE,
19869        SYNCHRONOISE,
19870        SYNTHESIS,
19871        SYRUPBOMB,
19872        TACHYONCUTTER,
19873        TACKLE,
19874        TAILGLOW,
19875        TAILSLAP,
19876        TAILWHIP,
19877        TAILWIND,
19878        TAKEDOWN,
19879        TAKEHEART,
19880        TARSHOT,
19881        TAUNT,
19882        TEARFULLOOK,
19883        TEATIME,
19884        TECHNOBLAST,
19885        TEETERDANCE,
19886        TELEKINESIS,
19887        TELEPORT,
19888        TEMPERFLARE,
19889        TERABLAST,
19890        TERASTARSTORM,
19891        TERRAINPULSE,
19892        THIEF,
19893        THOUSANDARROWS,
19894        THOUSANDWAVES,
19895        THRASH,
19896        THROATCHOP,
19897        THUNDER,
19898        THUNDERBOLT,
19899        THUNDERCAGE,
19900        THUNDERCLAP,
19901        THUNDERFANG,
19902        THUNDEROUSKICK,
19903        THUNDERPUNCH,
19904        THUNDERSHOCK,
19905        THUNDERWAVE,
19906        TICKLE,
19907        TIDYUP,
19908        TOPSYTURVY,
19909        TORCHSONG,
19910        TORMENT,
19911        TOXIC,
19912        TOXICSPIKES,
19913        TOXICTHREAD,
19914        TRAILBLAZE,
19915        TRANSFORM,
19916        TRIATTACK,
19917        TRICK,
19918        TRICKORTREAT,
19919        TRICKROOM,
19920        TRIPLEARROWS,
19921        TRIPLEAXEL,
19922        TRIPLEDIVE,
19923        TRIPLEKICK,
19924        TROPKICK,
19925        TRUMPCARD,
19926        TWINBEAM,
19927        TWINEEDLE,
19928        TWISTER,
19929        UPPERHAND,
19930        UPROAR,
19931        UTURN,
19932        VACUUMWAVE,
19933        VCREATE,
19934        VEEVEEVOLLEY,
19935        VENOMDRENCH,
19936        VENOSHOCK,
19937        VICTORYDANCE,
19938        VINEWHIP,
19939        VISEGRIP,
19940        VITALTHROW,
19941        VOLTSWITCH,
19942        VOLTTACKLE,
19943        WAKEUPSLAP,
19944        WATERFALL,
19945        WATERGUN,
19946        WATERPLEDGE,
19947        WATERPULSE,
19948        WATERSHURIKEN,
19949        WATERSPORT,
19950        WATERSPOUT,
19951        WAVECRASH,
19952        WEATHERBALL,
19953        WHIRLPOOL,
19954        WHIRLWIND,
19955        WICKEDBLOW,
19956        WICKEDTORQUE,
19957        WIDEGUARD,
19958        WILDBOLTSTORM,
19959        WILDCHARGE,
19960        WILLOWISP,
19961        WINGATTACK,
19962        WISH,
19963        WITHDRAW,
19964        WONDERROOM,
19965        WOODHAMMER,
19966        WORKUP,
19967        WORRYSEED,
19968        WRAP,
19969        WRINGOUT,
19970        XSCISSOR,
19971        YAWN,
19972        ZAPCANNON,
19973        ZENHEADBUTT,
19974        ZINGZAP,
19975        ZIPPYZAP,
19976    },
19977    default = NONE
19978}
19979
19980impl Choices {
19981    pub fn is_hiddenpower(&self) -> bool {
19982        match self {
19983            Choices::HIDDENPOWER
19984            | Choices::HIDDENPOWERBUG60
19985            | Choices::HIDDENPOWERBUG70
19986            | Choices::HIDDENPOWERDARK60
19987            | Choices::HIDDENPOWERDARK70
19988            | Choices::HIDDENPOWERDRAGON60
19989            | Choices::HIDDENPOWERDRAGON70
19990            | Choices::HIDDENPOWERELECTRIC60
19991            | Choices::HIDDENPOWERELECTRIC70
19992            | Choices::HIDDENPOWERFIGHTING60
19993            | Choices::HIDDENPOWERFIGHTING70
19994            | Choices::HIDDENPOWERFIRE60
19995            | Choices::HIDDENPOWERFIRE70
19996            | Choices::HIDDENPOWERFLYING60
19997            | Choices::HIDDENPOWERFLYING70
19998            | Choices::HIDDENPOWERGHOST60
19999            | Choices::HIDDENPOWERGHOST70
20000            | Choices::HIDDENPOWERGRASS60
20001            | Choices::HIDDENPOWERGRASS70
20002            | Choices::HIDDENPOWERGROUND60
20003            | Choices::HIDDENPOWERGROUND70
20004            | Choices::HIDDENPOWERICE60
20005            | Choices::HIDDENPOWERICE70
20006            | Choices::HIDDENPOWERPOISON60
20007            | Choices::HIDDENPOWERPOISON70
20008            | Choices::HIDDENPOWERPSYCHIC60
20009            | Choices::HIDDENPOWERPSYCHIC70
20010            | Choices::HIDDENPOWERROCK60
20011            | Choices::HIDDENPOWERROCK70
20012            | Choices::HIDDENPOWERSTEEL60
20013            | Choices::HIDDENPOWERSTEEL70
20014            | Choices::HIDDENPOWERWATER60
20015            | Choices::HIDDENPOWERWATER70 => true,
20016            _ => false,
20017        }
20018    }
20019    pub fn increased_crit_ratio(&self) -> bool {
20020        match self {
20021            Choices::AEROBLAST
20022            | Choices::AIRCUTTER
20023            | Choices::AQUACUTTER
20024            | Choices::ATTACKORDER
20025            | Choices::BLAZEKICK
20026            | Choices::CRABHAMMER
20027            | Choices::CROSSCHOP
20028            | Choices::CROSSPOISON
20029            | Choices::DIRECLAW
20030            | Choices::DRILLRUN
20031            | Choices::ESPERWING
20032            | Choices::IVYCUDGEL
20033            | Choices::KARATECHOP
20034            | Choices::LEAFBLADE
20035            | Choices::NIGHTSLASH
20036            | Choices::POISONTAIL
20037            | Choices::PSYCHOCUT
20038            | Choices::RAZORLEAF
20039            | Choices::RAZORWIND
20040            | Choices::SHADOWCLAW
20041            | Choices::SKYATTACK
20042            | Choices::SLASH
20043            | Choices::SNIPESHOT
20044            | Choices::SPACIALREND
20045            | Choices::STONEEDGE
20046            | Choices::TRIPLEARROWS => true,
20047            _ => false,
20048        }
20049    }
20050    pub fn guaranteed_crit(&self) -> bool {
20051        match self {
20052            Choices::WICKEDBLOW
20053            | Choices::SURGINGSTRIKES
20054            | Choices::FLOWERTRICK
20055            | Choices::STORMTHROW
20056            | Choices::FROSTBREATH => true,
20057            _ => false,
20058        }
20059    }
20060}
20061
20062#[derive(Clone)]
20063pub struct Choice {
20064    // Basic move information
20065    pub move_id: Choices, // in the case of category::Switch, this is not used
20066    pub move_index: PokemonMoveIndex,
20067    pub switch_id: PokemonIndex,
20068    pub move_type: PokemonType,
20069    pub accuracy: f32,
20070    pub category: MoveCategory,
20071    pub base_power: f32,
20072    pub boost: Option<Boost>,
20073    pub priority: i8,
20074    pub flags: Flags,
20075    pub drain: Option<f32>,
20076    pub recoil: Option<f32>,
20077    pub crash: Option<f32>,
20078    pub heal: Option<Heal>,
20079    pub status: Option<Status>,
20080    pub volatile_status: Option<VolatileStatus>,
20081    pub side_condition: Option<SideCondition>,
20082    pub secondaries: Option<Vec<Secondary>>,
20083
20084    pub target: MoveTarget,
20085
20086    pub first_move: bool,
20087    pub sleep_talk_move: bool,
20088}
20089
20090impl fmt::Debug for Choice {
20091    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20092        write!(f, "Choice: {:?}", self.move_id)
20093    }
20094}
20095
20096impl Choice {
20097    pub fn multi_accuracy(&self) -> MultiAccuracyMove {
20098        match self.move_id {
20099            Choices::TRIPLEAXEL => MultiAccuracyMove::TripleHit,
20100            Choices::TRIPLEKICK => MultiAccuracyMove::TripleHit,
20101            Choices::POPULATIONBOMB => MultiAccuracyMove::TenHits,
20102            _ => MultiAccuracyMove::None,
20103        }
20104    }
20105    pub fn multi_hit(&self) -> MultiHitMove {
20106        match self.move_id {
20107            Choices::ARMTHRUST => MultiHitMove::TwoToFiveHits,
20108            Choices::BARRAGE => MultiHitMove::TwoToFiveHits,
20109            Choices::BONEMERANG => MultiHitMove::DoubleHit,
20110            Choices::BONERUSH => MultiHitMove::TwoToFiveHits,
20111            Choices::BULLETSEED => MultiHitMove::TwoToFiveHits,
20112            Choices::COMETPUNCH => MultiHitMove::TwoToFiveHits,
20113            Choices::DOUBLEHIT => MultiHitMove::DoubleHit,
20114            Choices::DOUBLEIRONBASH => MultiHitMove::DoubleHit,
20115            Choices::DOUBLEKICK => MultiHitMove::DoubleHit,
20116            Choices::DOUBLESLAP => MultiHitMove::TwoToFiveHits,
20117            Choices::DRAGONDARTS => MultiHitMove::DoubleHit,
20118            Choices::DUALCHOP => MultiHitMove::DoubleHit,
20119            Choices::DUALWINGBEAT => MultiHitMove::DoubleHit,
20120            Choices::FURYATTACK => MultiHitMove::TwoToFiveHits,
20121            Choices::FURYSWIPES => MultiHitMove::TwoToFiveHits,
20122            Choices::GEARGRIND => MultiHitMove::DoubleHit,
20123            Choices::ICICLESPEAR => MultiHitMove::TwoToFiveHits,
20124            Choices::PINMISSILE => MultiHitMove::TwoToFiveHits,
20125            Choices::ROCKBLAST => MultiHitMove::TwoToFiveHits,
20126            Choices::SCALESHOT => MultiHitMove::TwoToFiveHits,
20127            Choices::SPIKECANNON => MultiHitMove::TwoToFiveHits,
20128            Choices::SURGINGSTRIKES => MultiHitMove::TripleHit,
20129            Choices::TACHYONCUTTER => MultiHitMove::DoubleHit,
20130            Choices::TAILSLAP => MultiHitMove::TwoToFiveHits,
20131            Choices::TRIPLEDIVE => MultiHitMove::TripleHit,
20132            Choices::TWINBEAM => MultiHitMove::DoubleHit,
20133            Choices::TWINEEDLE => MultiHitMove::DoubleHit,
20134            Choices::WATERSHURIKEN => MultiHitMove::TwoToFiveHits,
20135
20136            // These are multi-accuracy
20137            // but until that is implemented we approximate them as multi-hit
20138            Choices::POPULATIONBOMB => MultiHitMove::PopulationBomb,
20139            Choices::TRIPLEAXEL => MultiHitMove::TripleAxel,
20140            _ => MultiHitMove::None,
20141        }
20142    }
20143    pub fn targets_special_defense(&self) -> bool {
20144        self.category == MoveCategory::Special
20145            && !(self.move_id == Choices::PSYSHOCK
20146                || self.move_id == Choices::SECRETSWORD
20147                || self.move_id == Choices::PSYSTRIKE)
20148    }
20149    pub fn add_or_create_secondaries(&mut self, secondary: Secondary) {
20150        if let Some(secondaries) = &mut self.secondaries {
20151            secondaries.push(secondary);
20152        } else {
20153            self.secondaries = Some(vec![secondary]);
20154        }
20155    }
20156    pub fn remove_effects_for_protect(&mut self) {
20157        // Crash is not removed
20158
20159        self.base_power = 0.0;
20160        self.category = MoveCategory::Status;
20161        self.accuracy = 100.0;
20162        self.flags.drag = false;
20163        self.flags.pivot = false;
20164        self.heal = None;
20165        self.drain = None;
20166        self.recoil = None;
20167        self.boost = None;
20168        self.status = None;
20169        self.volatile_status = None;
20170        self.side_condition = None;
20171        self.secondaries = None;
20172    }
20173    pub fn remove_all_effects(&mut self) {
20174        self.category = MoveCategory::Status;
20175        self.flags.clear_all();
20176        self.base_power = 0.0;
20177        self.accuracy = 100.0;
20178        self.heal = None;
20179        self.drain = None;
20180        self.recoil = None;
20181        self.crash = None;
20182        self.heal = None;
20183        self.boost = None;
20184        self.status = None;
20185        self.volatile_status = None;
20186        self.side_condition = None;
20187        self.secondaries = None;
20188    }
20189}
20190
20191impl Default for Choice {
20192    fn default() -> Choice {
20193        Choice {
20194            move_id: Choices::NONE,
20195            move_index: PokemonMoveIndex::M0,
20196            switch_id: PokemonIndex::P0,
20197            move_type: PokemonType::NORMAL,
20198            accuracy: 100.0,
20199            category: MoveCategory::Status,
20200            base_power: 0.0,
20201            boost: None,
20202            priority: 0,
20203            flags: Flags {
20204                ..Default::default()
20205            },
20206            drain: None,
20207            recoil: None,
20208            crash: None,
20209            heal: None,
20210            status: None,
20211            volatile_status: None,
20212            side_condition: None,
20213            secondaries: None,
20214            target: MoveTarget::Opponent,
20215            first_move: true,
20216            sleep_talk_move: false,
20217        }
20218    }
20219}
20220
20221pub fn undo_physical_special_split(moves: &mut HashMap<Choices, Choice>) {
20222    for (_, choice) in moves.iter_mut() {
20223        if choice.category == MoveCategory::Status {
20224            continue;
20225        }
20226        match choice.move_type {
20227            PokemonType::NORMAL
20228            | PokemonType::FIGHTING
20229            | PokemonType::POISON
20230            | PokemonType::GROUND
20231            | PokemonType::FLYING
20232            | PokemonType::BUG
20233            | PokemonType::ROCK
20234            | PokemonType::GHOST
20235            | PokemonType::STEEL => {
20236                choice.category = MoveCategory::Physical;
20237            }
20238            _ => {
20239                choice.category = MoveCategory::Special;
20240            }
20241        }
20242    }
20243}