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