poke_engine/
choices.rs

1use crate::define_enum_with_from_str;
2use crate::engine::state::PokemonVolatileStatus;
3use crate::state::{
4    PokemonBoostableStat, PokemonIndex, PokemonMoveIndex, PokemonSideCondition, PokemonStatus,
5    PokemonType,
6};
7use lazy_static::lazy_static;
8use std::collections::HashMap;
9use std::fmt;
10
11lazy_static! {
12    pub static ref MOVES: HashMap<Choices, Choice> = {
13        let mut moves: HashMap<Choices, Choice> = HashMap::new();
14        moves.insert(
15            Choices::NONE,
16            Choice {
17                move_id: Choices::NONE,
18                ..Default::default()
19            },
20        );
21        moves.insert(
22            Choices::ABSORB,
23            Choice {
24                move_id: Choices::ABSORB,
25                base_power: 20.0,
26                category: MoveCategory::Special,
27                move_type: PokemonType::GRASS,
28                flags: Flags {
29                    heal: true,
30                    protect: true,
31                    ..Default::default()
32                },
33                drain: Some(0.5),
34                ..Default::default()
35            },
36        );
37        moves.insert(
38            Choices::ACCELEROCK,
39            Choice {
40                move_id: Choices::ACCELEROCK,
41                base_power: 40.0,
42                category: MoveCategory::Physical,
43                priority: 1,
44                move_type: PokemonType::ROCK,
45                flags: Flags {
46                    contact: true,
47                    protect: true,
48                    ..Default::default()
49                },
50                ..Default::default()
51            },
52        );
53        if cfg!(feature = "gen1") {
54            moves.insert(
55                Choices::ACID,
56                Choice {
57                    move_id: Choices::ACID,
58                    base_power: 40.0,
59                    category: MoveCategory::Special,
60                    move_type: PokemonType::POISON,
61                    flags: Flags {
62                        protect: true,
63                        ..Default::default()
64                    },
65                    secondaries: Some(vec![Secondary {
66                        chance: 33.2,
67                        target: MoveTarget::Opponent,
68                        effect: Effect::Boost(StatBoosts {
69                            attack: 0,
70                            defense: -1,
71                            special_attack: 0,
72                            special_defense: 0,
73                            speed: 0,
74                            accuracy: 0,
75                        }),
76                    }]),
77                    ..Default::default()
78                },
79            );
80        } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") {
81            moves.insert(
82                Choices::ACID,
83                Choice {
84                    move_id: Choices::ACID,
85                    base_power: 40.0,
86                    category: MoveCategory::Special,
87                    move_type: PokemonType::POISON,
88                    flags: Flags {
89                        protect: true,
90                        ..Default::default()
91                    },
92                    secondaries: Some(vec![Secondary {
93                        chance: 10.0,
94                        target: MoveTarget::Opponent,
95                        effect: Effect::Boost(StatBoosts {
96                            attack: 0,
97                            defense: -1,
98                            special_attack: 0,
99                            special_defense: 0,
100                            speed: 0,
101                            accuracy: 0,
102                        }),
103                    }]),
104                    ..Default::default()
105                },
106            );
107        } else {
108            moves.insert(
109                Choices::ACID,
110                Choice {
111                    move_id: Choices::ACID,
112                    base_power: 40.0,
113                    category: MoveCategory::Special,
114                    move_type: PokemonType::POISON,
115                    flags: Flags {
116                        protect: true,
117                        ..Default::default()
118                    },
119                    secondaries: Some(vec![Secondary {
120                        chance: 10.0,
121                        target: MoveTarget::Opponent,
122                        effect: Effect::Boost(StatBoosts {
123                            attack: 0,
124                            defense: 0,
125                            special_attack: 0,
126                            special_defense: -1,
127                            speed: 0,
128                            accuracy: 0,
129                        }),
130                    }]),
131                    ..Default::default()
132                },
133            );
134        }
135        moves.insert(
136            Choices::ACIDARMOR,
137            Choice {
138                move_id: Choices::ACIDARMOR,
139                target: MoveTarget::User,
140                move_type: PokemonType::POISON,
141                flags: Flags {
142                    ..Default::default()
143                },
144                boost: Some(Boost {
145                    target: MoveTarget::User,
146                    boosts: StatBoosts {
147                        attack: 0,
148                        defense: 2,
149                        special_attack: 0,
150                        special_defense: 0,
151                        speed: 0,
152                        accuracy: 0,
153                    },
154                }),
155                ..Default::default()
156            },
157        );
158        moves.insert(
159            Choices::ACIDSPRAY,
160            Choice {
161                move_id: Choices::ACIDSPRAY,
162                base_power: 40.0,
163                category: MoveCategory::Special,
164                move_type: PokemonType::POISON,
165                flags: Flags {
166                    bullet: true,
167                    protect: true,
168                    ..Default::default()
169                },
170                secondaries: Some(vec![Secondary {
171                    chance: 100.0,
172                    target: MoveTarget::Opponent,
173                    effect: Effect::Boost(StatBoosts {
174                        attack: 0,
175                        defense: 0,
176                        special_attack: 0,
177                        special_defense: -2,
178                        speed: 0,
179                        accuracy: 0,
180                    }),
181                }]),
182                ..Default::default()
183            },
184        );
185        moves.insert(
186            Choices::ACROBATICS,
187            Choice {
188                move_id: Choices::ACROBATICS,
189                base_power: 55.0,
190                category: MoveCategory::Physical,
191                move_type: PokemonType::FLYING,
192                flags: Flags {
193                    contact: true,
194                    protect: true,
195                    ..Default::default()
196                },
197                ..Default::default()
198            },
199        );
200        moves.insert(
201            Choices::ACUPRESSURE,
202            Choice {
203                move_id: Choices::ACUPRESSURE,
204                target: MoveTarget::User,
205                move_type: PokemonType::NORMAL,
206                flags: Flags {
207                    ..Default::default()
208                },
209                ..Default::default()
210            },
211        );
212        moves.insert(
213            Choices::AERIALACE,
214            Choice {
215                move_id: Choices::AERIALACE,
216                base_power: 60.0,
217                category: MoveCategory::Physical,
218                move_type: PokemonType::FLYING,
219                flags: Flags {
220                    contact: true,
221                    protect: true,
222                    slicing: true,
223                    ..Default::default()
224                },
225                ..Default::default()
226            },
227        );
228        moves.insert(
229            Choices::AEROBLAST,
230            Choice {
231                move_id: Choices::AEROBLAST,
232                accuracy: 95.0,
233                base_power: 100.0,
234                category: MoveCategory::Special,
235                move_type: PokemonType::FLYING,
236                flags: Flags {
237                    protect: true,
238                    wind: true,
239                    ..Default::default()
240                },
241                ..Default::default()
242            },
243        );
244        moves.insert(
245            Choices::AFTERYOU,
246            Choice {
247                move_id: Choices::AFTERYOU,
248                move_type: PokemonType::NORMAL,
249                flags: Flags {
250                    ..Default::default()
251                },
252                ..Default::default()
253            },
254        );
255        moves.insert(
256            Choices::AGILITY,
257            Choice {
258                move_id: Choices::AGILITY,
259                target: MoveTarget::User,
260                move_type: PokemonType::PSYCHIC,
261                flags: Flags {
262                    ..Default::default()
263                },
264                boost: Some(Boost {
265                    target: MoveTarget::User,
266                    boosts: StatBoosts {
267                        attack: 0,
268                        defense: 0,
269                        special_attack: 0,
270                        special_defense: 0,
271                        speed: 2,
272                        accuracy: 0,
273                    },
274                }),
275                ..Default::default()
276            },
277        );
278        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
279            moves.insert(
280                Choices::AIRCUTTER,
281                Choice {
282                    move_id: Choices::AIRCUTTER,
283                    accuracy: 95.0,
284                    base_power: 55.0,
285                    category: MoveCategory::Special,
286                    move_type: PokemonType::FLYING,
287                    flags: Flags {
288                        protect: true,
289                        slicing: true,
290                        wind: true,
291                        ..Default::default()
292                    },
293                    ..Default::default()
294                },
295            );
296        } else {
297            moves.insert(
298                Choices::AIRCUTTER,
299                Choice {
300                    move_id: Choices::AIRCUTTER,
301                    accuracy: 95.0,
302                    base_power: 60.0,
303                    category: MoveCategory::Special,
304                    move_type: PokemonType::FLYING,
305                    flags: Flags {
306                            protect: true,
307                        ..Default::default()
308                    },
309                    ..Default::default()
310                },
311            );
312        }
313        moves.insert(
314            Choices::AIRSLASH,
315            Choice {
316                move_id: Choices::AIRSLASH,
317                accuracy: 95.0,
318                base_power: 75.0,
319                category: MoveCategory::Special,
320                move_type: PokemonType::FLYING,
321                flags: Flags {
322                    protect: true,
323                    slicing: true,
324                    ..Default::default()
325                },
326                secondaries: Some(vec![Secondary {
327                    chance: 30.0,
328                    target: MoveTarget::Opponent,
329                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
330                }]),
331                ..Default::default()
332            },
333        );
334        moves.insert(
335            Choices::ALLURINGVOICE,
336            Choice {
337                base_power: 80.0,
338                category: MoveCategory::Special,
339                move_id: Choices::ALLURINGVOICE,
340                move_type: PokemonType::FAIRY,
341                flags: Flags {
342                    sound: true,
343                    protect: true,
344                    ..Default::default()
345                },
346                ..Default::default()
347            },
348        );
349        moves.insert(
350            Choices::ALLYSWITCH,
351            Choice {
352                move_id: Choices::ALLYSWITCH,
353                priority: 2,
354                target: MoveTarget::User,
355                move_type: PokemonType::PSYCHIC,
356                flags: Flags {
357                    ..Default::default()
358                },
359                ..Default::default()
360            },
361        );
362        if cfg!(feature = "gen1") {
363            moves.insert(
364                Choices::AMNESIA,
365                Choice {
366                    move_id: Choices::AMNESIA,
367                    target: MoveTarget::User,
368                    move_type: PokemonType::PSYCHIC,
369                    flags: Flags {
370                        ..Default::default()
371                    },
372                    boost: Some(Boost {
373                        target: MoveTarget::User,
374                        boosts: StatBoosts {
375                            attack: 0,
376                            defense: 0,
377                            special_attack: 2,
378                            special_defense: 0,
379                            speed: 0,
380                            accuracy: 0,
381                        },
382                    }),
383                    ..Default::default()
384                },
385            );
386        } else {
387            moves.insert(
388                Choices::AMNESIA,
389                Choice {
390                    move_id: Choices::AMNESIA,
391                    target: MoveTarget::User,
392                    move_type: PokemonType::PSYCHIC,
393                    flags: Flags {
394                        ..Default::default()
395                    },
396                    boost: Some(Boost {
397                        target: MoveTarget::User,
398                        boosts: StatBoosts {
399                            attack: 0,
400                            defense: 0,
401                            special_attack: 0,
402                            special_defense: 2,
403                            speed: 0,
404                            accuracy: 0,
405                        },
406                    }),
407                    ..Default::default()
408                },
409            );
410        }
411        moves.insert(
412            Choices::ANCHORSHOT,
413            Choice {
414                move_id: Choices::ANCHORSHOT,
415                base_power: 80.0,
416                category: MoveCategory::Physical,
417                move_type: PokemonType::STEEL,
418                flags: Flags {
419                    contact: true,
420                    protect: true,
421                    ..Default::default()
422                },
423                ..Default::default()
424            },
425        );
426        moves.insert(
427            Choices::ANCIENTPOWER,
428            Choice {
429                move_id: Choices::ANCIENTPOWER,
430                base_power: 60.0,
431                category: MoveCategory::Special,
432                move_type: PokemonType::ROCK,
433                flags: Flags {
434                    protect: true,
435                    ..Default::default()
436                },
437                secondaries: Some(vec![Secondary {
438                    chance: 10.0,
439                    target: MoveTarget::User,
440                    effect: Effect::Boost(StatBoosts {
441                        attack: 1,
442                        defense: 1,
443                        special_attack: 1,
444                        special_defense: 1,
445                        speed: 1,
446                        accuracy: 0,
447                    }),
448                }]),
449                ..Default::default()
450            },
451        );
452        moves.insert(
453            Choices::APPLEACID,
454            Choice {
455                move_id: Choices::APPLEACID,
456                base_power: 80.0,
457                category: MoveCategory::Special,
458                move_type: PokemonType::GRASS,
459                flags: Flags {
460                    protect: true,
461                    ..Default::default()
462                },
463                secondaries: Some(vec![Secondary {
464                    chance: 100.0,
465                    target: MoveTarget::Opponent,
466                    effect: Effect::Boost(StatBoosts {
467                        attack: 0,
468                        defense: 0,
469                        special_attack: 0,
470                        special_defense: -1,
471                        speed: 0,
472                        accuracy: 0,
473                    }),
474                }]),
475                ..Default::default()
476            },
477        );
478        moves.insert(
479            Choices::AQUACUTTER,
480            Choice {
481                move_id: Choices::AQUACUTTER,
482                base_power: 70.0,
483                category: MoveCategory::Physical,
484                move_type: PokemonType::WATER,
485                flags: Flags {
486                    protect: true,
487                    slicing: true,
488                    ..Default::default()
489                },
490                ..Default::default()
491            },
492        );
493        moves.insert(
494            Choices::AQUAJET,
495            Choice {
496                move_id: Choices::AQUAJET,
497                base_power: 40.0,
498                category: MoveCategory::Physical,
499                priority: 1,
500                move_type: PokemonType::WATER,
501                flags: Flags {
502                    contact: true,
503                    protect: true,
504                    ..Default::default()
505                },
506                ..Default::default()
507            },
508        );
509        moves.insert(
510            Choices::AQUARING,
511            Choice {
512                move_id: Choices::AQUARING,
513                target: MoveTarget::User,
514                move_type: PokemonType::WATER,
515                flags: Flags {
516                    ..Default::default()
517                },
518                volatile_status: Some(VolatileStatus {
519                    target: MoveTarget::User,
520                    volatile_status: PokemonVolatileStatus::AQUARING,
521                }),
522                ..Default::default()
523            },
524        );
525        moves.insert(
526            Choices::AQUASTEP,
527            Choice {
528                move_id: Choices::AQUASTEP,
529                base_power: 80.0,
530                category: MoveCategory::Physical,
531                move_type: PokemonType::WATER,
532                flags: Flags {
533                    contact: true,
534                    protect: true,
535                    ..Default::default()
536                },
537                secondaries: Some(vec![Secondary {
538                    chance: 100.0,
539                    target: MoveTarget::User,
540                    effect: Effect::Boost(StatBoosts {
541                        attack: 0,
542                        defense: 0,
543                        special_attack: 0,
544                        special_defense: 0,
545                        speed: 1,
546                        accuracy: 0,
547                    }),
548                }]),
549                ..Default::default()
550            },
551        );
552        moves.insert(
553            Choices::AQUATAIL,
554            Choice {
555                move_id: Choices::AQUATAIL,
556                accuracy: 90.0,
557                base_power: 90.0,
558                category: MoveCategory::Physical,
559                move_type: PokemonType::WATER,
560                flags: Flags {
561                    contact: true,
562                    protect: true,
563                    ..Default::default()
564                },
565                ..Default::default()
566            },
567        );
568        moves.insert(
569            Choices::ARMORCANNON,
570            Choice {
571                move_id: Choices::ARMORCANNON,
572                base_power: 120.0,
573                category: MoveCategory::Special,
574                move_type: PokemonType::FIRE,
575                flags: Flags {
576                    protect: true,
577                    ..Default::default()
578                },
579                ..Default::default()
580            },
581        );
582        moves.insert(
583            Choices::ARMTHRUST,
584            Choice {
585                move_id: Choices::ARMTHRUST,
586                base_power: 15.0,
587                category: MoveCategory::Physical,
588                move_type: PokemonType::FIGHTING,
589                flags: Flags {
590                    contact: true,
591                    protect: true,
592                    ..Default::default()
593                },
594                ..Default::default()
595            },
596        );
597        moves.insert(
598            Choices::AROMATHERAPY,
599            Choice {
600                move_id: Choices::AROMATHERAPY,
601                target: MoveTarget::User,
602                move_type: PokemonType::GRASS,
603                flags: Flags {
604                    ..Default::default()
605                },
606                ..Default::default()
607            },
608        );
609        moves.insert(
610            Choices::AROMATICMIST,
611            Choice {
612                move_id: Choices::AROMATICMIST,
613                target: MoveTarget::User,
614                move_type: PokemonType::FAIRY,
615                flags: Flags {
616                    ..Default::default()
617                },
618                boost: Some(Boost {
619                    target: MoveTarget::User,
620                    boosts: StatBoosts {
621                        attack: 0,
622                        defense: 0,
623                        special_attack: 0,
624                        special_defense: 1,
625                        speed: 0,
626                        accuracy: 0,
627                    },
628                }),
629                ..Default::default()
630            },
631        );
632        moves.insert(
633            Choices::ASSIST,
634            Choice {
635                move_id: Choices::ASSIST,
636                target: MoveTarget::User,
637                move_type: PokemonType::NORMAL,
638                flags: Flags {
639                    ..Default::default()
640                },
641                ..Default::default()
642            },
643        );
644        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
645            moves.insert(
646                Choices::ASSURANCE,
647                Choice {
648                    move_id: Choices::ASSURANCE,
649                    base_power: 50.0,
650                    category: MoveCategory::Physical,
651                    move_type: PokemonType::DARK,
652                    flags: Flags {
653                        contact: true,
654                            protect: true,
655                        ..Default::default()
656                    },
657                    ..Default::default()
658                },
659            );
660        } else {
661            moves.insert(
662                Choices::ASSURANCE,
663                Choice {
664                    move_id: Choices::ASSURANCE,
665                    base_power: 60.0,
666                    category: MoveCategory::Physical,
667                    move_type: PokemonType::DARK,
668                    flags: Flags {
669                        contact: true,
670                            protect: true,
671                        ..Default::default()
672                    },
673                    ..Default::default()
674                },
675            );
676        }
677        moves.insert(
678            Choices::ASTONISH,
679            Choice {
680                move_id: Choices::ASTONISH,
681                base_power: 30.0,
682                category: MoveCategory::Physical,
683                move_type: PokemonType::GHOST,
684                flags: Flags {
685                    contact: true,
686                    protect: true,
687                    ..Default::default()
688                },
689                secondaries: Some(vec![Secondary {
690                    chance: 30.0,
691                    target: MoveTarget::Opponent,
692                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
693                }]),
694                ..Default::default()
695            },
696        );
697        moves.insert(
698            Choices::ASTRALBARRAGE,
699            Choice {
700                move_id: Choices::ASTRALBARRAGE,
701                base_power: 120.0,
702                category: MoveCategory::Special,
703                move_type: PokemonType::GHOST,
704                flags: Flags {
705                    protect: true,
706                    ..Default::default()
707                },
708                ..Default::default()
709            },
710        );
711        moves.insert(
712            Choices::ATTACKORDER,
713            Choice {
714                move_id: Choices::ATTACKORDER,
715                base_power: 90.0,
716                category: MoveCategory::Physical,
717                move_type: PokemonType::BUG,
718                flags: Flags {
719                    protect: true,
720                    ..Default::default()
721                },
722                ..Default::default()
723            },
724        );
725        moves.insert(
726            Choices::ATTRACT,
727            Choice {
728                move_id: Choices::ATTRACT,
729                move_type: PokemonType::NORMAL,
730                flags: Flags {
731                    protect: true,
732                    reflectable: true,
733                    ..Default::default()
734                },
735                volatile_status: Some(VolatileStatus {
736                    target: MoveTarget::Opponent,
737                    volatile_status: PokemonVolatileStatus::ATTRACT,
738                }),
739                ..Default::default()
740            },
741        );
742        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
743            moves.insert(
744                Choices::AURASPHERE,
745                Choice {
746                    move_id: Choices::AURASPHERE,
747                    base_power: 90.0,
748                    category: MoveCategory::Special,
749                    move_type: PokemonType::FIGHTING,
750                    flags: Flags {
751                        bullet: true,
752                                protect: true,
753                        pulse: true,
754                        ..Default::default()
755                    },
756                    ..Default::default()
757                },
758            );
759        } else {
760            moves.insert(
761                Choices::AURASPHERE,
762                Choice {
763                    move_id: Choices::AURASPHERE,
764                    base_power: 80.0,
765                    category: MoveCategory::Special,
766                    move_type: PokemonType::FIGHTING,
767                    flags: Flags {
768                        bullet: true,
769                                protect: true,
770                        pulse: true,
771                        ..Default::default()
772                    },
773                    ..Default::default()
774                },
775            );
776        }
777        moves.insert(
778            Choices::AURAWHEEL,
779            Choice {
780                move_id: Choices::AURAWHEEL,
781                base_power: 110.0,
782                category: MoveCategory::Physical,
783                move_type: PokemonType::ELECTRIC,
784                flags: Flags {
785                    protect: true,
786                    ..Default::default()
787                },
788                secondaries: Some(vec![Secondary {
789                    chance: 100.0,
790                    target: MoveTarget::User,
791                    effect: Effect::Boost(StatBoosts {
792                        attack: 0,
793                        defense: 0,
794                        special_attack: 0,
795                        special_defense: 0,
796                        speed: 1,
797                        accuracy: 0,
798                    }),
799                }]),
800                ..Default::default()
801            },
802        );
803        if cfg!(feature = "gen1") {
804            moves.insert(
805                Choices::AURORABEAM,
806                Choice {
807                    move_id: Choices::AURORABEAM,
808                    base_power: 65.0,
809                    category: MoveCategory::Special,
810                    move_type: PokemonType::ICE,
811                    flags: Flags {
812                        protect: true,
813                        ..Default::default()
814                    },
815                    secondaries: Some(vec![Secondary {
816                        chance: 33.2,
817                        target: MoveTarget::Opponent,
818                        effect: Effect::Boost(StatBoosts {
819                            attack: -1,
820                            defense: 0,
821                            special_attack: 0,
822                            special_defense: 0,
823                            speed: 0,
824                            accuracy: 0,
825                        }),
826                    }]),
827                    ..Default::default()
828                },
829            );
830        } else {
831            moves.insert(
832                Choices::AURORABEAM,
833                Choice {
834                    move_id: Choices::AURORABEAM,
835                    base_power: 65.0,
836                    category: MoveCategory::Special,
837                    move_type: PokemonType::ICE,
838                    flags: Flags {
839                        protect: true,
840                        ..Default::default()
841                    },
842                    secondaries: Some(vec![Secondary {
843                        chance: 10.0,
844                        target: MoveTarget::Opponent,
845                        effect: Effect::Boost(StatBoosts {
846                            attack: -1,
847                            defense: 0,
848                            special_attack: 0,
849                            special_defense: 0,
850                            speed: 0,
851                            accuracy: 0,
852                        }),
853                    }]),
854                    ..Default::default()
855                },
856            );
857        }
858        moves.insert(
859            Choices::AURORAVEIL,
860            Choice {
861                move_id: Choices::AURORAVEIL,
862                target: MoveTarget::User,
863                move_type: PokemonType::ICE,
864                flags: Flags {
865                    ..Default::default()
866                },
867                side_condition: Some(SideCondition {
868                    target: MoveTarget::User,
869                    condition: PokemonSideCondition::AuroraVeil,
870                }),
871                ..Default::default()
872            },
873        );
874        moves.insert(
875            Choices::AUTOTOMIZE,
876            Choice {
877                move_id: Choices::AUTOTOMIZE,
878                target: MoveTarget::User,
879                move_type: PokemonType::STEEL,
880                flags: Flags {
881                    ..Default::default()
882                },
883                boost: Some(Boost {
884                    target: MoveTarget::User,
885                    boosts: StatBoosts {
886                        attack: 0,
887                        defense: 0,
888                        special_attack: 0,
889                        special_defense: 0,
890                        speed: 2,
891                        accuracy: 0,
892                    },
893                }),
894                ..Default::default()
895            },
896        );
897        moves.insert(
898            Choices::AVALANCHE,
899            Choice {
900                move_id: Choices::AVALANCHE,
901                base_power: 60.0,
902                category: MoveCategory::Physical,
903                priority: -4,
904                move_type: PokemonType::ICE,
905                flags: Flags {
906                    contact: true,
907                    protect: true,
908                    ..Default::default()
909                },
910                ..Default::default()
911            },
912        );
913        moves.insert(
914            Choices::AXEKICK,
915            Choice {
916                move_id: Choices::AXEKICK,
917                accuracy: 90.0,
918                base_power: 120.0,
919                category: MoveCategory::Physical,
920                move_type: PokemonType::FIGHTING,
921                flags: Flags {
922                    contact: true,
923                    protect: true,
924                    ..Default::default()
925                },
926                secondaries: Some(vec![Secondary {
927                    chance: 30.0,
928                    target: MoveTarget::Opponent,
929                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
930                }]),
931                crash: Some(0.5),
932                ..Default::default()
933            },
934        );
935        moves.insert(
936            Choices::BABYDOLLEYES,
937            Choice {
938                move_id: Choices::BABYDOLLEYES,
939                priority: 1,
940                move_type: PokemonType::FAIRY,
941                flags: Flags {
942                    protect: true,
943                    reflectable: true,
944                    ..Default::default()
945                },
946                boost: Some(Boost {
947                    target: MoveTarget::Opponent,
948                    boosts: StatBoosts {
949                        attack: -1,
950                        defense: 0,
951                        special_attack: 0,
952                        special_defense: 0,
953                        speed: 0,
954                        accuracy: 0,
955                    },
956                }),
957                ..Default::default()
958            },
959        );
960        moves.insert(
961            Choices::BADDYBAD,
962            Choice {
963                move_id: Choices::BADDYBAD,
964                accuracy: 95.0,
965                base_power: 80.0,
966                category: MoveCategory::Special,
967                move_type: PokemonType::DARK,
968                flags: Flags {
969                    protect: true,
970                    ..Default::default()
971                },
972                ..Default::default()
973            },
974        );
975        moves.insert(
976            Choices::BANEFULBUNKER,
977            Choice {
978                move_id: Choices::BANEFULBUNKER,
979                priority: 4,
980                target: MoveTarget::User,
981                move_type: PokemonType::POISON,
982                flags: Flags {
983                    ..Default::default()
984                },
985                volatile_status: Some(VolatileStatus {
986                    target: MoveTarget::User,
987                    volatile_status: PokemonVolatileStatus::BANEFULBUNKER,
988                }),
989                ..Default::default()
990            },
991        );
992        moves.insert(
993            Choices::BARBBARRAGE,
994            Choice {
995                move_id: Choices::BARBBARRAGE,
996                base_power: 60.0,
997                category: MoveCategory::Physical,
998                move_type: PokemonType::POISON,
999                flags: Flags {
1000                    protect: true,
1001                    ..Default::default()
1002                },
1003                secondaries: Some(vec![Secondary {
1004                    chance: 50.0,
1005                    target: MoveTarget::Opponent,
1006                    effect: Effect::Status(PokemonStatus::POISON),
1007                }]),
1008                ..Default::default()
1009            },
1010        );
1011        moves.insert(
1012            Choices::BARRAGE,
1013            Choice {
1014                move_id: Choices::BARRAGE,
1015                accuracy: 85.0,
1016                base_power: 15.0,
1017                category: MoveCategory::Physical,
1018                move_type: PokemonType::NORMAL,
1019                flags: Flags {
1020                    bullet: true,
1021                    protect: true,
1022                    ..Default::default()
1023                },
1024                ..Default::default()
1025            },
1026        );
1027        moves.insert(
1028            Choices::BARRIER,
1029            Choice {
1030                move_id: Choices::BARRIER,
1031                target: MoveTarget::User,
1032                move_type: PokemonType::PSYCHIC,
1033                flags: Flags {
1034                    ..Default::default()
1035                },
1036                boost: Some(Boost {
1037                    target: MoveTarget::User,
1038                    boosts: StatBoosts {
1039                        attack: 0,
1040                        defense: 2,
1041                        special_attack: 0,
1042                        special_defense: 0,
1043                        speed: 0,
1044                        accuracy: 0,
1045                    },
1046                }),
1047                ..Default::default()
1048            },
1049        );
1050        moves.insert(
1051            Choices::BATONPASS,
1052            Choice {
1053                move_id: Choices::BATONPASS,
1054                target: MoveTarget::User,
1055                move_type: PokemonType::NORMAL,
1056                flags: Flags {
1057                    pivot: true,
1058                    ..Default::default()
1059                },
1060                ..Default::default()
1061            },
1062        );
1063        moves.insert(
1064            Choices::BEAKBLAST,
1065            Choice {
1066                move_id: Choices::BEAKBLAST,
1067                base_power: 100.0,
1068                category: MoveCategory::Physical,
1069                priority: -3,
1070                move_type: PokemonType::FLYING,
1071                flags: Flags {
1072                    bullet: true,
1073                    protect: true,
1074                    ..Default::default()
1075                },
1076                ..Default::default()
1077            },
1078        );
1079        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
1080            moves.insert(
1081                Choices::BEATUP,
1082                Choice {
1083                    base_power: 10.0,
1084                    move_id: Choices::BEATUP,
1085                    category: MoveCategory::Physical,
1086                    move_type: PokemonType::DARK,
1087                    flags: Flags {
1088                            protect: true,
1089                        ..Default::default()
1090                    },
1091                    ..Default::default()
1092                },
1093            );
1094        } else {
1095            moves.insert(
1096                Choices::BEATUP,
1097                Choice {
1098                    move_id: Choices::BEATUP,
1099                    category: MoveCategory::Physical,
1100                    move_type: PokemonType::DARK,
1101                    flags: Flags {
1102                            protect: true,
1103                        ..Default::default()
1104                    },
1105                    ..Default::default()
1106                },
1107            );
1108        }
1109        moves.insert(
1110            Choices::BEHEMOTHBASH,
1111            Choice {
1112                move_id: Choices::BEHEMOTHBASH,
1113                base_power: 100.0,
1114                category: MoveCategory::Physical,
1115                move_type: PokemonType::STEEL,
1116                flags: Flags {
1117                    contact: true,
1118                    protect: true,
1119                    ..Default::default()
1120                },
1121                ..Default::default()
1122            },
1123        );
1124        moves.insert(
1125            Choices::BEHEMOTHBLADE,
1126            Choice {
1127                move_id: Choices::BEHEMOTHBLADE,
1128                base_power: 100.0,
1129                category: MoveCategory::Physical,
1130                move_type: PokemonType::STEEL,
1131                flags: Flags {
1132                    contact: true,
1133                    protect: true,
1134                    slicing: true,
1135                    ..Default::default()
1136                },
1137                ..Default::default()
1138            },
1139        );
1140        moves.insert(
1141            Choices::BELCH,
1142            Choice {
1143                move_id: Choices::BELCH,
1144                accuracy: 90.0,
1145                base_power: 120.0,
1146                category: MoveCategory::Special,
1147                move_type: PokemonType::POISON,
1148                flags: Flags {
1149                    protect: true,
1150                    ..Default::default()
1151                },
1152                ..Default::default()
1153            },
1154        );
1155        moves.insert(
1156            Choices::BELLYDRUM,
1157            Choice {
1158                move_id: Choices::BELLYDRUM,
1159                target: MoveTarget::User,
1160                move_type: PokemonType::NORMAL,
1161                flags: Flags {
1162                    ..Default::default()
1163                },
1164                ..Default::default()
1165            },
1166        );
1167        moves.insert(
1168            Choices::BESTOW,
1169            Choice {
1170                move_id: Choices::BESTOW,
1171                move_type: PokemonType::NORMAL,
1172                flags: Flags {
1173                    ..Default::default()
1174                },
1175                ..Default::default()
1176            },
1177        );
1178        moves.insert(
1179            Choices::BIDE,
1180            Choice {
1181                move_id: Choices::BIDE,
1182                category: MoveCategory::Physical,
1183                priority: 1,
1184                target: MoveTarget::User,
1185                move_type: PokemonType::NORMAL,
1186                flags: Flags {
1187                    contact: true,
1188                    protect: true,
1189                    ..Default::default()
1190                },
1191                volatile_status: Some(VolatileStatus {
1192                    target: MoveTarget::User,
1193                    volatile_status: PokemonVolatileStatus::BIDE,
1194                }),
1195                ..Default::default()
1196            },
1197        );
1198        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
1199            moves.insert(
1200                Choices::BIND,
1201                Choice {
1202                    move_id: Choices::BIND,
1203                    accuracy: 75.0,
1204                    base_power: 15.0,
1205                    category: MoveCategory::Physical,
1206                    move_type: PokemonType::NORMAL,
1207                    flags: Flags {
1208                        contact: true,
1209                            protect: true,
1210                        ..Default::default()
1211                    },
1212                    volatile_status: Some(VolatileStatus {
1213                        target: MoveTarget::Opponent,
1214                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
1215                    }),
1216                    ..Default::default()
1217                },
1218            );
1219        } else {
1220            moves.insert(
1221                Choices::BIND,
1222                Choice {
1223                    move_id: Choices::BIND,
1224                    accuracy: 85.0,
1225                    base_power: 15.0,
1226                    category: MoveCategory::Physical,
1227                    move_type: PokemonType::NORMAL,
1228                    flags: Flags {
1229                        contact: true,
1230                            protect: true,
1231                        ..Default::default()
1232                    },
1233                    volatile_status: Some(VolatileStatus {
1234                        target: MoveTarget::Opponent,
1235                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
1236                    }),
1237                    ..Default::default()
1238                },
1239            );
1240        }
1241        if cfg!(feature = "gen1") {
1242            moves.insert(
1243                Choices::BITE,
1244                Choice {
1245                    move_id: Choices::BITE,
1246                    base_power: 60.0,
1247                    category: MoveCategory::Physical,
1248                    move_type: PokemonType::NORMAL,
1249                    flags: Flags {
1250                        bite: true,
1251                        contact: true,
1252                        protect: true,
1253                        ..Default::default()
1254                    },
1255                    secondaries: Some(vec![Secondary {
1256                        chance: 10.0,
1257                        target: MoveTarget::Opponent,
1258                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
1259                    }]),
1260                    ..Default::default()
1261                },
1262            );
1263        } else {
1264            moves.insert(
1265                Choices::BITE,
1266                Choice {
1267                    move_id: Choices::BITE,
1268                    base_power: 60.0,
1269                    category: MoveCategory::Physical,
1270                    move_type: PokemonType::DARK,
1271                    flags: Flags {
1272                        bite: true,
1273                        contact: true,
1274                        protect: true,
1275                        ..Default::default()
1276                    },
1277                    secondaries: Some(vec![Secondary {
1278                        chance: 30.0,
1279                        target: MoveTarget::Opponent,
1280                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
1281                    }]),
1282                    ..Default::default()
1283                },
1284            );
1285        }
1286        moves.insert(
1287            Choices::BITTERBLADE,
1288            Choice {
1289                move_id: Choices::BITTERBLADE,
1290                base_power: 90.0,
1291                category: MoveCategory::Physical,
1292                move_type: PokemonType::FIRE,
1293                flags: Flags {
1294                    contact: true,
1295                    protect: true,
1296                    slicing: true,
1297                    heal: true,
1298                    ..Default::default()
1299                },
1300                drain: Some(0.5),
1301                ..Default::default()
1302            },
1303        );
1304        moves.insert(
1305            Choices::BITTERMALICE,
1306            Choice {
1307                move_id: Choices::BITTERMALICE,
1308                base_power: 75.0,
1309                category: MoveCategory::Special,
1310                move_type: PokemonType::GHOST,
1311                flags: Flags {
1312                    protect: true,
1313                    ..Default::default()
1314                },
1315                secondaries: Some(vec![Secondary {
1316                    chance: 100.0,
1317                    target: MoveTarget::Opponent,
1318                    effect: Effect::Boost(StatBoosts {
1319                        attack: -1,
1320                        defense: 0,
1321                        special_attack: 0,
1322                        special_defense: 0,
1323                        speed: 0,
1324                        accuracy: 0,
1325                    }),
1326                }]),
1327                ..Default::default()
1328            },
1329        );
1330        moves.insert(
1331            Choices::BLASTBURN,
1332            Choice {
1333                move_id: Choices::BLASTBURN,
1334                accuracy: 90.0,
1335                base_power: 150.0,
1336                category: MoveCategory::Special,
1337                move_type: PokemonType::FIRE,
1338                flags: Flags {
1339                    protect: true,
1340                    recharge: true,
1341                    ..Default::default()
1342                },
1343                ..Default::default()
1344            },
1345        );
1346        moves.insert(
1347            Choices::BLAZEKICK,
1348            Choice {
1349                move_id: Choices::BLAZEKICK,
1350                accuracy: 90.0,
1351                base_power: 85.0,
1352                category: MoveCategory::Physical,
1353                move_type: PokemonType::FIRE,
1354                flags: Flags {
1355                    contact: true,
1356                    protect: true,
1357                    ..Default::default()
1358                },
1359                secondaries: Some(vec![Secondary {
1360                    chance: 10.0,
1361                    target: MoveTarget::Opponent,
1362                    effect: Effect::Status(PokemonStatus::BURN),
1363                }]),
1364                ..Default::default()
1365            },
1366        );
1367        moves.insert(
1368            Choices::BLAZINGTORQUE,
1369            Choice {
1370                move_id: Choices::BLAZINGTORQUE,
1371                base_power: 80.0,
1372                category: MoveCategory::Physical,
1373                move_type: PokemonType::FIRE,
1374                flags: Flags {
1375                    protect: true,
1376                    ..Default::default()
1377                },
1378                secondaries: Some(vec![Secondary {
1379                    chance: 30.0,
1380                    target: MoveTarget::Opponent,
1381                    effect: Effect::Status(PokemonStatus::BURN),
1382                }]),
1383                ..Default::default()
1384            },
1385        );
1386        moves.insert(
1387            Choices::BLEAKWINDSTORM,
1388            Choice {
1389                move_id: Choices::BLEAKWINDSTORM,
1390                accuracy: 80.0,
1391                base_power: 100.0,
1392                category: MoveCategory::Special,
1393                move_type: PokemonType::FLYING,
1394                flags: Flags {
1395                    protect: true,
1396                    wind: true,
1397                    ..Default::default()
1398                },
1399                secondaries: Some(vec![Secondary {
1400                    chance: 30.0,
1401                    target: MoveTarget::Opponent,
1402                    effect: Effect::Boost(StatBoosts {
1403                        attack: 0,
1404                        defense: 0,
1405                        special_attack: 0,
1406                        special_defense: 0,
1407                        speed: -1,
1408                        accuracy: 0,
1409                    }),
1410                }]),
1411                ..Default::default()
1412            },
1413        );
1414        if cfg!(feature = "gen1") {
1415            moves.insert(
1416                Choices::BLIZZARD,
1417                Choice {
1418                    move_id: Choices::BLIZZARD,
1419                    accuracy: 90.0,
1420                    base_power: 120.0,
1421                    category: MoveCategory::Special,
1422                    move_type: PokemonType::ICE,
1423                    flags: Flags {
1424                        protect: true,
1425                        wind: true,
1426                        ..Default::default()
1427                    },
1428                    secondaries: Some(vec![Secondary {
1429                        chance: 10.0,
1430                        target: MoveTarget::Opponent,
1431                        effect: Effect::Status(PokemonStatus::FREEZE),
1432                    }]),
1433                    ..Default::default()
1434                },
1435            );
1436        }
1437        else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
1438            moves.insert(
1439                Choices::BLIZZARD,
1440                Choice {
1441                    move_id: Choices::BLIZZARD,
1442                    accuracy: 70.0,
1443                    base_power: 120.0,
1444                    category: MoveCategory::Special,
1445                    move_type: PokemonType::ICE,
1446                    flags: Flags {
1447                        protect: true,
1448                        wind: true,
1449                        ..Default::default()
1450                    },
1451                    secondaries: Some(vec![Secondary {
1452                        chance: 10.0,
1453                        target: MoveTarget::Opponent,
1454                        effect: Effect::Status(PokemonStatus::FREEZE),
1455                    }]),
1456                    ..Default::default()
1457                },
1458            );
1459        } else {
1460            moves.insert(
1461                Choices::BLIZZARD,
1462                Choice {
1463                    move_id: Choices::BLIZZARD,
1464                    accuracy: 70.0,
1465                    base_power: 110.0,
1466                    category: MoveCategory::Special,
1467                    move_type: PokemonType::ICE,
1468                    flags: Flags {
1469                            protect: true,
1470                        ..Default::default()
1471                    },
1472                    secondaries: Some(vec![Secondary {
1473                        chance: 10.0,
1474                        target: MoveTarget::Opponent,
1475                        effect: Effect::Status(PokemonStatus::FREEZE),
1476                    }]),
1477                    ..Default::default()
1478                },
1479            );
1480        }
1481        moves.insert(
1482            Choices::BLOCK,
1483            Choice {
1484                move_id: Choices::BLOCK,
1485                move_type: PokemonType::NORMAL,
1486                flags: Flags {
1487                    reflectable: true,
1488                    ..Default::default()
1489                },
1490                ..Default::default()
1491            },
1492        );
1493        moves.insert(
1494            Choices::BLOODMOON,
1495            Choice {
1496                move_id: Choices::BLOODMOON,
1497                base_power: 140.0,
1498                category: MoveCategory::Special,
1499                move_type: PokemonType::NORMAL,
1500                flags: Flags {
1501                    protect: true,
1502                    ..Default::default()
1503                },
1504                ..Default::default()
1505            },
1506        );
1507        moves.insert(
1508            Choices::BLUEFLARE,
1509            Choice {
1510                move_id: Choices::BLUEFLARE,
1511                accuracy: 85.0,
1512                base_power: 130.0,
1513                category: MoveCategory::Special,
1514                move_type: PokemonType::FIRE,
1515                flags: Flags {
1516                    protect: true,
1517                    ..Default::default()
1518                },
1519                secondaries: Some(vec![Secondary {
1520                    chance: 20.0,
1521                    target: MoveTarget::Opponent,
1522                    effect: Effect::Status(PokemonStatus::BURN),
1523                }]),
1524                ..Default::default()
1525            },
1526        );
1527        moves.insert(
1528            Choices::BODYPRESS,
1529            Choice {
1530                move_id: Choices::BODYPRESS,
1531                base_power: 80.0,
1532                category: MoveCategory::Physical,
1533                move_type: PokemonType::FIGHTING,
1534                flags: Flags {
1535                    contact: true,
1536                    protect: true,
1537                    ..Default::default()
1538                },
1539                ..Default::default()
1540            },
1541        );
1542        moves.insert(
1543            Choices::BODYSLAM,
1544            Choice {
1545                move_id: Choices::BODYSLAM,
1546                base_power: 85.0,
1547                category: MoveCategory::Physical,
1548                move_type: PokemonType::NORMAL,
1549                flags: Flags {
1550                    contact: true,
1551                    protect: true,
1552                    ..Default::default()
1553                },
1554                secondaries: Some(vec![Secondary {
1555                    chance: 30.0,
1556                    target: MoveTarget::Opponent,
1557                    effect: Effect::Status(PokemonStatus::PARALYZE),
1558                }]),
1559                ..Default::default()
1560            },
1561        );
1562        moves.insert(
1563            Choices::BOLTBEAK,
1564            Choice {
1565                move_id: Choices::BOLTBEAK,
1566                base_power: 85.0,
1567                category: MoveCategory::Physical,
1568                move_type: PokemonType::ELECTRIC,
1569                flags: Flags {
1570                    contact: true,
1571                    protect: true,
1572                    ..Default::default()
1573                },
1574                ..Default::default()
1575            },
1576        );
1577        moves.insert(
1578            Choices::BOLTSTRIKE,
1579            Choice {
1580                move_id: Choices::BOLTSTRIKE,
1581                accuracy: 85.0,
1582                base_power: 130.0,
1583                category: MoveCategory::Physical,
1584                move_type: PokemonType::ELECTRIC,
1585                flags: Flags {
1586                    contact: true,
1587                    protect: true,
1588                    ..Default::default()
1589                },
1590                secondaries: Some(vec![Secondary {
1591                    chance: 20.0,
1592                    target: MoveTarget::Opponent,
1593                    effect: Effect::Status(PokemonStatus::PARALYZE),
1594                }]),
1595                ..Default::default()
1596            },
1597        );
1598        moves.insert(
1599            Choices::BONECLUB,
1600            Choice {
1601                move_id: Choices::BONECLUB,
1602                accuracy: 85.0,
1603                base_power: 65.0,
1604                category: MoveCategory::Physical,
1605                move_type: PokemonType::GROUND,
1606                flags: Flags {
1607                    protect: true,
1608                    ..Default::default()
1609                },
1610                secondaries: Some(vec![Secondary {
1611                    chance: 10.0,
1612                    target: MoveTarget::Opponent,
1613                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
1614                }]),
1615                ..Default::default()
1616            },
1617        );
1618        moves.insert(
1619            Choices::BONEMERANG,
1620            Choice {
1621                move_id: Choices::BONEMERANG,
1622                accuracy: 90.0,
1623                base_power: 50.0,
1624                category: MoveCategory::Physical,
1625                move_type: PokemonType::GROUND,
1626                flags: Flags {
1627                    protect: true,
1628                    ..Default::default()
1629                },
1630                ..Default::default()
1631            },
1632        );
1633        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
1634            moves.insert(
1635                Choices::BONERUSH,
1636                Choice {
1637                    move_id: Choices::BONERUSH,
1638                    accuracy: 80.0,
1639                    base_power: 25.0,
1640                    category: MoveCategory::Physical,
1641                    move_type: PokemonType::GROUND,
1642                    flags: Flags {
1643                            protect: true,
1644                        ..Default::default()
1645                    },
1646                    ..Default::default()
1647                },
1648            );
1649        } else {
1650            moves.insert(
1651                Choices::BONERUSH,
1652                Choice {
1653                    move_id: Choices::BONERUSH,
1654                    accuracy: 90.0,
1655                    base_power: 25.0,
1656                    category: MoveCategory::Physical,
1657                    move_type: PokemonType::GROUND,
1658                    flags: Flags {
1659                            protect: true,
1660                        ..Default::default()
1661                    },
1662                    ..Default::default()
1663                },
1664            );
1665        }
1666        moves.insert(
1667            Choices::BOOMBURST,
1668            Choice {
1669                move_id: Choices::BOOMBURST,
1670                base_power: 140.0,
1671                category: MoveCategory::Special,
1672                move_type: PokemonType::NORMAL,
1673                flags: Flags {
1674                    protect: true,
1675                    sound: true,
1676                    ..Default::default()
1677                },
1678                ..Default::default()
1679            },
1680        );
1681        moves.insert(
1682            Choices::BOUNCE,
1683            Choice {
1684                move_id: Choices::BOUNCE,
1685                accuracy: 85.0,
1686                base_power: 85.0,
1687                category: MoveCategory::Physical,
1688                move_type: PokemonType::FLYING,
1689                flags: Flags {
1690                    charge: true,
1691                    contact: true,
1692                    protect: true,
1693                    ..Default::default()
1694                },
1695                secondaries: Some(vec![Secondary {
1696                    chance: 30.0,
1697                    target: MoveTarget::Opponent,
1698                    effect: Effect::Status(PokemonStatus::PARALYZE),
1699                }]),
1700                ..Default::default()
1701            },
1702        );
1703        moves.insert(
1704            Choices::BOUNCYBUBBLE,
1705            Choice {
1706                move_id: Choices::BOUNCYBUBBLE,
1707                base_power: 60.0,
1708                category: MoveCategory::Special,
1709                move_type: PokemonType::WATER,
1710                flags: Flags {
1711                    heal: true,
1712                    protect: true,
1713                    ..Default::default()
1714                },
1715                drain: Some(0.5),
1716                ..Default::default()
1717            },
1718        );
1719        moves.insert(
1720            Choices::BRANCHPOKE,
1721            Choice {
1722                move_id: Choices::BRANCHPOKE,
1723                base_power: 40.0,
1724                category: MoveCategory::Physical,
1725                move_type: PokemonType::GRASS,
1726                flags: Flags {
1727                    contact: true,
1728                    protect: true,
1729                    ..Default::default()
1730                },
1731                ..Default::default()
1732            },
1733        );
1734        moves.insert(
1735            Choices::BRAVEBIRD,
1736            Choice {
1737                move_id: Choices::BRAVEBIRD,
1738                base_power: 120.0,
1739                category: MoveCategory::Physical,
1740                move_type: PokemonType::FLYING,
1741                flags: Flags {
1742                    contact: true,
1743                    protect: true,
1744                    ..Default::default()
1745                },
1746                recoil: Some(0.33),
1747                ..Default::default()
1748            },
1749        );
1750        moves.insert(
1751            Choices::BREAKINGSWIPE,
1752            Choice {
1753                move_id: Choices::BREAKINGSWIPE,
1754                base_power: 60.0,
1755                category: MoveCategory::Physical,
1756                move_type: PokemonType::DRAGON,
1757                flags: Flags {
1758                    contact: true,
1759                    protect: true,
1760                    ..Default::default()
1761                },
1762                secondaries: Some(vec![Secondary {
1763                    chance: 100.0,
1764                    target: MoveTarget::Opponent,
1765                    effect: Effect::Boost(StatBoosts {
1766                        attack: -1,
1767                        defense: 0,
1768                        special_attack: 0,
1769                        special_defense: 0,
1770                        speed: 0,
1771                        accuracy: 0,
1772                    }),
1773                }]),
1774                ..Default::default()
1775            },
1776        );
1777        moves.insert(
1778            Choices::BRICKBREAK,
1779            Choice {
1780                move_id: Choices::BRICKBREAK,
1781                base_power: 75.0,
1782                category: MoveCategory::Physical,
1783                move_type: PokemonType::FIGHTING,
1784                flags: Flags {
1785                    contact: true,
1786                    protect: true,
1787                    ..Default::default()
1788                },
1789                ..Default::default()
1790            },
1791        );
1792        moves.insert(
1793            Choices::BRINE,
1794            Choice {
1795                move_id: Choices::BRINE,
1796                base_power: 65.0,
1797                category: MoveCategory::Special,
1798                move_type: PokemonType::WATER,
1799                flags: Flags {
1800                    protect: true,
1801                    ..Default::default()
1802                },
1803                ..Default::default()
1804            },
1805        );
1806        moves.insert(
1807            Choices::BRUTALSWING,
1808            Choice {
1809                move_id: Choices::BRUTALSWING,
1810                base_power: 60.0,
1811                category: MoveCategory::Physical,
1812                move_type: PokemonType::DARK,
1813                flags: Flags {
1814                    contact: true,
1815                    protect: true,
1816                    ..Default::default()
1817                },
1818                ..Default::default()
1819            },
1820        );
1821        if cfg!(feature = "gen1") {
1822            moves.insert(
1823                Choices::BUBBLE,
1824                Choice {
1825                    move_id: Choices::BUBBLE,
1826                    base_power: 20.0,
1827                    category: MoveCategory::Special,
1828                    move_type: PokemonType::WATER,
1829                    flags: Flags {
1830                            protect: true,
1831                        ..Default::default()
1832                    },
1833                    secondaries: Some(vec![Secondary {
1834                        chance: 33.2,
1835                        target: MoveTarget::Opponent,
1836                        effect: Effect::Boost(StatBoosts {
1837                            attack: 0,
1838                            defense: 0,
1839                            special_attack: 0,
1840                            special_defense: 0,
1841                            speed: -1,
1842                            accuracy: 0,
1843                        }),
1844                    }]),
1845                    ..Default::default()
1846                },
1847            );
1848        } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
1849            moves.insert(
1850                Choices::BUBBLE,
1851                Choice {
1852                    move_id: Choices::BUBBLE,
1853                    base_power: 20.0,
1854                    category: MoveCategory::Special,
1855                    move_type: PokemonType::WATER,
1856                    flags: Flags {
1857                            protect: true,
1858                        ..Default::default()
1859                    },
1860                    secondaries: Some(vec![Secondary {
1861                        chance: 10.0,
1862                        target: MoveTarget::Opponent,
1863                        effect: Effect::Boost(StatBoosts {
1864                            attack: 0,
1865                            defense: 0,
1866                            special_attack: 0,
1867                            special_defense: 0,
1868                            speed: -1,
1869                            accuracy: 0,
1870                        }),
1871                    }]),
1872                    ..Default::default()
1873                },
1874            );
1875        } else {
1876            moves.insert(
1877                Choices::BUBBLE,
1878                Choice {
1879                    move_id: Choices::BUBBLE,
1880                    base_power: 40.0,
1881                    category: MoveCategory::Special,
1882                    move_type: PokemonType::WATER,
1883                    flags: Flags {
1884                            protect: true,
1885                        ..Default::default()
1886                    },
1887                    secondaries: Some(vec![Secondary {
1888                        chance: 10.0,
1889                        target: MoveTarget::Opponent,
1890                        effect: Effect::Boost(StatBoosts {
1891                            attack: 0,
1892                            defense: 0,
1893                            special_attack: 0,
1894                            special_defense: 0,
1895                            speed: -1,
1896                            accuracy: 0,
1897                        }),
1898                    }]),
1899                    ..Default::default()
1900                },
1901            );
1902        }
1903        if cfg!(feature = "gen1") {
1904            moves.insert(
1905                Choices::BUBBLEBEAM,
1906                Choice {
1907                    move_id: Choices::BUBBLEBEAM,
1908                    base_power: 65.0,
1909                    category: MoveCategory::Special,
1910                    move_type: PokemonType::WATER,
1911                    flags: Flags {
1912                        protect: true,
1913                        ..Default::default()
1914                    },
1915                    secondaries: Some(vec![Secondary {
1916                        chance: 33.2,
1917                        target: MoveTarget::Opponent,
1918                        effect: Effect::Boost(StatBoosts {
1919                            attack: 0,
1920                            defense: 0,
1921                            special_attack: 0,
1922                            special_defense: 0,
1923                            speed: -1,
1924                            accuracy: 0,
1925                        }),
1926                    }]),
1927                    ..Default::default()
1928                },
1929            );
1930        } else {
1931            moves.insert(
1932                Choices::BUBBLEBEAM,
1933                Choice {
1934                    move_id: Choices::BUBBLEBEAM,
1935                    base_power: 65.0,
1936                    category: MoveCategory::Special,
1937                    move_type: PokemonType::WATER,
1938                    flags: Flags {
1939                        protect: true,
1940                        ..Default::default()
1941                    },
1942                    secondaries: Some(vec![Secondary {
1943                        chance: 10.0,
1944                        target: MoveTarget::Opponent,
1945                        effect: Effect::Boost(StatBoosts {
1946                            attack: 0,
1947                            defense: 0,
1948                            special_attack: 0,
1949                            special_defense: 0,
1950                            speed: -1,
1951                            accuracy: 0,
1952                        }),
1953                    }]),
1954                    ..Default::default()
1955                },
1956            );
1957        }
1958        moves.insert(
1959            Choices::BUGBITE,
1960            Choice {
1961                move_id: Choices::BUGBITE,
1962                base_power: 60.0,
1963                category: MoveCategory::Physical,
1964                move_type: PokemonType::BUG,
1965                flags: Flags {
1966                    contact: true,
1967                    protect: true,
1968                    ..Default::default()
1969                },
1970                ..Default::default()
1971            },
1972        );
1973        moves.insert(
1974            Choices::BUGBUZZ,
1975            Choice {
1976                move_id: Choices::BUGBUZZ,
1977                base_power: 90.0,
1978                category: MoveCategory::Special,
1979                move_type: PokemonType::BUG,
1980                flags: Flags {
1981                    protect: true,
1982                    sound: true,
1983                    ..Default::default()
1984                },
1985                secondaries: Some(vec![Secondary {
1986                    chance: 10.0,
1987                    target: MoveTarget::Opponent,
1988                    effect: Effect::Boost(StatBoosts {
1989                        attack: 0,
1990                        defense: 0,
1991                        special_attack: 0,
1992                        special_defense: -1,
1993                        speed: 0,
1994                        accuracy: 0,
1995                    }),
1996                }]),
1997                ..Default::default()
1998            },
1999        );
2000        moves.insert(
2001            Choices::BULKUP,
2002            Choice {
2003                move_id: Choices::BULKUP,
2004                target: MoveTarget::User,
2005                move_type: PokemonType::FIGHTING,
2006                flags: Flags {
2007                    ..Default::default()
2008                },
2009                boost: Some(Boost {
2010                    target: MoveTarget::User,
2011                    boosts: StatBoosts {
2012                        attack: 1,
2013                        defense: 1,
2014                        special_attack: 0,
2015                        special_defense: 0,
2016                        speed: 0,
2017                        accuracy: 0,
2018                    },
2019                }),
2020                ..Default::default()
2021            },
2022        );
2023        moves.insert(
2024            Choices::BULLDOZE,
2025            Choice {
2026                move_id: Choices::BULLDOZE,
2027                base_power: 60.0,
2028                category: MoveCategory::Physical,
2029                move_type: PokemonType::GROUND,
2030                flags: Flags {
2031                    protect: true,
2032                    ..Default::default()
2033                },
2034                secondaries: Some(vec![Secondary {
2035                    chance: 100.0,
2036                    target: MoveTarget::Opponent,
2037                    effect: Effect::Boost(StatBoosts {
2038                        attack: 0,
2039                        defense: 0,
2040                        special_attack: 0,
2041                        special_defense: 0,
2042                        speed: -1,
2043                        accuracy: 0,
2044                    }),
2045                }]),
2046                ..Default::default()
2047            },
2048        );
2049        moves.insert(
2050            Choices::BULLETPUNCH,
2051            Choice {
2052                move_id: Choices::BULLETPUNCH,
2053                base_power: 40.0,
2054                category: MoveCategory::Physical,
2055                priority: 1,
2056                move_type: PokemonType::STEEL,
2057                flags: Flags {
2058                    contact: true,
2059                    protect: true,
2060                    punch: true,
2061                    ..Default::default()
2062                },
2063                ..Default::default()
2064            },
2065        );
2066        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
2067            moves.insert(
2068                Choices::BULLETSEED,
2069                Choice {
2070                    move_id: Choices::BULLETSEED,
2071                    base_power: 10.0,
2072                    category: MoveCategory::Physical,
2073                    move_type: PokemonType::GRASS,
2074                    flags: Flags {
2075                        bullet: true,
2076                            protect: true,
2077                        ..Default::default()
2078                    },
2079                    ..Default::default()
2080                },
2081            );
2082        } else {
2083            moves.insert(
2084                Choices::BULLETSEED,
2085                Choice {
2086                    move_id: Choices::BULLETSEED,
2087                    base_power: 25.0,
2088                    category: MoveCategory::Physical,
2089                    move_type: PokemonType::GRASS,
2090                    flags: Flags {
2091                        bullet: true,
2092                            protect: true,
2093                        ..Default::default()
2094                    },
2095                    ..Default::default()
2096                },
2097            );
2098        }
2099        moves.insert(
2100            Choices::BURNINGBULWARK,
2101            Choice {
2102                move_id: Choices::BURNINGBULWARK,
2103                category: MoveCategory::Status,
2104                move_type: PokemonType::FIRE,
2105                priority: 4,
2106                flags: Flags {
2107                    ..Default::default()
2108                },
2109                volatile_status: Some(VolatileStatus {
2110                    target: MoveTarget::User,
2111                    volatile_status: PokemonVolatileStatus::BURNINGBULWARK,
2112                }),
2113                ..Default::default()
2114            },
2115        );
2116        moves.insert(
2117            Choices::BURNINGJEALOUSY,
2118            Choice {
2119                move_id: Choices::BURNINGJEALOUSY,
2120                base_power: 70.0,
2121                category: MoveCategory::Special,
2122                move_type: PokemonType::FIRE,
2123                flags: Flags {
2124                    protect: true,
2125                    ..Default::default()
2126                },
2127                ..Default::default()
2128            },
2129        );
2130        moves.insert(
2131            Choices::BURNUP,
2132            Choice {
2133                move_id: Choices::BURNUP,
2134                base_power: 130.0,
2135                category: MoveCategory::Special,
2136                move_type: PokemonType::FIRE,
2137                flags: Flags {
2138                    protect: true,
2139                    ..Default::default()
2140                },
2141                ..Default::default()
2142            },
2143        );
2144        moves.insert(
2145            Choices::BUZZYBUZZ,
2146            Choice {
2147                move_id: Choices::BUZZYBUZZ,
2148                base_power: 60.0,
2149                category: MoveCategory::Special,
2150                move_type: PokemonType::ELECTRIC,
2151                flags: Flags {
2152                    protect: true,
2153                    ..Default::default()
2154                },
2155                secondaries: Some(vec![Secondary {
2156                    chance: 100.0,
2157                    target: MoveTarget::Opponent,
2158                    effect: Effect::Status(PokemonStatus::PARALYZE),
2159                }]),
2160                ..Default::default()
2161            },
2162        );
2163        moves.insert(
2164            Choices::CALMMIND,
2165            Choice {
2166                move_id: Choices::CALMMIND,
2167                target: MoveTarget::User,
2168                move_type: PokemonType::PSYCHIC,
2169                flags: Flags {
2170                    ..Default::default()
2171                },
2172                boost: Some(Boost {
2173                    target: MoveTarget::User,
2174                    boosts: StatBoosts {
2175                        attack: 0,
2176                        defense: 0,
2177                        special_attack: 1,
2178                        special_defense: 1,
2179                        speed: 0,
2180                        accuracy: 0,
2181                    },
2182                }),
2183                ..Default::default()
2184            },
2185        );
2186        moves.insert(
2187            Choices::CAMOUFLAGE,
2188            Choice {
2189                move_id: Choices::CAMOUFLAGE,
2190                target: MoveTarget::User,
2191                move_type: PokemonType::NORMAL,
2192                flags: Flags {
2193                    ..Default::default()
2194                },
2195                ..Default::default()
2196            },
2197        );
2198        moves.insert(
2199            Choices::CAPTIVATE,
2200            Choice {
2201                move_id: Choices::CAPTIVATE,
2202                move_type: PokemonType::NORMAL,
2203                flags: Flags {
2204                    protect: true,
2205                    reflectable: true,
2206                    ..Default::default()
2207                },
2208                boost: Some(Boost {
2209                    target: MoveTarget::Opponent,
2210                    boosts: StatBoosts {
2211                        attack: 0,
2212                        defense: 0,
2213                        special_attack: -2,
2214                        special_defense: 0,
2215                        speed: 0,
2216                        accuracy: 0,
2217                    },
2218                }),
2219                ..Default::default()
2220            },
2221        );
2222        moves.insert(
2223            Choices::CEASELESSEDGE,
2224            Choice {
2225                move_id: Choices::CEASELESSEDGE,
2226                accuracy: 90.0,
2227                base_power: 65.0,
2228                category: MoveCategory::Physical,
2229                move_type: PokemonType::DARK,
2230                flags: Flags {
2231                    contact: true,
2232                    protect: true,
2233                    slicing: true,
2234                    ..Default::default()
2235                },
2236                side_condition: Some(SideCondition {
2237                    target: MoveTarget::Opponent,
2238                    condition: PokemonSideCondition::Spikes,
2239                }),
2240                ..Default::default()
2241            },
2242        );
2243        moves.insert(
2244            Choices::CELEBRATE,
2245            Choice {
2246                move_id: Choices::CELEBRATE,
2247                target: MoveTarget::User,
2248                move_type: PokemonType::NORMAL,
2249                flags: Flags {
2250                    ..Default::default()
2251                },
2252                ..Default::default()
2253            },
2254        );
2255        moves.insert(
2256            Choices::CHARGE,
2257            Choice {
2258                move_id: Choices::CHARGE,
2259                target: MoveTarget::User,
2260                move_type: PokemonType::ELECTRIC,
2261                flags: Flags {
2262                    ..Default::default()
2263                },
2264                boost: Some(Boost {
2265                    target: MoveTarget::User,
2266                    boosts: StatBoosts {
2267                        attack: 0,
2268                        defense: 0,
2269                        special_attack: 0,
2270                        special_defense: 1,
2271                        speed: 0,
2272                        accuracy: 0,
2273                    },
2274                }),
2275                volatile_status: Some(VolatileStatus {
2276                    target: MoveTarget::User,
2277                    volatile_status: PokemonVolatileStatus::CHARGE,
2278                }),
2279                ..Default::default()
2280            },
2281        );
2282        moves.insert(
2283            Choices::CHARGEBEAM,
2284            Choice {
2285                move_id: Choices::CHARGEBEAM,
2286                accuracy: 90.0,
2287                base_power: 50.0,
2288                category: MoveCategory::Special,
2289                move_type: PokemonType::ELECTRIC,
2290                flags: Flags {
2291                    protect: true,
2292                    ..Default::default()
2293                },
2294                secondaries: Some(vec![Secondary {
2295                    chance: 70.0,
2296                    target: MoveTarget::User,
2297                    effect: Effect::Boost(StatBoosts {
2298                        attack: 0,
2299                        defense: 0,
2300                        special_attack: 1,
2301                        special_defense: 0,
2302                        speed: 0,
2303                        accuracy: 0,
2304                    }),
2305                }]),
2306                ..Default::default()
2307            },
2308        );
2309        moves.insert(
2310            Choices::CHARM,
2311            Choice {
2312                move_id: Choices::CHARM,
2313                move_type: PokemonType::FAIRY,
2314                flags: Flags {
2315                    protect: true,
2316                    reflectable: true,
2317                    ..Default::default()
2318                },
2319                boost: Some(Boost {
2320                    target: MoveTarget::Opponent,
2321                    boosts: StatBoosts {
2322                        attack: -2,
2323                        defense: 0,
2324                        special_attack: 0,
2325                        special_defense: 0,
2326                        speed: 0,
2327                        accuracy: 0,
2328                    },
2329                }),
2330                ..Default::default()
2331            },
2332        );
2333        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
2334            moves.insert(
2335                Choices::CHATTER,
2336                Choice {
2337                    move_id: Choices::CHATTER,
2338                    base_power: 65.0,
2339                    category: MoveCategory::Special,
2340                    move_type: PokemonType::FLYING,
2341                    flags: Flags {
2342                                protect: true,
2343                        sound: true,
2344                        ..Default::default()
2345                    },
2346                    secondaries: Some(vec![Secondary {
2347                        chance: 100.0,
2348                        target: MoveTarget::Opponent,
2349                        effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
2350                    }]),
2351                    ..Default::default()
2352                },
2353            );
2354        } else {
2355            moves.insert(
2356                Choices::CHATTER,
2357                Choice {
2358                    move_id: Choices::CHATTER,
2359                    base_power: 65.0,
2360                    category: MoveCategory::Special,
2361                    move_type: PokemonType::FLYING,
2362                    flags: Flags {
2363                                protect: true,
2364                        sound: true,
2365                        ..Default::default()
2366                    },
2367                    secondaries: Some(vec![Secondary {
2368                        chance: 100.0,
2369                        target: MoveTarget::Opponent,
2370                        effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
2371                    }]),
2372                    ..Default::default()
2373                },
2374            );
2375        }
2376        moves.insert(
2377            Choices::CHILLINGWATER,
2378            Choice {
2379                move_id: Choices::CHILLINGWATER,
2380                base_power: 50.0,
2381                category: MoveCategory::Special,
2382                move_type: PokemonType::WATER,
2383                flags: Flags {
2384                    protect: true,
2385                    ..Default::default()
2386                },
2387                secondaries: Some(vec![Secondary {
2388                    chance: 100.0,
2389                    target: MoveTarget::Opponent,
2390                    effect: Effect::Boost(StatBoosts {
2391                        attack: -1,
2392                        defense: 0,
2393                        special_attack: 0,
2394                        special_defense: 0,
2395                        speed: 0,
2396                        accuracy: 0,
2397                    }),
2398                }]),
2399                ..Default::default()
2400            },
2401        );
2402        moves.insert(
2403            Choices::CHILLYRECEPTION,
2404            Choice {
2405                move_id: Choices::CHILLYRECEPTION,
2406                move_type: PokemonType::ICE,
2407                flags: Flags {
2408                    pivot: true,
2409                    ..Default::default()
2410                },
2411                ..Default::default()
2412            },
2413        );
2414        moves.insert(
2415            Choices::CHIPAWAY,
2416            Choice {
2417                move_id: Choices::CHIPAWAY,
2418                base_power: 70.0,
2419                category: MoveCategory::Physical,
2420                move_type: PokemonType::NORMAL,
2421                flags: Flags {
2422                    contact: true,
2423                    protect: true,
2424                    ..Default::default()
2425                },
2426                ..Default::default()
2427            },
2428        );
2429        moves.insert(
2430            Choices::CHLOROBLAST,
2431            Choice {
2432                move_id: Choices::CHLOROBLAST,
2433                accuracy: 95.0,
2434                base_power: 150.0,
2435                category: MoveCategory::Special,
2436                move_type: PokemonType::GRASS,
2437                flags: Flags {
2438                    protect: true,
2439                    ..Default::default()
2440                },
2441                heal: Some(Heal {
2442                    target: MoveTarget::User,
2443                    amount: -0.5,
2444                }),
2445                ..Default::default()
2446            },
2447        );
2448        moves.insert(
2449            Choices::CIRCLETHROW,
2450            Choice {
2451                move_id: Choices::CIRCLETHROW,
2452                accuracy: 90.0,
2453                base_power: 60.0,
2454                category: MoveCategory::Physical,
2455                priority: -6,
2456                move_type: PokemonType::FIGHTING,
2457                flags: Flags {
2458                    contact: true,
2459                    drag: true,
2460                    protect: true,
2461                    ..Default::default()
2462                },
2463                ..Default::default()
2464            },
2465        );
2466        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
2467            moves.insert(
2468                Choices::CLAMP,
2469                Choice {
2470                    move_id: Choices::CLAMP,
2471                    accuracy: 75.0,
2472                    base_power: 35.0,
2473                    category: MoveCategory::Physical,
2474                    move_type: PokemonType::WATER,
2475                    flags: Flags {
2476                        contact: true,
2477                            protect: true,
2478                        ..Default::default()
2479                    },
2480                    volatile_status: Some(VolatileStatus {
2481                        target: MoveTarget::Opponent,
2482                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
2483                    }),
2484                    ..Default::default()
2485                },
2486            );
2487        } else {
2488            moves.insert(
2489                Choices::CLAMP,
2490                Choice {
2491                    move_id: Choices::CLAMP,
2492                    accuracy: 85.0,
2493                    base_power: 35.0,
2494                    category: MoveCategory::Physical,
2495                    move_type: PokemonType::WATER,
2496                    flags: Flags {
2497                        contact: true,
2498                            protect: true,
2499                        ..Default::default()
2500                    },
2501                    volatile_status: Some(VolatileStatus {
2502                        target: MoveTarget::Opponent,
2503                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
2504                    }),
2505                    ..Default::default()
2506                },
2507            );
2508        }
2509        moves.insert(
2510            Choices::CLANGINGSCALES,
2511            Choice {
2512                move_id: Choices::CLANGINGSCALES,
2513                base_power: 110.0,
2514                category: MoveCategory::Special,
2515                move_type: PokemonType::DRAGON,
2516                flags: Flags {
2517                    protect: true,
2518                    sound: true,
2519                    ..Default::default()
2520                },
2521                boost: Some(Boost {
2522                    target: MoveTarget::User,
2523                    boosts: StatBoosts {
2524                        attack: 0,
2525                        defense: -1,
2526                        special_attack: 0,
2527                        special_defense: 0,
2528                        speed: 0,
2529                        accuracy: 0,
2530                    },
2531                }),
2532                ..Default::default()
2533            },
2534        );
2535        moves.insert(
2536            Choices::CLANGOROUSSOUL,
2537            Choice {
2538                move_id: Choices::CLANGOROUSSOUL,
2539                target: MoveTarget::User,
2540                move_type: PokemonType::DRAGON,
2541                flags: Flags {
2542                    sound: true,
2543                    ..Default::default()
2544                },
2545                ..Default::default()
2546            },
2547        );
2548        moves.insert(
2549            Choices::CLEARSMOG,
2550            Choice {
2551                move_id: Choices::CLEARSMOG,
2552                base_power: 50.0,
2553                category: MoveCategory::Special,
2554                move_type: PokemonType::POISON,
2555                flags: Flags {
2556                    protect: true,
2557                    ..Default::default()
2558                },
2559                ..Default::default()
2560            },
2561        );
2562        moves.insert(
2563            Choices::CLOSECOMBAT,
2564            Choice {
2565                move_id: Choices::CLOSECOMBAT,
2566                base_power: 120.0,
2567                category: MoveCategory::Physical,
2568                move_type: PokemonType::FIGHTING,
2569                flags: Flags {
2570                    contact: true,
2571                    protect: true,
2572                    ..Default::default()
2573                },
2574                boost: Some(Boost {
2575                        target: MoveTarget::User,
2576                        boosts: StatBoosts {
2577                            attack: 0,
2578                            defense: -1,
2579                            special_attack: 0,
2580                            special_defense: -1,
2581                            speed: 0,
2582                            accuracy: 0,
2583                        },
2584                    }),
2585                ..Default::default()
2586            },
2587        );
2588        moves.insert(
2589            Choices::COACHING,
2590            Choice {
2591                move_id: Choices::COACHING,
2592                target: MoveTarget::User,
2593                move_type: PokemonType::FIGHTING,
2594                flags: Flags {
2595                    ..Default::default()
2596                },
2597                boost: Some(Boost {
2598                    target: MoveTarget::User,
2599                    boosts: StatBoosts {
2600                        attack: 1,
2601                        defense: 1,
2602                        special_attack: 0,
2603                        special_defense: 0,
2604                        speed: 0,
2605                        accuracy: 0,
2606                    },
2607                }),
2608                ..Default::default()
2609            },
2610        );
2611        moves.insert(
2612            Choices::COIL,
2613            Choice {
2614                move_id: Choices::COIL,
2615                target: MoveTarget::User,
2616                move_type: PokemonType::POISON,
2617                flags: Flags {
2618                    ..Default::default()
2619                },
2620                boost: Some(Boost {
2621                    target: MoveTarget::User,
2622                    boosts: StatBoosts {
2623                        attack: 1,
2624                        defense: 1,
2625                        special_attack: 0,
2626                        special_defense: 0,
2627                        speed: 0,
2628                        accuracy: 1,
2629                    },
2630                }),
2631                ..Default::default()
2632            },
2633        );
2634        moves.insert(
2635            Choices::COLLISIONCOURSE,
2636            Choice {
2637                move_id: Choices::COLLISIONCOURSE,
2638                base_power: 100.0,
2639                category: MoveCategory::Physical,
2640                move_type: PokemonType::FIGHTING,
2641                flags: Flags {
2642                    contact: true,
2643                    protect: true,
2644                    ..Default::default()
2645                },
2646                ..Default::default()
2647            },
2648        );
2649        moves.insert(
2650            Choices::COMBATTORQUE,
2651            Choice {
2652                move_id: Choices::COMBATTORQUE,
2653                base_power: 100.0,
2654                category: MoveCategory::Physical,
2655                move_type: PokemonType::FIGHTING,
2656                flags: Flags {
2657                    protect: true,
2658                    ..Default::default()
2659                },
2660                secondaries: Some(vec![Secondary {
2661                    chance: 30.0,
2662                    target: MoveTarget::Opponent,
2663                    effect: Effect::Status(PokemonStatus::PARALYZE),
2664                }]),
2665                ..Default::default()
2666            },
2667        );
2668        moves.insert(
2669            Choices::COMETPUNCH,
2670            Choice {
2671                move_id: Choices::COMETPUNCH,
2672                accuracy: 85.0,
2673                base_power: 18.0,
2674                category: MoveCategory::Physical,
2675                move_type: PokemonType::NORMAL,
2676                flags: Flags {
2677                    contact: true,
2678                    protect: true,
2679                    punch: true,
2680                    ..Default::default()
2681                },
2682                ..Default::default()
2683            },
2684        );
2685        moves.insert(
2686            Choices::COMEUPPANCE,
2687            Choice {
2688                move_id: Choices::COMEUPPANCE,
2689                category: MoveCategory::Physical,
2690                move_type: PokemonType::DARK,
2691                flags: Flags {
2692                    contact: true,
2693                    protect: true,
2694                    ..Default::default()
2695                },
2696                ..Default::default()
2697            },
2698        );
2699        moves.insert(
2700            Choices::CONFIDE,
2701            Choice {
2702                move_id: Choices::CONFIDE,
2703                move_type: PokemonType::NORMAL,
2704                flags: Flags {
2705                    reflectable: true,
2706                    sound: true,
2707                    ..Default::default()
2708                },
2709                boost: Some(Boost {
2710                    target: MoveTarget::Opponent,
2711                    boosts: StatBoosts {
2712                        attack: 0,
2713                        defense: 0,
2714                        special_attack: -1,
2715                        special_defense: 0,
2716                        speed: 0,
2717                        accuracy: 0,
2718                    },
2719                }),
2720                ..Default::default()
2721            },
2722        );
2723        moves.insert(
2724            Choices::CONFUSERAY,
2725            Choice {
2726                move_id: Choices::CONFUSERAY,
2727                move_type: PokemonType::GHOST,
2728                flags: Flags {
2729                    protect: true,
2730                    reflectable: true,
2731                    ..Default::default()
2732                },
2733                volatile_status: Some(VolatileStatus {
2734                    target: MoveTarget::Opponent,
2735                    volatile_status: PokemonVolatileStatus::CONFUSION,
2736                }),
2737                ..Default::default()
2738            },
2739        );
2740        moves.insert(
2741            Choices::CONFUSION,
2742            Choice {
2743                move_id: Choices::CONFUSION,
2744                base_power: 50.0,
2745                category: MoveCategory::Special,
2746                move_type: PokemonType::PSYCHIC,
2747                flags: Flags {
2748                    protect: true,
2749                    ..Default::default()
2750                },
2751                secondaries: Some(vec![Secondary {
2752                    chance: 10.0,
2753                    target: MoveTarget::Opponent,
2754                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
2755                }]),
2756                ..Default::default()
2757            },
2758        );
2759        if cfg!(feature = "gen1") {
2760            moves.insert(
2761                Choices::CONSTRICT,
2762                Choice {
2763                    move_id: Choices::CONSTRICT,
2764                    base_power: 10.0,
2765                    category: MoveCategory::Physical,
2766                    move_type: PokemonType::NORMAL,
2767                    flags: Flags {
2768                        contact: true,
2769                        protect: true,
2770                        ..Default::default()
2771                    },
2772                    secondaries: Some(vec![Secondary {
2773                        chance: 33.2,
2774                        target: MoveTarget::Opponent,
2775                        effect: Effect::Boost(StatBoosts {
2776                            attack: 0,
2777                            defense: 0,
2778                            special_attack: 0,
2779                            special_defense: 0,
2780                            speed: -1,
2781                            accuracy: 0,
2782                        }),
2783                    }]),
2784                    ..Default::default()
2785                },
2786            );
2787        } else {
2788            moves.insert(
2789            Choices::CONSTRICT,
2790            Choice {
2791                move_id: Choices::CONSTRICT,
2792                base_power: 10.0,
2793                category: MoveCategory::Physical,
2794                move_type: PokemonType::NORMAL,
2795                flags: Flags {
2796                    contact: true,
2797                    protect: true,
2798                    ..Default::default()
2799                },
2800                secondaries: Some(vec![Secondary {
2801                    chance: 10.0,
2802                    target: MoveTarget::Opponent,
2803                    effect: Effect::Boost(StatBoosts {
2804                        attack: 0,
2805                        defense: 0,
2806                        special_attack: 0,
2807                        special_defense: 0,
2808                        speed: -1,
2809                        accuracy: 0,
2810                    }),
2811                }]),
2812                ..Default::default()
2813            },
2814        );
2815        }
2816        moves.insert(
2817            Choices::CONVERSION,
2818            Choice {
2819                move_id: Choices::CONVERSION,
2820                target: MoveTarget::User,
2821                move_type: PokemonType::NORMAL,
2822                flags: Flags {
2823                    ..Default::default()
2824                },
2825                ..Default::default()
2826            },
2827        );
2828        moves.insert(
2829            Choices::CONVERSION2,
2830            Choice {
2831                move_id: Choices::CONVERSION2,
2832                move_type: PokemonType::NORMAL,
2833                flags: Flags {
2834                    ..Default::default()
2835                },
2836                ..Default::default()
2837            },
2838        );
2839        moves.insert(
2840            Choices::COPYCAT,
2841            Choice {
2842                move_id: Choices::COPYCAT,
2843                target: MoveTarget::User,
2844                move_type: PokemonType::NORMAL,
2845                flags: Flags {
2846                    ..Default::default()
2847                },
2848                ..Default::default()
2849            },
2850        );
2851        moves.insert(
2852            Choices::COREENFORCER,
2853            Choice {
2854                move_id: Choices::COREENFORCER,
2855                base_power: 100.0,
2856                category: MoveCategory::Special,
2857                move_type: PokemonType::DRAGON,
2858                flags: Flags {
2859                    protect: true,
2860                    ..Default::default()
2861                },
2862                ..Default::default()
2863            },
2864        );
2865        moves.insert(
2866            Choices::CORROSIVEGAS,
2867            Choice {
2868                move_id: Choices::CORROSIVEGAS,
2869                move_type: PokemonType::POISON,
2870                flags: Flags {
2871                    protect: true,
2872                    reflectable: true,
2873                    ..Default::default()
2874                },
2875                ..Default::default()
2876            },
2877        );
2878        moves.insert(
2879            Choices::COSMICPOWER,
2880            Choice {
2881                move_id: Choices::COSMICPOWER,
2882                target: MoveTarget::User,
2883                move_type: PokemonType::PSYCHIC,
2884                flags: Flags {
2885                    ..Default::default()
2886                },
2887                boost: Some(Boost {
2888                    target: MoveTarget::User,
2889                    boosts: StatBoosts {
2890                        attack: 0,
2891                        defense: 1,
2892                        special_attack: 0,
2893                        special_defense: 1,
2894                        speed: 0,
2895                        accuracy: 0,
2896                    },
2897                }),
2898                ..Default::default()
2899            },
2900        );
2901        moves.insert(
2902            Choices::COTTONGUARD,
2903            Choice {
2904                move_id: Choices::COTTONGUARD,
2905                target: MoveTarget::User,
2906                move_type: PokemonType::GRASS,
2907                flags: Flags {
2908                    ..Default::default()
2909                },
2910                boost: Some(Boost {
2911                    target: MoveTarget::User,
2912                    boosts: StatBoosts {
2913                        attack: 0,
2914                        defense: 3,
2915                        special_attack: 0,
2916                        special_defense: 0,
2917                        speed: 0,
2918                        accuracy: 0,
2919                    },
2920                }),
2921                ..Default::default()
2922            },
2923        );
2924        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
2925            moves.insert(
2926                Choices::COTTONSPORE,
2927                Choice {
2928                    move_id: Choices::COTTONSPORE,
2929                    accuracy: 85.0,
2930                    move_type: PokemonType::GRASS,
2931                    flags: Flags {
2932                            powder: true,
2933                        protect: true,
2934                        reflectable: true,
2935                        ..Default::default()
2936                    },
2937                    boost: Some(Boost {
2938                        target: MoveTarget::Opponent,
2939                        boosts: StatBoosts {
2940                            attack: 0,
2941                            defense: 0,
2942                            special_attack: 0,
2943                            special_defense: 0,
2944                            speed: -2,
2945                            accuracy: 0,
2946                        },
2947                    }),
2948                    ..Default::default()
2949                },
2950            );
2951        } else {
2952            moves.insert(
2953                Choices::COTTONSPORE,
2954                Choice {
2955                    move_id: Choices::COTTONSPORE,
2956                    move_type: PokemonType::GRASS,
2957                    flags: Flags {
2958                            powder: true,
2959                        protect: true,
2960                        reflectable: true,
2961                        ..Default::default()
2962                    },
2963                    boost: Some(Boost {
2964                        target: MoveTarget::Opponent,
2965                        boosts: StatBoosts {
2966                            attack: 0,
2967                            defense: 0,
2968                            special_attack: 0,
2969                            special_defense: 0,
2970                            speed: -2,
2971                            accuracy: 0,
2972                        },
2973                    }),
2974                    ..Default::default()
2975                },
2976            );
2977        }
2978        moves.insert(
2979            Choices::COUNTER,
2980            Choice {
2981                move_id: Choices::COUNTER,
2982                category: MoveCategory::Physical,
2983                priority: -5,
2984                move_type: PokemonType::FIGHTING,
2985                flags: Flags {
2986                    contact: true,
2987                    protect: true,
2988                    ..Default::default()
2989                },
2990                ..Default::default()
2991            },
2992        );
2993        moves.insert(
2994            Choices::COURTCHANGE,
2995            Choice {
2996                move_id: Choices::COURTCHANGE,
2997                move_type: PokemonType::NORMAL,
2998                flags: Flags {
2999                    ..Default::default()
3000                },
3001                ..Default::default()
3002            },
3003        );
3004        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
3005            moves.insert(
3006                Choices::COVET,
3007                Choice {
3008                    move_id: Choices::COVET,
3009                    base_power: 40.0,
3010                    category: MoveCategory::Physical,
3011                    move_type: PokemonType::NORMAL,
3012                    flags: Flags {
3013                        contact: true,
3014                            protect: true,
3015                        ..Default::default()
3016                    },
3017                    ..Default::default()
3018                },
3019            );
3020        } else {
3021            moves.insert(
3022                Choices::COVET,
3023                Choice {
3024                    move_id: Choices::COVET,
3025                    base_power: 60.0,
3026                    category: MoveCategory::Physical,
3027                    move_type: PokemonType::NORMAL,
3028                    flags: Flags {
3029                        contact: true,
3030                            protect: true,
3031                        ..Default::default()
3032                    },
3033                    ..Default::default()
3034                },
3035            );
3036        }
3037        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
3038            moves.insert(
3039                Choices::CRABHAMMER,
3040                Choice {
3041                    move_id: Choices::CRABHAMMER,
3042                    accuracy: 85.0,
3043                    base_power: 90.0,
3044                    category: MoveCategory::Physical,
3045                    move_type: PokemonType::WATER,
3046                    flags: Flags {
3047                        contact: true,
3048                            protect: true,
3049                        ..Default::default()
3050                    },
3051                    ..Default::default()
3052                },
3053            );
3054        } else {
3055            moves.insert(
3056                Choices::CRABHAMMER,
3057                Choice {
3058                    move_id: Choices::CRABHAMMER,
3059                    accuracy: 90.0,
3060                    base_power: 100.0,
3061                    category: MoveCategory::Physical,
3062                    move_type: PokemonType::WATER,
3063                    flags: Flags {
3064                        contact: true,
3065                            protect: true,
3066                        ..Default::default()
3067                    },
3068                    ..Default::default()
3069                },
3070            );
3071        }
3072        moves.insert(
3073            Choices::CRAFTYSHIELD,
3074            Choice {
3075                move_id: Choices::CRAFTYSHIELD,
3076                priority: 3,
3077                target: MoveTarget::User,
3078                move_type: PokemonType::FAIRY,
3079                flags: Flags {
3080                    ..Default::default()
3081                },
3082                side_condition: Some(SideCondition {
3083                    target: MoveTarget::User,
3084                    condition: PokemonSideCondition::CraftyShield,
3085                }),
3086                ..Default::default()
3087            },
3088        );
3089        moves.insert(
3090            Choices::CROSSCHOP,
3091            Choice {
3092                move_id: Choices::CROSSCHOP,
3093                accuracy: 80.0,
3094                base_power: 100.0,
3095                category: MoveCategory::Physical,
3096                move_type: PokemonType::FIGHTING,
3097                flags: Flags {
3098                    contact: true,
3099                    protect: true,
3100                    ..Default::default()
3101                },
3102                ..Default::default()
3103            },
3104        );
3105        moves.insert(
3106            Choices::CROSSPOISON,
3107            Choice {
3108                move_id: Choices::CROSSPOISON,
3109                base_power: 70.0,
3110                category: MoveCategory::Physical,
3111                move_type: PokemonType::POISON,
3112                flags: Flags {
3113                    contact: true,
3114                    protect: true,
3115                    slicing: true,
3116                    ..Default::default()
3117                },
3118                secondaries: Some(vec![Secondary {
3119                    chance: 10.0,
3120                    target: MoveTarget::Opponent,
3121                    effect: Effect::Status(PokemonStatus::POISON),
3122                }]),
3123                ..Default::default()
3124            },
3125        );
3126        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
3127            moves.insert(
3128                Choices::CRUNCH,
3129                Choice {
3130                    move_id: Choices::CRUNCH,
3131                    base_power: 80.0,
3132                    category: MoveCategory::Physical,
3133                    move_type: PokemonType::DARK,
3134                    flags: Flags {
3135                        bite: true,
3136                        contact: true,
3137                        protect: true,
3138                        ..Default::default()
3139                    },
3140                    secondaries: Some(vec![Secondary {
3141                        chance: 20.0,
3142                        target: MoveTarget::Opponent,
3143                        effect: Effect::Boost(StatBoosts {
3144                            attack: 0,
3145                            defense: 0,
3146                            special_attack: 0,
3147                            special_defense: -1,
3148                            speed: 0,
3149                            accuracy: 0,
3150                        }),
3151                    }]),
3152                    ..Default::default()
3153                },
3154            );
3155        }
3156        else {
3157            moves.insert(
3158                Choices::CRUNCH,
3159                Choice {
3160                    move_id: Choices::CRUNCH,
3161                    base_power: 80.0,
3162                    category: MoveCategory::Physical,
3163                    move_type: PokemonType::DARK,
3164                    flags: Flags {
3165                        bite: true,
3166                        contact: true,
3167                        protect: true,
3168                        ..Default::default()
3169                    },
3170                    secondaries: Some(vec![Secondary {
3171                        chance: 20.0,
3172                        target: MoveTarget::Opponent,
3173                        effect: Effect::Boost(StatBoosts {
3174                            attack: 0,
3175                            defense: -1,
3176                            special_attack: 0,
3177                            special_defense: 0,
3178                            speed: 0,
3179                            accuracy: 0,
3180                        }),
3181                    }]),
3182                    ..Default::default()
3183                },
3184            );
3185        }
3186        moves.insert(
3187            Choices::CRUSHCLAW,
3188            Choice {
3189                move_id: Choices::CRUSHCLAW,
3190                accuracy: 95.0,
3191                base_power: 75.0,
3192                category: MoveCategory::Physical,
3193                move_type: PokemonType::NORMAL,
3194                flags: Flags {
3195                    contact: true,
3196                    protect: true,
3197                    ..Default::default()
3198                },
3199                secondaries: Some(vec![Secondary {
3200                    chance: 50.0,
3201                    target: MoveTarget::Opponent,
3202                    effect: Effect::Boost(StatBoosts {
3203                        attack: 0,
3204                        defense: -1,
3205                        special_attack: 0,
3206                        special_defense: 0,
3207                        speed: 0,
3208                        accuracy: 0,
3209                    }),
3210                }]),
3211                ..Default::default()
3212            },
3213        );
3214        moves.insert(
3215            Choices::CRUSHGRIP,
3216            Choice {
3217                move_id: Choices::CRUSHGRIP,
3218                category: MoveCategory::Physical,
3219                move_type: PokemonType::NORMAL,
3220                flags: Flags {
3221                    contact: true,
3222                    protect: true,
3223                    ..Default::default()
3224                },
3225                ..Default::default()
3226            },
3227        );
3228        moves.insert(
3229            Choices::CURSE,
3230            Choice {
3231                move_id: Choices::CURSE,
3232                move_type: PokemonType::GHOST,
3233                flags: Flags {
3234                    ..Default::default()
3235                },
3236                boost: Some(Boost {
3237                    target: MoveTarget::User,
3238                    boosts: StatBoosts {
3239                        attack: 1,
3240                        defense: 1,
3241                        special_attack: 0,
3242                        special_defense: 0,
3243                        speed: -1,
3244                        accuracy: 0,
3245                    },
3246                }),
3247                volatile_status: Some(VolatileStatus {
3248                    target: MoveTarget::User,
3249                    volatile_status: PokemonVolatileStatus::CURSE,
3250                }),
3251                ..Default::default()
3252            },
3253        );
3254        moves.insert(
3255            Choices::CUT,
3256            Choice {
3257                move_id: Choices::CUT,
3258                accuracy: 95.0,
3259                base_power: 50.0,
3260                category: MoveCategory::Physical,
3261                move_type: PokemonType::NORMAL,
3262                flags: Flags {
3263                    contact: true,
3264                    protect: true,
3265                    slicing: true,
3266                    ..Default::default()
3267                },
3268                ..Default::default()
3269            },
3270        );
3271        moves.insert(
3272            Choices::DARKESTLARIAT,
3273            Choice {
3274                move_id: Choices::DARKESTLARIAT,
3275                base_power: 85.0,
3276                category: MoveCategory::Physical,
3277                move_type: PokemonType::DARK,
3278                flags: Flags {
3279                    contact: true,
3280                    protect: true,
3281                    ..Default::default()
3282                },
3283                ..Default::default()
3284            },
3285        );
3286        moves.insert(
3287            Choices::DARKPULSE,
3288            Choice {
3289                move_id: Choices::DARKPULSE,
3290                base_power: 80.0,
3291                category: MoveCategory::Special,
3292                move_type: PokemonType::DARK,
3293                flags: Flags {
3294                    protect: true,
3295                    pulse: true,
3296                    ..Default::default()
3297                },
3298                secondaries: Some(vec![Secondary {
3299                    chance: 20.0,
3300                    target: MoveTarget::Opponent,
3301                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
3302                }]),
3303                ..Default::default()
3304            },
3305        );
3306        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
3307            moves.insert(
3308                Choices::DARKVOID,
3309                Choice {
3310                    move_id: Choices::DARKVOID,
3311                    accuracy: 80.0,
3312                    status: Some(Status {
3313                        target: MoveTarget::Opponent,
3314                        status: PokemonStatus::SLEEP,
3315                    }),
3316                    move_type: PokemonType::DARK,
3317                    flags: Flags {
3318                            protect: true,
3319                        reflectable: true,
3320                        ..Default::default()
3321                    },
3322                    ..Default::default()
3323                },
3324            );
3325        } else {
3326            moves.insert(
3327                Choices::DARKVOID,
3328                Choice {
3329                    move_id: Choices::DARKVOID,
3330                    accuracy: 50.0,
3331                    status: Some(Status {
3332                        target: MoveTarget::Opponent,
3333                        status: PokemonStatus::SLEEP,
3334                    }),
3335                    move_type: PokemonType::DARK,
3336                    flags: Flags {
3337                            protect: true,
3338                        reflectable: true,
3339                        ..Default::default()
3340                    },
3341                    ..Default::default()
3342                },
3343            );
3344        }
3345        moves.insert(
3346            Choices::DAZZLINGGLEAM,
3347            Choice {
3348                move_id: Choices::DAZZLINGGLEAM,
3349                base_power: 80.0,
3350                category: MoveCategory::Special,
3351                move_type: PokemonType::FAIRY,
3352                flags: Flags {
3353                    protect: true,
3354                    ..Default::default()
3355                },
3356                ..Default::default()
3357            },
3358        );
3359        moves.insert(
3360            Choices::DECORATE,
3361            Choice {
3362                move_id: Choices::DECORATE,
3363                move_type: PokemonType::FAIRY,
3364                flags: Flags {
3365                    ..Default::default()
3366                },
3367                boost: Some(Boost {
3368                    target: MoveTarget::Opponent,
3369                    boosts: StatBoosts {
3370                        attack: 2,
3371                        defense: 0,
3372                        special_attack: 2,
3373                        special_defense: 0,
3374                        speed: 0,
3375                        accuracy: 0,
3376                    },
3377                }),
3378                ..Default::default()
3379            },
3380        );
3381        moves.insert(
3382            Choices::DEFENDORDER,
3383            Choice {
3384                move_id: Choices::DEFENDORDER,
3385                target: MoveTarget::User,
3386                move_type: PokemonType::BUG,
3387                flags: Flags {
3388                    ..Default::default()
3389                },
3390                boost: Some(Boost {
3391                    target: MoveTarget::User,
3392                    boosts: StatBoosts {
3393                        attack: 0,
3394                        defense: 1,
3395                        special_attack: 0,
3396                        special_defense: 1,
3397                        speed: 0,
3398                        accuracy: 0,
3399                    },
3400                }),
3401                ..Default::default()
3402            },
3403        );
3404        moves.insert(
3405            Choices::DEFENSECURL,
3406            Choice {
3407                move_id: Choices::DEFENSECURL,
3408                target: MoveTarget::User,
3409                move_type: PokemonType::NORMAL,
3410                flags: Flags {
3411                    ..Default::default()
3412                },
3413                boost: Some(Boost {
3414                    target: MoveTarget::User,
3415                    boosts: StatBoosts {
3416                        attack: 0,
3417                        defense: 1,
3418                        special_attack: 0,
3419                        special_defense: 0,
3420                        speed: 0,
3421                        accuracy: 0,
3422                    },
3423                }),
3424                volatile_status: Some(VolatileStatus {
3425                    target: MoveTarget::User,
3426                    volatile_status: PokemonVolatileStatus::DEFENSECURL,
3427                }),
3428                ..Default::default()
3429            },
3430        );
3431        moves.insert(
3432            Choices::DEFOG,
3433            Choice {
3434                move_id: Choices::DEFOG,
3435                move_type: PokemonType::FLYING,
3436                flags: Flags {
3437                    protect: true,
3438                    reflectable: true,
3439                    ..Default::default()
3440                },
3441                boost: Some(Boost {
3442                    target: MoveTarget::Opponent,
3443                    boosts: StatBoosts {
3444                        attack: 0,
3445                        defense: 0,
3446                        special_attack: 0,
3447                        special_defense: 0,
3448                        speed: 0,
3449                        accuracy: 0,
3450                    },
3451                }),
3452                ..Default::default()
3453            },
3454        );
3455        moves.insert(
3456            Choices::DESTINYBOND,
3457            Choice {
3458                move_id: Choices::DESTINYBOND,
3459                target: MoveTarget::User,
3460                move_type: PokemonType::GHOST,
3461                flags: Flags {
3462                    ..Default::default()
3463                },
3464                volatile_status: Some(VolatileStatus {
3465                    target: MoveTarget::User,
3466                    volatile_status: PokemonVolatileStatus::DESTINYBOND,
3467                }),
3468                ..Default::default()
3469            },
3470        );
3471        moves.insert(
3472            Choices::DETECT,
3473            Choice {
3474                move_id: Choices::DETECT,
3475                priority: 4,
3476                target: MoveTarget::User,
3477                move_type: PokemonType::FIGHTING,
3478                flags: Flags {
3479                    ..Default::default()
3480                },
3481                volatile_status: Some(VolatileStatus {
3482                    target: MoveTarget::User,
3483                    volatile_status: PokemonVolatileStatus::PROTECT,
3484                }),
3485                ..Default::default()
3486            },
3487        );
3488
3489        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
3490            moves.insert(
3491                Choices::DIAMONDSTORM,
3492                Choice {
3493                    move_id: Choices::DIAMONDSTORM,
3494                    accuracy: 95.0,
3495                    base_power: 100.0,
3496                    category: MoveCategory::Physical,
3497                    move_type: PokemonType::ROCK,
3498                    flags: Flags {
3499                            protect: true,
3500                        ..Default::default()
3501                    },
3502                    secondaries: Some(vec![Secondary {
3503                        chance: 50.0,
3504                        target: MoveTarget::User,
3505                        effect: Effect::Boost(StatBoosts {
3506                            attack: 0,
3507                            defense: 1,
3508                            special_attack: 0,
3509                            special_defense: 0,
3510                            speed: 0,
3511                            accuracy: 0,
3512                        }),
3513                    }]),
3514                    ..Default::default()
3515                },
3516            );
3517        } else {
3518            moves.insert(
3519                Choices::DIAMONDSTORM,
3520                Choice {
3521                    move_id: Choices::DIAMONDSTORM,
3522                    accuracy: 95.0,
3523                    base_power: 100.0,
3524                    category: MoveCategory::Physical,
3525                    move_type: PokemonType::ROCK,
3526                    flags: Flags {
3527                            protect: true,
3528                        ..Default::default()
3529                    },
3530                    secondaries: Some(vec![Secondary {
3531                        chance: 50.0,
3532                        target: MoveTarget::User,
3533                        effect: Effect::Boost(StatBoosts {
3534                            attack: 0,
3535                            defense: 2,
3536                            special_attack: 0,
3537                            special_defense: 0,
3538                            speed: 0,
3539                            accuracy: 0,
3540                        }),
3541                    }]),
3542                    ..Default::default()
3543                },
3544            );
3545        }
3546        if cfg!(feature = "gen1") {
3547            moves.insert(
3548                Choices::DIG,
3549                Choice {
3550                    move_id: Choices::DIG,
3551                    base_power: 100.0,
3552                    category: MoveCategory::Physical,
3553                    move_type: PokemonType::GROUND,
3554                    flags: Flags {
3555                        charge: true,
3556                        contact: true,
3557                        protect: true,
3558                        ..Default::default()
3559                    },
3560                    ..Default::default()
3561                },
3562            );
3563        } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") {
3564            moves.insert(
3565                Choices::DIG,
3566                Choice {
3567                    move_id: Choices::DIG,
3568                    base_power: 60.0,
3569                    category: MoveCategory::Physical,
3570                    move_type: PokemonType::GROUND,
3571                    flags: Flags {
3572                        charge: true,
3573                        contact: true,
3574                        protect: true,
3575                        ..Default::default()
3576                    },
3577                    ..Default::default()
3578                },
3579            );
3580        } else {
3581            moves.insert(
3582                Choices::DIG,
3583                Choice {
3584                    move_id: Choices::DIG,
3585                    base_power: 80.0,
3586                    category: MoveCategory::Physical,
3587                    move_type: PokemonType::GROUND,
3588                    flags: Flags {
3589                        charge: true,
3590                        contact: true,
3591                        protect: true,
3592                        ..Default::default()
3593                    },
3594                    ..Default::default()
3595                },
3596            );
3597        }
3598        moves.insert(
3599            Choices::DIRECLAW,
3600            Choice {
3601                move_id: Choices::DIRECLAW,
3602                base_power: 80.0,
3603                category: MoveCategory::Physical,
3604                move_type: PokemonType::POISON,
3605                flags: Flags {
3606                    contact: true,
3607                    protect: true,
3608                    ..Default::default()
3609                },
3610                ..Default::default()
3611            },
3612        );
3613        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
3614            moves.insert(
3615                Choices::DISABLE,
3616                Choice {
3617                    move_id: Choices::DISABLE,
3618                    accuracy: 80.0,
3619                    move_type: PokemonType::NORMAL,
3620                    flags: Flags {
3621                            protect: true,
3622                        reflectable: true,
3623                        ..Default::default()
3624                    },
3625                    volatile_status: Some(VolatileStatus {
3626                        target: MoveTarget::Opponent,
3627                        volatile_status: PokemonVolatileStatus::DISABLE,
3628                    }),
3629                    ..Default::default()
3630                },
3631            );
3632        } else {
3633            moves.insert(
3634                Choices::DISABLE,
3635                Choice {
3636                    move_id: Choices::DISABLE,
3637                    move_type: PokemonType::NORMAL,
3638                    flags: Flags {
3639                            protect: true,
3640                        reflectable: true,
3641                        ..Default::default()
3642                    },
3643                    volatile_status: Some(VolatileStatus {
3644                        target: MoveTarget::Opponent,
3645                        volatile_status: PokemonVolatileStatus::DISABLE,
3646                    }),
3647                    ..Default::default()
3648                },
3649            );
3650        }
3651        moves.insert(
3652            Choices::DISARMINGVOICE,
3653            Choice {
3654                move_id: Choices::DISARMINGVOICE,
3655                base_power: 40.0,
3656                category: MoveCategory::Special,
3657                move_type: PokemonType::FAIRY,
3658                flags: Flags {
3659                    protect: true,
3660                    sound: true,
3661                    ..Default::default()
3662                },
3663                ..Default::default()
3664            },
3665        );
3666        moves.insert(
3667            Choices::DISCHARGE,
3668            Choice {
3669                move_id: Choices::DISCHARGE,
3670                base_power: 80.0,
3671                category: MoveCategory::Special,
3672                move_type: PokemonType::ELECTRIC,
3673                flags: Flags {
3674                    protect: true,
3675                    ..Default::default()
3676                },
3677                secondaries: Some(vec![Secondary {
3678                    chance: 30.0,
3679                    target: MoveTarget::Opponent,
3680                    effect: Effect::Status(PokemonStatus::PARALYZE),
3681                }]),
3682                ..Default::default()
3683            },
3684        );
3685        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
3686            moves.insert(
3687                Choices::DIVE,
3688                Choice {
3689                    move_id: Choices::DIVE,
3690                    base_power: 60.0,
3691                    category: MoveCategory::Physical,
3692                    move_type: PokemonType::WATER,
3693                    flags: Flags {
3694                        charge: true,
3695                        contact: true,
3696                        protect: true,
3697                        ..Default::default()
3698                    },
3699                    ..Default::default()
3700                },
3701            );
3702        } else {
3703            moves.insert(
3704                Choices::DIVE,
3705                Choice {
3706                    move_id: Choices::DIVE,
3707                    base_power: 80.0,
3708                    category: MoveCategory::Physical,
3709                    move_type: PokemonType::WATER,
3710                    flags: Flags {
3711                        charge: true,
3712                        contact: true,
3713                        protect: true,
3714                        ..Default::default()
3715                    },
3716                    ..Default::default()
3717                },
3718            );
3719        }
3720        if cfg!(feature = "gen1") {
3721            moves.insert(
3722                Choices::DIZZYPUNCH,
3723                Choice {
3724                    move_id: Choices::DIZZYPUNCH,
3725                    base_power: 70.0,
3726                    category: MoveCategory::Physical,
3727                    move_type: PokemonType::NORMAL,
3728                    flags: Flags {
3729                        contact: true,
3730                        protect: true,
3731                        punch: true,
3732                        ..Default::default()
3733                    },
3734                    ..Default::default()
3735                },
3736            );
3737        } else {
3738            moves.insert(
3739                Choices::DIZZYPUNCH,
3740                Choice {
3741                    move_id: Choices::DIZZYPUNCH,
3742                    base_power: 70.0,
3743                    category: MoveCategory::Physical,
3744                    move_type: PokemonType::NORMAL,
3745                    flags: Flags {
3746                        contact: true,
3747                        protect: true,
3748                        punch: true,
3749                        ..Default::default()
3750                    },
3751                    secondaries: Some(vec![Secondary {
3752                        chance: 20.0,
3753                        target: MoveTarget::Opponent,
3754                        effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
3755                    }]),
3756                    ..Default::default()
3757                },
3758            );
3759        }
3760        moves.insert(
3761            Choices::DOODLE,
3762            Choice {
3763                move_id: Choices::DOODLE,
3764                move_type: PokemonType::NORMAL,
3765                flags: Flags {
3766                    ..Default::default()
3767                },
3768                ..Default::default()
3769            },
3770        );
3771        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
3772            moves.insert(
3773                Choices::DOOMDESIRE,
3774                Choice {
3775                    move_id: Choices::DOOMDESIRE,
3776                    accuracy: 85.0,
3777                    base_power: 120.0,
3778                    category: MoveCategory::Special,
3779                    move_type: PokemonType::STEEL,
3780                    flags: Flags {
3781                        ..Default::default()
3782                    },
3783                    ..Default::default()
3784                },
3785            );
3786        } else {
3787            moves.insert(
3788                Choices::DOOMDESIRE,
3789                Choice {
3790                    move_id: Choices::DOOMDESIRE,
3791                    base_power: 140.0,
3792                    category: MoveCategory::Special,
3793                    move_type: PokemonType::STEEL,
3794                    flags: Flags {
3795                        ..Default::default()
3796                    },
3797                    ..Default::default()
3798                },
3799            );
3800        }
3801        if cfg!(feature = "gen1") {
3802            moves.insert(
3803                Choices::DOUBLEEDGE,
3804                Choice {
3805                    move_id: Choices::DOUBLEEDGE,
3806                    base_power: 100.0,
3807                    category: MoveCategory::Physical,
3808                    move_type: PokemonType::NORMAL,
3809                    flags: Flags {
3810                        contact: true,
3811                        protect: true,
3812                        ..Default::default()
3813                    },
3814                    recoil: Some(0.33),
3815                    ..Default::default()
3816                },
3817            );
3818        } else {
3819            moves.insert(
3820                Choices::DOUBLEEDGE,
3821                Choice {
3822                    move_id: Choices::DOUBLEEDGE,
3823                    base_power: 120.0,
3824                    category: MoveCategory::Physical,
3825                    move_type: PokemonType::NORMAL,
3826                    flags: Flags {
3827                        contact: true,
3828                        protect: true,
3829                        ..Default::default()
3830                    },
3831                    recoil: Some(0.33),
3832                    ..Default::default()
3833                },
3834            );
3835        }
3836        moves.insert(
3837            Choices::DOUBLEHIT,
3838            Choice {
3839                move_id: Choices::DOUBLEHIT,
3840                accuracy: 90.0,
3841                base_power: 35.0,
3842                category: MoveCategory::Physical,
3843                move_type: PokemonType::NORMAL,
3844                flags: Flags {
3845                    contact: true,
3846                    protect: true,
3847                    ..Default::default()
3848                },
3849                ..Default::default()
3850            },
3851        );
3852        moves.insert(
3853            Choices::DOUBLEIRONBASH,
3854            Choice {
3855                move_id: Choices::DOUBLEIRONBASH,
3856                base_power: 60.0,
3857                category: MoveCategory::Physical,
3858                move_type: PokemonType::STEEL,
3859                flags: Flags {
3860                    contact: true,
3861                    protect: true,
3862                    punch: true,
3863                    ..Default::default()
3864                },
3865                secondaries: Some(vec![Secondary {
3866                    chance: 30.0,
3867                    target: MoveTarget::Opponent,
3868                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
3869                }]),
3870                ..Default::default()
3871            },
3872        );
3873        moves.insert(
3874            Choices::DOUBLEKICK,
3875            Choice {
3876                move_id: Choices::DOUBLEKICK,
3877                base_power: 30.0,
3878                category: MoveCategory::Physical,
3879                move_type: PokemonType::FIGHTING,
3880                flags: Flags {
3881                    contact: true,
3882                    protect: true,
3883                    ..Default::default()
3884                },
3885                ..Default::default()
3886            },
3887        );
3888        moves.insert(
3889            Choices::DOUBLESHOCK,
3890            Choice {
3891                move_id: Choices::DOUBLESHOCK,
3892                base_power: 120.0,
3893                category: MoveCategory::Physical,
3894                move_type: PokemonType::ELECTRIC,
3895                flags: Flags {
3896                    contact: true,
3897                    protect: true,
3898                    ..Default::default()
3899                },
3900                ..Default::default()
3901            },
3902        );
3903        moves.insert(
3904            Choices::DOUBLESLAP,
3905            Choice {
3906                move_id: Choices::DOUBLESLAP,
3907                accuracy: 85.0,
3908                base_power: 15.0,
3909                category: MoveCategory::Physical,
3910                move_type: PokemonType::NORMAL,
3911                flags: Flags {
3912                    contact: true,
3913                    protect: true,
3914                    ..Default::default()
3915                },
3916                ..Default::default()
3917            },
3918        );
3919        moves.insert(
3920            Choices::DOUBLETEAM,
3921            Choice {
3922                move_id: Choices::DOUBLETEAM,
3923                target: MoveTarget::User,
3924                move_type: PokemonType::NORMAL,
3925                flags: Flags {
3926                    ..Default::default()
3927                },
3928                boost: Some(Boost {
3929                    target: MoveTarget::User,
3930                    boosts: StatBoosts {
3931                        attack: 0,
3932                        defense: 0,
3933                        special_attack: 0,
3934                        special_defense: 0,
3935                        speed: 0,
3936                        accuracy: 0,
3937                    },
3938                }),
3939                ..Default::default()
3940            },
3941        );
3942        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
3943            moves.insert(
3944                Choices::DRACOMETEOR,
3945                Choice {
3946                    move_id: Choices::DRACOMETEOR,
3947                    accuracy: 90.0,
3948                    base_power: 140.0,
3949                    category: MoveCategory::Special,
3950                    move_type: PokemonType::DRAGON,
3951                    flags: Flags {
3952                            protect: true,
3953                        ..Default::default()
3954                    },
3955                    boost: Some(Boost {
3956                        target: MoveTarget::User,
3957                        boosts: StatBoosts {
3958                            attack: 0,
3959                            defense: 0,
3960                            special_attack: -2,
3961                            special_defense: 0,
3962                            speed: 0,
3963                            accuracy: 0,
3964                        },
3965                    }),
3966                    ..Default::default()
3967                },
3968            );
3969        } else {
3970            moves.insert(
3971                Choices::DRACOMETEOR,
3972                Choice {
3973                    move_id: Choices::DRACOMETEOR,
3974                    accuracy: 90.0,
3975                    base_power: 130.0,
3976                    category: MoveCategory::Special,
3977                    move_type: PokemonType::DRAGON,
3978                    flags: Flags {
3979                            protect: true,
3980                        ..Default::default()
3981                    },
3982                    boost: Some(Boost {
3983                        target: MoveTarget::User,
3984                        boosts: StatBoosts {
3985                            attack: 0,
3986                            defense: 0,
3987                            special_attack: -2,
3988                            special_defense: 0,
3989                            speed: 0,
3990                            accuracy: 0,
3991                        },
3992                    }),
3993                    ..Default::default()
3994                },
3995            );
3996        }
3997        moves.insert(
3998            Choices::DRAGONASCENT,
3999            Choice {
4000                move_id: Choices::DRAGONASCENT,
4001                base_power: 120.0,
4002                category: MoveCategory::Physical,
4003                move_type: PokemonType::FLYING,
4004                flags: Flags {
4005                    contact: true,
4006                    protect: true,
4007                    ..Default::default()
4008                },
4009                boost: Some(Boost {
4010                    target: MoveTarget::User,
4011                    boosts: StatBoosts {
4012                        attack: 0,
4013                        defense: -1,
4014                        special_attack: 0,
4015                        special_defense: -1,
4016                        speed: 0,
4017                        accuracy: 0,
4018                    },
4019                }),
4020                ..Default::default()
4021            },
4022        );
4023        moves.insert(
4024            Choices::DRAGONBREATH,
4025            Choice {
4026                move_id: Choices::DRAGONBREATH,
4027                base_power: 60.0,
4028                category: MoveCategory::Special,
4029                move_type: PokemonType::DRAGON,
4030                flags: Flags {
4031                    protect: true,
4032                    ..Default::default()
4033                },
4034                secondaries: Some(vec![Secondary {
4035                    chance: 30.0,
4036                    target: MoveTarget::Opponent,
4037                    effect: Effect::Status(PokemonStatus::PARALYZE),
4038                }]),
4039                ..Default::default()
4040            },
4041        );
4042        moves.insert(
4043            Choices::DRAGONCHEER,
4044            Choice {
4045                move_id: Choices::DRAGONCHEER,
4046                base_power: 60.0,
4047                category: MoveCategory::Status,
4048                move_type: PokemonType::DRAGON,
4049                target: MoveTarget::User,
4050                flags: Flags {
4051                    ..Default::default()
4052                },
4053                ..Default::default()
4054            },
4055        );
4056        moves.insert(
4057            Choices::DRAGONCLAW,
4058            Choice {
4059                move_id: Choices::DRAGONCLAW,
4060                base_power: 80.0,
4061                category: MoveCategory::Physical,
4062                move_type: PokemonType::DRAGON,
4063                flags: Flags {
4064                    contact: true,
4065                    protect: true,
4066                    ..Default::default()
4067                },
4068                ..Default::default()
4069            },
4070        );
4071        moves.insert(
4072            Choices::DRAGONDANCE,
4073            Choice {
4074                move_id: Choices::DRAGONDANCE,
4075                target: MoveTarget::User,
4076                move_type: PokemonType::DRAGON,
4077                flags: Flags {
4078                    ..Default::default()
4079                },
4080                boost: Some(Boost {
4081                    target: MoveTarget::User,
4082                    boosts: StatBoosts {
4083                        attack: 1,
4084                        defense: 0,
4085                        special_attack: 0,
4086                        special_defense: 0,
4087                        speed: 1,
4088                        accuracy: 0,
4089                    },
4090                }),
4091                ..Default::default()
4092            },
4093        );
4094        moves.insert(
4095            Choices::DRAGONDARTS,
4096            Choice {
4097                move_id: Choices::DRAGONDARTS,
4098                base_power: 50.0,
4099                category: MoveCategory::Physical,
4100                move_type: PokemonType::DRAGON,
4101                flags: Flags {
4102                    protect: true,
4103                    ..Default::default()
4104                },
4105                ..Default::default()
4106            },
4107        );
4108        moves.insert(
4109            Choices::DRAGONENERGY,
4110            Choice {
4111                move_id: Choices::DRAGONENERGY,
4112                base_power: 150.0,
4113                category: MoveCategory::Special,
4114                move_type: PokemonType::DRAGON,
4115                flags: Flags {
4116                    protect: true,
4117                    ..Default::default()
4118                },
4119                ..Default::default()
4120            },
4121        );
4122        moves.insert(
4123            Choices::DRAGONHAMMER,
4124            Choice {
4125                move_id: Choices::DRAGONHAMMER,
4126                base_power: 90.0,
4127                category: MoveCategory::Physical,
4128                move_type: PokemonType::DRAGON,
4129                flags: Flags {
4130                    contact: true,
4131                    protect: true,
4132                    ..Default::default()
4133                },
4134                ..Default::default()
4135            },
4136        );
4137        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
4138            moves.insert(
4139                Choices::DRAGONPULSE,
4140                Choice {
4141                    move_id: Choices::DRAGONPULSE,
4142                    base_power: 90.0,
4143                    category: MoveCategory::Special,
4144                    move_type: PokemonType::DRAGON,
4145                    flags: Flags {
4146                                protect: true,
4147                        pulse: true,
4148                        ..Default::default()
4149                    },
4150                    ..Default::default()
4151                },
4152            );
4153        } else {
4154            moves.insert(
4155                Choices::DRAGONPULSE,
4156                Choice {
4157                    move_id: Choices::DRAGONPULSE,
4158                    base_power: 85.0,
4159                    category: MoveCategory::Special,
4160                    move_type: PokemonType::DRAGON,
4161                    flags: Flags {
4162                                protect: true,
4163                        pulse: true,
4164                        ..Default::default()
4165                    },
4166                    ..Default::default()
4167                },
4168            );
4169        }
4170        moves.insert(
4171            Choices::DRAGONRAGE,
4172            Choice {
4173                move_id: Choices::DRAGONRAGE,
4174                category: MoveCategory::Special,
4175                move_type: PokemonType::DRAGON,
4176                flags: Flags {
4177                    protect: true,
4178                    ..Default::default()
4179                },
4180                ..Default::default()
4181            },
4182        );
4183        moves.insert(
4184            Choices::DRAGONRUSH,
4185            Choice {
4186                move_id: Choices::DRAGONRUSH,
4187                accuracy: 75.0,
4188                base_power: 100.0,
4189                category: MoveCategory::Physical,
4190                move_type: PokemonType::DRAGON,
4191                flags: Flags {
4192                    contact: true,
4193                    protect: true,
4194                    ..Default::default()
4195                },
4196                secondaries: Some(vec![Secondary {
4197                    chance: 20.0,
4198                    target: MoveTarget::Opponent,
4199                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
4200                }]),
4201                ..Default::default()
4202            },
4203        );
4204        moves.insert(
4205            Choices::DRAGONTAIL,
4206            Choice {
4207                move_id: Choices::DRAGONTAIL,
4208                accuracy: 90.0,
4209                base_power: 60.0,
4210                category: MoveCategory::Physical,
4211                priority: -6,
4212                move_type: PokemonType::DRAGON,
4213                flags: Flags {
4214                    contact: true,
4215                    drag: true,
4216                    protect: true,
4217                    ..Default::default()
4218                },
4219                ..Default::default()
4220            },
4221        );
4222        moves.insert(
4223            Choices::DRAININGKISS,
4224            Choice {
4225                move_id: Choices::DRAININGKISS,
4226                base_power: 50.0,
4227                category: MoveCategory::Special,
4228                move_type: PokemonType::FAIRY,
4229                flags: Flags {
4230                    contact: true,
4231                    heal: true,
4232                    protect: true,
4233                    ..Default::default()
4234                },
4235                drain: Some(0.75),
4236                ..Default::default()
4237            },
4238        );
4239        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
4240            moves.insert(
4241                Choices::DRAINPUNCH,
4242                Choice {
4243                    move_id: Choices::DRAINPUNCH,
4244                    base_power: 60.0,
4245                    category: MoveCategory::Physical,
4246                    move_type: PokemonType::FIGHTING,
4247                    flags: Flags {
4248                        contact: true,
4249                        heal: true,
4250                            protect: true,
4251                        punch: true,
4252                        ..Default::default()
4253                    },
4254                    drain: Some(0.5),
4255                    ..Default::default()
4256                },
4257            );
4258        } else {
4259            moves.insert(
4260                Choices::DRAINPUNCH,
4261                Choice {
4262                    move_id: Choices::DRAINPUNCH,
4263                    base_power: 75.0,
4264                    category: MoveCategory::Physical,
4265                    move_type: PokemonType::FIGHTING,
4266                    flags: Flags {
4267                        contact: true,
4268                        heal: true,
4269                            protect: true,
4270                        punch: true,
4271                        ..Default::default()
4272                    },
4273                    drain: Some(0.5),
4274                    ..Default::default()
4275                },
4276            );
4277        }
4278        moves.insert(
4279            Choices::DREAMEATER,
4280            Choice {
4281                move_id: Choices::DREAMEATER,
4282                base_power: 100.0,
4283                category: MoveCategory::Special,
4284                move_type: PokemonType::PSYCHIC,
4285                flags: Flags {
4286                    heal: true,
4287                    protect: true,
4288                    ..Default::default()
4289                },
4290                drain: Some(0.5),
4291                ..Default::default()
4292            },
4293        );
4294        moves.insert(
4295            Choices::DRILLPECK,
4296            Choice {
4297                move_id: Choices::DRILLPECK,
4298                base_power: 80.0,
4299                category: MoveCategory::Physical,
4300                move_type: PokemonType::FLYING,
4301                flags: Flags {
4302                    contact: true,
4303                    protect: true,
4304                    ..Default::default()
4305                },
4306                ..Default::default()
4307            },
4308        );
4309        moves.insert(
4310            Choices::DRILLRUN,
4311            Choice {
4312                move_id: Choices::DRILLRUN,
4313                accuracy: 95.0,
4314                base_power: 80.0,
4315                category: MoveCategory::Physical,
4316                move_type: PokemonType::GROUND,
4317                flags: Flags {
4318                    contact: true,
4319                    protect: true,
4320                    ..Default::default()
4321                },
4322                ..Default::default()
4323            },
4324        );
4325        moves.insert(
4326            Choices::DRUMBEATING,
4327            Choice {
4328                move_id: Choices::DRUMBEATING,
4329                base_power: 80.0,
4330                category: MoveCategory::Physical,
4331                move_type: PokemonType::GRASS,
4332                flags: Flags {
4333                    protect: true,
4334                    ..Default::default()
4335                },
4336                secondaries: Some(vec![Secondary {
4337                    chance: 100.0,
4338                    target: MoveTarget::Opponent,
4339                    effect: Effect::Boost(StatBoosts {
4340                        attack: 0,
4341                        defense: 0,
4342                        special_attack: 0,
4343                        special_defense: 0,
4344                        speed: -1,
4345                        accuracy: 0,
4346                    }),
4347                }]),
4348                ..Default::default()
4349            },
4350        );
4351        moves.insert(
4352            Choices::DUALCHOP,
4353            Choice {
4354                move_id: Choices::DUALCHOP,
4355                accuracy: 90.0,
4356                base_power: 40.0,
4357                category: MoveCategory::Physical,
4358                move_type: PokemonType::DRAGON,
4359                flags: Flags {
4360                    contact: true,
4361                    protect: true,
4362                    ..Default::default()
4363                },
4364                ..Default::default()
4365            },
4366        );
4367        moves.insert(
4368            Choices::DUALWINGBEAT,
4369            Choice {
4370                move_id: Choices::DUALWINGBEAT,
4371                accuracy: 90.0,
4372                base_power: 40.0,
4373                category: MoveCategory::Physical,
4374                move_type: PokemonType::FLYING,
4375                flags: Flags {
4376                    contact: true,
4377                    protect: true,
4378                    ..Default::default()
4379                },
4380                ..Default::default()
4381            },
4382        );
4383        moves.insert(
4384            Choices::DYNAMAXCANNON,
4385            Choice {
4386                move_id: Choices::DYNAMAXCANNON,
4387                base_power: 100.0,
4388                category: MoveCategory::Special,
4389                move_type: PokemonType::DRAGON,
4390                flags: Flags {
4391                    protect: true,
4392                    ..Default::default()
4393                },
4394                ..Default::default()
4395            },
4396        );
4397        moves.insert(
4398            Choices::DYNAMICPUNCH,
4399            Choice {
4400                move_id: Choices::DYNAMICPUNCH,
4401                accuracy: 50.0,
4402                base_power: 100.0,
4403                category: MoveCategory::Physical,
4404                move_type: PokemonType::FIGHTING,
4405                flags: Flags {
4406                    contact: true,
4407                    protect: true,
4408                    punch: true,
4409                    ..Default::default()
4410                },
4411                secondaries: Some(vec![Secondary {
4412                    chance: 100.0,
4413                    target: MoveTarget::Opponent,
4414                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
4415                }]),
4416                ..Default::default()
4417            },
4418        );
4419        moves.insert(
4420            Choices::EARTHPOWER,
4421            Choice {
4422                move_id: Choices::EARTHPOWER,
4423                base_power: 90.0,
4424                category: MoveCategory::Special,
4425                move_type: PokemonType::GROUND,
4426                flags: Flags {
4427                    protect: true,
4428                    ..Default::default()
4429                },
4430                secondaries: Some(vec![Secondary {
4431                    chance: 10.0,
4432                    target: MoveTarget::Opponent,
4433                    effect: Effect::Boost(StatBoosts {
4434                        attack: 0,
4435                        defense: 0,
4436                        special_attack: 0,
4437                        special_defense: -1,
4438                        speed: 0,
4439                        accuracy: 0,
4440                    }),
4441                }]),
4442                ..Default::default()
4443            },
4444        );
4445        moves.insert(
4446            Choices::EARTHQUAKE,
4447            Choice {
4448                move_id: Choices::EARTHQUAKE,
4449                base_power: 100.0,
4450                category: MoveCategory::Physical,
4451                move_type: PokemonType::GROUND,
4452                flags: Flags {
4453                    protect: true,
4454                    ..Default::default()
4455                },
4456                ..Default::default()
4457            },
4458        );
4459        moves.insert(
4460            Choices::ECHOEDVOICE,
4461            Choice {
4462                move_id: Choices::ECHOEDVOICE,
4463                base_power: 40.0,
4464                category: MoveCategory::Special,
4465                move_type: PokemonType::NORMAL,
4466                flags: Flags {
4467                    protect: true,
4468                    sound: true,
4469                    ..Default::default()
4470                },
4471                ..Default::default()
4472            },
4473        );
4474        moves.insert(
4475            Choices::EERIEIMPULSE,
4476            Choice {
4477                move_id: Choices::EERIEIMPULSE,
4478                move_type: PokemonType::ELECTRIC,
4479                flags: Flags {
4480                    protect: true,
4481                    reflectable: true,
4482                    ..Default::default()
4483                },
4484                boost: Some(Boost {
4485                    target: MoveTarget::Opponent,
4486                    boosts: StatBoosts {
4487                        attack: 0,
4488                        defense: 0,
4489                        special_attack: -2,
4490                        special_defense: 0,
4491                        speed: 0,
4492                        accuracy: 0,
4493                    },
4494                }),
4495                ..Default::default()
4496            },
4497        );
4498        moves.insert(
4499            Choices::EERIESPELL,
4500            Choice {
4501                move_id: Choices::EERIESPELL,
4502                base_power: 80.0,
4503                category: MoveCategory::Special,
4504                move_type: PokemonType::PSYCHIC,
4505                flags: Flags {
4506                    protect: true,
4507                    sound: true,
4508                    ..Default::default()
4509                },
4510                ..Default::default()
4511            },
4512        );
4513        moves.insert(
4514            Choices::EGGBOMB,
4515            Choice {
4516                move_id: Choices::EGGBOMB,
4517                accuracy: 75.0,
4518                base_power: 100.0,
4519                category: MoveCategory::Physical,
4520                move_type: PokemonType::NORMAL,
4521                flags: Flags {
4522                    bullet: true,
4523                    protect: true,
4524                    ..Default::default()
4525                },
4526                ..Default::default()
4527            },
4528        );
4529        moves.insert(
4530            Choices::ELECTRICTERRAIN,
4531            Choice {
4532                move_id: Choices::ELECTRICTERRAIN,
4533                move_type: PokemonType::ELECTRIC,
4534                flags: Flags {
4535                    ..Default::default()
4536                },
4537                ..Default::default()
4538            },
4539        );
4540        moves.insert(
4541            Choices::ELECTRIFY,
4542            Choice {
4543                move_id: Choices::ELECTRIFY,
4544                move_type: PokemonType::ELECTRIC,
4545                flags: Flags {
4546                    protect: true,
4547                    ..Default::default()
4548                },
4549                volatile_status: Some(VolatileStatus {
4550                    target: MoveTarget::Opponent,
4551                    volatile_status: PokemonVolatileStatus::ELECTRIFY,
4552                }),
4553                ..Default::default()
4554            },
4555        );
4556        moves.insert(
4557            Choices::ELECTROBALL,
4558            Choice {
4559                move_id: Choices::ELECTROBALL,
4560                category: MoveCategory::Special,
4561                move_type: PokemonType::ELECTRIC,
4562                flags: Flags {
4563                    bullet: true,
4564                    protect: true,
4565                    ..Default::default()
4566                },
4567                ..Default::default()
4568            },
4569        );
4570        moves.insert(
4571            Choices::ELECTRODRIFT,
4572            Choice {
4573                move_id: Choices::ELECTRODRIFT,
4574                base_power: 100.0,
4575                category: MoveCategory::Special,
4576                move_type: PokemonType::ELECTRIC,
4577                flags: Flags {
4578                    contact: true,
4579                    protect: true,
4580                    ..Default::default()
4581                },
4582                ..Default::default()
4583            },
4584        );
4585        moves.insert(
4586            Choices::ELECTROSHOT,
4587            Choice {
4588                move_id: Choices::ELECTROSHOT,
4589                base_power: 130.0,
4590                category: MoveCategory::Special,
4591                move_type: PokemonType::ELECTRIC,
4592                flags: Flags {
4593                    charge: true,
4594                    protect: true,
4595                    ..Default::default()
4596                },
4597                ..Default::default()
4598            },
4599        );
4600        moves.insert(
4601            Choices::ELECTROWEB,
4602            Choice {
4603                move_id: Choices::ELECTROWEB,
4604                accuracy: 95.0,
4605                base_power: 55.0,
4606                category: MoveCategory::Special,
4607                move_type: PokemonType::ELECTRIC,
4608                flags: Flags {
4609                    protect: true,
4610                    ..Default::default()
4611                },
4612                secondaries: Some(vec![Secondary {
4613                    chance: 100.0,
4614                    target: MoveTarget::Opponent,
4615                    effect: Effect::Boost(StatBoosts {
4616                        attack: 0,
4617                        defense: 0,
4618                        special_attack: 0,
4619                        special_defense: 0,
4620                        speed: -1,
4621                        accuracy: 0,
4622                    }),
4623                }]),
4624                ..Default::default()
4625            },
4626        );
4627        moves.insert(
4628            Choices::EMBARGO,
4629            Choice {
4630                move_id: Choices::EMBARGO,
4631                move_type: PokemonType::DARK,
4632                flags: Flags {
4633                    protect: true,
4634                    reflectable: true,
4635                    ..Default::default()
4636                },
4637                volatile_status: Some(VolatileStatus {
4638                    target: MoveTarget::Opponent,
4639                    volatile_status: PokemonVolatileStatus::EMBARGO,
4640                }),
4641                ..Default::default()
4642            },
4643        );
4644        moves.insert(
4645            Choices::EMBER,
4646            Choice {
4647                move_id: Choices::EMBER,
4648                base_power: 40.0,
4649                category: MoveCategory::Special,
4650                move_type: PokemonType::FIRE,
4651                flags: Flags {
4652                    protect: true,
4653                    ..Default::default()
4654                },
4655                secondaries: Some(vec![Secondary {
4656                    chance: 10.0,
4657                    target: MoveTarget::Opponent,
4658                    effect: Effect::Status(PokemonStatus::BURN),
4659                }]),
4660                ..Default::default()
4661            },
4662        );
4663        moves.insert(
4664            Choices::ENCORE,
4665            Choice {
4666                move_id: Choices::ENCORE,
4667                move_type: PokemonType::NORMAL,
4668                flags: Flags {
4669                    protect: true,
4670                    reflectable: true,
4671                    ..Default::default()
4672                },
4673                volatile_status: Some(VolatileStatus {
4674                    target: MoveTarget::Opponent,
4675                    volatile_status: PokemonVolatileStatus::ENCORE,
4676                }),
4677                ..Default::default()
4678            },
4679        );
4680        moves.insert(
4681            Choices::ENDEAVOR,
4682            Choice {
4683                move_id: Choices::ENDEAVOR,
4684                category: MoveCategory::Physical,
4685                move_type: PokemonType::NORMAL,
4686                flags: Flags {
4687                    contact: true,
4688                    protect: true,
4689                    ..Default::default()
4690                },
4691                ..Default::default()
4692            },
4693        );
4694        moves.insert(
4695            Choices::ENDURE,
4696            Choice {
4697                move_id: Choices::ENDURE,
4698                priority: 4,
4699                target: MoveTarget::User,
4700                move_type: PokemonType::NORMAL,
4701                flags: Flags {
4702                    ..Default::default()
4703                },
4704                volatile_status: Some(VolatileStatus {
4705                    target: MoveTarget::User,
4706                    volatile_status: PokemonVolatileStatus::ENDURE,
4707                }),
4708                ..Default::default()
4709            },
4710        );
4711        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
4712            moves.insert(
4713                Choices::ENERGYBALL,
4714                Choice {
4715                    move_id: Choices::ENERGYBALL,
4716                    base_power: 80.0,
4717                    category: MoveCategory::Special,
4718                    move_type: PokemonType::GRASS,
4719                    flags: Flags {
4720                        bullet: true,
4721                            protect: true,
4722                        ..Default::default()
4723                    },
4724                    secondaries: Some(vec![Secondary {
4725                        chance: 10.0,
4726                        target: MoveTarget::Opponent,
4727                        effect: Effect::Boost(StatBoosts {
4728                            attack: 0,
4729                            defense: 0,
4730                            special_attack: 0,
4731                            special_defense: -1,
4732                            speed: 0,
4733                            accuracy: 0,
4734                        }),
4735                    }]),
4736                    ..Default::default()
4737                },
4738            );
4739        } else {
4740            moves.insert(
4741                Choices::ENERGYBALL,
4742                Choice {
4743                    move_id: Choices::ENERGYBALL,
4744                    base_power: 90.0,
4745                    category: MoveCategory::Special,
4746                    move_type: PokemonType::GRASS,
4747                    flags: Flags {
4748                        bullet: true,
4749                            protect: true,
4750                        ..Default::default()
4751                    },
4752                    secondaries: Some(vec![Secondary {
4753                        chance: 10.0,
4754                        target: MoveTarget::Opponent,
4755                        effect: Effect::Boost(StatBoosts {
4756                            attack: 0,
4757                            defense: 0,
4758                            special_attack: 0,
4759                            special_defense: -1,
4760                            speed: 0,
4761                            accuracy: 0,
4762                        }),
4763                    }]),
4764                    ..Default::default()
4765                },
4766            );
4767        }
4768        moves.insert(
4769            Choices::ENTRAINMENT,
4770            Choice {
4771                move_id: Choices::ENTRAINMENT,
4772                move_type: PokemonType::NORMAL,
4773                flags: Flags {
4774                    protect: true,
4775                    reflectable: true,
4776                    ..Default::default()
4777                },
4778                ..Default::default()
4779            },
4780        );
4781        moves.insert(
4782            Choices::ERUPTION,
4783            Choice {
4784                move_id: Choices::ERUPTION,
4785                base_power: 150.0,
4786                category: MoveCategory::Special,
4787                move_type: PokemonType::FIRE,
4788                flags: Flags {
4789                    protect: true,
4790                    ..Default::default()
4791                },
4792                ..Default::default()
4793            },
4794        );
4795        moves.insert(
4796            Choices::ESPERWING,
4797            Choice {
4798                move_id: Choices::ESPERWING,
4799                base_power: 80.0,
4800                category: MoveCategory::Special,
4801                move_type: PokemonType::PSYCHIC,
4802                flags: Flags {
4803                    protect: true,
4804                    ..Default::default()
4805                },
4806                secondaries: Some(vec![Secondary {
4807                    chance: 100.0,
4808                    target: MoveTarget::User,
4809                    effect: Effect::Boost(StatBoosts {
4810                        attack: 0,
4811                        defense: 0,
4812                        special_attack: 0,
4813                        special_defense: 0,
4814                        speed: 1,
4815                        accuracy: 0,
4816                    }),
4817                }]),
4818                ..Default::default()
4819            },
4820        );
4821        moves.insert(
4822            Choices::ETERNABEAM,
4823            Choice {
4824                move_id: Choices::ETERNABEAM,
4825                accuracy: 90.0,
4826                base_power: 160.0,
4827                category: MoveCategory::Special,
4828                move_type: PokemonType::DRAGON,
4829                flags: Flags {
4830                    protect: true,
4831                    recharge: true,
4832                    ..Default::default()
4833                },
4834                ..Default::default()
4835            },
4836        );
4837        moves.insert(
4838            Choices::EXPANDINGFORCE,
4839            Choice {
4840                move_id: Choices::EXPANDINGFORCE,
4841                base_power: 80.0,
4842                category: MoveCategory::Special,
4843                move_type: PokemonType::PSYCHIC,
4844                flags: Flags {
4845                    protect: true,
4846                    ..Default::default()
4847                },
4848                ..Default::default()
4849            },
4850        );
4851        if cfg!(feature = "gen1") {
4852            moves.insert(
4853                Choices::EXPLOSION,
4854                Choice {
4855                    move_id: Choices::EXPLOSION,
4856                    base_power: 170.0,
4857                    category: MoveCategory::Physical,
4858                    move_type: PokemonType::NORMAL,
4859                    flags: Flags {
4860                        protect: true,
4861                        ..Default::default()
4862                    },
4863                    ..Default::default()
4864                },
4865            );
4866        } else {
4867            moves.insert(
4868                Choices::EXPLOSION,
4869                Choice {
4870                    move_id: Choices::EXPLOSION,
4871                    base_power: 250.0,
4872                    category: MoveCategory::Physical,
4873                    move_type: PokemonType::NORMAL,
4874                    flags: Flags {
4875                        protect: true,
4876                        ..Default::default()
4877                    },
4878                    ..Default::default()
4879                },
4880            );
4881        }
4882        moves.insert(
4883            Choices::EXTRASENSORY,
4884            Choice {
4885                move_id: Choices::EXTRASENSORY,
4886                base_power: 80.0,
4887                category: MoveCategory::Special,
4888                move_type: PokemonType::PSYCHIC,
4889                flags: Flags {
4890                    protect: true,
4891                    ..Default::default()
4892                },
4893                secondaries: Some(vec![Secondary {
4894                    chance: 10.0,
4895                    target: MoveTarget::Opponent,
4896                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
4897                }]),
4898                ..Default::default()
4899            },
4900        );
4901        moves.insert(
4902            Choices::EXTREMESPEED,
4903            Choice {
4904                move_id: Choices::EXTREMESPEED,
4905                base_power: 80.0,
4906                category: MoveCategory::Physical,
4907                priority: 2,
4908                move_type: PokemonType::NORMAL,
4909                flags: Flags {
4910                    contact: true,
4911                    protect: true,
4912                    ..Default::default()
4913                },
4914                ..Default::default()
4915            },
4916        );
4917        moves.insert(
4918            Choices::FACADE,
4919            Choice {
4920                move_id: Choices::FACADE,
4921                base_power: 70.0,
4922                category: MoveCategory::Physical,
4923                move_type: PokemonType::NORMAL,
4924                flags: Flags {
4925                    contact: true,
4926                    protect: true,
4927                    ..Default::default()
4928                },
4929                ..Default::default()
4930            },
4931        );
4932        moves.insert(
4933            Choices::FAIRYLOCK,
4934            Choice {
4935                move_id: Choices::FAIRYLOCK,
4936                move_type: PokemonType::FAIRY,
4937                flags: Flags {
4938                    ..Default::default()
4939                },
4940                ..Default::default()
4941            },
4942        );
4943        moves.insert(
4944            Choices::FAIRYWIND,
4945            Choice {
4946                move_id: Choices::FAIRYWIND,
4947                base_power: 40.0,
4948                category: MoveCategory::Special,
4949                move_type: PokemonType::FAIRY,
4950                flags: Flags {
4951                    protect: true,
4952                    wind: true,
4953                    ..Default::default()
4954                },
4955                ..Default::default()
4956            },
4957        );
4958        moves.insert(
4959            Choices::FAKEOUT,
4960            Choice {
4961                move_id: Choices::FAKEOUT,
4962                base_power: 40.0,
4963                category: MoveCategory::Physical,
4964                priority: 3,
4965                move_type: PokemonType::NORMAL,
4966                flags: Flags {
4967                    contact: true,
4968                    protect: true,
4969                    ..Default::default()
4970                },
4971                secondaries: Some(vec![Secondary {
4972                    chance: 100.0,
4973                    target: MoveTarget::Opponent,
4974                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
4975                }]),
4976                ..Default::default()
4977            },
4978        );
4979        moves.insert(
4980            Choices::FAKETEARS,
4981            Choice {
4982                move_id: Choices::FAKETEARS,
4983                move_type: PokemonType::DARK,
4984                flags: Flags {
4985                    protect: true,
4986                    reflectable: true,
4987                    ..Default::default()
4988                },
4989                boost: Some(Boost {
4990                    target: MoveTarget::Opponent,
4991                    boosts: StatBoosts {
4992                        attack: 0,
4993                        defense: 0,
4994                        special_attack: 0,
4995                        special_defense: -2,
4996                        speed: 0,
4997                        accuracy: 0,
4998                    },
4999                }),
5000                ..Default::default()
5001            },
5002        );
5003        moves.insert(
5004            Choices::FALSESURRENDER,
5005            Choice {
5006                move_id: Choices::FALSESURRENDER,
5007                base_power: 80.0,
5008                category: MoveCategory::Physical,
5009                move_type: PokemonType::DARK,
5010                flags: Flags {
5011                    contact: true,
5012                    protect: true,
5013                    ..Default::default()
5014                },
5015                ..Default::default()
5016            },
5017        );
5018        moves.insert(
5019            Choices::FALSESWIPE,
5020            Choice {
5021                move_id: Choices::FALSESWIPE,
5022                base_power: 40.0,
5023                category: MoveCategory::Physical,
5024                move_type: PokemonType::NORMAL,
5025                flags: Flags {
5026                    contact: true,
5027                    protect: true,
5028                    ..Default::default()
5029                },
5030                ..Default::default()
5031            },
5032        );
5033        moves.insert(
5034            Choices::FEATHERDANCE,
5035            Choice {
5036                move_id: Choices::FEATHERDANCE,
5037                move_type: PokemonType::FLYING,
5038                flags: Flags {
5039                    protect: true,
5040                    reflectable: true,
5041                    ..Default::default()
5042                },
5043                boost: Some(Boost {
5044                    target: MoveTarget::Opponent,
5045                    boosts: StatBoosts {
5046                        attack: -2,
5047                        defense: 0,
5048                        special_attack: 0,
5049                        special_defense: 0,
5050                        speed: 0,
5051                        accuracy: 0,
5052                    },
5053                }),
5054                ..Default::default()
5055            },
5056        );
5057        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
5058            moves.insert(
5059                Choices::FEINT,
5060                Choice {
5061                    move_id: Choices::FEINT,
5062                    base_power: 50.0,
5063                    category: MoveCategory::Physical,
5064                    priority: 2,
5065                    move_type: PokemonType::NORMAL,
5066                    flags: Flags {
5067                            ..Default::default()
5068                    },
5069                    ..Default::default()
5070                },
5071            );
5072        } else {
5073            moves.insert(
5074                Choices::FEINT,
5075                Choice {
5076                    move_id: Choices::FEINT,
5077                    base_power: 30.0,
5078                    category: MoveCategory::Physical,
5079                    priority: 2,
5080                    move_type: PokemonType::NORMAL,
5081                    flags: Flags {
5082                            ..Default::default()
5083                    },
5084                    ..Default::default()
5085                },
5086            );
5087        }
5088        moves.insert(
5089            Choices::FEINTATTACK,
5090            Choice {
5091                move_id: Choices::FEINTATTACK,
5092                base_power: 60.0,
5093                category: MoveCategory::Physical,
5094                move_type: PokemonType::DARK,
5095                flags: Flags {
5096                    contact: true,
5097                    protect: true,
5098                    ..Default::default()
5099                },
5100                ..Default::default()
5101            },
5102        );
5103        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
5104            moves.insert(
5105                Choices::FELLSTINGER,
5106                Choice {
5107                    move_id: Choices::FELLSTINGER,
5108                    base_power: 30.0,
5109                    category: MoveCategory::Physical,
5110                    move_type: PokemonType::BUG,
5111                    flags: Flags {
5112                        contact: true,
5113                            protect: true,
5114                        ..Default::default()
5115                    },
5116                    ..Default::default()
5117                },
5118            );
5119        } else {
5120            moves.insert(
5121                Choices::FELLSTINGER,
5122                Choice {
5123                    move_id: Choices::FELLSTINGER,
5124                    base_power: 50.0,
5125                    category: MoveCategory::Physical,
5126                    move_type: PokemonType::BUG,
5127                    flags: Flags {
5128                        contact: true,
5129                            protect: true,
5130                        ..Default::default()
5131                    },
5132                    ..Default::default()
5133                },
5134            );
5135        }
5136        moves.insert(
5137            Choices::FICKLEBEAM,
5138            Choice {
5139                move_id: Choices::FICKLEBEAM,
5140                base_power: 80.0,
5141                category: MoveCategory::Special,
5142                move_type: PokemonType::DRAGON,
5143                flags: Flags {
5144                    protect: true,
5145                    ..Default::default()
5146                },
5147                secondaries: Some(vec![Secondary {
5148                    chance: 50.0,
5149                    target: MoveTarget::User,
5150                    effect: Effect::Boost(StatBoosts {
5151                        attack: 0,
5152                        defense: 0,
5153                        special_attack: 1,
5154                        special_defense: 0,
5155                        speed: 0,
5156                        accuracy: 0,
5157                    }),
5158                }]),
5159                ..Default::default()
5160            },
5161        );
5162        moves.insert(
5163            Choices::FIERYDANCE,
5164            Choice {
5165                move_id: Choices::FIERYDANCE,
5166                base_power: 80.0,
5167                category: MoveCategory::Special,
5168                move_type: PokemonType::FIRE,
5169                flags: Flags {
5170                    protect: true,
5171                    ..Default::default()
5172                },
5173                secondaries: Some(vec![Secondary {
5174                    chance: 50.0,
5175                    target: MoveTarget::User,
5176                    effect: Effect::Boost(StatBoosts {
5177                        attack: 0,
5178                        defense: 0,
5179                        special_attack: 1,
5180                        special_defense: 0,
5181                        speed: 0,
5182                        accuracy: 0,
5183                    }),
5184                }]),
5185                ..Default::default()
5186            },
5187        );
5188        moves.insert(
5189            Choices::FIERYWRATH,
5190            Choice {
5191                move_id: Choices::FIERYWRATH,
5192                base_power: 90.0,
5193                category: MoveCategory::Special,
5194                move_type: PokemonType::DARK,
5195                flags: Flags {
5196                    protect: true,
5197                    ..Default::default()
5198                },
5199                secondaries: Some(vec![Secondary {
5200                    chance: 20.0,
5201                    target: MoveTarget::Opponent,
5202                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
5203                }]),
5204                ..Default::default()
5205            },
5206        );
5207        moves.insert(
5208            Choices::FILLETAWAY,
5209            Choice {
5210                move_id: Choices::FILLETAWAY,
5211                target: MoveTarget::User,
5212                move_type: PokemonType::NORMAL,
5213                flags: Flags {
5214                    ..Default::default()
5215                },
5216                ..Default::default()
5217            },
5218        );
5219        moves.insert(
5220            Choices::FINALGAMBIT,
5221            Choice {
5222                move_id: Choices::FINALGAMBIT,
5223                category: MoveCategory::Special,
5224                move_type: PokemonType::FIGHTING,
5225                flags: Flags {
5226                    protect: true,
5227                    ..Default::default()
5228                },
5229                ..Default::default()
5230            },
5231        );
5232        if cfg!(feature = "gen1") {
5233            moves.insert(
5234                Choices::FIREBLAST,
5235                Choice {
5236                    move_id: Choices::FIREBLAST,
5237                    accuracy: 85.0,
5238                    base_power: 120.0,
5239                    category: MoveCategory::Special,
5240                    move_type: PokemonType::FIRE,
5241                    flags: Flags {
5242                            protect: true,
5243                        ..Default::default()
5244                    },
5245                    secondaries: Some(vec![Secondary {
5246                        chance: 30.0,
5247                        target: MoveTarget::Opponent,
5248                        effect: Effect::Status(PokemonStatus::BURN),
5249                    }]),
5250                    ..Default::default()
5251                },
5252            );
5253        }
5254        else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
5255            moves.insert(
5256                Choices::FIREBLAST,
5257                Choice {
5258                    move_id: Choices::FIREBLAST,
5259                    accuracy: 85.0,
5260                    base_power: 120.0,
5261                    category: MoveCategory::Special,
5262                    move_type: PokemonType::FIRE,
5263                    flags: Flags {
5264                            protect: true,
5265                        ..Default::default()
5266                    },
5267                    secondaries: Some(vec![Secondary {
5268                        chance: 10.0,
5269                        target: MoveTarget::Opponent,
5270                        effect: Effect::Status(PokemonStatus::BURN),
5271                    }]),
5272                    ..Default::default()
5273                },
5274            );
5275        } else {
5276            moves.insert(
5277                Choices::FIREBLAST,
5278                Choice {
5279                    move_id: Choices::FIREBLAST,
5280                    accuracy: 85.0,
5281                    base_power: 110.0,
5282                    category: MoveCategory::Special,
5283                    move_type: PokemonType::FIRE,
5284                    flags: Flags {
5285                            protect: true,
5286                        ..Default::default()
5287                    },
5288                    secondaries: Some(vec![Secondary {
5289                        chance: 10.0,
5290                        target: MoveTarget::Opponent,
5291                        effect: Effect::Status(PokemonStatus::BURN),
5292                    }]),
5293                    ..Default::default()
5294                },
5295            );
5296        }
5297        moves.insert(
5298            Choices::FIREFANG,
5299            Choice {
5300                move_id: Choices::FIREFANG,
5301                accuracy: 95.0,
5302                base_power: 65.0,
5303                category: MoveCategory::Physical,
5304                move_type: PokemonType::FIRE,
5305                flags: Flags {
5306                    bite: true,
5307                    contact: true,
5308                    protect: true,
5309                    ..Default::default()
5310                },
5311                secondaries: Some(vec![
5312                    Secondary {
5313                        chance: 10.0,
5314                        target: MoveTarget::Opponent,
5315                        effect: Effect::Status(PokemonStatus::BURN),
5316                    },
5317                    Secondary {
5318                        chance: 10.0,
5319                        target: MoveTarget::Opponent,
5320                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
5321                    },
5322                ]),
5323                ..Default::default()
5324            },
5325        );
5326        moves.insert(
5327            Choices::FIRELASH,
5328            Choice {
5329                move_id: Choices::FIRELASH,
5330                base_power: 80.0,
5331                category: MoveCategory::Physical,
5332                move_type: PokemonType::FIRE,
5333                flags: Flags {
5334                    contact: true,
5335                    protect: true,
5336                    ..Default::default()
5337                },
5338                secondaries: Some(vec![Secondary {
5339                    chance: 100.0,
5340                    target: MoveTarget::Opponent,
5341                    effect: Effect::Boost(StatBoosts {
5342                        attack: 0,
5343                        defense: -1,
5344                        special_attack: 0,
5345                        special_defense: 0,
5346                        speed: 0,
5347                        accuracy: 0,
5348                    }),
5349                }]),
5350                ..Default::default()
5351            },
5352        );
5353        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
5354            moves.insert(
5355                Choices::FIREPLEDGE,
5356                Choice {
5357                    move_id: Choices::FIREPLEDGE,
5358                    base_power: 50.0,
5359                    category: MoveCategory::Special,
5360                    move_type: PokemonType::FIRE,
5361                    flags: Flags {
5362                                protect: true,
5363                        ..Default::default()
5364                    },
5365                    ..Default::default()
5366                },
5367            );
5368        } else {
5369            moves.insert(
5370                Choices::FIREPLEDGE,
5371                Choice {
5372                    move_id: Choices::FIREPLEDGE,
5373                    base_power: 80.0,
5374                    category: MoveCategory::Special,
5375                    move_type: PokemonType::FIRE,
5376                    flags: Flags {
5377                                protect: true,
5378                        ..Default::default()
5379                    },
5380                    ..Default::default()
5381                },
5382            );
5383        }
5384        moves.insert(
5385            Choices::FIREPUNCH,
5386            Choice {
5387                move_id: Choices::FIREPUNCH,
5388                base_power: 75.0,
5389                category: MoveCategory::Physical,
5390                move_type: PokemonType::FIRE,
5391                flags: Flags {
5392                    contact: true,
5393                    protect: true,
5394                    punch: true,
5395                    ..Default::default()
5396                },
5397                secondaries: Some(vec![Secondary {
5398                    chance: 10.0,
5399                    target: MoveTarget::Opponent,
5400                    effect: Effect::Status(PokemonStatus::BURN),
5401                }]),
5402                ..Default::default()
5403            },
5404        );
5405        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
5406            moves.insert(
5407                Choices::FIRESPIN,
5408                Choice {
5409                    move_id: Choices::FIRESPIN,
5410                    accuracy: 70.0,
5411                    base_power: 15.0,
5412                    category: MoveCategory::Special,
5413                    move_type: PokemonType::FIRE,
5414                    flags: Flags {
5415                            protect: true,
5416                        ..Default::default()
5417                    },
5418                    volatile_status: Some(VolatileStatus {
5419                        target: MoveTarget::Opponent,
5420                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
5421                    }),
5422                    ..Default::default()
5423                },
5424            );
5425        } else {
5426            moves.insert(
5427                Choices::FIRESPIN,
5428                Choice {
5429                    move_id: Choices::FIRESPIN,
5430                    accuracy: 85.0,
5431                    base_power: 35.0,
5432                    category: MoveCategory::Special,
5433                    move_type: PokemonType::FIRE,
5434                    flags: Flags {
5435                            protect: true,
5436                        ..Default::default()
5437                    },
5438                    volatile_status: Some(VolatileStatus {
5439                        target: MoveTarget::Opponent,
5440                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
5441                    }),
5442                    ..Default::default()
5443                },
5444            );
5445        }
5446        moves.insert(
5447            Choices::FIRSTIMPRESSION,
5448            Choice {
5449                move_id: Choices::FIRSTIMPRESSION,
5450                base_power: 90.0,
5451                category: MoveCategory::Physical,
5452                priority: 2,
5453                move_type: PokemonType::BUG,
5454                flags: Flags {
5455                    contact: true,
5456                    protect: true,
5457                    ..Default::default()
5458                },
5459                ..Default::default()
5460            },
5461        );
5462        moves.insert(
5463            Choices::FISHIOUSREND,
5464            Choice {
5465                move_id: Choices::FISHIOUSREND,
5466                base_power: 85.0,
5467                category: MoveCategory::Physical,
5468                move_type: PokemonType::WATER,
5469                flags: Flags {
5470                    bite: true,
5471                    contact: true,
5472                    protect: true,
5473                    ..Default::default()
5474                },
5475                ..Default::default()
5476            },
5477        );
5478        moves.insert(
5479            Choices::FISSURE,
5480            Choice {
5481                move_id: Choices::FISSURE,
5482                accuracy: 30.0,
5483                category: MoveCategory::Physical,
5484                move_type: PokemonType::GROUND,
5485                flags: Flags {
5486                    protect: true,
5487                    ..Default::default()
5488                },
5489                ..Default::default()
5490            },
5491        );
5492        moves.insert(
5493            Choices::FLAIL,
5494            Choice {
5495                move_id: Choices::FLAIL,
5496                category: MoveCategory::Physical,
5497                move_type: PokemonType::NORMAL,
5498                flags: Flags {
5499                    contact: true,
5500                    protect: true,
5501                    ..Default::default()
5502                },
5503                ..Default::default()
5504            },
5505        );
5506        moves.insert(
5507            Choices::FLAMEBURST,
5508            Choice {
5509                move_id: Choices::FLAMEBURST,
5510                base_power: 70.0,
5511                category: MoveCategory::Special,
5512                move_type: PokemonType::FIRE,
5513                flags: Flags {
5514                    protect: true,
5515                    ..Default::default()
5516                },
5517                ..Default::default()
5518            },
5519        );
5520        moves.insert(
5521            Choices::FLAMECHARGE,
5522            Choice {
5523                move_id: Choices::FLAMECHARGE,
5524                base_power: 50.0,
5525                category: MoveCategory::Physical,
5526                move_type: PokemonType::FIRE,
5527                flags: Flags {
5528                    contact: true,
5529                    protect: true,
5530                    ..Default::default()
5531                },
5532                secondaries: Some(vec![Secondary {
5533                    chance: 100.0,
5534                    target: MoveTarget::User,
5535                    effect: Effect::Boost(StatBoosts {
5536                        attack: 0,
5537                        defense: 0,
5538                        special_attack: 0,
5539                        special_defense: 0,
5540                        speed: 1,
5541                        accuracy: 0,
5542                    }),
5543                }]),
5544                ..Default::default()
5545            },
5546        );
5547        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
5548            moves.insert(
5549                Choices::FLAMETHROWER,
5550                Choice {
5551                    move_id: Choices::FLAMETHROWER,
5552                    base_power: 95.0,
5553                    category: MoveCategory::Special,
5554                    move_type: PokemonType::FIRE,
5555                    flags: Flags {
5556                        protect: true,
5557                        ..Default::default()
5558                    },
5559                    secondaries: Some(vec![Secondary {
5560                        chance: 10.0,
5561                        target: MoveTarget::Opponent,
5562                        effect: Effect::Status(PokemonStatus::BURN),
5563                    }]),
5564                    ..Default::default()
5565                },
5566            );
5567        } else {
5568            moves.insert(
5569                Choices::FLAMETHROWER,
5570                Choice {
5571                    move_id: Choices::FLAMETHROWER,
5572                    base_power: 90.0,
5573                    category: MoveCategory::Special,
5574                    move_type: PokemonType::FIRE,
5575                    flags: Flags {
5576                        protect: true,
5577                        ..Default::default()
5578                    },
5579                    secondaries: Some(vec![Secondary {
5580                        chance: 10.0,
5581                        target: MoveTarget::Opponent,
5582                        effect: Effect::Status(PokemonStatus::BURN),
5583                    }]),
5584                    ..Default::default()
5585                },
5586            );
5587        }
5588        moves.insert(
5589            Choices::FLAMEWHEEL,
5590            Choice {
5591                move_id: Choices::FLAMEWHEEL,
5592                base_power: 60.0,
5593                category: MoveCategory::Physical,
5594                move_type: PokemonType::FIRE,
5595                flags: Flags {
5596                    contact: true,
5597                    protect: true,
5598                    ..Default::default()
5599                },
5600                secondaries: Some(vec![Secondary {
5601                    chance: 10.0,
5602                    target: MoveTarget::Opponent,
5603                    effect: Effect::Status(PokemonStatus::BURN),
5604                }]),
5605                ..Default::default()
5606            },
5607        );
5608        moves.insert(
5609            Choices::FLAREBLITZ,
5610            Choice {
5611                move_id: Choices::FLAREBLITZ,
5612                base_power: 120.0,
5613                category: MoveCategory::Physical,
5614                move_type: PokemonType::FIRE,
5615                flags: Flags {
5616                    contact: true,
5617                    protect: true,
5618                    ..Default::default()
5619                },
5620                secondaries: Some(vec![Secondary {
5621                    chance: 10.0,
5622                    target: MoveTarget::Opponent,
5623                    effect: Effect::Status(PokemonStatus::BURN),
5624                }]),
5625                recoil: Some(0.33),
5626                ..Default::default()
5627            },
5628        );
5629        moves.insert(
5630            Choices::FLASH,
5631            Choice {
5632                move_id: Choices::FLASH,
5633                move_type: PokemonType::NORMAL,
5634                flags: Flags {
5635                    protect: true,
5636                    reflectable: true,
5637                    ..Default::default()
5638                },
5639                boost: Some(Boost {
5640                    target: MoveTarget::Opponent,
5641                    boosts: StatBoosts {
5642                        attack: 0,
5643                        defense: 0,
5644                        special_attack: 0,
5645                        special_defense: 0,
5646                        speed: 0,
5647                        accuracy: -1,
5648                    },
5649                }),
5650                ..Default::default()
5651            },
5652        );
5653        moves.insert(
5654            Choices::FLASHCANNON,
5655            Choice {
5656                move_id: Choices::FLASHCANNON,
5657                base_power: 80.0,
5658                category: MoveCategory::Special,
5659                move_type: PokemonType::STEEL,
5660                flags: Flags {
5661                    protect: true,
5662                    ..Default::default()
5663                },
5664                secondaries: Some(vec![Secondary {
5665                    chance: 10.0,
5666                    target: MoveTarget::Opponent,
5667                    effect: Effect::Boost(StatBoosts {
5668                        attack: 0,
5669                        defense: 0,
5670                        special_attack: 0,
5671                        special_defense: -1,
5672                        speed: 0,
5673                        accuracy: 0,
5674                    }),
5675                }]),
5676                ..Default::default()
5677            },
5678        );
5679        moves.insert(
5680            Choices::FLATTER,
5681            Choice {
5682                move_id: Choices::FLATTER,
5683                move_type: PokemonType::DARK,
5684                flags: Flags {
5685                    protect: true,
5686                    reflectable: true,
5687                    ..Default::default()
5688                },
5689                boost: Some(Boost {
5690                    target: MoveTarget::Opponent,
5691                    boosts: StatBoosts {
5692                        attack: 0,
5693                        defense: 0,
5694                        special_attack: 1,
5695                        special_defense: 0,
5696                        speed: 0,
5697                        accuracy: 0,
5698                    },
5699                }),
5700                volatile_status: Some(VolatileStatus {
5701                    target: MoveTarget::Opponent,
5702                    volatile_status: PokemonVolatileStatus::CONFUSION,
5703                }),
5704                ..Default::default()
5705            },
5706        );
5707        moves.insert(
5708            Choices::FLEURCANNON,
5709            Choice {
5710                move_id: Choices::FLEURCANNON,
5711                accuracy: 90.0,
5712                base_power: 130.0,
5713                category: MoveCategory::Special,
5714                move_type: PokemonType::FAIRY,
5715                flags: Flags {
5716                    protect: true,
5717                    ..Default::default()
5718                },
5719                boost: Some(Boost {
5720                    target: MoveTarget::User,
5721                    boosts: StatBoosts {
5722                        attack: 0,
5723                        defense: 0,
5724                        special_attack: -2,
5725                        special_defense: 0,
5726                        speed: 0,
5727                        accuracy: 0,
5728                    },
5729                }),
5730                ..Default::default()
5731            },
5732        );
5733        moves.insert(
5734            Choices::FLING,
5735            Choice {
5736                move_id: Choices::FLING,
5737                category: MoveCategory::Physical,
5738                move_type: PokemonType::DARK,
5739                flags: Flags {
5740                    protect: true,
5741                    ..Default::default()
5742                },
5743                ..Default::default()
5744            },
5745        );
5746        moves.insert(
5747            Choices::FLIPTURN,
5748            Choice {
5749                move_id: Choices::FLIPTURN,
5750                base_power: 60.0,
5751                category: MoveCategory::Physical,
5752                move_type: PokemonType::WATER,
5753                flags: Flags {
5754                    contact: true,
5755                    protect: true,
5756                    pivot: true,
5757                    ..Default::default()
5758                },
5759                ..Default::default()
5760            },
5761        );
5762        moves.insert(
5763            Choices::FLOATYFALL,
5764            Choice {
5765                move_id: Choices::FLOATYFALL,
5766                accuracy: 95.0,
5767                base_power: 90.0,
5768                category: MoveCategory::Physical,
5769                move_type: PokemonType::FLYING,
5770                flags: Flags {
5771                    contact: true,
5772                    protect: true,
5773                    ..Default::default()
5774                },
5775                secondaries: Some(vec![Secondary {
5776                    chance: 30.0,
5777                    target: MoveTarget::Opponent,
5778                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
5779                }]),
5780                ..Default::default()
5781            },
5782        );
5783        moves.insert(
5784            Choices::FLORALHEALING,
5785            Choice {
5786                move_id: Choices::FLORALHEALING,
5787                move_type: PokemonType::FAIRY,
5788                flags: Flags {
5789                    heal: true,
5790                    protect: true,
5791                    reflectable: true,
5792                    ..Default::default()
5793                },
5794                ..Default::default()
5795            },
5796        );
5797        moves.insert(
5798            Choices::FLOWERSHIELD,
5799            Choice {
5800                move_id: Choices::FLOWERSHIELD,
5801                move_type: PokemonType::FAIRY,
5802                flags: Flags {
5803                    ..Default::default()
5804                },
5805                ..Default::default()
5806            },
5807        );
5808        moves.insert(
5809            Choices::FLOWERTRICK,
5810            Choice {
5811                move_id: Choices::FLOWERTRICK,
5812                base_power: 70.0,
5813                category: MoveCategory::Physical,
5814                move_type: PokemonType::GRASS,
5815                flags: Flags {
5816                    protect: true,
5817                    ..Default::default()
5818                },
5819                ..Default::default()
5820            },
5821        );
5822        moves.insert(
5823            Choices::FLY,
5824            Choice {
5825                move_id: Choices::FLY,
5826                accuracy: 95.0,
5827                base_power: 90.0,
5828                category: MoveCategory::Physical,
5829                move_type: PokemonType::FLYING,
5830                flags: Flags {
5831                    charge: true,
5832                    contact: true,
5833                    protect: true,
5834                    ..Default::default()
5835                },
5836                ..Default::default()
5837            },
5838        );
5839        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
5840            moves.insert(
5841                Choices::FLYINGPRESS,
5842                Choice {
5843                    move_id: Choices::FLYINGPRESS,
5844                    accuracy: 95.0,
5845                    base_power: 80.0,
5846                    category: MoveCategory::Physical,
5847                    move_type: PokemonType::FIGHTING,
5848                    flags: Flags {
5849                        contact: true,
5850                                        protect: true,
5851                        ..Default::default()
5852                    },
5853                    ..Default::default()
5854                },
5855            );
5856        } else {
5857            moves.insert(
5858                Choices::FLYINGPRESS,
5859                Choice {
5860                    move_id: Choices::FLYINGPRESS,
5861                    accuracy: 95.0,
5862                    base_power: 100.0,
5863                    category: MoveCategory::Physical,
5864                    move_type: PokemonType::FIGHTING,
5865                    flags: Flags {
5866                        contact: true,
5867                                        protect: true,
5868                        ..Default::default()
5869                    },
5870                    ..Default::default()
5871                },
5872            );
5873        }
5874        moves.insert(
5875            Choices::FOCUSBLAST,
5876            Choice {
5877                move_id: Choices::FOCUSBLAST,
5878                accuracy: 70.0,
5879                base_power: 120.0,
5880                category: MoveCategory::Special,
5881                move_type: PokemonType::FIGHTING,
5882                flags: Flags {
5883                    bullet: true,
5884                    protect: true,
5885                    ..Default::default()
5886                },
5887                secondaries: Some(vec![Secondary {
5888                    chance: 10.0,
5889                    target: MoveTarget::Opponent,
5890                    effect: Effect::Boost(StatBoosts {
5891                        attack: 0,
5892                        defense: 0,
5893                        special_attack: 0,
5894                        special_defense: -1,
5895                        speed: 0,
5896                        accuracy: 0,
5897                    }),
5898                }]),
5899                ..Default::default()
5900            },
5901        );
5902        moves.insert(
5903            Choices::FOCUSENERGY,
5904            Choice {
5905                move_id: Choices::FOCUSENERGY,
5906                target: MoveTarget::User,
5907                move_type: PokemonType::NORMAL,
5908                flags: Flags {
5909                    ..Default::default()
5910                },
5911                volatile_status: Some(VolatileStatus {
5912                    target: MoveTarget::User,
5913                    volatile_status: PokemonVolatileStatus::FOCUSENERGY,
5914                }),
5915                ..Default::default()
5916            },
5917        );
5918        moves.insert(
5919            Choices::FOCUSPUNCH,
5920            Choice {
5921                move_id: Choices::FOCUSPUNCH,
5922                base_power: 150.0,
5923                category: MoveCategory::Physical,
5924                priority: -3,
5925                move_type: PokemonType::FIGHTING,
5926                flags: Flags {
5927                    contact: true,
5928                    protect: true,
5929                    punch: true,
5930                    ..Default::default()
5931                },
5932                ..Default::default()
5933            },
5934        );
5935        moves.insert(
5936            Choices::FOLLOWME,
5937            Choice {
5938                move_id: Choices::FOLLOWME,
5939                priority: 2,
5940                target: MoveTarget::User,
5941                move_type: PokemonType::NORMAL,
5942                flags: Flags {
5943                    ..Default::default()
5944                },
5945                volatile_status: Some(VolatileStatus {
5946                    target: MoveTarget::User,
5947                    volatile_status: PokemonVolatileStatus::FOLLOWME,
5948                }),
5949                ..Default::default()
5950            },
5951        );
5952        moves.insert(
5953            Choices::FORCEPALM,
5954            Choice {
5955                move_id: Choices::FORCEPALM,
5956                base_power: 60.0,
5957                category: MoveCategory::Physical,
5958                move_type: PokemonType::FIGHTING,
5959                flags: Flags {
5960                    contact: true,
5961                    protect: true,
5962                    ..Default::default()
5963                },
5964                secondaries: Some(vec![Secondary {
5965                    chance: 30.0,
5966                    target: MoveTarget::Opponent,
5967                    effect: Effect::Status(PokemonStatus::PARALYZE),
5968                }]),
5969                ..Default::default()
5970            },
5971        );
5972        moves.insert(
5973            Choices::FORESIGHT,
5974            Choice {
5975                move_id: Choices::FORESIGHT,
5976                move_type: PokemonType::NORMAL,
5977                flags: Flags {
5978                    protect: true,
5979                    reflectable: true,
5980                    ..Default::default()
5981                },
5982                volatile_status: Some(VolatileStatus {
5983                    target: MoveTarget::Opponent,
5984                    volatile_status: PokemonVolatileStatus::FORESIGHT,
5985                }),
5986                ..Default::default()
5987            },
5988        );
5989        moves.insert(
5990            Choices::FORESTSCURSE,
5991            Choice {
5992                move_id: Choices::FORESTSCURSE,
5993                move_type: PokemonType::GRASS,
5994                flags: Flags {
5995                    protect: true,
5996                    reflectable: true,
5997                    ..Default::default()
5998                },
5999                ..Default::default()
6000            },
6001        );
6002        moves.insert(
6003            Choices::FOULPLAY,
6004            Choice {
6005                move_id: Choices::FOULPLAY,
6006                base_power: 95.0,
6007                category: MoveCategory::Physical,
6008                move_type: PokemonType::DARK,
6009                flags: Flags {
6010                    contact: true,
6011                    protect: true,
6012                    ..Default::default()
6013                },
6014                ..Default::default()
6015            },
6016        );
6017        moves.insert(
6018            Choices::FREEZEDRY,
6019            Choice {
6020                move_id: Choices::FREEZEDRY,
6021                base_power: 70.0,
6022                category: MoveCategory::Special,
6023                move_type: PokemonType::ICE,
6024                flags: Flags {
6025                    protect: true,
6026                    ..Default::default()
6027                },
6028                secondaries: Some(vec![Secondary {
6029                    chance: 10.0,
6030                    target: MoveTarget::Opponent,
6031                    effect: Effect::Status(PokemonStatus::FREEZE),
6032                }]),
6033                ..Default::default()
6034            },
6035        );
6036        moves.insert(
6037            Choices::FREEZESHOCK,
6038            Choice {
6039                move_id: Choices::FREEZESHOCK,
6040                accuracy: 90.0,
6041                base_power: 140.0,
6042                category: MoveCategory::Physical,
6043                move_type: PokemonType::ICE,
6044                flags: Flags {
6045                    charge: true,
6046                    protect: true,
6047                    ..Default::default()
6048                },
6049                secondaries: Some(vec![Secondary {
6050                    chance: 30.0,
6051                    target: MoveTarget::Opponent,
6052                    effect: Effect::Status(PokemonStatus::PARALYZE),
6053                }]),
6054                ..Default::default()
6055            },
6056        );
6057        moves.insert(
6058            Choices::FREEZINGGLARE,
6059            Choice {
6060                move_id: Choices::FREEZINGGLARE,
6061                base_power: 90.0,
6062                category: MoveCategory::Special,
6063                move_type: PokemonType::PSYCHIC,
6064                flags: Flags {
6065                    protect: true,
6066                    ..Default::default()
6067                },
6068                secondaries: Some(vec![Secondary {
6069                    chance: 10.0,
6070                    target: MoveTarget::Opponent,
6071                    effect: Effect::Status(PokemonStatus::FREEZE),
6072                }]),
6073                ..Default::default()
6074            },
6075        );
6076        moves.insert(
6077            Choices::FREEZYFROST,
6078            Choice {
6079                move_id: Choices::FREEZYFROST,
6080                accuracy: 90.0,
6081                base_power: 100.0,
6082                category: MoveCategory::Special,
6083                move_type: PokemonType::ICE,
6084                flags: Flags {
6085                    protect: true,
6086                    ..Default::default()
6087                },
6088                ..Default::default()
6089            },
6090        );
6091        moves.insert(
6092            Choices::FRENZYPLANT,
6093            Choice {
6094                move_id: Choices::FRENZYPLANT,
6095                accuracy: 90.0,
6096                base_power: 150.0,
6097                category: MoveCategory::Special,
6098                move_type: PokemonType::GRASS,
6099                flags: Flags {
6100                    protect: true,
6101                    recharge: true,
6102                    ..Default::default()
6103                },
6104                ..Default::default()
6105            },
6106        );
6107        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
6108            moves.insert(
6109                Choices::FROSTBREATH,
6110                Choice {
6111                    move_id: Choices::FROSTBREATH,
6112                    accuracy: 90.0,
6113                    base_power: 40.0,
6114                    category: MoveCategory::Special,
6115                    move_type: PokemonType::ICE,
6116                    flags: Flags {
6117                            protect: true,
6118                        ..Default::default()
6119                    },
6120                    ..Default::default()
6121                },
6122            );
6123        } else {
6124            moves.insert(
6125                Choices::FROSTBREATH,
6126                Choice {
6127                    move_id: Choices::FROSTBREATH,
6128                    accuracy: 90.0,
6129                    base_power: 60.0,
6130                    category: MoveCategory::Special,
6131                    move_type: PokemonType::ICE,
6132                    flags: Flags {
6133                            protect: true,
6134                        ..Default::default()
6135                    },
6136                    ..Default::default()
6137                },
6138            );
6139        }
6140        moves.insert(
6141            Choices::FRUSTRATION,
6142            Choice {
6143                move_id: Choices::FRUSTRATION,
6144                category: MoveCategory::Physical,
6145                move_type: PokemonType::NORMAL,
6146                flags: Flags {
6147                    contact: true,
6148                    protect: true,
6149                    ..Default::default()
6150                },
6151                ..Default::default()
6152            },
6153        );
6154        moves.insert(
6155            Choices::FURYATTACK,
6156            Choice {
6157                move_id: Choices::FURYATTACK,
6158                accuracy: 85.0,
6159                base_power: 15.0,
6160                category: MoveCategory::Physical,
6161                move_type: PokemonType::NORMAL,
6162                flags: Flags {
6163                    contact: true,
6164                    protect: true,
6165                    ..Default::default()
6166                },
6167                ..Default::default()
6168            },
6169        );
6170        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6171            moves.insert(
6172                Choices::FURYCUTTER,
6173                Choice {
6174                    move_id: Choices::FURYCUTTER,
6175                    accuracy: 95.0,
6176                    base_power: 10.0,
6177                    category: MoveCategory::Physical,
6178                    move_type: PokemonType::BUG,
6179                    flags: Flags {
6180                        contact: true,
6181                        protect: true,
6182                        slicing: true,
6183                        ..Default::default()
6184                    },
6185                    ..Default::default()
6186                },
6187            );
6188        } else if cfg!(feature = "gen5") {
6189            moves.insert(
6190                Choices::FURYCUTTER,
6191                Choice {
6192                    move_id: Choices::FURYCUTTER,
6193                    accuracy: 95.0,
6194                    base_power: 20.0,
6195                    category: MoveCategory::Physical,
6196                    move_type: PokemonType::BUG,
6197                    flags: Flags {
6198                        contact: true,
6199                            protect: true,
6200                        ..Default::default()
6201                    },
6202                    ..Default::default()
6203                },
6204            );
6205        } else {
6206            moves.insert(
6207                Choices::FURYCUTTER,
6208                Choice {
6209                    move_id: Choices::FURYCUTTER,
6210                    accuracy: 95.0,
6211                    base_power: 40.0,
6212                    category: MoveCategory::Physical,
6213                    move_type: PokemonType::BUG,
6214                    flags: Flags {
6215                        contact: true,
6216                            protect: true,
6217                        ..Default::default()
6218                    },
6219                    ..Default::default()
6220                },
6221            );
6222        }
6223        moves.insert(
6224            Choices::FURYSWIPES,
6225            Choice {
6226                move_id: Choices::FURYSWIPES,
6227                accuracy: 80.0,
6228                base_power: 18.0,
6229                category: MoveCategory::Physical,
6230                move_type: PokemonType::NORMAL,
6231                flags: Flags {
6232                    contact: true,
6233                    protect: true,
6234                    ..Default::default()
6235                },
6236                ..Default::default()
6237            },
6238        );
6239        moves.insert(
6240            Choices::FUSIONBOLT,
6241            Choice {
6242                move_id: Choices::FUSIONBOLT,
6243                base_power: 100.0,
6244                category: MoveCategory::Physical,
6245                move_type: PokemonType::ELECTRIC,
6246                flags: Flags {
6247                    protect: true,
6248                    ..Default::default()
6249                },
6250                ..Default::default()
6251            },
6252        );
6253        moves.insert(
6254            Choices::FUSIONFLARE,
6255            Choice {
6256                move_id: Choices::FUSIONFLARE,
6257                base_power: 100.0,
6258                category: MoveCategory::Special,
6259                move_type: PokemonType::FIRE,
6260                flags: Flags {
6261                    protect: true,
6262                    ..Default::default()
6263                },
6264                ..Default::default()
6265            },
6266        );
6267        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6268            moves.insert(
6269                Choices::FUTURESIGHT,
6270                Choice {
6271                    accuracy: 90.0,
6272                    move_id: Choices::FUTURESIGHT,
6273                    base_power: 80.0,
6274                    category: MoveCategory::Special,
6275                    move_type: PokemonType::PSYCHIC,
6276                    flags: Flags {
6277                        ..Default::default()
6278                    },
6279                    ..Default::default()
6280                },
6281            );
6282        } else if cfg!(feature = "gen5") {
6283            moves.insert(
6284                Choices::FUTURESIGHT,
6285                Choice {
6286                    move_id: Choices::FUTURESIGHT,
6287                    base_power: 100.0,
6288                    category: MoveCategory::Special,
6289                    move_type: PokemonType::PSYCHIC,
6290                    flags: Flags {
6291                        ..Default::default()
6292                    },
6293                    ..Default::default()
6294                },
6295            );
6296        } else {
6297            moves.insert(
6298                Choices::FUTURESIGHT,
6299                Choice {
6300                    move_id: Choices::FUTURESIGHT,
6301                    base_power: 120.0,
6302                    category: MoveCategory::Special,
6303                    move_type: PokemonType::PSYCHIC,
6304                    flags: Flags {
6305                        ..Default::default()
6306                    },
6307                    ..Default::default()
6308                },
6309            );
6310        }
6311        moves.insert(
6312            Choices::GASTROACID,
6313            Choice {
6314                move_id: Choices::GASTROACID,
6315                move_type: PokemonType::POISON,
6316                flags: Flags {
6317                    protect: true,
6318                    reflectable: true,
6319                    ..Default::default()
6320                },
6321                volatile_status: Some(VolatileStatus {
6322                    target: MoveTarget::Opponent,
6323                    volatile_status: PokemonVolatileStatus::GASTROACID,
6324                }),
6325                ..Default::default()
6326            },
6327        );
6328        moves.insert(
6329            Choices::GEARGRIND,
6330            Choice {
6331                move_id: Choices::GEARGRIND,
6332                accuracy: 85.0,
6333                base_power: 50.0,
6334                category: MoveCategory::Physical,
6335                move_type: PokemonType::STEEL,
6336                flags: Flags {
6337                    contact: true,
6338                    protect: true,
6339                    ..Default::default()
6340                },
6341                ..Default::default()
6342            },
6343        );
6344        moves.insert(
6345            Choices::GEARUP,
6346            Choice {
6347                move_id: Choices::GEARUP,
6348                target: MoveTarget::User,
6349                move_type: PokemonType::STEEL,
6350                flags: Flags {
6351                    ..Default::default()
6352                },
6353                ..Default::default()
6354            },
6355        );
6356        moves.insert(
6357            Choices::GEOMANCY,
6358            Choice {
6359                move_id: Choices::GEOMANCY,
6360                target: MoveTarget::User,
6361                move_type: PokemonType::FAIRY,
6362                flags: Flags {
6363                    charge: true,
6364                    ..Default::default()
6365                },
6366                boost: Some(Boost {
6367                    target: MoveTarget::User,
6368                    boosts: StatBoosts {
6369                        attack: 0,
6370                        defense: 0,
6371                        special_attack: 2,
6372                        special_defense: 2,
6373                        speed: 2,
6374                        accuracy: 0,
6375                    },
6376                }),
6377                ..Default::default()
6378            },
6379        );
6380        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6381            moves.insert(
6382                Choices::GIGADRAIN,
6383                Choice {
6384                    move_id: Choices::GIGADRAIN,
6385                    base_power: 60.0,
6386                    category: MoveCategory::Special,
6387                    move_type: PokemonType::GRASS,
6388                    flags: Flags {
6389                        heal: true,
6390                            protect: true,
6391                        ..Default::default()
6392                    },
6393                    drain: Some(0.5),
6394                    ..Default::default()
6395                },
6396            );
6397        } else {
6398            moves.insert(
6399                Choices::GIGADRAIN,
6400                Choice {
6401                    move_id: Choices::GIGADRAIN,
6402                    base_power: 75.0,
6403                    category: MoveCategory::Special,
6404                    move_type: PokemonType::GRASS,
6405                    flags: Flags {
6406                        heal: true,
6407                            protect: true,
6408                        ..Default::default()
6409                    },
6410                    drain: Some(0.5),
6411                    ..Default::default()
6412                },
6413            );
6414        }
6415        moves.insert(
6416            Choices::GIGAIMPACT,
6417            Choice {
6418                move_id: Choices::GIGAIMPACT,
6419                accuracy: 90.0,
6420                base_power: 150.0,
6421                category: MoveCategory::Physical,
6422                move_type: PokemonType::NORMAL,
6423                flags: Flags {
6424                    contact: true,
6425                    protect: true,
6426                    recharge: true,
6427                    ..Default::default()
6428                },
6429                ..Default::default()
6430            },
6431        );
6432        moves.insert(
6433            Choices::GIGATONHAMMER,
6434            Choice {
6435                move_id: Choices::GIGATONHAMMER,
6436                base_power: 160.0,
6437                category: MoveCategory::Physical,
6438                move_type: PokemonType::STEEL,
6439                flags: Flags {
6440                    protect: true,
6441                    ..Default::default()
6442                },
6443                ..Default::default()
6444            },
6445        );
6446
6447        if cfg!(feature = "gen9") {
6448            moves.insert(
6449                Choices::GLACIALLANCE,
6450                Choice {
6451                    move_id: Choices::GLACIALLANCE,
6452                    base_power: 120.0,
6453                    category: MoveCategory::Physical,
6454                    move_type: PokemonType::ICE,
6455                    flags: Flags {
6456                            protect: true,
6457                        ..Default::default()
6458                    },
6459                    ..Default::default()
6460                },
6461            );
6462        } else {
6463            moves.insert(
6464                Choices::GLACIALLANCE,
6465                Choice {
6466                    move_id: Choices::GLACIALLANCE,
6467                    base_power: 130.0,
6468                    category: MoveCategory::Physical,
6469                    move_type: PokemonType::ICE,
6470                    flags: Flags {
6471                            protect: true,
6472                        ..Default::default()
6473                    },
6474                    ..Default::default()
6475                },
6476            );
6477        }
6478        moves.insert(
6479            Choices::GLACIATE,
6480            Choice {
6481                move_id: Choices::GLACIATE,
6482                accuracy: 95.0,
6483                base_power: 65.0,
6484                category: MoveCategory::Special,
6485                move_type: PokemonType::ICE,
6486                flags: Flags {
6487                    protect: true,
6488                    ..Default::default()
6489                },
6490                secondaries: Some(vec![Secondary {
6491                    chance: 100.0,
6492                    target: MoveTarget::Opponent,
6493                    effect: Effect::Boost(StatBoosts {
6494                        attack: 0,
6495                        defense: 0,
6496                        special_attack: 0,
6497                        special_defense: 0,
6498                        speed: -1,
6499                        accuracy: 0,
6500                    }),
6501                }]),
6502                ..Default::default()
6503            },
6504        );
6505        moves.insert(
6506            Choices::GLAIVERUSH,
6507            Choice {
6508                move_id: Choices::GLAIVERUSH,
6509                base_power: 120.0,
6510                category: MoveCategory::Physical,
6511                move_type: PokemonType::DRAGON,
6512                flags: Flags {
6513                    contact: true,
6514                    protect: true,
6515                    ..Default::default()
6516                },
6517                ..Default::default()
6518            },
6519        );
6520        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6521            moves.insert(
6522                Choices::GLARE,
6523                Choice {
6524                    accuracy: 75.0,
6525                    move_id: Choices::GLARE,
6526                    status: Some(Status {
6527                        target: MoveTarget::Opponent,
6528                        status: PokemonStatus::PARALYZE,
6529                    }),
6530                    move_type: PokemonType::NORMAL,
6531                    flags: Flags {
6532                            protect: true,
6533                        reflectable: true,
6534                        ..Default::default()
6535                    },
6536                    ..Default::default()
6537                },
6538            );
6539        } else if cfg!(feature = "gen5") {
6540            moves.insert(
6541                Choices::GLARE,
6542                Choice {
6543                    accuracy: 90.0,
6544                    move_id: Choices::GLARE,
6545                    status: Some(Status {
6546                        target: MoveTarget::Opponent,
6547                        status: PokemonStatus::PARALYZE,
6548                    }),
6549                    move_type: PokemonType::NORMAL,
6550                    flags: Flags {
6551                            protect: true,
6552                        reflectable: true,
6553                        ..Default::default()
6554                    },
6555                    ..Default::default()
6556                },
6557            );
6558        } else {
6559            moves.insert(
6560                Choices::GLARE,
6561                Choice {
6562                    move_id: Choices::GLARE,
6563                    status: Some(Status {
6564                        target: MoveTarget::Opponent,
6565                        status: PokemonStatus::PARALYZE,
6566                    }),
6567                    move_type: PokemonType::NORMAL,
6568                    flags: Flags {
6569                            protect: true,
6570                        reflectable: true,
6571                        ..Default::default()
6572                    },
6573                    ..Default::default()
6574                },
6575            );
6576        }
6577        moves.insert(
6578            Choices::GLITZYGLOW,
6579            Choice {
6580                move_id: Choices::GLITZYGLOW,
6581                accuracy: 95.0,
6582                base_power: 80.0,
6583                category: MoveCategory::Special,
6584                move_type: PokemonType::PSYCHIC,
6585                flags: Flags {
6586                    protect: true,
6587                    ..Default::default()
6588                },
6589                ..Default::default()
6590            },
6591        );
6592        moves.insert(
6593            Choices::GRASSKNOT,
6594            Choice {
6595                move_id: Choices::GRASSKNOT,
6596                category: MoveCategory::Special,
6597                move_type: PokemonType::GRASS,
6598                flags: Flags {
6599                    contact: true,
6600                    protect: true,
6601                    ..Default::default()
6602                },
6603                ..Default::default()
6604            },
6605        );
6606        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
6607            moves.insert(
6608                Choices::GRASSPLEDGE,
6609                Choice {
6610                    move_id: Choices::GRASSPLEDGE,
6611                    base_power: 50.0,
6612                    category: MoveCategory::Special,
6613                    move_type: PokemonType::GRASS,
6614                    flags: Flags {
6615                                protect: true,
6616                        ..Default::default()
6617                    },
6618                    ..Default::default()
6619                },
6620            );
6621        } else {
6622            moves.insert(
6623                Choices::GRASSPLEDGE,
6624                Choice {
6625                    move_id: Choices::GRASSPLEDGE,
6626                    base_power: 80.0,
6627                    category: MoveCategory::Special,
6628                    move_type: PokemonType::GRASS,
6629                    flags: Flags {
6630                                protect: true,
6631                        ..Default::default()
6632                    },
6633                    ..Default::default()
6634                },
6635            );
6636        }
6637        moves.insert(
6638            Choices::GRASSWHISTLE,
6639            Choice {
6640                move_id: Choices::GRASSWHISTLE,
6641                accuracy: 55.0,
6642                status: Some(Status {
6643                    target: MoveTarget::Opponent,
6644                    status: PokemonStatus::SLEEP,
6645                }),
6646                move_type: PokemonType::GRASS,
6647                flags: Flags {
6648                    protect: true,
6649                    reflectable: true,
6650                    sound: true,
6651                    ..Default::default()
6652                },
6653                ..Default::default()
6654            },
6655        );
6656
6657        if cfg!(feature = "gen9") {
6658            moves.insert(
6659                Choices::GRASSYGLIDE,
6660                Choice {
6661                    move_id: Choices::GRASSYGLIDE,
6662                    base_power: 55.0,
6663                    category: MoveCategory::Physical,
6664                    move_type: PokemonType::GRASS,
6665                    flags: Flags {
6666                        contact: true,
6667                            protect: true,
6668                        ..Default::default()
6669                    },
6670                    ..Default::default()
6671                },
6672            );
6673        } else {
6674            moves.insert(
6675                Choices::GRASSYGLIDE,
6676                Choice {
6677                    move_id: Choices::GRASSYGLIDE,
6678                    base_power: 70.0,
6679                    category: MoveCategory::Physical,
6680                    move_type: PokemonType::GRASS,
6681                    flags: Flags {
6682                        contact: true,
6683                            protect: true,
6684                        ..Default::default()
6685                    },
6686                    ..Default::default()
6687                },
6688            );
6689        }
6690        moves.insert(
6691            Choices::GRASSYTERRAIN,
6692            Choice {
6693                move_id: Choices::GRASSYTERRAIN,
6694                move_type: PokemonType::GRASS,
6695                flags: Flags {
6696                    ..Default::default()
6697                },
6698                ..Default::default()
6699            },
6700        );
6701        moves.insert(
6702            Choices::GRAVAPPLE,
6703            Choice {
6704                move_id: Choices::GRAVAPPLE,
6705                base_power: 80.0,
6706                category: MoveCategory::Physical,
6707                move_type: PokemonType::GRASS,
6708                flags: Flags {
6709                    protect: true,
6710                    ..Default::default()
6711                },
6712                secondaries: Some(vec![Secondary {
6713                    chance: 100.0,
6714                    target: MoveTarget::Opponent,
6715                    effect: Effect::Boost(StatBoosts {
6716                        attack: 0,
6717                        defense: -1,
6718                        special_attack: 0,
6719                        special_defense: 0,
6720                        speed: 0,
6721                        accuracy: 0,
6722                    }),
6723                }]),
6724                ..Default::default()
6725            },
6726        );
6727        moves.insert(
6728            Choices::GRAVITY,
6729            Choice {
6730                move_id: Choices::GRAVITY,
6731                move_type: PokemonType::PSYCHIC,
6732                flags: Flags {
6733                    ..Default::default()
6734                },
6735                ..Default::default()
6736            },
6737        );
6738        moves.insert(
6739            Choices::GROWL,
6740            Choice {
6741                move_id: Choices::GROWL,
6742                move_type: PokemonType::NORMAL,
6743                flags: Flags {
6744                    protect: true,
6745                    reflectable: true,
6746                    sound: true,
6747                    ..Default::default()
6748                },
6749                boost: Some(Boost {
6750                    target: MoveTarget::Opponent,
6751                    boosts: StatBoosts {
6752                        attack: -1,
6753                        defense: 0,
6754                        special_attack: 0,
6755                        special_defense: 0,
6756                        speed: 0,
6757                        accuracy: 0,
6758                    },
6759                }),
6760                ..Default::default()
6761            },
6762        );
6763        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
6764            moves.insert(
6765                Choices::GROWTH,
6766                Choice {
6767                    move_id: Choices::GROWTH,
6768                    target: MoveTarget::User,
6769                    move_type: PokemonType::NORMAL,
6770                    flags: Flags {
6771                        ..Default::default()
6772                    },
6773                    boost: Some(Boost {
6774                        target: MoveTarget::User,
6775                        boosts: StatBoosts {
6776                            attack: 0,
6777                            defense: 0,
6778                            special_attack: 1,
6779                            special_defense: 0,
6780                            speed: 0,
6781                            accuracy: 0,
6782                        },
6783                    }),
6784                    ..Default::default()
6785                },
6786            );
6787        } else {
6788            moves.insert(
6789                Choices::GROWTH,
6790                Choice {
6791                    move_id: Choices::GROWTH,
6792                    target: MoveTarget::User,
6793                    move_type: PokemonType::NORMAL,
6794                    flags: Flags {
6795                        ..Default::default()
6796                    },
6797                    boost: Some(Boost {
6798                        target: MoveTarget::User,
6799                        boosts: StatBoosts {
6800                            attack: 1,
6801                            defense: 0,
6802                            special_attack: 1,
6803                            special_defense: 0,
6804                            speed: 0,
6805                            accuracy: 0,
6806                        },
6807                    }),
6808                    ..Default::default()
6809                },
6810            );
6811        }
6812        moves.insert(
6813            Choices::GRUDGE,
6814            Choice {
6815                move_id: Choices::GRUDGE,
6816                target: MoveTarget::User,
6817                move_type: PokemonType::GHOST,
6818                flags: Flags {
6819                    ..Default::default()
6820                },
6821                volatile_status: Some(VolatileStatus {
6822                    target: MoveTarget::User,
6823                    volatile_status: PokemonVolatileStatus::GRUDGE,
6824                }),
6825                ..Default::default()
6826            },
6827        );
6828        moves.insert(
6829            Choices::GUARDSPLIT,
6830            Choice {
6831                move_id: Choices::GUARDSPLIT,
6832                move_type: PokemonType::PSYCHIC,
6833                flags: Flags {
6834                    protect: true,
6835                    ..Default::default()
6836                },
6837                ..Default::default()
6838            },
6839        );
6840        moves.insert(
6841            Choices::GUARDSWAP,
6842            Choice {
6843                move_id: Choices::GUARDSWAP,
6844                move_type: PokemonType::PSYCHIC,
6845                flags: Flags {
6846                    protect: true,
6847                    ..Default::default()
6848                },
6849                ..Default::default()
6850            },
6851        );
6852        moves.insert(
6853            Choices::GUILLOTINE,
6854            Choice {
6855                move_id: Choices::GUILLOTINE,
6856                accuracy: 30.0,
6857                category: MoveCategory::Physical,
6858                move_type: PokemonType::NORMAL,
6859                flags: Flags {
6860                    contact: true,
6861                    protect: true,
6862                    ..Default::default()
6863                },
6864                ..Default::default()
6865            },
6866        );
6867        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
6868            moves.insert(
6869                Choices::GUNKSHOT,
6870                Choice {
6871                    move_id: Choices::GUNKSHOT,
6872                    accuracy: 70.0,
6873                    base_power: 120.0,
6874                    category: MoveCategory::Physical,
6875                    move_type: PokemonType::POISON,
6876                    flags: Flags {
6877                            protect: true,
6878                        ..Default::default()
6879                    },
6880                    secondaries: Some(vec![Secondary {
6881                        chance: 30.0,
6882                        target: MoveTarget::Opponent,
6883                        effect: Effect::Status(PokemonStatus::POISON),
6884                    }]),
6885                    ..Default::default()
6886                },
6887            );
6888        } else {
6889            moves.insert(
6890                Choices::GUNKSHOT,
6891                Choice {
6892                    move_id: Choices::GUNKSHOT,
6893                    accuracy: 80.0,
6894                    base_power: 120.0,
6895                    category: MoveCategory::Physical,
6896                    move_type: PokemonType::POISON,
6897                    flags: Flags {
6898                            protect: true,
6899                        ..Default::default()
6900                    },
6901                    secondaries: Some(vec![Secondary {
6902                        chance: 30.0,
6903                        target: MoveTarget::Opponent,
6904                        effect: Effect::Status(PokemonStatus::POISON),
6905                    }]),
6906                    ..Default::default()
6907                },
6908            );
6909        }
6910        if cfg!(feature = "gen1") {
6911            moves.insert(
6912                Choices::GUST,
6913                Choice {
6914                    move_id: Choices::GUST,
6915                    base_power: 40.0,
6916                    category: MoveCategory::Special,
6917                    move_type: PokemonType::NORMAL,
6918                    flags: Flags {
6919                        protect: true,
6920                        wind: true,
6921                        ..Default::default()
6922                    },
6923                    ..Default::default()
6924                },
6925            );
6926        } else {
6927            moves.insert(
6928                Choices::GUST,
6929                Choice {
6930                    move_id: Choices::GUST,
6931                    base_power: 40.0,
6932                    category: MoveCategory::Special,
6933                    move_type: PokemonType::FLYING,
6934                    flags: Flags {
6935                        protect: true,
6936                        wind: true,
6937                        ..Default::default()
6938                    },
6939                    ..Default::default()
6940                },
6941            );
6942        }
6943        moves.insert(
6944            Choices::GYROBALL,
6945            Choice {
6946                move_id: Choices::GYROBALL,
6947                category: MoveCategory::Physical,
6948                move_type: PokemonType::STEEL,
6949                flags: Flags {
6950                    bullet: true,
6951                    contact: true,
6952                    protect: true,
6953                    ..Default::default()
6954                },
6955                ..Default::default()
6956            },
6957        );
6958        moves.insert(
6959            Choices::HAIL,
6960            Choice {
6961                move_id: Choices::HAIL,
6962                move_type: PokemonType::ICE,
6963                flags: Flags {
6964                    ..Default::default()
6965                },
6966                ..Default::default()
6967            },
6968        );
6969        moves.insert(
6970            Choices::HAMMERARM,
6971            Choice {
6972                move_id: Choices::HAMMERARM,
6973                accuracy: 90.0,
6974                base_power: 100.0,
6975                category: MoveCategory::Physical,
6976                move_type: PokemonType::FIGHTING,
6977                flags: Flags {
6978                    contact: true,
6979                    protect: true,
6980                    punch: true,
6981                    ..Default::default()
6982                },
6983                boost: Some(Boost {
6984                    target: MoveTarget::User,
6985                    boosts: StatBoosts {
6986                        attack: 0,
6987                        defense: 0,
6988                        special_attack: 0,
6989                        special_defense: 0,
6990                        speed: -1,
6991                        accuracy: 0,
6992                    },
6993                }),
6994                ..Default::default()
6995            },
6996        );
6997        moves.insert(
6998            Choices::HAPPYHOUR,
6999            Choice {
7000                move_id: Choices::HAPPYHOUR,
7001                target: MoveTarget::User,
7002                move_type: PokemonType::NORMAL,
7003                flags: Flags {
7004                    ..Default::default()
7005                },
7006                ..Default::default()
7007            },
7008        );
7009        moves.insert(
7010            Choices::HARDEN,
7011            Choice {
7012                move_id: Choices::HARDEN,
7013                target: MoveTarget::User,
7014                move_type: PokemonType::NORMAL,
7015                flags: Flags {
7016                    ..Default::default()
7017                },
7018                boost: Some(Boost {
7019                    target: MoveTarget::User,
7020                    boosts: StatBoosts {
7021                        attack: 0,
7022                        defense: 1,
7023                        special_attack: 0,
7024                        special_defense: 0,
7025                        speed: 0,
7026                        accuracy: 0,
7027                    },
7028                }),
7029                ..Default::default()
7030            },
7031        );
7032        moves.insert(
7033            Choices::HARDPRESS,
7034            Choice {
7035                move_id: Choices::HARDPRESS,
7036                category: MoveCategory::Physical,
7037                move_type: PokemonType::STEEL,
7038                flags: Flags {
7039                    contact: true,
7040                    protect: true,
7041                    ..Default::default()
7042                },
7043                ..Default::default()
7044            },
7045        );
7046        moves.insert(
7047            Choices::HAZE,
7048            Choice {
7049                move_id: Choices::HAZE,
7050                move_type: PokemonType::ICE,
7051                flags: Flags {
7052                    ..Default::default()
7053                },
7054                ..Default::default()
7055            },
7056        );
7057        moves.insert(
7058            Choices::HEADBUTT,
7059            Choice {
7060                move_id: Choices::HEADBUTT,
7061                base_power: 70.0,
7062                category: MoveCategory::Physical,
7063                move_type: PokemonType::NORMAL,
7064                flags: Flags {
7065                    contact: true,
7066                    protect: true,
7067                    ..Default::default()
7068                },
7069                secondaries: Some(vec![Secondary {
7070                    chance: 30.0,
7071                    target: MoveTarget::Opponent,
7072                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
7073                }]),
7074                ..Default::default()
7075            },
7076        );
7077        moves.insert(
7078            Choices::HEADCHARGE,
7079            Choice {
7080                move_id: Choices::HEADCHARGE,
7081                base_power: 120.0,
7082                category: MoveCategory::Physical,
7083                move_type: PokemonType::NORMAL,
7084                flags: Flags {
7085                    contact: true,
7086                    protect: true,
7087                    ..Default::default()
7088                },
7089                recoil: Some(0.25),
7090                ..Default::default()
7091            },
7092        );
7093        moves.insert(
7094            Choices::HEADLONGRUSH,
7095            Choice {
7096                move_id: Choices::HEADLONGRUSH,
7097                base_power: 120.0,
7098                category: MoveCategory::Physical,
7099                move_type: PokemonType::GROUND,
7100                flags: Flags {
7101                    contact: true,
7102                    protect: true,
7103                    punch: true,
7104                    ..Default::default()
7105                },
7106                boost: Some(Boost {
7107                    target: MoveTarget::User,
7108                    boosts: StatBoosts {
7109                        attack: 0,
7110                        defense: -1,
7111                        special_attack: 0,
7112                        special_defense: -1,
7113                        speed: 0,
7114                        accuracy: 0,
7115                    },
7116                }),
7117                ..Default::default()
7118            },
7119        );
7120        moves.insert(
7121            Choices::HEADSMASH,
7122            Choice {
7123                move_id: Choices::HEADSMASH,
7124                accuracy: 80.0,
7125                base_power: 150.0,
7126                category: MoveCategory::Physical,
7127                move_type: PokemonType::ROCK,
7128                flags: Flags {
7129                    contact: true,
7130                    protect: true,
7131                    ..Default::default()
7132                },
7133                recoil: Some(0.5),
7134                ..Default::default()
7135            },
7136        );
7137        moves.insert(
7138            Choices::HEALBELL,
7139            Choice {
7140                move_id: Choices::HEALBELL,
7141                target: MoveTarget::User,
7142                move_type: PokemonType::NORMAL,
7143                flags: Flags {
7144                    sound: true,
7145                    ..Default::default()
7146                },
7147                ..Default::default()
7148            },
7149        );
7150        moves.insert(
7151            Choices::HEALBLOCK,
7152            Choice {
7153                move_id: Choices::HEALBLOCK,
7154                move_type: PokemonType::PSYCHIC,
7155                flags: Flags {
7156                    protect: true,
7157                    reflectable: true,
7158                    ..Default::default()
7159                },
7160                volatile_status: Some(VolatileStatus {
7161                    target: MoveTarget::Opponent,
7162                    volatile_status: PokemonVolatileStatus::HEALBLOCK,
7163                }),
7164                ..Default::default()
7165            },
7166        );
7167        moves.insert(
7168            Choices::HEALINGWISH,
7169            Choice {
7170                move_id: Choices::HEALINGWISH,
7171                target: MoveTarget::User,
7172                move_type: PokemonType::PSYCHIC,
7173                flags: Flags {
7174                    heal: true,
7175                    ..Default::default()
7176                },
7177                side_condition: Some(SideCondition {
7178                    target: MoveTarget::User,
7179                    condition: PokemonSideCondition::HealingWish,
7180                }),
7181                heal: Some(Heal {
7182                    target: MoveTarget::User,
7183                    amount: -1.0,
7184                }),
7185                ..Default::default()
7186            },
7187        );
7188        moves.insert(
7189            Choices::HEALORDER,
7190            Choice {
7191                move_id: Choices::HEALORDER,
7192                target: MoveTarget::User,
7193                move_type: PokemonType::BUG,
7194                flags: Flags {
7195                    heal: true,
7196                    ..Default::default()
7197                },
7198                heal: Some(Heal {
7199                    target: MoveTarget::User,
7200                    amount: 0.5,
7201                }),
7202                ..Default::default()
7203            },
7204        );
7205        moves.insert(
7206            Choices::HEALPULSE,
7207            Choice {
7208                move_id: Choices::HEALPULSE,
7209                move_type: PokemonType::PSYCHIC,
7210                flags: Flags {
7211                    heal: true,
7212                    protect: true,
7213                    pulse: true,
7214                    reflectable: true,
7215                    ..Default::default()
7216                },
7217                ..Default::default()
7218            },
7219        );
7220        moves.insert(
7221            Choices::HEARTSTAMP,
7222            Choice {
7223                move_id: Choices::HEARTSTAMP,
7224                base_power: 60.0,
7225                category: MoveCategory::Physical,
7226                move_type: PokemonType::PSYCHIC,
7227                flags: Flags {
7228                    contact: true,
7229                    protect: true,
7230                    ..Default::default()
7231                },
7232                secondaries: Some(vec![Secondary {
7233                    chance: 30.0,
7234                    target: MoveTarget::Opponent,
7235                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
7236                }]),
7237                ..Default::default()
7238            },
7239        );
7240        moves.insert(
7241            Choices::HEARTSWAP,
7242            Choice {
7243                move_id: Choices::HEARTSWAP,
7244                move_type: PokemonType::PSYCHIC,
7245                flags: Flags {
7246                    protect: true,
7247                    ..Default::default()
7248                },
7249                ..Default::default()
7250            },
7251        );
7252        moves.insert(
7253            Choices::HEATCRASH,
7254            Choice {
7255                move_id: Choices::HEATCRASH,
7256                category: MoveCategory::Physical,
7257                move_type: PokemonType::FIRE,
7258                flags: Flags {
7259                    contact: true,
7260                    protect: true,
7261                    ..Default::default()
7262                },
7263                ..Default::default()
7264            },
7265        );
7266        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
7267            moves.insert(
7268                Choices::HEATWAVE,
7269                Choice {
7270                    move_id: Choices::HEATWAVE,
7271                    accuracy: 90.0,
7272                    base_power: 100.0,
7273                    category: MoveCategory::Special,
7274                    move_type: PokemonType::FIRE,
7275                    flags: Flags {
7276                        protect: true,
7277                        wind: true,
7278                        ..Default::default()
7279                    },
7280                    secondaries: Some(vec![Secondary {
7281                        chance: 10.0,
7282                        target: MoveTarget::Opponent,
7283                        effect: Effect::Status(PokemonStatus::BURN),
7284                    }]),
7285                    ..Default::default()
7286                },
7287            );
7288        } else {
7289            moves.insert(
7290                Choices::HEATWAVE,
7291                Choice {
7292                    move_id: Choices::HEATWAVE,
7293                    accuracy: 90.0,
7294                    base_power: 95.0,
7295                    category: MoveCategory::Special,
7296                    move_type: PokemonType::FIRE,
7297                    flags: Flags {
7298                        protect: true,
7299                        wind: true,
7300                        ..Default::default()
7301                    },
7302                    secondaries: Some(vec![Secondary {
7303                        chance: 10.0,
7304                        target: MoveTarget::Opponent,
7305                        effect: Effect::Status(PokemonStatus::BURN),
7306                    }]),
7307                    ..Default::default()
7308                },
7309            );
7310        }
7311        moves.insert(
7312            Choices::HEAVYSLAM,
7313            Choice {
7314                move_id: Choices::HEAVYSLAM,
7315                category: MoveCategory::Physical,
7316                move_type: PokemonType::STEEL,
7317                flags: Flags {
7318                    contact: true,
7319                    protect: true,
7320                    ..Default::default()
7321                },
7322                ..Default::default()
7323            },
7324        );
7325        moves.insert(
7326            Choices::HELPINGHAND,
7327            Choice {
7328                move_id: Choices::HELPINGHAND,
7329                priority: 5,
7330                target: MoveTarget::User,
7331                move_type: PokemonType::NORMAL,
7332                flags: Flags {
7333                    ..Default::default()
7334                },
7335                volatile_status: Some(VolatileStatus {
7336                    target: MoveTarget::User,
7337                    volatile_status: PokemonVolatileStatus::HELPINGHAND,
7338                }),
7339                ..Default::default()
7340            },
7341        );
7342        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
7343            moves.insert(
7344                Choices::HEX,
7345                Choice {
7346                    move_id: Choices::HEX,
7347                    base_power: 50.0,
7348                    category: MoveCategory::Special,
7349                    move_type: PokemonType::GHOST,
7350                    flags: Flags {
7351                            protect: true,
7352                        ..Default::default()
7353                    },
7354                    ..Default::default()
7355                },
7356            );
7357        } else {
7358            moves.insert(
7359                Choices::HEX,
7360                Choice {
7361                    move_id: Choices::HEX,
7362                    base_power: 65.0,
7363                    category: MoveCategory::Special,
7364                    move_type: PokemonType::GHOST,
7365                    flags: Flags {
7366                            protect: true,
7367                        ..Default::default()
7368                    },
7369                    ..Default::default()
7370                },
7371            );
7372        }
7373        moves.insert(
7374            Choices::HIDDENPOWER,
7375            Choice {
7376                move_id: Choices::HIDDENPOWER,
7377                base_power: 60.0,
7378                category: MoveCategory::Special,
7379                move_type: PokemonType::NORMAL,
7380                flags: Flags {
7381                    protect: true,
7382                    ..Default::default()
7383                },
7384                ..Default::default()
7385            },
7386        );
7387        moves.insert(
7388            Choices::HIDDENPOWERBUG60,
7389            Choice {
7390                move_id: Choices::HIDDENPOWERBUG60,
7391                base_power: 60.0,
7392                category: MoveCategory::Special,
7393                move_type: PokemonType::BUG,
7394                flags: Flags {
7395                    protect: true,
7396                    ..Default::default()
7397                },
7398                ..Default::default()
7399            },
7400        );
7401        moves.insert(
7402            Choices::HIDDENPOWERBUG70,
7403            Choice {
7404                move_id: Choices::HIDDENPOWERBUG70,
7405                base_power: 70.0,
7406                category: MoveCategory::Special,
7407                move_type: PokemonType::BUG,
7408                flags: Flags {
7409                    protect: true,
7410                    ..Default::default()
7411                },
7412                ..Default::default()
7413            },
7414        );
7415        moves.insert(
7416            Choices::HIDDENPOWERDARK60,
7417            Choice {
7418                move_id: Choices::HIDDENPOWERDARK60,
7419                base_power: 60.0,
7420                category: MoveCategory::Special,
7421                move_type: PokemonType::DARK,
7422                flags: Flags {
7423                    protect: true,
7424                    ..Default::default()
7425                },
7426                ..Default::default()
7427            },
7428        );
7429        moves.insert(
7430            Choices::HIDDENPOWERDARK70,
7431            Choice {
7432                move_id: Choices::HIDDENPOWERDARK70,
7433                base_power: 70.0,
7434                category: MoveCategory::Special,
7435                move_type: PokemonType::DARK,
7436                flags: Flags {
7437                    protect: true,
7438                    ..Default::default()
7439                },
7440                ..Default::default()
7441            },
7442        );
7443        moves.insert(
7444            Choices::HIDDENPOWERDRAGON60,
7445            Choice {
7446                move_id: Choices::HIDDENPOWERDRAGON60,
7447                base_power: 60.0,
7448                category: MoveCategory::Special,
7449                move_type: PokemonType::DRAGON,
7450                flags: Flags {
7451                    protect: true,
7452                    ..Default::default()
7453                },
7454                ..Default::default()
7455            },
7456        );
7457        moves.insert(
7458            Choices::HIDDENPOWERDRAGON70,
7459            Choice {
7460                move_id: Choices::HIDDENPOWERDRAGON70,
7461                base_power: 70.0,
7462                category: MoveCategory::Special,
7463                move_type: PokemonType::DRAGON,
7464                flags: Flags {
7465                    protect: true,
7466                    ..Default::default()
7467                },
7468                ..Default::default()
7469            },
7470        );
7471        moves.insert(
7472            Choices::HIDDENPOWERELECTRIC60,
7473            Choice {
7474                move_id: Choices::HIDDENPOWERELECTRIC60,
7475                base_power: 60.0,
7476                category: MoveCategory::Special,
7477                move_type: PokemonType::ELECTRIC,
7478                flags: Flags {
7479                    protect: true,
7480                    ..Default::default()
7481                },
7482                ..Default::default()
7483            },
7484        );
7485        moves.insert(
7486            Choices::HIDDENPOWERELECTRIC70,
7487            Choice {
7488                move_id: Choices::HIDDENPOWERELECTRIC70,
7489                base_power: 70.0,
7490                category: MoveCategory::Special,
7491                move_type: PokemonType::ELECTRIC,
7492                flags: Flags {
7493                    protect: true,
7494                    ..Default::default()
7495                },
7496                ..Default::default()
7497            },
7498        );
7499        moves.insert(
7500            Choices::HIDDENPOWERFIGHTING60,
7501            Choice {
7502                move_id: Choices::HIDDENPOWERFIGHTING60,
7503                base_power: 60.0,
7504                category: MoveCategory::Special,
7505                move_type: PokemonType::FIGHTING,
7506                flags: Flags {
7507                    protect: true,
7508                    ..Default::default()
7509                },
7510                ..Default::default()
7511            },
7512        );
7513        moves.insert(
7514            Choices::HIDDENPOWERFIGHTING70,
7515            Choice {
7516                move_id: Choices::HIDDENPOWERFIGHTING70,
7517                base_power: 70.0,
7518                category: MoveCategory::Special,
7519                move_type: PokemonType::FIGHTING,
7520                flags: Flags {
7521                    protect: true,
7522                    ..Default::default()
7523                },
7524                ..Default::default()
7525            },
7526        );
7527        moves.insert(
7528            Choices::HIDDENPOWERFIRE60,
7529            Choice {
7530                move_id: Choices::HIDDENPOWERFIRE60,
7531                base_power: 60.0,
7532                category: MoveCategory::Special,
7533                move_type: PokemonType::FIRE,
7534                flags: Flags {
7535                    protect: true,
7536                    ..Default::default()
7537                },
7538                ..Default::default()
7539            },
7540        );
7541        moves.insert(
7542            Choices::HIDDENPOWERFIRE70,
7543            Choice {
7544                move_id: Choices::HIDDENPOWERFIRE70,
7545                base_power: 70.0,
7546                category: MoveCategory::Special,
7547                move_type: PokemonType::FIRE,
7548                flags: Flags {
7549                    protect: true,
7550                    ..Default::default()
7551                },
7552                ..Default::default()
7553            },
7554        );
7555        moves.insert(
7556            Choices::HIDDENPOWERFLYING60,
7557            Choice {
7558                move_id: Choices::HIDDENPOWERFLYING60,
7559                base_power: 60.0,
7560                category: MoveCategory::Special,
7561                move_type: PokemonType::FLYING,
7562                flags: Flags {
7563                    protect: true,
7564                    ..Default::default()
7565                },
7566                ..Default::default()
7567            },
7568        );
7569        moves.insert(
7570            Choices::HIDDENPOWERFLYING70,
7571            Choice {
7572                move_id: Choices::HIDDENPOWERFLYING70,
7573                base_power: 70.0,
7574                category: MoveCategory::Special,
7575                move_type: PokemonType::FLYING,
7576                flags: Flags {
7577                    protect: true,
7578                    ..Default::default()
7579                },
7580                ..Default::default()
7581            },
7582        );
7583        moves.insert(
7584            Choices::HIDDENPOWERGHOST60,
7585            Choice {
7586                move_id: Choices::HIDDENPOWERGHOST60,
7587                base_power: 60.0,
7588                category: MoveCategory::Special,
7589                move_type: PokemonType::GHOST,
7590                flags: Flags {
7591                    protect: true,
7592                    ..Default::default()
7593                },
7594                ..Default::default()
7595            },
7596        );
7597        moves.insert(
7598            Choices::HIDDENPOWERGHOST70,
7599            Choice {
7600                move_id: Choices::HIDDENPOWERGHOST70,
7601                base_power: 70.0,
7602                category: MoveCategory::Special,
7603                move_type: PokemonType::GHOST,
7604                flags: Flags {
7605                    protect: true,
7606                    ..Default::default()
7607                },
7608                ..Default::default()
7609            },
7610        );
7611        moves.insert(
7612            Choices::HIDDENPOWERGRASS60,
7613            Choice {
7614                move_id: Choices::HIDDENPOWERGRASS60,
7615                base_power: 60.0,
7616                category: MoveCategory::Special,
7617                move_type: PokemonType::GRASS,
7618                flags: Flags {
7619                    protect: true,
7620                    ..Default::default()
7621                },
7622                ..Default::default()
7623            },
7624        );
7625        moves.insert(
7626            Choices::HIDDENPOWERGRASS70,
7627            Choice {
7628                move_id: Choices::HIDDENPOWERGRASS70,
7629                base_power: 70.0,
7630                category: MoveCategory::Special,
7631                move_type: PokemonType::GRASS,
7632                flags: Flags {
7633                    protect: true,
7634                    ..Default::default()
7635                },
7636                ..Default::default()
7637            },
7638        );
7639        moves.insert(
7640            Choices::HIDDENPOWERGROUND60,
7641            Choice {
7642                move_id: Choices::HIDDENPOWERGROUND60,
7643                base_power: 60.0,
7644                category: MoveCategory::Special,
7645                move_type: PokemonType::GROUND,
7646                flags: Flags {
7647                    protect: true,
7648                    ..Default::default()
7649                },
7650                ..Default::default()
7651            },
7652        );
7653        moves.insert(
7654            Choices::HIDDENPOWERGROUND70,
7655            Choice {
7656                move_id: Choices::HIDDENPOWERGROUND70,
7657                base_power: 70.0,
7658                category: MoveCategory::Special,
7659                move_type: PokemonType::GROUND,
7660                flags: Flags {
7661                    protect: true,
7662                    ..Default::default()
7663                },
7664                ..Default::default()
7665            },
7666        );
7667        moves.insert(
7668            Choices::HIDDENPOWERICE60,
7669            Choice {
7670                move_id: Choices::HIDDENPOWERICE60,
7671                base_power: 60.0,
7672                category: MoveCategory::Special,
7673                move_type: PokemonType::ICE,
7674                flags: Flags {
7675                    protect: true,
7676                    ..Default::default()
7677                },
7678                ..Default::default()
7679            },
7680        );
7681        moves.insert(
7682            Choices::HIDDENPOWERICE70,
7683            Choice {
7684                move_id: Choices::HIDDENPOWERICE70,
7685                base_power: 70.0,
7686                category: MoveCategory::Special,
7687                move_type: PokemonType::ICE,
7688                flags: Flags {
7689                    protect: true,
7690                    ..Default::default()
7691                },
7692                ..Default::default()
7693            },
7694        );
7695        moves.insert(
7696            Choices::HIDDENPOWERPOISON60,
7697            Choice {
7698                move_id: Choices::HIDDENPOWERPOISON60,
7699                base_power: 60.0,
7700                category: MoveCategory::Special,
7701                move_type: PokemonType::POISON,
7702                flags: Flags {
7703                    protect: true,
7704                    ..Default::default()
7705                },
7706                ..Default::default()
7707            },
7708        );
7709        moves.insert(
7710            Choices::HIDDENPOWERPOISON70,
7711            Choice {
7712                move_id: Choices::HIDDENPOWERPOISON70,
7713                base_power: 70.0,
7714                category: MoveCategory::Special,
7715                move_type: PokemonType::POISON,
7716                flags: Flags {
7717                    protect: true,
7718                    ..Default::default()
7719                },
7720                ..Default::default()
7721            },
7722        );
7723        moves.insert(
7724            Choices::HIDDENPOWERPSYCHIC60,
7725            Choice {
7726                move_id: Choices::HIDDENPOWERPSYCHIC60,
7727                base_power: 60.0,
7728                category: MoveCategory::Special,
7729                move_type: PokemonType::PSYCHIC,
7730                flags: Flags {
7731                    protect: true,
7732                    ..Default::default()
7733                },
7734                ..Default::default()
7735            },
7736        );
7737        moves.insert(
7738            Choices::HIDDENPOWERPSYCHIC70,
7739            Choice {
7740                move_id: Choices::HIDDENPOWERPSYCHIC70,
7741                base_power: 70.0,
7742                category: MoveCategory::Special,
7743                move_type: PokemonType::PSYCHIC,
7744                flags: Flags {
7745                    protect: true,
7746                    ..Default::default()
7747                },
7748                ..Default::default()
7749            },
7750        );
7751        moves.insert(
7752            Choices::HIDDENPOWERROCK60,
7753            Choice {
7754                move_id: Choices::HIDDENPOWERROCK60,
7755                base_power: 60.0,
7756                category: MoveCategory::Special,
7757                move_type: PokemonType::ROCK,
7758                flags: Flags {
7759                    protect: true,
7760                    ..Default::default()
7761                },
7762                ..Default::default()
7763            },
7764        );
7765        moves.insert(
7766            Choices::HIDDENPOWERROCK70,
7767            Choice {
7768                move_id: Choices::HIDDENPOWERROCK70,
7769                base_power: 70.0,
7770                category: MoveCategory::Special,
7771                move_type: PokemonType::ROCK,
7772                flags: Flags {
7773                    protect: true,
7774                    ..Default::default()
7775                },
7776                ..Default::default()
7777            },
7778        );
7779        moves.insert(
7780            Choices::HIDDENPOWERSTEEL60,
7781            Choice {
7782                move_id: Choices::HIDDENPOWERSTEEL60,
7783                base_power: 60.0,
7784                category: MoveCategory::Special,
7785                move_type: PokemonType::STEEL,
7786                flags: Flags {
7787                    protect: true,
7788                    ..Default::default()
7789                },
7790                ..Default::default()
7791            },
7792        );
7793        moves.insert(
7794            Choices::HIDDENPOWERSTEEL70,
7795            Choice {
7796                move_id: Choices::HIDDENPOWERSTEEL70,
7797                base_power: 70.0,
7798                category: MoveCategory::Special,
7799                move_type: PokemonType::STEEL,
7800                flags: Flags {
7801                    protect: true,
7802                    ..Default::default()
7803                },
7804                ..Default::default()
7805            },
7806        );
7807        moves.insert(
7808            Choices::HIDDENPOWERWATER60,
7809            Choice {
7810                move_id: Choices::HIDDENPOWERWATER60,
7811                base_power: 60.0,
7812                category: MoveCategory::Special,
7813                move_type: PokemonType::WATER,
7814                flags: Flags {
7815                    protect: true,
7816                    ..Default::default()
7817                },
7818                ..Default::default()
7819            },
7820        );
7821        moves.insert(
7822            Choices::HIDDENPOWERWATER70,
7823            Choice {
7824                move_id: Choices::HIDDENPOWERWATER70,
7825                base_power: 70.0,
7826                category: MoveCategory::Special,
7827                move_type: PokemonType::WATER,
7828                flags: Flags {
7829                    protect: true,
7830                    ..Default::default()
7831                },
7832                ..Default::default()
7833            },
7834        );
7835        moves.insert(
7836            Choices::HIGHHORSEPOWER,
7837            Choice {
7838                move_id: Choices::HIGHHORSEPOWER,
7839                accuracy: 95.0,
7840                base_power: 95.0,
7841                category: MoveCategory::Physical,
7842                move_type: PokemonType::GROUND,
7843                flags: Flags {
7844                    contact: true,
7845                    protect: true,
7846                    ..Default::default()
7847                },
7848                ..Default::default()
7849            },
7850        );
7851        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
7852            moves.insert(
7853                Choices::HIGHJUMPKICK,
7854                Choice {
7855                    move_id: Choices::HIGHJUMPKICK,
7856                    accuracy: 90.0,
7857                    base_power: 85.0,
7858                    category: MoveCategory::Physical,
7859                    move_type: PokemonType::FIGHTING,
7860                    flags: Flags {
7861                        contact: true,
7862                        protect: true,
7863                        ..Default::default()
7864                    },
7865                    crash: Some(0.5),
7866                    ..Default::default()
7867                },
7868            );
7869        }
7870        else if cfg!(feature = "gen4") {
7871            moves.insert(
7872                Choices::HIGHJUMPKICK,
7873                Choice {
7874                    move_id: Choices::HIGHJUMPKICK,
7875                    accuracy: 90.0,
7876                    base_power: 100.0,
7877                    category: MoveCategory::Physical,
7878                    move_type: PokemonType::FIGHTING,
7879                    flags: Flags {
7880                        contact: true,
7881                        protect: true,
7882                        ..Default::default()
7883                    },
7884                    crash: Some(0.5),
7885                    ..Default::default()
7886                },
7887            );
7888        } else {
7889            moves.insert(
7890                Choices::HIGHJUMPKICK,
7891                Choice {
7892                    move_id: Choices::HIGHJUMPKICK,
7893                    accuracy: 90.0,
7894                    base_power: 130.0,
7895                    category: MoveCategory::Physical,
7896                    move_type: PokemonType::FIGHTING,
7897                    flags: Flags {
7898                        contact: true,
7899                        protect: true,
7900                        ..Default::default()
7901                    },
7902                    crash: Some(0.5),
7903                    ..Default::default()
7904                },
7905            );
7906        }
7907        moves.insert(
7908            Choices::HOLDBACK,
7909            Choice {
7910                move_id: Choices::HOLDBACK,
7911                base_power: 40.0,
7912                category: MoveCategory::Physical,
7913                move_type: PokemonType::NORMAL,
7914                flags: Flags {
7915                    contact: true,
7916                    protect: true,
7917                    ..Default::default()
7918                },
7919                ..Default::default()
7920            },
7921        );
7922        moves.insert(
7923            Choices::HOLDHANDS,
7924            Choice {
7925                move_id: Choices::HOLDHANDS,
7926                target: MoveTarget::User,
7927                move_type: PokemonType::NORMAL,
7928                flags: Flags {
7929                    ..Default::default()
7930                },
7931                ..Default::default()
7932            },
7933        );
7934        moves.insert(
7935            Choices::HONECLAWS,
7936            Choice {
7937                move_id: Choices::HONECLAWS,
7938                target: MoveTarget::User,
7939                move_type: PokemonType::DARK,
7940                flags: Flags {
7941                    ..Default::default()
7942                },
7943                boost: Some(Boost {
7944                    target: MoveTarget::User,
7945                    boosts: StatBoosts {
7946                        attack: 1,
7947                        defense: 0,
7948                        special_attack: 0,
7949                        special_defense: 0,
7950                        speed: 0,
7951                        accuracy: 1,
7952                    },
7953                }),
7954                ..Default::default()
7955            },
7956        );
7957        moves.insert(
7958            Choices::HORNATTACK,
7959            Choice {
7960                move_id: Choices::HORNATTACK,
7961                base_power: 65.0,
7962                category: MoveCategory::Physical,
7963                move_type: PokemonType::NORMAL,
7964                flags: Flags {
7965                    contact: true,
7966                    protect: true,
7967                    ..Default::default()
7968                },
7969                ..Default::default()
7970            },
7971        );
7972        moves.insert(
7973            Choices::HORNDRILL,
7974            Choice {
7975                move_id: Choices::HORNDRILL,
7976                accuracy: 30.0,
7977                category: MoveCategory::Physical,
7978                move_type: PokemonType::NORMAL,
7979                flags: Flags {
7980                    contact: true,
7981                    protect: true,
7982                    ..Default::default()
7983                },
7984                ..Default::default()
7985            },
7986        );
7987        moves.insert(
7988            Choices::HORNLEECH,
7989            Choice {
7990                move_id: Choices::HORNLEECH,
7991                base_power: 75.0,
7992                category: MoveCategory::Physical,
7993                move_type: PokemonType::GRASS,
7994                flags: Flags {
7995                    contact: true,
7996                    heal: true,
7997                    protect: true,
7998                    ..Default::default()
7999                },
8000                drain: Some(0.5),
8001                ..Default::default()
8002            },
8003        );
8004        moves.insert(
8005            Choices::HOWL,
8006            Choice {
8007                move_id: Choices::HOWL,
8008                target: MoveTarget::User,
8009                move_type: PokemonType::NORMAL,
8010                flags: Flags {
8011                    sound: true,
8012                    ..Default::default()
8013                },
8014                boost: Some(Boost {
8015                    target: MoveTarget::User,
8016                    boosts: StatBoosts {
8017                        attack: 1,
8018                        defense: 0,
8019                        special_attack: 0,
8020                        special_defense: 0,
8021                        speed: 0,
8022                        accuracy: 0,
8023                    },
8024                }),
8025                ..Default::default()
8026            },
8027        );
8028        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8029            moves.insert(
8030                Choices::HURRICANE,
8031                Choice {
8032                    move_id: Choices::HURRICANE,
8033                    accuracy: 70.0,
8034                    base_power: 120.0,
8035                    category: MoveCategory::Special,
8036                    move_type: PokemonType::FLYING,
8037                    flags: Flags {
8038                        protect: true,
8039                        wind: true,
8040                        ..Default::default()
8041                    },
8042                    secondaries: Some(vec![Secondary {
8043                        chance: 30.0,
8044                        target: MoveTarget::Opponent,
8045                        effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
8046                    }]),
8047                    ..Default::default()
8048                },
8049            );
8050        } else {
8051            moves.insert(
8052                Choices::HURRICANE,
8053                Choice {
8054                    move_id: Choices::HURRICANE,
8055                    accuracy: 70.0,
8056                    base_power: 110.0,
8057                    category: MoveCategory::Special,
8058                    move_type: PokemonType::FLYING,
8059                    flags: Flags {
8060                        protect: true,
8061                        wind: true,
8062                        ..Default::default()
8063                    },
8064                    secondaries: Some(vec![Secondary {
8065                        chance: 30.0,
8066                        target: MoveTarget::Opponent,
8067                        effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
8068                    }]),
8069                    ..Default::default()
8070                },
8071            );
8072        }
8073        moves.insert(
8074            Choices::HYDROCANNON,
8075            Choice {
8076                move_id: Choices::HYDROCANNON,
8077                accuracy: 90.0,
8078                base_power: 150.0,
8079                category: MoveCategory::Special,
8080                move_type: PokemonType::WATER,
8081                flags: Flags {
8082                    protect: true,
8083                    recharge: true,
8084                    ..Default::default()
8085                },
8086                ..Default::default()
8087            },
8088        );
8089        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8090            moves.insert(
8091                Choices::HYDROPUMP,
8092                Choice {
8093                    move_id: Choices::HYDROPUMP,
8094                    accuracy: 80.0,
8095                    base_power: 120.0,
8096                    category: MoveCategory::Special,
8097                    move_type: PokemonType::WATER,
8098                    flags: Flags {
8099                            protect: true,
8100                        ..Default::default()
8101                    },
8102                    ..Default::default()
8103                },
8104            );
8105        } else {
8106            moves.insert(
8107                Choices::HYDROPUMP,
8108                Choice {
8109                    move_id: Choices::HYDROPUMP,
8110                    accuracy: 80.0,
8111                    base_power: 110.0,
8112                    category: MoveCategory::Special,
8113                    move_type: PokemonType::WATER,
8114                    flags: Flags {
8115                            protect: true,
8116                        ..Default::default()
8117                    },
8118                    ..Default::default()
8119                },
8120            );
8121        }
8122        moves.insert(
8123            Choices::HYDROSTEAM,
8124            Choice {
8125                move_id: Choices::HYDROSTEAM,
8126                base_power: 80.0,
8127                category: MoveCategory::Special,
8128                move_type: PokemonType::WATER,
8129                flags: Flags {
8130                    protect: true,
8131                    ..Default::default()
8132                },
8133                ..Default::default()
8134            },
8135        );
8136        moves.insert(
8137            Choices::HYPERBEAM,
8138            Choice {
8139                move_id: Choices::HYPERBEAM,
8140                accuracy: 90.0,
8141                base_power: 150.0,
8142                category: MoveCategory::Special,
8143                move_type: PokemonType::NORMAL,
8144                flags: Flags {
8145                    protect: true,
8146                    recharge: true,
8147                    ..Default::default()
8148                },
8149                ..Default::default()
8150            },
8151        );
8152        moves.insert(
8153            Choices::HYPERDRILL,
8154            Choice {
8155                move_id: Choices::HYPERDRILL,
8156                base_power: 100.0,
8157                category: MoveCategory::Physical,
8158                move_type: PokemonType::NORMAL,
8159                flags: Flags {
8160                    contact: true,
8161                    ..Default::default()
8162                },
8163                ..Default::default()
8164            },
8165        );
8166        moves.insert(
8167            Choices::HYPERFANG,
8168            Choice {
8169                move_id: Choices::HYPERFANG,
8170                accuracy: 90.0,
8171                base_power: 80.0,
8172                category: MoveCategory::Physical,
8173                move_type: PokemonType::NORMAL,
8174                flags: Flags {
8175                    bite: true,
8176                    contact: true,
8177                    protect: true,
8178                    ..Default::default()
8179                },
8180                secondaries: Some(vec![Secondary {
8181                    chance: 10.0,
8182                    target: MoveTarget::Opponent,
8183                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8184                }]),
8185                ..Default::default()
8186            },
8187        );
8188        moves.insert(
8189            Choices::HYPERSPACEFURY,
8190            Choice {
8191                move_id: Choices::HYPERSPACEFURY,
8192                base_power: 100.0,
8193                category: MoveCategory::Physical,
8194                move_type: PokemonType::DARK,
8195                flags: Flags {
8196                    ..Default::default()
8197                },
8198                boost: Some(Boost {
8199                    target: MoveTarget::User,
8200                    boosts: StatBoosts {
8201                        attack: 0,
8202                        defense: -1,
8203                        special_attack: 0,
8204                        special_defense: 0,
8205                        speed: 0,
8206                        accuracy: 0,
8207                    },
8208                }),
8209                ..Default::default()
8210            },
8211        );
8212        moves.insert(
8213            Choices::HYPERSPACEHOLE,
8214            Choice {
8215                move_id: Choices::HYPERSPACEHOLE,
8216                base_power: 80.0,
8217                category: MoveCategory::Special,
8218                move_type: PokemonType::PSYCHIC,
8219                flags: Flags {
8220                    ..Default::default()
8221                },
8222                ..Default::default()
8223            },
8224        );
8225        moves.insert(
8226            Choices::HYPERVOICE,
8227            Choice {
8228                move_id: Choices::HYPERVOICE,
8229                base_power: 90.0,
8230                category: MoveCategory::Special,
8231                move_type: PokemonType::NORMAL,
8232                flags: Flags {
8233                    protect: true,
8234                    sound: true,
8235                    ..Default::default()
8236                },
8237                ..Default::default()
8238            },
8239        );
8240        moves.insert(
8241            Choices::HYPNOSIS,
8242            Choice {
8243                move_id: Choices::HYPNOSIS,
8244                accuracy: 60.0,
8245                status: Some(Status {
8246                    target: MoveTarget::Opponent,
8247                    status: PokemonStatus::SLEEP,
8248                }),
8249                move_type: PokemonType::PSYCHIC,
8250                flags: Flags {
8251                    protect: true,
8252                    reflectable: true,
8253                    ..Default::default()
8254                },
8255                ..Default::default()
8256            },
8257        );
8258        moves.insert(
8259            Choices::ICEBALL,
8260            Choice {
8261                move_id: Choices::ICEBALL,
8262                accuracy: 90.0,
8263                base_power: 30.0,
8264                category: MoveCategory::Physical,
8265                move_type: PokemonType::ICE,
8266                flags: Flags {
8267                    bullet: true,
8268                    contact: true,
8269                    protect: true,
8270                    ..Default::default()
8271                },
8272                ..Default::default()
8273            },
8274        );
8275        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8276            moves.insert(
8277                Choices::ICEBEAM,
8278                Choice {
8279                    move_id: Choices::ICEBEAM,
8280                    base_power: 95.0,
8281                    category: MoveCategory::Special,
8282                    move_type: PokemonType::ICE,
8283                    flags: Flags {
8284                            protect: true,
8285                        ..Default::default()
8286                    },
8287                    secondaries: Some(vec![Secondary {
8288                        chance: 10.0,
8289                        target: MoveTarget::Opponent,
8290                        effect: Effect::Status(PokemonStatus::FREEZE),
8291                    }]),
8292                    ..Default::default()
8293                },
8294            );
8295        } else {
8296            moves.insert(
8297                Choices::ICEBEAM,
8298                Choice {
8299                    move_id: Choices::ICEBEAM,
8300                    base_power: 90.0,
8301                    category: MoveCategory::Special,
8302                    move_type: PokemonType::ICE,
8303                    flags: Flags {
8304                            protect: true,
8305                        ..Default::default()
8306                    },
8307                    secondaries: Some(vec![Secondary {
8308                        chance: 10.0,
8309                        target: MoveTarget::Opponent,
8310                        effect: Effect::Status(PokemonStatus::FREEZE),
8311                    }]),
8312                    ..Default::default()
8313                },
8314            );
8315        }
8316        moves.insert(
8317            Choices::ICEBURN,
8318            Choice {
8319                move_id: Choices::ICEBURN,
8320                accuracy: 90.0,
8321                base_power: 140.0,
8322                category: MoveCategory::Special,
8323                move_type: PokemonType::ICE,
8324                flags: Flags {
8325                    charge: true,
8326                    protect: true,
8327                    ..Default::default()
8328                },
8329                secondaries: Some(vec![Secondary {
8330                    chance: 30.0,
8331                    target: MoveTarget::Opponent,
8332                    effect: Effect::Status(PokemonStatus::BURN),
8333                }]),
8334                ..Default::default()
8335            },
8336        );
8337        moves.insert(
8338            Choices::ICEFANG,
8339            Choice {
8340                move_id: Choices::ICEFANG,
8341                accuracy: 95.0,
8342                base_power: 65.0,
8343                category: MoveCategory::Physical,
8344                move_type: PokemonType::ICE,
8345                flags: Flags {
8346                    bite: true,
8347                    contact: true,
8348                    protect: true,
8349                    ..Default::default()
8350                },
8351                secondaries: Some(vec![
8352                    Secondary {
8353                        chance: 10.0,
8354                        target: MoveTarget::Opponent,
8355                        effect: Effect::Status(PokemonStatus::FREEZE),
8356                    },
8357                    Secondary {
8358                        chance: 10.0,
8359                        target: MoveTarget::Opponent,
8360                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8361                    },
8362                ]),
8363                ..Default::default()
8364            },
8365        );
8366        moves.insert(
8367            Choices::ICEHAMMER,
8368            Choice {
8369                move_id: Choices::ICEHAMMER,
8370                accuracy: 90.0,
8371                base_power: 100.0,
8372                category: MoveCategory::Physical,
8373                move_type: PokemonType::ICE,
8374                flags: Flags {
8375                    contact: true,
8376                    protect: true,
8377                    punch: true,
8378                    ..Default::default()
8379                },
8380                boost: Some(Boost {
8381                    target: MoveTarget::User,
8382                    boosts: StatBoosts {
8383                        attack: 0,
8384                        defense: 0,
8385                        special_attack: 0,
8386                        special_defense: 0,
8387                        speed: -1,
8388                        accuracy: 0,
8389                    },
8390                }),
8391                ..Default::default()
8392            },
8393        );
8394        moves.insert(
8395            Choices::ICEPUNCH,
8396            Choice {
8397                move_id: Choices::ICEPUNCH,
8398                base_power: 75.0,
8399                category: MoveCategory::Physical,
8400                move_type: PokemonType::ICE,
8401                flags: Flags {
8402                    contact: true,
8403                    protect: true,
8404                    punch: true,
8405                    ..Default::default()
8406                },
8407                secondaries: Some(vec![Secondary {
8408                    chance: 10.0,
8409                    target: MoveTarget::Opponent,
8410                    effect: Effect::Status(PokemonStatus::FREEZE),
8411                }]),
8412                ..Default::default()
8413            },
8414        );
8415        moves.insert(
8416            Choices::ICESHARD,
8417            Choice {
8418                move_id: Choices::ICESHARD,
8419                base_power: 40.0,
8420                category: MoveCategory::Physical,
8421                priority: 1,
8422                move_type: PokemonType::ICE,
8423                flags: Flags {
8424                    protect: true,
8425                    ..Default::default()
8426                },
8427                ..Default::default()
8428            },
8429        );
8430        moves.insert(
8431            Choices::ICESPINNER,
8432            Choice {
8433                move_id: Choices::ICESPINNER,
8434                base_power: 80.0,
8435                category: MoveCategory::Physical,
8436                move_type: PokemonType::ICE,
8437                flags: Flags {
8438                    contact: true,
8439                    protect: true,
8440                    ..Default::default()
8441                },
8442                ..Default::default()
8443            },
8444        );
8445        moves.insert(
8446            Choices::ICICLECRASH,
8447            Choice {
8448                move_id: Choices::ICICLECRASH,
8449                accuracy: 90.0,
8450                base_power: 85.0,
8451                category: MoveCategory::Physical,
8452                move_type: PokemonType::ICE,
8453                flags: Flags {
8454                    protect: true,
8455                    ..Default::default()
8456                },
8457                secondaries: Some(vec![Secondary {
8458                    chance: 30.0,
8459                    target: MoveTarget::Opponent,
8460                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8461                }]),
8462                ..Default::default()
8463            },
8464        );
8465        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
8466            moves.insert(
8467                Choices::ICICLESPEAR,
8468                Choice {
8469                    move_id: Choices::ICICLESPEAR,
8470                    base_power: 10.0,
8471                    category: MoveCategory::Physical,
8472                    move_type: PokemonType::ICE,
8473                    flags: Flags {
8474                            protect: true,
8475                        ..Default::default()
8476                    },
8477                    ..Default::default()
8478                },
8479            );
8480        } else {
8481            moves.insert(
8482                Choices::ICICLESPEAR,
8483                Choice {
8484                    move_id: Choices::ICICLESPEAR,
8485                    base_power: 25.0,
8486                    category: MoveCategory::Physical,
8487                    move_type: PokemonType::ICE,
8488                    flags: Flags {
8489                            protect: true,
8490                        ..Default::default()
8491                    },
8492                    ..Default::default()
8493                },
8494            );
8495        }
8496        moves.insert(
8497            Choices::ICYWIND,
8498            Choice {
8499                move_id: Choices::ICYWIND,
8500                accuracy: 95.0,
8501                base_power: 55.0,
8502                category: MoveCategory::Special,
8503                move_type: PokemonType::ICE,
8504                flags: Flags {
8505                    protect: true,
8506                    wind: true,
8507                    ..Default::default()
8508                },
8509                secondaries: Some(vec![Secondary {
8510                    chance: 100.0,
8511                    target: MoveTarget::Opponent,
8512                    effect: Effect::Boost(StatBoosts {
8513                        attack: 0,
8514                        defense: 0,
8515                        special_attack: 0,
8516                        special_defense: 0,
8517                        speed: -1,
8518                        accuracy: 0,
8519                    }),
8520                }]),
8521                ..Default::default()
8522            },
8523        );
8524        moves.insert(
8525            Choices::IMPRISON,
8526            Choice {
8527                move_id: Choices::IMPRISON,
8528                target: MoveTarget::User,
8529                move_type: PokemonType::PSYCHIC,
8530                flags: Flags {
8531                    ..Default::default()
8532                },
8533                volatile_status: Some(VolatileStatus {
8534                    target: MoveTarget::User,
8535                    volatile_status: PokemonVolatileStatus::IMPRISON,
8536                }),
8537                ..Default::default()
8538            },
8539        );
8540        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8541            moves.insert(
8542                Choices::INCINERATE,
8543                Choice {
8544                    move_id: Choices::INCINERATE,
8545                    base_power: 30.0,
8546                    category: MoveCategory::Special,
8547                    move_type: PokemonType::FIRE,
8548                    flags: Flags {
8549                            protect: true,
8550                        ..Default::default()
8551                    },
8552                    ..Default::default()
8553                },
8554            );
8555        } else {
8556            moves.insert(
8557                Choices::INCINERATE,
8558                Choice {
8559                    move_id: Choices::INCINERATE,
8560                    base_power: 60.0,
8561                    category: MoveCategory::Special,
8562                    move_type: PokemonType::FIRE,
8563                    flags: Flags {
8564                            protect: true,
8565                        ..Default::default()
8566                    },
8567                    ..Default::default()
8568                },
8569            );
8570        }
8571        moves.insert(
8572            Choices::INFERNALPARADE,
8573            Choice {
8574                move_id: Choices::INFERNALPARADE,
8575                base_power: 60.0,
8576                category: MoveCategory::Special,
8577                move_type: PokemonType::GHOST,
8578                flags: Flags {
8579                    protect: true,
8580                    ..Default::default()
8581                },
8582                secondaries: Some(vec![Secondary {
8583                    chance: 30.0,
8584                    target: MoveTarget::Opponent,
8585                    effect: Effect::Status(PokemonStatus::BURN),
8586                }]),
8587                ..Default::default()
8588            },
8589        );
8590        moves.insert(
8591            Choices::INFERNO,
8592            Choice {
8593                move_id: Choices::INFERNO,
8594                accuracy: 50.0,
8595                base_power: 100.0,
8596                category: MoveCategory::Special,
8597                move_type: PokemonType::FIRE,
8598                flags: Flags {
8599                    protect: true,
8600                    ..Default::default()
8601                },
8602                secondaries: Some(vec![Secondary {
8603                    chance: 100.0,
8604                    target: MoveTarget::Opponent,
8605                    effect: Effect::Status(PokemonStatus::BURN),
8606                }]),
8607                ..Default::default()
8608            },
8609        );
8610        moves.insert(
8611            Choices::INFESTATION,
8612            Choice {
8613                move_id: Choices::INFESTATION,
8614                base_power: 20.0,
8615                category: MoveCategory::Special,
8616                move_type: PokemonType::BUG,
8617                flags: Flags {
8618                    contact: true,
8619                    protect: true,
8620                    ..Default::default()
8621                },
8622                volatile_status: Some(VolatileStatus {
8623                    target: MoveTarget::Opponent,
8624                    volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
8625                }),
8626                ..Default::default()
8627            },
8628        );
8629        moves.insert(
8630            Choices::INGRAIN,
8631            Choice {
8632                move_id: Choices::INGRAIN,
8633                target: MoveTarget::User,
8634                move_type: PokemonType::GRASS,
8635                flags: Flags {
8636                    ..Default::default()
8637                },
8638                volatile_status: Some(VolatileStatus {
8639                    target: MoveTarget::User,
8640                    volatile_status: PokemonVolatileStatus::INGRAIN,
8641                }),
8642                ..Default::default()
8643            },
8644        );
8645        moves.insert(
8646            Choices::INSTRUCT,
8647            Choice {
8648                move_id: Choices::INSTRUCT,
8649                move_type: PokemonType::PSYCHIC,
8650                flags: Flags {
8651                    protect: true,
8652                    ..Default::default()
8653                },
8654                ..Default::default()
8655            },
8656        );
8657        moves.insert(
8658            Choices::IONDELUGE,
8659            Choice {
8660                move_id: Choices::IONDELUGE,
8661                priority: 1,
8662                move_type: PokemonType::ELECTRIC,
8663                flags: Flags {
8664                    ..Default::default()
8665                },
8666                ..Default::default()
8667            },
8668        );
8669        moves.insert(
8670            Choices::IRONDEFENSE,
8671            Choice {
8672                move_id: Choices::IRONDEFENSE,
8673                target: MoveTarget::User,
8674                move_type: PokemonType::STEEL,
8675                flags: Flags {
8676                    ..Default::default()
8677                },
8678                boost: Some(Boost {
8679                    target: MoveTarget::User,
8680                    boosts: StatBoosts {
8681                        attack: 0,
8682                        defense: 2,
8683                        special_attack: 0,
8684                        special_defense: 0,
8685                        speed: 0,
8686                        accuracy: 0,
8687                    },
8688                }),
8689                ..Default::default()
8690            },
8691        );
8692        moves.insert(
8693            Choices::IRONHEAD,
8694            Choice {
8695                move_id: Choices::IRONHEAD,
8696                base_power: 80.0,
8697                category: MoveCategory::Physical,
8698                move_type: PokemonType::STEEL,
8699                flags: Flags {
8700                    contact: true,
8701                    protect: true,
8702                    ..Default::default()
8703                },
8704                secondaries: Some(vec![Secondary {
8705                    chance: 30.0,
8706                    target: MoveTarget::Opponent,
8707                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
8708                }]),
8709                ..Default::default()
8710            },
8711        );
8712        moves.insert(
8713            Choices::IRONTAIL,
8714            Choice {
8715                move_id: Choices::IRONTAIL,
8716                accuracy: 75.0,
8717                base_power: 100.0,
8718                category: MoveCategory::Physical,
8719                move_type: PokemonType::STEEL,
8720                flags: Flags {
8721                    contact: true,
8722                    protect: true,
8723                    ..Default::default()
8724                },
8725                secondaries: Some(vec![Secondary {
8726                    chance: 30.0,
8727                    target: MoveTarget::Opponent,
8728                    effect: Effect::Boost(StatBoosts {
8729                        attack: 0,
8730                        defense: -1,
8731                        special_attack: 0,
8732                        special_defense: 0,
8733                        speed: 0,
8734                        accuracy: 0,
8735                    }),
8736                }]),
8737                ..Default::default()
8738            },
8739        );
8740        moves.insert(
8741            Choices::IVYCUDGEL,
8742            Choice {
8743                move_id: Choices::IVYCUDGEL,
8744                base_power: 100.0,
8745                category: MoveCategory::Physical,
8746                move_type: PokemonType::GRASS,
8747                flags: Flags {
8748                    protect: true,
8749                    ..Default::default()
8750                },
8751                ..Default::default()
8752            },
8753        );
8754        moves.insert(
8755            Choices::JAWLOCK,
8756            Choice {
8757                move_id: Choices::JAWLOCK,
8758                base_power: 80.0,
8759                category: MoveCategory::Physical,
8760                move_type: PokemonType::DARK,
8761                flags: Flags {
8762                    bite: true,
8763                    contact: true,
8764                    protect: true,
8765                    ..Default::default()
8766                },
8767                ..Default::default()
8768            },
8769        );
8770        moves.insert(
8771            Choices::JETPUNCH,
8772            Choice {
8773                move_id: Choices::JETPUNCH,
8774                base_power: 60.0,
8775                category: MoveCategory::Physical,
8776                priority: 1,
8777                move_type: PokemonType::WATER,
8778                flags: Flags {
8779                    contact: true,
8780                    protect: true,
8781                    punch: true,
8782                    ..Default::default()
8783                },
8784                ..Default::default()
8785            },
8786        );
8787        moves.insert(
8788            Choices::JUDGMENT,
8789            Choice {
8790                move_id: Choices::JUDGMENT,
8791                base_power: 100.0,
8792                category: MoveCategory::Special,
8793                move_type: PokemonType::NORMAL,
8794                flags: Flags {
8795                    protect: true,
8796                    ..Default::default()
8797                },
8798                ..Default::default()
8799            },
8800        );
8801        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
8802            moves.insert(
8803                Choices::JUMPKICK,
8804                Choice {
8805                    move_id: Choices::JUMPKICK,
8806                    accuracy: 95.0,
8807                    base_power: 70.0,
8808                    category: MoveCategory::Physical,
8809                    move_type: PokemonType::FIGHTING,
8810                    flags: Flags {
8811                        contact: true,
8812                                protect: true,
8813                        ..Default::default()
8814                    },
8815                    crash: Some(0.5),
8816                    ..Default::default()
8817                },
8818            );
8819        }
8820        else if cfg!(feature = "gen4") {
8821            moves.insert(
8822                Choices::JUMPKICK,
8823                Choice {
8824                    move_id: Choices::JUMPKICK,
8825                    accuracy: 95.0,
8826                    base_power: 85.0,
8827                    category: MoveCategory::Physical,
8828                    move_type: PokemonType::FIGHTING,
8829                    flags: Flags {
8830                        contact: true,
8831                                protect: true,
8832                        ..Default::default()
8833                    },
8834                    crash: Some(0.5),
8835                    ..Default::default()
8836                },
8837            );
8838        } else {
8839            moves.insert(
8840                Choices::JUMPKICK,
8841                Choice {
8842                    move_id: Choices::JUMPKICK,
8843                    accuracy: 95.0,
8844                    base_power: 100.0,
8845                    category: MoveCategory::Physical,
8846                    move_type: PokemonType::FIGHTING,
8847                    flags: Flags {
8848                        contact: true,
8849                                protect: true,
8850                        ..Default::default()
8851                    },
8852                    crash: Some(0.5),
8853                    ..Default::default()
8854                },
8855            );
8856        }
8857        moves.insert(
8858            Choices::JUNGLEHEALING,
8859            Choice {
8860                move_id: Choices::JUNGLEHEALING,
8861                target: MoveTarget::User,
8862                move_type: PokemonType::GRASS,
8863                flags: Flags {
8864                    heal: true,
8865                    ..Default::default()
8866                },
8867                heal: Some(Heal {
8868                    target: MoveTarget::User,
8869                    amount: 0.25,
8870                }),
8871                ..Default::default()
8872            },
8873        );
8874        if cfg!(feature = "gen1") {
8875            moves.insert(
8876                Choices::KARATECHOP,
8877                Choice {
8878                    move_id: Choices::KARATECHOP,
8879                    base_power: 50.0,
8880                    category: MoveCategory::Physical,
8881                    move_type: PokemonType::NORMAL,
8882                    flags: Flags {
8883                        contact: true,
8884                        protect: true,
8885                        ..Default::default()
8886                    },
8887                    ..Default::default()
8888                },
8889            );
8890        } else {
8891            moves.insert(
8892                Choices::KARATECHOP,
8893                Choice {
8894                    move_id: Choices::KARATECHOP,
8895                    base_power: 50.0,
8896                    category: MoveCategory::Physical,
8897                    move_type: PokemonType::FIGHTING,
8898                    flags: Flags {
8899                        contact: true,
8900                        protect: true,
8901                        ..Default::default()
8902                    },
8903                    ..Default::default()
8904                },
8905            );
8906        }
8907        moves.insert(
8908            Choices::KINESIS,
8909            Choice {
8910                move_id: Choices::KINESIS,
8911                accuracy: 80.0,
8912                move_type: PokemonType::PSYCHIC,
8913                flags: Flags {
8914                    protect: true,
8915                    reflectable: true,
8916                    ..Default::default()
8917                },
8918                boost: Some(Boost {
8919                    target: MoveTarget::Opponent,
8920                    boosts: StatBoosts {
8921                        attack: 0,
8922                        defense: 0,
8923                        special_attack: 0,
8924                        special_defense: 0,
8925                        speed: 0,
8926                        accuracy: -1,
8927                    },
8928                }),
8929                ..Default::default()
8930            },
8931        );
8932        moves.insert(
8933            Choices::KINGSSHIELD,
8934            Choice {
8935                move_id: Choices::KINGSSHIELD,
8936                priority: 4,
8937                target: MoveTarget::User,
8938                move_type: PokemonType::STEEL,
8939                flags: Flags {
8940                    ..Default::default()
8941                },
8942                volatile_status: Some(VolatileStatus {
8943                    target: MoveTarget::User,
8944                    volatile_status: PokemonVolatileStatus::KINGSSHIELD,
8945                }),
8946                ..Default::default()
8947            },
8948        );
8949        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
8950            moves.insert(
8951                Choices::KNOCKOFF,
8952                Choice {
8953                    move_id: Choices::KNOCKOFF,
8954                    base_power: 20.0,
8955                    category: MoveCategory::Physical,
8956                    move_type: PokemonType::DARK,
8957                    flags: Flags {
8958                        contact: true,
8959                        protect: true,
8960                        ..Default::default()
8961                    },
8962                    ..Default::default()
8963                },
8964            );
8965        } else {
8966            moves.insert(
8967                Choices::KNOCKOFF,
8968                Choice {
8969                    move_id: Choices::KNOCKOFF,
8970                    base_power: 65.0,
8971                    category: MoveCategory::Physical,
8972                    move_type: PokemonType::DARK,
8973                    flags: Flags {
8974                        contact: true,
8975                        protect: true,
8976                        ..Default::default()
8977                    },
8978                    ..Default::default()
8979                },
8980            );
8981        }
8982        moves.insert(
8983            Choices::KOWTOWCLEAVE,
8984            Choice {
8985                move_id: Choices::KOWTOWCLEAVE,
8986                base_power: 85.0,
8987                category: MoveCategory::Physical,
8988                move_type: PokemonType::DARK,
8989                flags: Flags {
8990                    contact: true,
8991                    protect: true,
8992                    slicing: true,
8993                    ..Default::default()
8994                },
8995                ..Default::default()
8996            },
8997        );
8998        moves.insert(
8999            Choices::LANDSWRATH,
9000            Choice {
9001                move_id: Choices::LANDSWRATH,
9002                base_power: 90.0,
9003                category: MoveCategory::Physical,
9004                move_type: PokemonType::GROUND,
9005                flags: Flags {
9006                    protect: true,
9007                    ..Default::default()
9008                },
9009                ..Default::default()
9010            },
9011        );
9012        moves.insert(
9013            Choices::LASERFOCUS,
9014            Choice {
9015                move_id: Choices::LASERFOCUS,
9016                target: MoveTarget::User,
9017                move_type: PokemonType::NORMAL,
9018                flags: Flags {
9019                    ..Default::default()
9020                },
9021                volatile_status: Some(VolatileStatus {
9022                    target: MoveTarget::User,
9023                    volatile_status: PokemonVolatileStatus::LASERFOCUS,
9024                }),
9025                ..Default::default()
9026            },
9027        );
9028        moves.insert(
9029            Choices::LASHOUT,
9030            Choice {
9031                move_id: Choices::LASHOUT,
9032                base_power: 75.0,
9033                category: MoveCategory::Physical,
9034                move_type: PokemonType::DARK,
9035                flags: Flags {
9036                    contact: true,
9037                    protect: true,
9038                    ..Default::default()
9039                },
9040                ..Default::default()
9041            },
9042        );
9043        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
9044            moves.insert(
9045                Choices::LASTRESORT,
9046                Choice {
9047                    move_id: Choices::LASTRESORT,
9048                    base_power: 130.0,
9049                    category: MoveCategory::Physical,
9050                    move_type: PokemonType::NORMAL,
9051                    flags: Flags {
9052                        contact: true,
9053                            protect: true,
9054                        ..Default::default()
9055                    },
9056                    ..Default::default()
9057                },
9058            );
9059        } else {
9060            moves.insert(
9061                Choices::LASTRESORT,
9062                Choice {
9063                    move_id: Choices::LASTRESORT,
9064                    base_power: 140.0,
9065                    category: MoveCategory::Physical,
9066                    move_type: PokemonType::NORMAL,
9067                    flags: Flags {
9068                        contact: true,
9069                            protect: true,
9070                        ..Default::default()
9071                    },
9072                    ..Default::default()
9073                },
9074            );
9075        }
9076        moves.insert(
9077            Choices::LASTRESPECTS,
9078            Choice {
9079                move_id: Choices::LASTRESPECTS,
9080                base_power: 50.0,
9081                category: MoveCategory::Physical,
9082                move_type: PokemonType::GHOST,
9083                flags: Flags {
9084                    protect: true,
9085                    ..Default::default()
9086                },
9087                ..Default::default()
9088            },
9089        );
9090        moves.insert(
9091            Choices::LAVAPLUME,
9092            Choice {
9093                move_id: Choices::LAVAPLUME,
9094                base_power: 80.0,
9095                category: MoveCategory::Special,
9096                move_type: PokemonType::FIRE,
9097                flags: Flags {
9098                    protect: true,
9099                    ..Default::default()
9100                },
9101                secondaries: Some(vec![Secondary {
9102                    chance: 30.0,
9103                    target: MoveTarget::Opponent,
9104                    effect: Effect::Status(PokemonStatus::BURN),
9105                }]),
9106                ..Default::default()
9107            },
9108        );
9109        moves.insert(
9110            Choices::LEAFAGE,
9111            Choice {
9112                move_id: Choices::LEAFAGE,
9113                base_power: 40.0,
9114                category: MoveCategory::Physical,
9115                move_type: PokemonType::GRASS,
9116                flags: Flags {
9117                    protect: true,
9118                    ..Default::default()
9119                },
9120                ..Default::default()
9121            },
9122        );
9123        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
9124            moves.insert(
9125                Choices::LEAFBLADE,
9126                Choice {
9127                    move_id: Choices::LEAFBLADE,
9128                    base_power: 70.0,
9129                    category: MoveCategory::Physical,
9130                    move_type: PokemonType::GRASS,
9131                    flags: Flags {
9132                        contact: true,
9133                        protect: true,
9134                        slicing: true,
9135                        ..Default::default()
9136                    },
9137                    ..Default::default()
9138                },
9139            );
9140        } else {
9141            moves.insert(
9142                Choices::LEAFBLADE,
9143                Choice {
9144                    move_id: Choices::LEAFBLADE,
9145                    base_power: 90.0,
9146                    category: MoveCategory::Physical,
9147                    move_type: PokemonType::GRASS,
9148                    flags: Flags {
9149                        contact: true,
9150                        protect: true,
9151                        slicing: true,
9152                        ..Default::default()
9153                    },
9154                    ..Default::default()
9155                },
9156            );
9157        }
9158        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
9159            moves.insert(
9160                Choices::LEAFSTORM,
9161                Choice {
9162                    move_id: Choices::LEAFSTORM,
9163                    accuracy: 90.0,
9164                    base_power: 140.0,
9165                    category: MoveCategory::Special,
9166                    move_type: PokemonType::GRASS,
9167                    flags: Flags {
9168                            protect: true,
9169                        ..Default::default()
9170                    },
9171                    boost: Some(Boost {
9172                        target: MoveTarget::User,
9173                        boosts: StatBoosts {
9174                            attack: 0,
9175                            defense: 0,
9176                            special_attack: -2,
9177                            special_defense: 0,
9178                            speed: 0,
9179                            accuracy: 0,
9180                        },
9181                    }),
9182                    ..Default::default()
9183                },
9184            );
9185        } else {
9186            moves.insert(
9187                Choices::LEAFSTORM,
9188                Choice {
9189                    move_id: Choices::LEAFSTORM,
9190                    accuracy: 90.0,
9191                    base_power: 130.0,
9192                    category: MoveCategory::Special,
9193                    move_type: PokemonType::GRASS,
9194                    flags: Flags {
9195                            protect: true,
9196                        ..Default::default()
9197                    },
9198                    boost: Some(Boost {
9199                        target: MoveTarget::User,
9200                        boosts: StatBoosts {
9201                            attack: 0,
9202                            defense: 0,
9203                            special_attack: -2,
9204                            special_defense: 0,
9205                            speed: 0,
9206                            accuracy: 0,
9207                        },
9208                    }),
9209                    ..Default::default()
9210                },
9211            );
9212        }
9213        moves.insert(
9214            Choices::LEAFTORNADO,
9215            Choice {
9216                move_id: Choices::LEAFTORNADO,
9217                accuracy: 90.0,
9218                base_power: 65.0,
9219                category: MoveCategory::Special,
9220                move_type: PokemonType::GRASS,
9221                flags: Flags {
9222                    protect: true,
9223                    ..Default::default()
9224                },
9225                secondaries: Some(vec![Secondary {
9226                    chance: 50.0,
9227                    target: MoveTarget::Opponent,
9228                    effect: Effect::Boost(StatBoosts {
9229                        attack: 0,
9230                        defense: 0,
9231                        special_attack: 0,
9232                        special_defense: 0,
9233                        speed: 0,
9234                        accuracy: -1,
9235                    }),
9236                }]),
9237                ..Default::default()
9238            },
9239        );
9240        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
9241            moves.insert(
9242                Choices::LEECHLIFE,
9243                Choice {
9244                    move_id: Choices::LEECHLIFE,
9245                    base_power: 20.0,
9246                    category: MoveCategory::Physical,
9247                    move_type: PokemonType::BUG,
9248                    flags: Flags {
9249                        contact: true,
9250                        heal: true,
9251                            protect: true,
9252                        ..Default::default()
9253                    },
9254                    drain: Some(0.5),
9255                    ..Default::default()
9256                },
9257            );
9258        } else {
9259            moves.insert(
9260                Choices::LEECHLIFE,
9261                Choice {
9262                    move_id: Choices::LEECHLIFE,
9263                    base_power: 80.0,
9264                    category: MoveCategory::Physical,
9265                    move_type: PokemonType::BUG,
9266                    flags: Flags {
9267                        contact: true,
9268                        heal: true,
9269                            protect: true,
9270                        ..Default::default()
9271                    },
9272                    drain: Some(0.5),
9273                    ..Default::default()
9274                },
9275            );
9276        }
9277        moves.insert(
9278            Choices::LEECHSEED,
9279            Choice {
9280                move_id: Choices::LEECHSEED,
9281                accuracy: 90.0,
9282                move_type: PokemonType::GRASS,
9283                flags: Flags {
9284                    powder: true,
9285                    protect: true,
9286                    reflectable: true,
9287                    ..Default::default()
9288                },
9289                volatile_status: Some(VolatileStatus {
9290                    target: MoveTarget::Opponent,
9291                    volatile_status: PokemonVolatileStatus::LEECHSEED,
9292                }),
9293                ..Default::default()
9294            },
9295        );
9296        moves.insert(
9297            Choices::LEER,
9298            Choice {
9299                move_id: Choices::LEER,
9300                move_type: PokemonType::NORMAL,
9301                flags: Flags {
9302                    protect: true,
9303                    reflectable: true,
9304                    ..Default::default()
9305                },
9306                boost: Some(Boost {
9307                    target: MoveTarget::Opponent,
9308                    boosts: StatBoosts {
9309                        attack: 0,
9310                        defense: -1,
9311                        special_attack: 0,
9312                        special_defense: 0,
9313                        speed: 0,
9314                        accuracy: 0,
9315                    },
9316                }),
9317                ..Default::default()
9318            },
9319        );
9320        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
9321            moves.insert(
9322                Choices::LICK,
9323                Choice {
9324                    move_id: Choices::LICK,
9325                    base_power: 20.0,
9326                    category: MoveCategory::Physical,
9327                    move_type: PokemonType::GHOST,
9328                    flags: Flags {
9329                        contact: true,
9330                            protect: true,
9331                        ..Default::default()
9332                    },
9333                    secondaries: Some(vec![Secondary {
9334                        chance: 30.0,
9335                        target: MoveTarget::Opponent,
9336                        effect: Effect::Status(PokemonStatus::PARALYZE),
9337                    }]),
9338                    ..Default::default()
9339                },
9340            );
9341        } else {
9342            moves.insert(
9343                Choices::LICK,
9344                Choice {
9345                    move_id: Choices::LICK,
9346                    base_power: 30.0,
9347                    category: MoveCategory::Physical,
9348                    move_type: PokemonType::GHOST,
9349                    flags: Flags {
9350                        contact: true,
9351                            protect: true,
9352                        ..Default::default()
9353                    },
9354                    secondaries: Some(vec![Secondary {
9355                        chance: 30.0,
9356                        target: MoveTarget::Opponent,
9357                        effect: Effect::Status(PokemonStatus::PARALYZE),
9358                    }]),
9359                    ..Default::default()
9360                },
9361            );
9362        }
9363        moves.insert(
9364            Choices::LIFEDEW,
9365            Choice {
9366                move_id: Choices::LIFEDEW,
9367                target: MoveTarget::User,
9368                move_type: PokemonType::WATER,
9369                flags: Flags {
9370                    heal: true,
9371                    ..Default::default()
9372                },
9373                heal: Some(Heal {
9374                    target: MoveTarget::User,
9375                    amount: 0.25,
9376                }),
9377                ..Default::default()
9378            },
9379        );
9380        moves.insert(
9381            Choices::LIGHTOFRUIN,
9382            Choice {
9383                move_id: Choices::LIGHTOFRUIN,
9384                accuracy: 90.0,
9385                base_power: 140.0,
9386                category: MoveCategory::Special,
9387                move_type: PokemonType::FAIRY,
9388                flags: Flags {
9389                    protect: true,
9390                    ..Default::default()
9391                },
9392                recoil: Some(0.5),
9393                ..Default::default()
9394            },
9395        );
9396        if cfg!(feature = "gen1") {
9397            moves.insert(
9398                Choices::LIGHTSCREEN,
9399                Choice {
9400                    move_id: Choices::LIGHTSCREEN,
9401                    target: MoveTarget::User,
9402                    move_type: PokemonType::PSYCHIC,
9403                    flags: Flags {
9404                        ..Default::default()
9405                    },
9406                    volatile_status: Some(VolatileStatus {
9407                        target: MoveTarget::User,
9408                        volatile_status: PokemonVolatileStatus::LIGHTSCREEN,
9409                    }),
9410                    ..Default::default()
9411                },
9412            );
9413        } else {
9414            moves.insert(
9415                Choices::LIGHTSCREEN,
9416                Choice {
9417                    move_id: Choices::LIGHTSCREEN,
9418                    target: MoveTarget::User,
9419                    move_type: PokemonType::PSYCHIC,
9420                    flags: Flags {
9421                        ..Default::default()
9422                    },
9423                    side_condition: Some(SideCondition {
9424                        target: MoveTarget::User,
9425                        condition: PokemonSideCondition::LightScreen,
9426                    }),
9427                    ..Default::default()
9428                },
9429            );
9430        }
9431        moves.insert(
9432            Choices::LIQUIDATION,
9433            Choice {
9434                move_id: Choices::LIQUIDATION,
9435                base_power: 85.0,
9436                category: MoveCategory::Physical,
9437                move_type: PokemonType::WATER,
9438                flags: Flags {
9439                    contact: true,
9440                    protect: true,
9441                    ..Default::default()
9442                },
9443                secondaries: Some(vec![Secondary {
9444                    chance: 20.0,
9445                    target: MoveTarget::Opponent,
9446                    effect: Effect::Boost(StatBoosts {
9447                        attack: 0,
9448                        defense: -1,
9449                        special_attack: 0,
9450                        special_defense: 0,
9451                        speed: 0,
9452                        accuracy: 0,
9453                    }),
9454                }]),
9455                ..Default::default()
9456            },
9457        );
9458        moves.insert(
9459            Choices::LOCKON,
9460            Choice {
9461                move_id: Choices::LOCKON,
9462                move_type: PokemonType::NORMAL,
9463                flags: Flags {
9464                    protect: true,
9465                    ..Default::default()
9466                },
9467                ..Default::default()
9468            },
9469        );
9470        moves.insert(
9471            Choices::LOVELYKISS,
9472            Choice {
9473                move_id: Choices::LOVELYKISS,
9474                accuracy: 75.0,
9475                status: Some(Status {
9476                    target: MoveTarget::Opponent,
9477                    status: PokemonStatus::SLEEP,
9478                }),
9479                move_type: PokemonType::NORMAL,
9480                flags: Flags {
9481                    protect: true,
9482                    reflectable: true,
9483                    ..Default::default()
9484                },
9485                ..Default::default()
9486            },
9487        );
9488        if cfg!(feature = "gen1") || cfg!(feature = "gen2") {
9489            moves.insert(
9490                Choices::LOWKICK,
9491                Choice {
9492                    move_id: Choices::LOWKICK,
9493                    category: MoveCategory::Physical,
9494                    base_power: 50.0,
9495                    accuracy: 90.0,
9496                    move_type: PokemonType::FIGHTING,
9497                    flags: Flags {
9498                        contact: true,
9499                        protect: true,
9500                        ..Default::default()
9501                    },
9502                    secondaries: Some(vec![Secondary {
9503                        chance: 30.0,
9504                        target: MoveTarget::Opponent,
9505                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
9506                    }]),
9507                    ..Default::default()
9508                },
9509            );
9510        } else {
9511            moves.insert(
9512                Choices::LOWKICK,
9513                Choice {
9514                    move_id: Choices::LOWKICK,
9515                    category: MoveCategory::Physical,
9516                    move_type: PokemonType::FIGHTING,
9517                    flags: Flags {
9518                        contact: true,
9519                        protect: true,
9520                        ..Default::default()
9521                    },
9522                    ..Default::default()
9523                },
9524            );
9525        }
9526        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
9527            moves.insert(
9528                Choices::LOWSWEEP,
9529                Choice {
9530                    move_id: Choices::LOWSWEEP,
9531                    base_power: 60.0,
9532                    category: MoveCategory::Physical,
9533                    move_type: PokemonType::FIGHTING,
9534                    flags: Flags {
9535                        contact: true,
9536                            protect: true,
9537                        ..Default::default()
9538                    },
9539                    secondaries: Some(vec![Secondary {
9540                        chance: 100.0,
9541                        target: MoveTarget::Opponent,
9542                        effect: Effect::Boost(StatBoosts {
9543                            attack: 0,
9544                            defense: 0,
9545                            special_attack: 0,
9546                            special_defense: 0,
9547                            speed: -1,
9548                            accuracy: 0,
9549                        }),
9550                    }]),
9551                    ..Default::default()
9552                },
9553            );
9554        } else {
9555            moves.insert(
9556                Choices::LOWSWEEP,
9557                Choice {
9558                    move_id: Choices::LOWSWEEP,
9559                    base_power: 65.0,
9560                    category: MoveCategory::Physical,
9561                    move_type: PokemonType::FIGHTING,
9562                    flags: Flags {
9563                        contact: true,
9564                            protect: true,
9565                        ..Default::default()
9566                    },
9567                    secondaries: Some(vec![Secondary {
9568                        chance: 100.0,
9569                        target: MoveTarget::Opponent,
9570                        effect: Effect::Boost(StatBoosts {
9571                            attack: 0,
9572                            defense: 0,
9573                            special_attack: 0,
9574                            special_defense: 0,
9575                            speed: -1,
9576                            accuracy: 0,
9577                        }),
9578                    }]),
9579                    ..Default::default()
9580                },
9581            );
9582        }
9583        moves.insert(
9584            Choices::LUCKYCHANT,
9585            Choice {
9586                move_id: Choices::LUCKYCHANT,
9587                target: MoveTarget::User,
9588                move_type: PokemonType::NORMAL,
9589                flags: Flags {
9590                    ..Default::default()
9591                },
9592                side_condition: Some(SideCondition {
9593                    target: MoveTarget::User,
9594                    condition: PokemonSideCondition::LuckyChant,
9595                }),
9596                ..Default::default()
9597            },
9598        );
9599        moves.insert(
9600            Choices::LUMINACRASH,
9601            Choice {
9602                move_id: Choices::LUMINACRASH,
9603                base_power: 80.0,
9604                category: MoveCategory::Special,
9605                move_type: PokemonType::PSYCHIC,
9606                flags: Flags {
9607                    protect: true,
9608                    ..Default::default()
9609                },
9610                secondaries: Some(vec![Secondary {
9611                    chance: 100.0,
9612                    target: MoveTarget::Opponent,
9613                    effect: Effect::Boost(StatBoosts {
9614                        attack: 0,
9615                        defense: 0,
9616                        special_attack: 0,
9617                        special_defense: -2,
9618                        speed: 0,
9619                        accuracy: 0,
9620                    }),
9621                }]),
9622                ..Default::default()
9623            },
9624        );
9625        moves.insert(
9626            Choices::LUNARBLESSING,
9627            Choice {
9628                move_id: Choices::LUNARBLESSING,
9629                target: MoveTarget::User,
9630                move_type: PokemonType::PSYCHIC,
9631                flags: Flags {
9632                    heal: true,
9633                    ..Default::default()
9634                },
9635                heal: Some(Heal {
9636                    target: MoveTarget::User,
9637                    amount: 0.25,
9638                }),
9639                ..Default::default()
9640            },
9641        );
9642        moves.insert(
9643            Choices::LUNARDANCE,
9644            Choice {
9645                move_id: Choices::LUNARDANCE,
9646                target: MoveTarget::User,
9647                move_type: PokemonType::PSYCHIC,
9648                flags: Flags {
9649                    heal: true,
9650                    ..Default::default()
9651                },
9652                ..Default::default()
9653            },
9654        );
9655        moves.insert(
9656            Choices::LUNGE,
9657            Choice {
9658                move_id: Choices::LUNGE,
9659                base_power: 80.0,
9660                category: MoveCategory::Physical,
9661                move_type: PokemonType::BUG,
9662                flags: Flags {
9663                    contact: true,
9664                    protect: true,
9665                    ..Default::default()
9666                },
9667                secondaries: Some(vec![Secondary {
9668                    chance: 100.0,
9669                    target: MoveTarget::Opponent,
9670                    effect: Effect::Boost(StatBoosts {
9671                        attack: -1,
9672                        defense: 0,
9673                        special_attack: 0,
9674                        special_defense: 0,
9675                        speed: 0,
9676                        accuracy: 0,
9677                    }),
9678                }]),
9679                ..Default::default()
9680            },
9681        );
9682        if cfg!(feature = "gen9") {
9683            moves.insert(
9684            Choices::LUSTERPURGE,
9685            Choice {
9686                move_id: Choices::LUSTERPURGE,
9687                base_power: 95.0,
9688                category: MoveCategory::Special,
9689                move_type: PokemonType::PSYCHIC,
9690                flags: Flags {
9691                    protect: true,
9692                    ..Default::default()
9693                },
9694                secondaries: Some(vec![Secondary {
9695                    chance: 50.0,
9696                    target: MoveTarget::Opponent,
9697                    effect: Effect::Boost(StatBoosts {
9698                        attack: 0,
9699                        defense: 0,
9700                        special_attack: 0,
9701                        special_defense: -1,
9702                        speed: 0,
9703                        accuracy: 0,
9704                    }),
9705                }]),
9706                ..Default::default()
9707            },
9708        );
9709        } else {
9710            moves.insert(
9711                Choices::LUSTERPURGE,
9712                Choice {
9713                    move_id: Choices::LUSTERPURGE,
9714                    base_power: 70.0,
9715                    category: MoveCategory::Special,
9716                    move_type: PokemonType::PSYCHIC,
9717                    flags: Flags {
9718                        protect: true,
9719                        ..Default::default()
9720                    },
9721                    secondaries: Some(vec![Secondary {
9722                        chance: 50.0,
9723                        target: MoveTarget::Opponent,
9724                        effect: Effect::Boost(StatBoosts {
9725                            attack: 0,
9726                            defense: 0,
9727                            special_attack: 0,
9728                            special_defense: -1,
9729                            speed: 0,
9730                            accuracy: 0,
9731                        }),
9732                    }]),
9733                    ..Default::default()
9734                },
9735            );
9736        }
9737        moves.insert(
9738            Choices::MACHPUNCH,
9739            Choice {
9740                move_id: Choices::MACHPUNCH,
9741                base_power: 40.0,
9742                category: MoveCategory::Physical,
9743                priority: 1,
9744                move_type: PokemonType::FIGHTING,
9745                flags: Flags {
9746                    contact: true,
9747                    protect: true,
9748                    punch: true,
9749                    ..Default::default()
9750                },
9751                ..Default::default()
9752            },
9753        );
9754        moves.insert(
9755            Choices::MAGICALLEAF,
9756            Choice {
9757                move_id: Choices::MAGICALLEAF,
9758                base_power: 60.0,
9759                category: MoveCategory::Special,
9760                move_type: PokemonType::GRASS,
9761                flags: Flags {
9762                    protect: true,
9763                    ..Default::default()
9764                },
9765                ..Default::default()
9766            },
9767        );
9768        moves.insert(
9769            Choices::MAGICALTORQUE,
9770            Choice {
9771                move_id: Choices::MAGICALTORQUE,
9772                base_power: 100.0,
9773                category: MoveCategory::Physical,
9774                move_type: PokemonType::FAIRY,
9775                flags: Flags {
9776                    protect: true,
9777                    ..Default::default()
9778                },
9779                secondaries: Some(vec![Secondary {
9780                    chance: 30.0,
9781                    target: MoveTarget::Opponent,
9782                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
9783                }]),
9784                ..Default::default()
9785            },
9786        );
9787        moves.insert(
9788            Choices::MAGICCOAT,
9789            Choice {
9790                move_id: Choices::MAGICCOAT,
9791                priority: 4,
9792                target: MoveTarget::User,
9793                move_type: PokemonType::PSYCHIC,
9794                flags: Flags {
9795                    ..Default::default()
9796                },
9797                volatile_status: Some(VolatileStatus {
9798                    target: MoveTarget::User,
9799                    volatile_status: PokemonVolatileStatus::MAGICCOAT,
9800                }),
9801                ..Default::default()
9802            },
9803        );
9804        moves.insert(
9805            Choices::MAGICPOWDER,
9806            Choice {
9807                move_id: Choices::MAGICPOWDER,
9808                move_type: PokemonType::PSYCHIC,
9809                flags: Flags {
9810                    powder: true,
9811                    protect: true,
9812                    reflectable: true,
9813                    ..Default::default()
9814                },
9815                ..Default::default()
9816            },
9817        );
9818        moves.insert(
9819            Choices::MAGICROOM,
9820            Choice {
9821                move_id: Choices::MAGICROOM,
9822                move_type: PokemonType::PSYCHIC,
9823                flags: Flags {
9824                    ..Default::default()
9825                },
9826                ..Default::default()
9827            },
9828        );
9829        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
9830            moves.insert(
9831                Choices::MAGMASTORM,
9832                Choice {
9833                    move_id: Choices::MAGMASTORM,
9834                    accuracy: 70.0,
9835                    base_power: 120.0,
9836                    category: MoveCategory::Special,
9837                    move_type: PokemonType::FIRE,
9838                    flags: Flags {
9839                            protect: true,
9840                        ..Default::default()
9841                    },
9842                    volatile_status: Some(VolatileStatus {
9843                        target: MoveTarget::Opponent,
9844                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
9845                    }),
9846                    ..Default::default()
9847                },
9848            );
9849        } else if cfg!(feature = "gen5") {
9850            moves.insert(
9851                Choices::MAGMASTORM,
9852                Choice {
9853                    move_id: Choices::MAGMASTORM,
9854                    accuracy: 75.0,
9855                    base_power: 120.0,
9856                    category: MoveCategory::Special,
9857                    move_type: PokemonType::FIRE,
9858                    flags: Flags {
9859                            protect: true,
9860                        ..Default::default()
9861                    },
9862                    volatile_status: Some(VolatileStatus {
9863                        target: MoveTarget::Opponent,
9864                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
9865                    }),
9866                    ..Default::default()
9867                },
9868            );
9869        } else {
9870            moves.insert(
9871                Choices::MAGMASTORM,
9872                Choice {
9873                    move_id: Choices::MAGMASTORM,
9874                    accuracy: 75.0,
9875                    base_power: 100.0,
9876                    category: MoveCategory::Special,
9877                    move_type: PokemonType::FIRE,
9878                    flags: Flags {
9879                            protect: true,
9880                        ..Default::default()
9881                    },
9882                    volatile_status: Some(VolatileStatus {
9883                        target: MoveTarget::Opponent,
9884                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
9885                    }),
9886                    ..Default::default()
9887                },
9888            );
9889        }
9890        moves.insert(
9891            Choices::MAGNETBOMB,
9892            Choice {
9893                move_id: Choices::MAGNETBOMB,
9894                base_power: 60.0,
9895                category: MoveCategory::Physical,
9896                move_type: PokemonType::STEEL,
9897                flags: Flags {
9898                    bullet: true,
9899                    protect: true,
9900                    ..Default::default()
9901                },
9902                ..Default::default()
9903            },
9904        );
9905        moves.insert(
9906            Choices::MAGNETICFLUX,
9907            Choice {
9908                move_id: Choices::MAGNETICFLUX,
9909                target: MoveTarget::User,
9910                move_type: PokemonType::ELECTRIC,
9911                flags: Flags {
9912                    ..Default::default()
9913                },
9914                ..Default::default()
9915            },
9916        );
9917        moves.insert(
9918            Choices::MAGNETRISE,
9919            Choice {
9920                move_id: Choices::MAGNETRISE,
9921                target: MoveTarget::User,
9922                move_type: PokemonType::ELECTRIC,
9923                flags: Flags {
9924                    ..Default::default()
9925                },
9926                volatile_status: Some(VolatileStatus {
9927                    target: MoveTarget::User,
9928                    volatile_status: PokemonVolatileStatus::MAGNETRISE,
9929                }),
9930                ..Default::default()
9931            },
9932        );
9933        moves.insert(
9934            Choices::MAGNITUDE,
9935            Choice {
9936                move_id: Choices::MAGNITUDE,
9937                category: MoveCategory::Physical,
9938                move_type: PokemonType::GROUND,
9939                flags: Flags {
9940                    protect: true,
9941                    ..Default::default()
9942                },
9943                ..Default::default()
9944            },
9945        );
9946        moves.insert(
9947            Choices::MAKEITRAIN,
9948            Choice {
9949                move_id: Choices::MAKEITRAIN,
9950                base_power: 120.0,
9951                category: MoveCategory::Special,
9952                move_type: PokemonType::STEEL,
9953                flags: Flags {
9954                    protect: true,
9955                    ..Default::default()
9956                },
9957                boost: Some(Boost {
9958                    target: MoveTarget::User,
9959                    boosts: StatBoosts {
9960                        attack: 0,
9961                        defense: 0,
9962                        special_attack: -1,
9963                        special_defense: 0,
9964                        speed: 0,
9965                        accuracy: 0,
9966                    },
9967                }),
9968                ..Default::default()
9969            },
9970        );
9971        moves.insert(
9972            Choices::MALIGNANTCHAIN,
9973            Choice {
9974                move_id: Choices::MALIGNANTCHAIN,
9975                base_power: 100.0,
9976                category: MoveCategory::Special,
9977                move_type: PokemonType::POISON,
9978                flags: Flags {
9979                    protect: true,
9980                    ..Default::default()
9981                },
9982                secondaries: Some(vec![Secondary {
9983                    chance: 50.0,
9984                    target: MoveTarget::Opponent,
9985                    effect: Effect::Status(PokemonStatus::TOXIC),
9986                }]),
9987                ..Default::default()
9988            },
9989        );
9990        moves.insert(
9991            Choices::MATBLOCK,
9992            Choice {
9993                move_id: Choices::MATBLOCK,
9994                target: MoveTarget::User,
9995                move_type: PokemonType::FIGHTING,
9996                flags: Flags {
9997                    ..Default::default()
9998                },
9999                side_condition: Some(SideCondition {
10000                    target: MoveTarget::User,
10001                    condition: PokemonSideCondition::MatBlock,
10002                }),
10003                ..Default::default()
10004            },
10005        );
10006        moves.insert(
10007            Choices::MATCHAGOTCHA,
10008            Choice {
10009                move_id: Choices::MATCHAGOTCHA,
10010                accuracy: 90.0,
10011                base_power: 80.0,
10012                category: MoveCategory::Special,
10013                move_type: PokemonType::GRASS,
10014                flags: Flags {
10015                    protect: true,
10016                    heal: true,
10017                    ..Default::default()
10018                },
10019                secondaries: Some(vec![Secondary {
10020                    chance: 20.0,
10021                    target: MoveTarget::Opponent,
10022                    effect: Effect::Status(PokemonStatus::BURN),
10023                }]),
10024                drain: Some(0.5),
10025                ..Default::default()
10026            },
10027        );
10028        moves.insert(
10029            Choices::MEANLOOK,
10030            Choice {
10031                move_id: Choices::MEANLOOK,
10032                move_type: PokemonType::NORMAL,
10033                flags: Flags {
10034                    reflectable: true,
10035                    ..Default::default()
10036                },
10037                ..Default::default()
10038            },
10039        );
10040        moves.insert(
10041            Choices::MEDITATE,
10042            Choice {
10043                move_id: Choices::MEDITATE,
10044                target: MoveTarget::User,
10045                move_type: PokemonType::PSYCHIC,
10046                flags: Flags {
10047                    ..Default::default()
10048                },
10049                boost: Some(Boost {
10050                    target: MoveTarget::User,
10051                    boosts: StatBoosts {
10052                        attack: 1,
10053                        defense: 0,
10054                        special_attack: 0,
10055                        special_defense: 0,
10056                        speed: 0,
10057                        accuracy: 0,
10058                    },
10059                }),
10060                ..Default::default()
10061            },
10062        );
10063        moves.insert(
10064            Choices::MEFIRST,
10065            Choice {
10066                move_id: Choices::MEFIRST,
10067                move_type: PokemonType::NORMAL,
10068                flags: Flags {
10069                    protect: true,
10070                    ..Default::default()
10071                },
10072                ..Default::default()
10073            },
10074        );
10075        moves.insert(
10076            Choices::MEGADRAIN,
10077            Choice {
10078                move_id: Choices::MEGADRAIN,
10079                base_power: 40.0,
10080                category: MoveCategory::Special,
10081                move_type: PokemonType::GRASS,
10082                flags: Flags {
10083                    heal: true,
10084                    protect: true,
10085                    ..Default::default()
10086                },
10087                drain: Some(0.5),
10088                ..Default::default()
10089            },
10090        );
10091        moves.insert(
10092            Choices::MEGAHORN,
10093            Choice {
10094                move_id: Choices::MEGAHORN,
10095                accuracy: 85.0,
10096                base_power: 120.0,
10097                category: MoveCategory::Physical,
10098                move_type: PokemonType::BUG,
10099                flags: Flags {
10100                    contact: true,
10101                    protect: true,
10102                    ..Default::default()
10103                },
10104                ..Default::default()
10105            },
10106        );
10107        moves.insert(
10108            Choices::MEGAKICK,
10109            Choice {
10110                move_id: Choices::MEGAKICK,
10111                accuracy: 75.0,
10112                base_power: 120.0,
10113                category: MoveCategory::Physical,
10114                move_type: PokemonType::NORMAL,
10115                flags: Flags {
10116                    contact: true,
10117                    protect: true,
10118                    ..Default::default()
10119                },
10120                ..Default::default()
10121            },
10122        );
10123        moves.insert(
10124            Choices::MEGAPUNCH,
10125            Choice {
10126                move_id: Choices::MEGAPUNCH,
10127                accuracy: 85.0,
10128                base_power: 80.0,
10129                category: MoveCategory::Physical,
10130                move_type: PokemonType::NORMAL,
10131                flags: Flags {
10132                    contact: true,
10133                    protect: true,
10134                    punch: true,
10135                    ..Default::default()
10136                },
10137                ..Default::default()
10138            },
10139        );
10140        moves.insert(
10141            Choices::MEMENTO,
10142            Choice {
10143                move_id: Choices::MEMENTO,
10144                move_type: PokemonType::DARK,
10145                flags: Flags {
10146                    protect: true,
10147                    ..Default::default()
10148                },
10149                boost: Some(Boost {
10150                    target: MoveTarget::Opponent,
10151                    boosts: StatBoosts {
10152                        attack: -2,
10153                        defense: 0,
10154                        special_attack: -2,
10155                        special_defense: 0,
10156                        speed: 0,
10157                        accuracy: 0,
10158                    },
10159                }),
10160                heal: Some(Heal {
10161                    target: MoveTarget::User,
10162                    amount: -1.0,
10163                }),
10164                ..Default::default()
10165            },
10166        );
10167        moves.insert(
10168            Choices::METALBURST,
10169            Choice {
10170                move_id: Choices::METALBURST,
10171                category: MoveCategory::Physical,
10172                move_type: PokemonType::STEEL,
10173                flags: Flags {
10174                    protect: true,
10175                    ..Default::default()
10176                },
10177                ..Default::default()
10178            },
10179        );
10180        moves.insert(
10181            Choices::METALCLAW,
10182            Choice {
10183                move_id: Choices::METALCLAW,
10184                accuracy: 95.0,
10185                base_power: 50.0,
10186                category: MoveCategory::Physical,
10187                move_type: PokemonType::STEEL,
10188                flags: Flags {
10189                    contact: true,
10190                    protect: true,
10191                    ..Default::default()
10192                },
10193                secondaries: Some(vec![Secondary {
10194                    chance: 10.0,
10195                    target: MoveTarget::User,
10196                    effect: Effect::Boost(StatBoosts {
10197                        attack: 1,
10198                        defense: 0,
10199                        special_attack: 0,
10200                        special_defense: 0,
10201                        speed: 0,
10202                        accuracy: 0,
10203                    }),
10204                }]),
10205                ..Default::default()
10206            },
10207        );
10208        moves.insert(
10209            Choices::METALSOUND,
10210            Choice {
10211                move_id: Choices::METALSOUND,
10212                accuracy: 85.0,
10213                move_type: PokemonType::STEEL,
10214                flags: Flags {
10215                    protect: true,
10216                    reflectable: true,
10217                    sound: true,
10218                    ..Default::default()
10219                },
10220                boost: Some(Boost {
10221                    target: MoveTarget::Opponent,
10222                    boosts: StatBoosts {
10223                        attack: 0,
10224                        defense: 0,
10225                        special_attack: 0,
10226                        special_defense: -2,
10227                        speed: 0,
10228                        accuracy: 0,
10229                    },
10230                }),
10231                ..Default::default()
10232            },
10233        );
10234        moves.insert(
10235            Choices::METEORASSAULT,
10236            Choice {
10237                move_id: Choices::METEORASSAULT,
10238                base_power: 150.0,
10239                category: MoveCategory::Physical,
10240                move_type: PokemonType::FIGHTING,
10241                flags: Flags {
10242                    protect: true,
10243                    recharge: true,
10244                    ..Default::default()
10245                },
10246                ..Default::default()
10247            },
10248        );
10249        moves.insert(
10250            Choices::METEORBEAM,
10251            Choice {
10252                move_id: Choices::METEORBEAM,
10253                accuracy: 90.0,
10254                base_power: 120.0,
10255                category: MoveCategory::Special,
10256                move_type: PokemonType::ROCK,
10257                flags: Flags {
10258                    charge: true,
10259                    protect: true,
10260                    ..Default::default()
10261                },
10262                ..Default::default()
10263            },
10264        );
10265        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
10266            moves.insert(
10267                Choices::METEORMASH,
10268                Choice {
10269                    move_id: Choices::METEORMASH,
10270                    accuracy: 85.0,
10271                    base_power: 100.0,
10272                    category: MoveCategory::Physical,
10273                    move_type: PokemonType::STEEL,
10274                    flags: Flags {
10275                        contact: true,
10276                            protect: true,
10277                        punch: true,
10278                        ..Default::default()
10279                    },
10280                    secondaries: Some(vec![Secondary {
10281                        chance: 20.0,
10282                        target: MoveTarget::User,
10283                        effect: Effect::Boost(StatBoosts {
10284                            attack: 1,
10285                            defense: 0,
10286                            special_attack: 0,
10287                            special_defense: 0,
10288                            speed: 0,
10289                            accuracy: 0,
10290                        }),
10291                    }]),
10292                    ..Default::default()
10293                },
10294            );
10295        } else {
10296            moves.insert(
10297                Choices::METEORMASH,
10298                Choice {
10299                    move_id: Choices::METEORMASH,
10300                    accuracy: 90.0,
10301                    base_power: 90.0,
10302                    category: MoveCategory::Physical,
10303                    move_type: PokemonType::STEEL,
10304                    flags: Flags {
10305                        contact: true,
10306                            protect: true,
10307                        punch: true,
10308                        ..Default::default()
10309                    },
10310                    secondaries: Some(vec![Secondary {
10311                        chance: 20.0,
10312                        target: MoveTarget::User,
10313                        effect: Effect::Boost(StatBoosts {
10314                            attack: 1,
10315                            defense: 0,
10316                            special_attack: 0,
10317                            special_defense: 0,
10318                            speed: 0,
10319                            accuracy: 0,
10320                        }),
10321                    }]),
10322                    ..Default::default()
10323                },
10324            );
10325        }
10326        moves.insert(
10327            Choices::METRONOME,
10328            Choice {
10329                move_id: Choices::METRONOME,
10330                target: MoveTarget::User,
10331                move_type: PokemonType::NORMAL,
10332                flags: Flags {
10333                    ..Default::default()
10334                },
10335                ..Default::default()
10336            },
10337        );
10338        moves.insert(
10339            Choices::MIGHTYCLEAVE,
10340            Choice {
10341                move_id: Choices::MIGHTYCLEAVE,
10342                base_power: 95.0,
10343                category: MoveCategory::Physical,
10344                move_type: PokemonType::ROCK,
10345                flags: Flags {
10346                    contact: true,
10347                    slicing: true,
10348                    ..Default::default()
10349                },
10350                ..Default::default()
10351            },
10352        );
10353        moves.insert(
10354            Choices::MILKDRINK,
10355            Choice {
10356                move_id: Choices::MILKDRINK,
10357                target: MoveTarget::User,
10358                move_type: PokemonType::NORMAL,
10359                flags: Flags {
10360                    heal: true,
10361                    ..Default::default()
10362                },
10363                heal: Some(Heal {
10364                    target: MoveTarget::User,
10365                    amount: 0.5,
10366                }),
10367                ..Default::default()
10368            },
10369        );
10370        moves.insert(
10371            Choices::MIMIC,
10372            Choice {
10373                move_id: Choices::MIMIC,
10374                move_type: PokemonType::NORMAL,
10375                flags: Flags {
10376                    protect: true,
10377                    ..Default::default()
10378                },
10379                ..Default::default()
10380            },
10381        );
10382        moves.insert(
10383            Choices::MINDBLOWN,
10384            Choice {
10385                move_id: Choices::MINDBLOWN,
10386                base_power: 150.0,
10387                category: MoveCategory::Special,
10388                move_type: PokemonType::FIRE,
10389                flags: Flags {
10390                    protect: true,
10391                    ..Default::default()
10392                },
10393                ..Default::default()
10394            },
10395        );
10396        moves.insert(
10397            Choices::MINDREADER,
10398            Choice {
10399                move_id: Choices::MINDREADER,
10400                move_type: PokemonType::NORMAL,
10401                flags: Flags {
10402                    protect: true,
10403                    ..Default::default()
10404                },
10405                ..Default::default()
10406            },
10407        );
10408        moves.insert(
10409            Choices::MINIMIZE,
10410            Choice {
10411                move_id: Choices::MINIMIZE,
10412                target: MoveTarget::User,
10413                move_type: PokemonType::NORMAL,
10414                flags: Flags {
10415                    ..Default::default()
10416                },
10417                boost: Some(Boost {
10418                    target: MoveTarget::User,
10419                    boosts: StatBoosts {
10420                        attack: 0,
10421                        defense: 0,
10422                        special_attack: 0,
10423                        special_defense: 0,
10424                        speed: 0,
10425                        accuracy: 0,
10426                    },
10427                }),
10428                volatile_status: Some(VolatileStatus {
10429                    target: MoveTarget::User,
10430                    volatile_status: PokemonVolatileStatus::MINIMIZE,
10431                }),
10432                ..Default::default()
10433            },
10434        );
10435        moves.insert(
10436            Choices::MIRACLEEYE,
10437            Choice {
10438                move_id: Choices::MIRACLEEYE,
10439                move_type: PokemonType::PSYCHIC,
10440                flags: Flags {
10441                    protect: true,
10442                    reflectable: true,
10443                    ..Default::default()
10444                },
10445                volatile_status: Some(VolatileStatus {
10446                    target: MoveTarget::Opponent,
10447                    volatile_status: PokemonVolatileStatus::MIRACLEEYE,
10448                }),
10449                ..Default::default()
10450            },
10451        );
10452        moves.insert(
10453            Choices::MIRRORCOAT,
10454            Choice {
10455                move_id: Choices::MIRRORCOAT,
10456                category: MoveCategory::Special,
10457                priority: -5,
10458                move_type: PokemonType::PSYCHIC,
10459                flags: Flags {
10460                    protect: true,
10461                    ..Default::default()
10462                },
10463                ..Default::default()
10464            },
10465        );
10466        moves.insert(
10467            Choices::MIRRORMOVE,
10468            Choice {
10469                move_id: Choices::MIRRORMOVE,
10470                move_type: PokemonType::FLYING,
10471                flags: Flags {
10472                    ..Default::default()
10473                },
10474                ..Default::default()
10475            },
10476        );
10477        moves.insert(
10478            Choices::MIRRORSHOT,
10479            Choice {
10480                move_id: Choices::MIRRORSHOT,
10481                accuracy: 85.0,
10482                base_power: 65.0,
10483                category: MoveCategory::Special,
10484                move_type: PokemonType::STEEL,
10485                flags: Flags {
10486                    protect: true,
10487                    ..Default::default()
10488                },
10489                secondaries: Some(vec![Secondary {
10490                    chance: 30.0,
10491                    target: MoveTarget::Opponent,
10492                    effect: Effect::Boost(StatBoosts {
10493                        attack: 0,
10494                        defense: 0,
10495                        special_attack: 0,
10496                        special_defense: 0,
10497                        speed: 0,
10498                        accuracy: -1,
10499                    }),
10500                }]),
10501                ..Default::default()
10502            },
10503        );
10504        moves.insert(
10505            Choices::MIST,
10506            Choice {
10507                move_id: Choices::MIST,
10508                target: MoveTarget::User,
10509                move_type: PokemonType::ICE,
10510                flags: Flags {
10511                    ..Default::default()
10512                },
10513                side_condition: Some(SideCondition {
10514                    target: MoveTarget::User,
10515                    condition: PokemonSideCondition::Mist,
10516                }),
10517                ..Default::default()
10518            },
10519        );
10520        if cfg!(feature = "gen9") {
10521            moves.insert(
10522                Choices::MISTBALL,
10523                Choice {
10524                    move_id: Choices::MISTBALL,
10525                    base_power: 95.0,
10526                    category: MoveCategory::Special,
10527                    move_type: PokemonType::PSYCHIC,
10528                    flags: Flags {
10529                        bullet: true,
10530                        protect: true,
10531                        ..Default::default()
10532                    },
10533                    secondaries: Some(vec![Secondary {
10534                        chance: 50.0,
10535                        target: MoveTarget::Opponent,
10536                        effect: Effect::Boost(StatBoosts {
10537                            attack: 0,
10538                            defense: 0,
10539                            special_attack: -1,
10540                            special_defense: 0,
10541                            speed: 0,
10542                            accuracy: 0,
10543                        }),
10544                    }]),
10545                    ..Default::default()
10546                },
10547            );
10548        } else {
10549            moves.insert(
10550                Choices::MISTBALL,
10551                Choice {
10552                    move_id: Choices::MISTBALL,
10553                    base_power: 70.0,
10554                    category: MoveCategory::Special,
10555                    move_type: PokemonType::PSYCHIC,
10556                    flags: Flags {
10557                        bullet: true,
10558                        protect: true,
10559                        ..Default::default()
10560                    },
10561                    secondaries: Some(vec![Secondary {
10562                        chance: 50.0,
10563                        target: MoveTarget::Opponent,
10564                        effect: Effect::Boost(StatBoosts {
10565                            attack: 0,
10566                            defense: 0,
10567                            special_attack: -1,
10568                            special_defense: 0,
10569                            speed: 0,
10570                            accuracy: 0,
10571                        }),
10572                    }]),
10573                    ..Default::default()
10574                },
10575            );
10576        }
10577        moves.insert(
10578            Choices::MISTYEXPLOSION,
10579            Choice {
10580                move_id: Choices::MISTYEXPLOSION,
10581                base_power: 100.0,
10582                category: MoveCategory::Special,
10583                move_type: PokemonType::FAIRY,
10584                flags: Flags {
10585                    protect: true,
10586                    ..Default::default()
10587                },
10588                ..Default::default()
10589            },
10590        );
10591        moves.insert(
10592            Choices::MISTYTERRAIN,
10593            Choice {
10594                move_id: Choices::MISTYTERRAIN,
10595                move_type: PokemonType::FAIRY,
10596                flags: Flags {
10597                    ..Default::default()
10598                },
10599                ..Default::default()
10600            },
10601        );
10602        moves.insert(
10603            Choices::MOONBLAST,
10604            Choice {
10605                move_id: Choices::MOONBLAST,
10606                base_power: 95.0,
10607                category: MoveCategory::Special,
10608                move_type: PokemonType::FAIRY,
10609                flags: Flags {
10610                    protect: true,
10611                    ..Default::default()
10612                },
10613                secondaries: Some(vec![Secondary {
10614                    chance: 30.0,
10615                    target: MoveTarget::Opponent,
10616                    effect: Effect::Boost(StatBoosts {
10617                        attack: 0,
10618                        defense: 0,
10619                        special_attack: -1,
10620                        special_defense: 0,
10621                        speed: 0,
10622                        accuracy: 0,
10623                    }),
10624                }]),
10625                ..Default::default()
10626            },
10627        );
10628        moves.insert(
10629            Choices::MOONGEISTBEAM,
10630            Choice {
10631                move_id: Choices::MOONGEISTBEAM,
10632                base_power: 100.0,
10633                category: MoveCategory::Special,
10634                move_type: PokemonType::GHOST,
10635                flags: Flags {
10636                    protect: true,
10637                    ..Default::default()
10638                },
10639                ..Default::default()
10640            },
10641        );
10642        moves.insert(
10643            Choices::MOONLIGHT,
10644            Choice {
10645                move_id: Choices::MOONLIGHT,
10646                target: MoveTarget::User,
10647                move_type: PokemonType::FAIRY,
10648                flags: Flags {
10649                    heal: true,
10650                    ..Default::default()
10651                },
10652                heal: Some(Heal {
10653                    target: MoveTarget::User,
10654                    amount: 0.5,
10655                }),
10656                ..Default::default()
10657            },
10658        );
10659        moves.insert(
10660            Choices::MORNINGSUN,
10661            Choice {
10662                move_id: Choices::MORNINGSUN,
10663                target: MoveTarget::User,
10664                move_type: PokemonType::NORMAL,
10665                flags: Flags {
10666                    heal: true,
10667                    ..Default::default()
10668                },
10669                heal: Some(Heal {
10670                    target: MoveTarget::User,
10671                    amount: 0.5,
10672                }),
10673                ..Default::default()
10674            },
10675        );
10676        moves.insert(
10677            Choices::MORTALSPIN,
10678            Choice {
10679                move_id: Choices::MORTALSPIN,
10680                base_power: 30.0,
10681                category: MoveCategory::Physical,
10682                move_type: PokemonType::POISON,
10683                flags: Flags {
10684                    contact: true,
10685                    protect: true,
10686                    ..Default::default()
10687                },
10688                secondaries: Some(vec![Secondary {
10689                    chance: 100.0,
10690                    target: MoveTarget::Opponent,
10691                    effect: Effect::Status(PokemonStatus::POISON),
10692                }]),
10693                ..Default::default()
10694            },
10695        );
10696        moves.insert(
10697            Choices::MOUNTAINGALE,
10698            Choice {
10699                move_id: Choices::MOUNTAINGALE,
10700                accuracy: 85.0,
10701                base_power: 100.0,
10702                category: MoveCategory::Physical,
10703                move_type: PokemonType::ICE,
10704                flags: Flags {
10705                    protect: true,
10706                    ..Default::default()
10707                },
10708                secondaries: Some(vec![Secondary {
10709                    chance: 30.0,
10710                    target: MoveTarget::Opponent,
10711                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
10712                }]),
10713                ..Default::default()
10714            },
10715        );
10716        moves.insert(
10717            Choices::MUDBOMB,
10718            Choice {
10719                move_id: Choices::MUDBOMB,
10720                accuracy: 85.0,
10721                base_power: 65.0,
10722                category: MoveCategory::Special,
10723                move_type: PokemonType::GROUND,
10724                flags: Flags {
10725                    bullet: true,
10726                    protect: true,
10727                    ..Default::default()
10728                },
10729                secondaries: Some(vec![Secondary {
10730                    chance: 30.0,
10731                    target: MoveTarget::Opponent,
10732                    effect: Effect::Boost(StatBoosts {
10733                        attack: 0,
10734                        defense: 0,
10735                        special_attack: 0,
10736                        special_defense: 0,
10737                        speed: 0,
10738                        accuracy: -1,
10739                    }),
10740                }]),
10741                ..Default::default()
10742            },
10743        );
10744        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
10745            moves.insert(
10746                Choices::MUDDYWATER,
10747                Choice {
10748                    move_id: Choices::MUDDYWATER,
10749                    accuracy: 85.0,
10750                    base_power: 95.0,
10751                    category: MoveCategory::Special,
10752                    move_type: PokemonType::WATER,
10753                    flags: Flags {
10754                                protect: true,
10755                        ..Default::default()
10756                    },
10757                    secondaries: Some(vec![Secondary {
10758                        chance: 30.0,
10759                        target: MoveTarget::Opponent,
10760                        effect: Effect::Boost(StatBoosts {
10761                            attack: 0,
10762                            defense: 0,
10763                            special_attack: 0,
10764                            special_defense: 0,
10765                            speed: 0,
10766                            accuracy: -1,
10767                        }),
10768                    }]),
10769                    ..Default::default()
10770                },
10771            );
10772        } else {
10773            moves.insert(
10774                Choices::MUDDYWATER,
10775                Choice {
10776                    move_id: Choices::MUDDYWATER,
10777                    accuracy: 85.0,
10778                    base_power: 90.0,
10779                    category: MoveCategory::Special,
10780                    move_type: PokemonType::WATER,
10781                    flags: Flags {
10782                                protect: true,
10783                        ..Default::default()
10784                    },
10785                    secondaries: Some(vec![Secondary {
10786                        chance: 30.0,
10787                        target: MoveTarget::Opponent,
10788                        effect: Effect::Boost(StatBoosts {
10789                            attack: 0,
10790                            defense: 0,
10791                            special_attack: 0,
10792                            special_defense: 0,
10793                            speed: 0,
10794                            accuracy: -1,
10795                        }),
10796                    }]),
10797                    ..Default::default()
10798                },
10799            );
10800        }
10801        moves.insert(
10802            Choices::MUDSHOT,
10803            Choice {
10804                move_id: Choices::MUDSHOT,
10805                accuracy: 95.0,
10806                base_power: 55.0,
10807                category: MoveCategory::Special,
10808                move_type: PokemonType::GROUND,
10809                flags: Flags {
10810                    protect: true,
10811                    ..Default::default()
10812                },
10813                secondaries: Some(vec![Secondary {
10814                    chance: 100.0,
10815                    target: MoveTarget::Opponent,
10816                    effect: Effect::Boost(StatBoosts {
10817                        attack: 0,
10818                        defense: 0,
10819                        special_attack: 0,
10820                        special_defense: 0,
10821                        speed: -1,
10822                        accuracy: 0,
10823                    }),
10824                }]),
10825                ..Default::default()
10826            },
10827        );
10828        moves.insert(
10829            Choices::MUDSLAP,
10830            Choice {
10831                move_id: Choices::MUDSLAP,
10832                base_power: 20.0,
10833                category: MoveCategory::Special,
10834                move_type: PokemonType::GROUND,
10835                flags: Flags {
10836                    protect: true,
10837                    ..Default::default()
10838                },
10839                secondaries: Some(vec![Secondary {
10840                    chance: 100.0,
10841                    target: MoveTarget::Opponent,
10842                    effect: Effect::Boost(StatBoosts {
10843                        attack: 0,
10844                        defense: 0,
10845                        special_attack: 0,
10846                        special_defense: 0,
10847                        speed: 0,
10848                        accuracy: -1,
10849                    }),
10850                }]),
10851                ..Default::default()
10852            },
10853        );
10854        moves.insert(
10855            Choices::MUDSPORT,
10856            Choice {
10857                move_id: Choices::MUDSPORT,
10858                move_type: PokemonType::GROUND,
10859                flags: Flags {
10860                    ..Default::default()
10861                },
10862                ..Default::default()
10863            },
10864        );
10865        if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
10866            moves.insert(
10867                Choices::MULTIATTACK,
10868                Choice {
10869                    move_id: Choices::MULTIATTACK,
10870                    base_power: 120.0,
10871                    category: MoveCategory::Physical,
10872                    move_type: PokemonType::NORMAL,
10873                    flags: Flags {
10874                        contact: true,
10875                            protect: true,
10876                        ..Default::default()
10877                    },
10878                    ..Default::default()
10879                },
10880            );
10881        } else {
10882            moves.insert(
10883                Choices::MULTIATTACK,
10884                Choice {
10885                    move_id: Choices::MULTIATTACK,
10886                    base_power: 90.0,
10887                    category: MoveCategory::Physical,
10888                    move_type: PokemonType::NORMAL,
10889                    flags: Flags {
10890                        contact: true,
10891                            protect: true,
10892                        ..Default::default()
10893                    },
10894                    ..Default::default()
10895                },
10896            );
10897        }
10898        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
10899            moves.insert(
10900                Choices::MYSTICALFIRE,
10901                Choice {
10902                    move_id: Choices::MYSTICALFIRE,
10903                    base_power: 65.0,
10904                    category: MoveCategory::Special,
10905                    move_type: PokemonType::FIRE,
10906                    flags: Flags {
10907                            protect: true,
10908                        ..Default::default()
10909                    },
10910                    secondaries: Some(vec![Secondary {
10911                        chance: 100.0,
10912                        target: MoveTarget::Opponent,
10913                        effect: Effect::Boost(StatBoosts {
10914                            attack: 0,
10915                            defense: 0,
10916                            special_attack: -1,
10917                            special_defense: 0,
10918                            speed: 0,
10919                            accuracy: 0,
10920                        }),
10921                    }]),
10922                    ..Default::default()
10923                },
10924            );
10925        } else {
10926            moves.insert(
10927                Choices::MYSTICALFIRE,
10928                Choice {
10929                    move_id: Choices::MYSTICALFIRE,
10930                    base_power: 75.0,
10931                    category: MoveCategory::Special,
10932                    move_type: PokemonType::FIRE,
10933                    flags: Flags {
10934                            protect: true,
10935                        ..Default::default()
10936                    },
10937                    secondaries: Some(vec![Secondary {
10938                        chance: 100.0,
10939                        target: MoveTarget::Opponent,
10940                        effect: Effect::Boost(StatBoosts {
10941                            attack: 0,
10942                            defense: 0,
10943                            special_attack: -1,
10944                            special_defense: 0,
10945                            speed: 0,
10946                            accuracy: 0,
10947                        }),
10948                    }]),
10949                    ..Default::default()
10950                },
10951            );
10952        }
10953        moves.insert(
10954            Choices::MYSTICALPOWER,
10955            Choice {
10956                move_id: Choices::MYSTICALPOWER,
10957                accuracy: 90.0,
10958                base_power: 70.0,
10959                category: MoveCategory::Special,
10960                move_type: PokemonType::PSYCHIC,
10961                flags: Flags {
10962                    protect: true,
10963                    ..Default::default()
10964                },
10965                secondaries: Some(vec![Secondary {
10966                    chance: 100.0,
10967                    target: MoveTarget::User,
10968                    effect: Effect::Boost(StatBoosts {
10969                        attack: 0,
10970                        defense: 0,
10971                        special_attack: 1,
10972                        special_defense: 0,
10973                        speed: 0,
10974                        accuracy: 0,
10975                    }),
10976                }]),
10977                ..Default::default()
10978            },
10979        );
10980        moves.insert(
10981            Choices::NASTYPLOT,
10982            Choice {
10983                move_id: Choices::NASTYPLOT,
10984                target: MoveTarget::User,
10985                move_type: PokemonType::DARK,
10986                flags: Flags {
10987                    ..Default::default()
10988                },
10989                boost: Some(Boost {
10990                    target: MoveTarget::User,
10991                    boosts: StatBoosts {
10992                        attack: 0,
10993                        defense: 0,
10994                        special_attack: 2,
10995                        special_defense: 0,
10996                        speed: 0,
10997                        accuracy: 0,
10998                    },
10999                }),
11000                ..Default::default()
11001            },
11002        );
11003        moves.insert(
11004            Choices::NATURALGIFT,
11005            Choice {
11006                move_id: Choices::NATURALGIFT,
11007                category: MoveCategory::Physical,
11008                move_type: PokemonType::NORMAL,
11009                flags: Flags {
11010                    protect: true,
11011                    ..Default::default()
11012                },
11013                ..Default::default()
11014            },
11015        );
11016        moves.insert(
11017            Choices::NATUREPOWER,
11018            Choice {
11019                move_id: Choices::NATUREPOWER,
11020                move_type: PokemonType::NORMAL,
11021                flags: Flags {
11022                    ..Default::default()
11023                },
11024                ..Default::default()
11025            },
11026        );
11027        moves.insert(
11028            Choices::NATURESMADNESS,
11029            Choice {
11030                move_id: Choices::NATURESMADNESS,
11031                accuracy: 90.0,
11032                category: MoveCategory::Special,
11033                move_type: PokemonType::FAIRY,
11034                flags: Flags {
11035                    protect: true,
11036                    ..Default::default()
11037                },
11038                ..Default::default()
11039            },
11040        );
11041        moves.insert(
11042            Choices::NEEDLEARM,
11043            Choice {
11044                move_id: Choices::NEEDLEARM,
11045                base_power: 60.0,
11046                category: MoveCategory::Physical,
11047                move_type: PokemonType::GRASS,
11048                flags: Flags {
11049                    contact: true,
11050                    protect: true,
11051                    ..Default::default()
11052                },
11053                secondaries: Some(vec![Secondary {
11054                    chance: 30.0,
11055                    target: MoveTarget::Opponent,
11056                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
11057                }]),
11058                ..Default::default()
11059            },
11060        );
11061        moves.insert(
11062            Choices::NIGHTDAZE,
11063            Choice {
11064                move_id: Choices::NIGHTDAZE,
11065                accuracy: 95.0,
11066                base_power: 85.0,
11067                category: MoveCategory::Special,
11068                move_type: PokemonType::DARK,
11069                flags: Flags {
11070                    protect: true,
11071                    ..Default::default()
11072                },
11073                secondaries: Some(vec![Secondary {
11074                    chance: 40.0,
11075                    target: MoveTarget::Opponent,
11076                    effect: Effect::Boost(StatBoosts {
11077                        attack: 0,
11078                        defense: 0,
11079                        special_attack: 0,
11080                        special_defense: 0,
11081                        speed: 0,
11082                        accuracy: -1,
11083                    }),
11084                }]),
11085                ..Default::default()
11086            },
11087        );
11088        moves.insert(
11089            Choices::NIGHTMARE,
11090            Choice {
11091                move_id: Choices::NIGHTMARE,
11092                move_type: PokemonType::GHOST,
11093                flags: Flags {
11094                    protect: true,
11095                    ..Default::default()
11096                },
11097                volatile_status: Some(VolatileStatus {
11098                    target: MoveTarget::Opponent,
11099                    volatile_status: PokemonVolatileStatus::NIGHTMARE,
11100                }),
11101                ..Default::default()
11102            },
11103        );
11104        moves.insert(
11105            Choices::NIGHTSHADE,
11106            Choice {
11107                move_id: Choices::NIGHTSHADE,
11108                category: MoveCategory::Special,
11109                move_type: PokemonType::GHOST,
11110                flags: Flags {
11111                    protect: true,
11112                    ..Default::default()
11113                },
11114                ..Default::default()
11115            },
11116        );
11117        moves.insert(
11118            Choices::NIGHTSLASH,
11119            Choice {
11120                move_id: Choices::NIGHTSLASH,
11121                base_power: 70.0,
11122                category: MoveCategory::Physical,
11123                move_type: PokemonType::DARK,
11124                flags: Flags {
11125                    contact: true,
11126                    protect: true,
11127                    slicing: true,
11128                    ..Default::default()
11129                },
11130                ..Default::default()
11131            },
11132        );
11133        moves.insert(
11134            Choices::NOBLEROAR,
11135            Choice {
11136                move_id: Choices::NOBLEROAR,
11137                move_type: PokemonType::NORMAL,
11138                flags: Flags {
11139                    protect: true,
11140                    reflectable: true,
11141                    sound: true,
11142                    ..Default::default()
11143                },
11144                boost: Some(Boost {
11145                    target: MoveTarget::Opponent,
11146                    boosts: StatBoosts {
11147                        attack: -1,
11148                        defense: 0,
11149                        special_attack: -1,
11150                        special_defense: 0,
11151                        speed: 0,
11152                        accuracy: 0,
11153                    },
11154                }),
11155                ..Default::default()
11156            },
11157        );
11158        moves.insert(
11159            Choices::NORETREAT,
11160            Choice {
11161                move_id: Choices::NORETREAT,
11162                target: MoveTarget::User,
11163                move_type: PokemonType::FIGHTING,
11164                flags: Flags {
11165                    ..Default::default()
11166                },
11167                boost: Some(Boost {
11168                    target: MoveTarget::User,
11169                    boosts: StatBoosts {
11170                        attack: 1,
11171                        defense: 1,
11172                        special_attack: 1,
11173                        special_defense: 1,
11174                        speed: 1,
11175                        accuracy: 0,
11176                    },
11177                }),
11178                volatile_status: Some(VolatileStatus {
11179                    target: MoveTarget::User,
11180                    volatile_status: PokemonVolatileStatus::NORETREAT,
11181                }),
11182                ..Default::default()
11183            },
11184        );
11185        moves.insert(
11186            Choices::NOTHING,
11187            Choice {
11188                move_id: Choices::NOTHING,
11189                target: MoveTarget::User,
11190                move_type: PokemonType::NORMAL,
11191                flags: Flags {
11192                    ..Default::default()
11193                },
11194                ..Default::default()
11195            },
11196        );
11197        moves.insert(
11198            Choices::NOXIOUSTORQUE,
11199            Choice {
11200                move_id: Choices::NOXIOUSTORQUE,
11201                base_power: 100.0,
11202                category: MoveCategory::Physical,
11203                move_type: PokemonType::POISON,
11204                flags: Flags {
11205                    protect: true,
11206                    ..Default::default()
11207                },
11208                secondaries: Some(vec![Secondary {
11209                    chance: 30.0,
11210                    target: MoveTarget::Opponent,
11211                    effect: Effect::Status(PokemonStatus::POISON),
11212                }]),
11213                ..Default::default()
11214            },
11215        );
11216        moves.insert(
11217            Choices::NUZZLE,
11218            Choice {
11219                move_id: Choices::NUZZLE,
11220                base_power: 20.0,
11221                category: MoveCategory::Physical,
11222                move_type: PokemonType::ELECTRIC,
11223                flags: Flags {
11224                    contact: true,
11225                    protect: true,
11226                    ..Default::default()
11227                },
11228                secondaries: Some(vec![Secondary {
11229                    chance: 100.0,
11230                    target: MoveTarget::Opponent,
11231                    effect: Effect::Status(PokemonStatus::PARALYZE),
11232                }]),
11233                ..Default::default()
11234            },
11235        );
11236        moves.insert(
11237            Choices::OBLIVIONWING,
11238            Choice {
11239                move_id: Choices::OBLIVIONWING,
11240                base_power: 80.0,
11241                category: MoveCategory::Special,
11242                move_type: PokemonType::FLYING,
11243                flags: Flags {
11244                    heal: true,
11245                    protect: true,
11246                    ..Default::default()
11247                },
11248                drain: Some(0.75),
11249                ..Default::default()
11250            },
11251        );
11252        moves.insert(
11253            Choices::OBSTRUCT,
11254            Choice {
11255                move_id: Choices::OBSTRUCT,
11256                priority: 4,
11257                target: MoveTarget::User,
11258                move_type: PokemonType::DARK,
11259                flags: Flags {
11260                    ..Default::default()
11261                },
11262                volatile_status: Some(VolatileStatus {
11263                    target: MoveTarget::User,
11264                    volatile_status: PokemonVolatileStatus::PROTECT,
11265                }),
11266                ..Default::default()
11267            },
11268        );
11269        moves.insert(
11270            Choices::OCTAZOOKA,
11271            Choice {
11272                move_id: Choices::OCTAZOOKA,
11273                accuracy: 85.0,
11274                base_power: 65.0,
11275                category: MoveCategory::Special,
11276                move_type: PokemonType::WATER,
11277                flags: Flags {
11278                    bullet: true,
11279                    protect: true,
11280                    ..Default::default()
11281                },
11282                secondaries: Some(vec![Secondary {
11283                    chance: 50.0,
11284                    target: MoveTarget::Opponent,
11285                    effect: Effect::Boost(StatBoosts {
11286                        attack: 0,
11287                        defense: 0,
11288                        special_attack: 0,
11289                        special_defense: 0,
11290                        speed: 0,
11291                        accuracy: -1,
11292                    }),
11293                }]),
11294                ..Default::default()
11295            },
11296        );
11297        moves.insert(
11298            Choices::OCTOLOCK,
11299            Choice {
11300                move_id: Choices::OCTOLOCK,
11301                move_type: PokemonType::FIGHTING,
11302                flags: Flags {
11303                    protect: true,
11304                    ..Default::default()
11305                },
11306                volatile_status: Some(VolatileStatus {
11307                    target: MoveTarget::Opponent,
11308                    volatile_status: PokemonVolatileStatus::OCTOLOCK,
11309                }),
11310                ..Default::default()
11311            },
11312        );
11313        moves.insert(
11314            Choices::ODORSLEUTH,
11315            Choice {
11316                move_id: Choices::ODORSLEUTH,
11317                move_type: PokemonType::NORMAL,
11318                flags: Flags {
11319                    protect: true,
11320                    reflectable: true,
11321                    ..Default::default()
11322                },
11323                volatile_status: Some(VolatileStatus {
11324                    target: MoveTarget::Opponent,
11325                    volatile_status: PokemonVolatileStatus::FORESIGHT,
11326                }),
11327                ..Default::default()
11328            },
11329        );
11330        moves.insert(
11331            Choices::OMINOUSWIND,
11332            Choice {
11333                move_id: Choices::OMINOUSWIND,
11334                base_power: 60.0,
11335                category: MoveCategory::Special,
11336                move_type: PokemonType::GHOST,
11337                flags: Flags {
11338                    protect: true,
11339                    ..Default::default()
11340                },
11341                secondaries: Some(vec![Secondary {
11342                    chance: 10.0,
11343                    target: MoveTarget::User,
11344                    effect: Effect::Boost(StatBoosts {
11345                        attack: 1,
11346                        defense: 1,
11347                        special_attack: 1,
11348                        special_defense: 1,
11349                        speed: 1,
11350                        accuracy: 0,
11351                    }),
11352                }]),
11353                ..Default::default()
11354            },
11355        );
11356        moves.insert(
11357            Choices::ORDERUP,
11358            Choice {
11359                move_id: Choices::ORDERUP,
11360                base_power: 80.0,
11361                category: MoveCategory::Physical,
11362                move_type: PokemonType::DRAGON,
11363                flags: Flags {
11364                    protect: true,
11365                    ..Default::default()
11366                },
11367                ..Default::default()
11368            },
11369        );
11370        moves.insert(
11371            Choices::ORIGINPULSE,
11372            Choice {
11373                move_id: Choices::ORIGINPULSE,
11374                accuracy: 85.0,
11375                base_power: 110.0,
11376                category: MoveCategory::Special,
11377                move_type: PokemonType::WATER,
11378                flags: Flags {
11379                    protect: true,
11380                    pulse: true,
11381                    ..Default::default()
11382                },
11383                ..Default::default()
11384            },
11385        );
11386        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
11387            moves.insert(
11388                Choices::OUTRAGE,
11389                Choice {
11390                    move_id: Choices::OUTRAGE,
11391                    base_power: 90.0,
11392                    category: MoveCategory::Physical,
11393                    move_type: PokemonType::DRAGON,
11394                    flags: Flags {
11395                        contact: true,
11396                        protect: true,
11397                        ..Default::default()
11398                    },
11399                    volatile_status: Some(VolatileStatus {
11400                        target: MoveTarget::User,
11401                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11402                    }),
11403                    ..Default::default()
11404                },
11405            );
11406        } else {
11407            moves.insert(
11408                Choices::OUTRAGE,
11409                Choice {
11410                    move_id: Choices::OUTRAGE,
11411                    base_power: 120.0,
11412                    category: MoveCategory::Physical,
11413                    move_type: PokemonType::DRAGON,
11414                    flags: Flags {
11415                        contact: true,
11416                        protect: true,
11417                        ..Default::default()
11418                    },
11419                    volatile_status: Some(VolatileStatus {
11420                        target: MoveTarget::User,
11421                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11422                    }),
11423                    ..Default::default()
11424                },
11425            );
11426        }
11427        moves.insert(
11428            Choices::OVERDRIVE,
11429            Choice {
11430                move_id: Choices::OVERDRIVE,
11431                base_power: 80.0,
11432                category: MoveCategory::Special,
11433                move_type: PokemonType::ELECTRIC,
11434                flags: Flags {
11435                    protect: true,
11436                    sound: true,
11437                    ..Default::default()
11438                },
11439                ..Default::default()
11440            },
11441        );
11442        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
11443            moves.insert(
11444                Choices::OVERHEAT,
11445                Choice {
11446                    move_id: Choices::OVERHEAT,
11447                    accuracy: 90.0,
11448                    base_power: 140.0,
11449                    category: MoveCategory::Special,
11450                    move_type: PokemonType::FIRE,
11451                    flags: Flags {
11452                            protect: true,
11453                        ..Default::default()
11454                    },
11455                    boost: Some(Boost {
11456                    target: MoveTarget::User,
11457                    boosts: StatBoosts {
11458                        attack: 0,
11459                        defense: 0,
11460                        special_attack: -2,
11461                        special_defense: 0,
11462                        speed: 0,
11463                        accuracy: 0,
11464                    },
11465                }),
11466                    ..Default::default()
11467                },
11468            );
11469        } else {
11470            moves.insert(
11471                Choices::OVERHEAT,
11472                Choice {
11473                    move_id: Choices::OVERHEAT,
11474                    accuracy: 90.0,
11475                    base_power: 130.0,
11476                    category: MoveCategory::Special,
11477                    move_type: PokemonType::FIRE,
11478                    flags: Flags {
11479                            protect: true,
11480                        ..Default::default()
11481                    },
11482                    boost: Some(Boost {
11483                        target: MoveTarget::User,
11484                        boosts: StatBoosts {
11485                            attack: 0,
11486                            defense: 0,
11487                            special_attack: -2,
11488                            special_defense: 0,
11489                            speed: 0,
11490                            accuracy: 0,
11491                        },
11492                    }),
11493                    ..Default::default()
11494                },
11495            );
11496        }
11497        moves.insert(
11498            Choices::PAINSPLIT,
11499            Choice {
11500                move_id: Choices::PAINSPLIT,
11501                move_type: PokemonType::NORMAL,
11502                flags: Flags {
11503                    protect: true,
11504                    ..Default::default()
11505                },
11506                ..Default::default()
11507            },
11508        );
11509        moves.insert(
11510            Choices::PALEOWAVE,
11511            Choice {
11512                move_id: Choices::PALEOWAVE,
11513                base_power: 85.0,
11514                category: MoveCategory::Special,
11515                move_type: PokemonType::ROCK,
11516                flags: Flags {
11517                    protect: true,
11518                    ..Default::default()
11519                },
11520                secondaries: Some(vec![Secondary {
11521                    chance: 20.0,
11522                    target: MoveTarget::Opponent,
11523                    effect: Effect::Boost(StatBoosts {
11524                        attack: -1,
11525                        defense: 0,
11526                        special_attack: 0,
11527                        special_defense: 0,
11528                        speed: 0,
11529                        accuracy: 0,
11530                    }),
11531                }]),
11532                ..Default::default()
11533            },
11534        );
11535        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
11536            moves.insert(
11537                Choices::PARABOLICCHARGE,
11538                Choice {
11539                    move_id: Choices::PARABOLICCHARGE,
11540                    base_power: 50.0,
11541                    category: MoveCategory::Special,
11542                    move_type: PokemonType::ELECTRIC,
11543                    flags: Flags {
11544                        heal: true,
11545                            protect: true,
11546                        ..Default::default()
11547                    },
11548                    drain: Some(0.5),
11549                    ..Default::default()
11550                },
11551            );
11552        } else {
11553            moves.insert(
11554                Choices::PARABOLICCHARGE,
11555                Choice {
11556                    move_id: Choices::PARABOLICCHARGE,
11557                    base_power: 65.0,
11558                    category: MoveCategory::Special,
11559                    move_type: PokemonType::ELECTRIC,
11560                    flags: Flags {
11561                        heal: true,
11562                            protect: true,
11563                        ..Default::default()
11564                    },
11565                    drain: Some(0.5),
11566                    ..Default::default()
11567                },
11568            );
11569        }
11570        moves.insert(
11571            Choices::PARTINGSHOT,
11572            Choice {
11573                move_id: Choices::PARTINGSHOT,
11574                move_type: PokemonType::DARK,
11575                flags: Flags {
11576                    protect: true,
11577                    reflectable: true,
11578                    sound: true,
11579                    pivot: true,
11580                    ..Default::default()
11581                },
11582                boost: Some(Boost {
11583                    target: MoveTarget::Opponent,
11584                    boosts: StatBoosts {
11585                        attack: -1,
11586                        defense: 0,
11587                        special_attack: -1,
11588                        special_defense: 0,
11589                        speed: 0,
11590                        accuracy: 0,
11591                    },
11592                }),
11593                ..Default::default()
11594            },
11595        );
11596        moves.insert(
11597            Choices::PAYBACK,
11598            Choice {
11599                move_id: Choices::PAYBACK,
11600                base_power: 50.0,
11601                category: MoveCategory::Physical,
11602                move_type: PokemonType::DARK,
11603                flags: Flags {
11604                    contact: true,
11605                    protect: true,
11606                    ..Default::default()
11607                },
11608                ..Default::default()
11609            },
11610        );
11611        moves.insert(
11612            Choices::PAYDAY,
11613            Choice {
11614                move_id: Choices::PAYDAY,
11615                base_power: 40.0,
11616                category: MoveCategory::Physical,
11617                move_type: PokemonType::NORMAL,
11618                flags: Flags {
11619                    protect: true,
11620                    ..Default::default()
11621                },
11622                ..Default::default()
11623            },
11624        );
11625        moves.insert(
11626            Choices::PECK,
11627            Choice {
11628                move_id: Choices::PECK,
11629                base_power: 35.0,
11630                category: MoveCategory::Physical,
11631                move_type: PokemonType::FLYING,
11632                flags: Flags {
11633                    contact: true,
11634                    protect: true,
11635                    ..Default::default()
11636                },
11637                ..Default::default()
11638            },
11639        );
11640        moves.insert(
11641            Choices::PERISHSONG,
11642            Choice {
11643                move_id: Choices::PERISHSONG,
11644                move_type: PokemonType::NORMAL,
11645                flags: Flags {
11646                    sound: true,
11647                    ..Default::default()
11648                },
11649                ..Default::default()
11650            },
11651        );
11652        moves.insert(
11653            Choices::PETALBLIZZARD,
11654            Choice {
11655                move_id: Choices::PETALBLIZZARD,
11656                base_power: 90.0,
11657                category: MoveCategory::Physical,
11658                move_type: PokemonType::GRASS,
11659                flags: Flags {
11660                    protect: true,
11661                    wind: true,
11662                    ..Default::default()
11663                },
11664                ..Default::default()
11665            },
11666        );
11667        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
11668            moves.insert(
11669                Choices::PETALDANCE,
11670                Choice {
11671                    move_id: Choices::PETALDANCE,
11672                    base_power: 70.0,
11673                    category: MoveCategory::Special,
11674                    move_type: PokemonType::GRASS,
11675                    flags: Flags {
11676                        contact: true,
11677                        protect: true,
11678                        ..Default::default()
11679                    },
11680                    volatile_status: Some(VolatileStatus {
11681                        target: MoveTarget::User,
11682                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11683                    }),
11684                    ..Default::default()
11685                },
11686            );
11687        }
11688        if cfg!(feature = "gen4") {
11689            moves.insert(
11690                Choices::PETALDANCE,
11691                Choice {
11692                    move_id: Choices::PETALDANCE,
11693                    base_power: 90.0,
11694                    category: MoveCategory::Special,
11695                    move_type: PokemonType::GRASS,
11696                    flags: Flags {
11697                        contact: true,
11698                        protect: true,
11699                        ..Default::default()
11700                    },
11701                    volatile_status: Some(VolatileStatus {
11702                        target: MoveTarget::User,
11703                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11704                    }),
11705                    ..Default::default()
11706                },
11707            );
11708        } else {
11709            moves.insert(
11710                Choices::PETALDANCE,
11711                Choice {
11712                    move_id: Choices::PETALDANCE,
11713                    base_power: 120.0,
11714                    category: MoveCategory::Special,
11715                    move_type: PokemonType::GRASS,
11716                    flags: Flags {
11717                        contact: true,
11718                                protect: true,
11719                        ..Default::default()
11720                    },
11721                    volatile_status: Some(VolatileStatus {
11722                        target: MoveTarget::User,
11723                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
11724                    }),
11725                    ..Default::default()
11726                },
11727            );
11728        }
11729        moves.insert(
11730            Choices::PHANTOMFORCE,
11731            Choice {
11732                move_id: Choices::PHANTOMFORCE,
11733                base_power: 90.0,
11734                category: MoveCategory::Physical,
11735                move_type: PokemonType::GHOST,
11736                flags: Flags {
11737                    charge: true,
11738                    contact: true,
11739                    ..Default::default()
11740                },
11741                ..Default::default()
11742            },
11743        );
11744        moves.insert(
11745            Choices::PHOTONGEYSER,
11746            Choice {
11747                move_id: Choices::PHOTONGEYSER,
11748                base_power: 100.0,
11749                category: MoveCategory::Special,
11750                move_type: PokemonType::PSYCHIC,
11751                flags: Flags {
11752                    protect: true,
11753                    ..Default::default()
11754                },
11755                ..Default::default()
11756            },
11757        );
11758        moves.insert(
11759            Choices::PIKAPAPOW,
11760            Choice {
11761                move_id: Choices::PIKAPAPOW,
11762                category: MoveCategory::Special,
11763                move_type: PokemonType::ELECTRIC,
11764                flags: Flags {
11765                    protect: true,
11766                    ..Default::default()
11767                },
11768                ..Default::default()
11769            },
11770        );
11771        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
11772            moves.insert(
11773                Choices::PINMISSILE,
11774                Choice {
11775                    move_id: Choices::PINMISSILE,
11776                    accuracy: 85.0,
11777                    base_power: 14.0,
11778                    category: MoveCategory::Physical,
11779                    move_type: PokemonType::BUG,
11780                    flags: Flags {
11781                            protect: true,
11782                        ..Default::default()
11783                    },
11784                    ..Default::default()
11785                },
11786            );
11787        } else {
11788            moves.insert(
11789                Choices::PINMISSILE,
11790                Choice {
11791                    move_id: Choices::PINMISSILE,
11792                    accuracy: 95.0,
11793                    base_power: 25.0,
11794                    category: MoveCategory::Physical,
11795                    move_type: PokemonType::BUG,
11796                    flags: Flags {
11797                            protect: true,
11798                        ..Default::default()
11799                    },
11800                    ..Default::default()
11801                },
11802            );
11803        }
11804        moves.insert(
11805            Choices::PLASMAFISTS,
11806            Choice {
11807                move_id: Choices::PLASMAFISTS,
11808                base_power: 100.0,
11809                category: MoveCategory::Physical,
11810                move_type: PokemonType::ELECTRIC,
11811                flags: Flags {
11812                    contact: true,
11813                    protect: true,
11814                    punch: true,
11815                    ..Default::default()
11816                },
11817                ..Default::default()
11818            },
11819        );
11820        moves.insert(
11821            Choices::PLAYNICE,
11822            Choice {
11823                move_id: Choices::PLAYNICE,
11824                move_type: PokemonType::NORMAL,
11825                flags: Flags {
11826                    reflectable: true,
11827                    ..Default::default()
11828                },
11829                boost: Some(Boost {
11830                    target: MoveTarget::Opponent,
11831                    boosts: StatBoosts {
11832                        attack: -1,
11833                        defense: 0,
11834                        special_attack: 0,
11835                        special_defense: 0,
11836                        speed: 0,
11837                        accuracy: 0,
11838                    },
11839                }),
11840                ..Default::default()
11841            },
11842        );
11843        moves.insert(
11844            Choices::PLAYROUGH,
11845            Choice {
11846                move_id: Choices::PLAYROUGH,
11847                accuracy: 90.0,
11848                base_power: 90.0,
11849                category: MoveCategory::Physical,
11850                move_type: PokemonType::FAIRY,
11851                flags: Flags {
11852                    contact: true,
11853                    protect: true,
11854                    ..Default::default()
11855                },
11856                secondaries: Some(vec![Secondary {
11857                    chance: 10.0,
11858                    target: MoveTarget::Opponent,
11859                    effect: Effect::Boost(StatBoosts {
11860                        attack: -1,
11861                        defense: 0,
11862                        special_attack: 0,
11863                        special_defense: 0,
11864                        speed: 0,
11865                        accuracy: 0,
11866                    }),
11867                }]),
11868                ..Default::default()
11869            },
11870        );
11871        moves.insert(
11872            Choices::PLUCK,
11873            Choice {
11874                move_id: Choices::PLUCK,
11875                base_power: 60.0,
11876                category: MoveCategory::Physical,
11877                move_type: PokemonType::FLYING,
11878                flags: Flags {
11879                    contact: true,
11880                    protect: true,
11881                    ..Default::default()
11882                },
11883                ..Default::default()
11884            },
11885        );
11886        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
11887            moves.insert(
11888                Choices::POISONFANG,
11889                Choice {
11890                    move_id: Choices::POISONFANG,
11891                    base_power: 50.0,
11892                    category: MoveCategory::Physical,
11893                    move_type: PokemonType::POISON,
11894                    flags: Flags {
11895                        bite: true,
11896                        contact: true,
11897                            protect: true,
11898                        ..Default::default()
11899                    },
11900                    secondaries: Some(vec![Secondary {
11901                        chance: 30.0,
11902                        target: MoveTarget::Opponent,
11903                        effect: Effect::Status(PokemonStatus::TOXIC),
11904                    }]),
11905                    ..Default::default()
11906                },
11907            );
11908        } else {
11909            moves.insert(
11910                Choices::POISONFANG,
11911                Choice {
11912                    move_id: Choices::POISONFANG,
11913                    base_power: 50.0,
11914                    category: MoveCategory::Physical,
11915                    move_type: PokemonType::POISON,
11916                    flags: Flags {
11917                        bite: true,
11918                        contact: true,
11919                            protect: true,
11920                        ..Default::default()
11921                    },
11922                    secondaries: Some(vec![Secondary {
11923                        chance: 50.0,
11924                        target: MoveTarget::Opponent,
11925                        effect: Effect::Status(PokemonStatus::TOXIC),
11926                    }]),
11927                    ..Default::default()
11928                },
11929            );
11930        }
11931        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
11932            moves.insert(
11933                Choices::POISONGAS,
11934                Choice {
11935                    move_id: Choices::POISONGAS,
11936                    accuracy: 55.0,
11937                    status: Some(Status {
11938                        target: MoveTarget::Opponent,
11939                        status: PokemonStatus::POISON,
11940                    }),
11941                    move_type: PokemonType::POISON,
11942                    flags: Flags {
11943                            protect: true,
11944                        reflectable: true,
11945                        ..Default::default()
11946                    },
11947                    ..Default::default()
11948                },
11949            );
11950        } else if cfg!(feature = "gen5") {
11951            moves.insert(
11952                Choices::POISONGAS,
11953                Choice {
11954                    move_id: Choices::POISONGAS,
11955                    accuracy: 80.0,
11956                    status: Some(Status {
11957                        target: MoveTarget::Opponent,
11958                        status: PokemonStatus::POISON,
11959                    }),
11960                    move_type: PokemonType::POISON,
11961                    flags: Flags {
11962                            protect: true,
11963                        reflectable: true,
11964                        ..Default::default()
11965                    },
11966                    ..Default::default()
11967                },
11968            );
11969        } else {
11970            moves.insert(
11971                Choices::POISONGAS,
11972                Choice {
11973                    move_id: Choices::POISONGAS,
11974                    accuracy: 90.0,
11975                    status: Some(Status {
11976                        target: MoveTarget::Opponent,
11977                        status: PokemonStatus::POISON,
11978                    }),
11979                    move_type: PokemonType::POISON,
11980                    flags: Flags {
11981                            protect: true,
11982                        reflectable: true,
11983                        ..Default::default()
11984                    },
11985                    ..Default::default()
11986                },
11987            );
11988        }
11989        moves.insert(
11990            Choices::POISONJAB,
11991            Choice {
11992                move_id: Choices::POISONJAB,
11993                base_power: 80.0,
11994                category: MoveCategory::Physical,
11995                move_type: PokemonType::POISON,
11996                flags: Flags {
11997                    contact: true,
11998                    protect: true,
11999                    ..Default::default()
12000                },
12001                secondaries: Some(vec![Secondary {
12002                    chance: 30.0,
12003                    target: MoveTarget::Opponent,
12004                    effect: Effect::Status(PokemonStatus::POISON),
12005                }]),
12006                ..Default::default()
12007            },
12008        );
12009        moves.insert(
12010            Choices::POISONPOWDER,
12011            Choice {
12012                move_id: Choices::POISONPOWDER,
12013                accuracy: 75.0,
12014                status: Some(Status {
12015                    target: MoveTarget::Opponent,
12016                    status: PokemonStatus::POISON,
12017                }),
12018                move_type: PokemonType::POISON,
12019                flags: Flags {
12020                    powder: true,
12021                    protect: true,
12022                    reflectable: true,
12023                    ..Default::default()
12024                },
12025                ..Default::default()
12026            },
12027        );
12028        if cfg!(feature = "gen1") {
12029            moves.insert(
12030                Choices::POISONSTING,
12031                Choice {
12032                    move_id: Choices::POISONSTING,
12033                    base_power: 15.0,
12034                    category: MoveCategory::Physical,
12035                    move_type: PokemonType::POISON,
12036                    flags: Flags {
12037                        protect: true,
12038                        ..Default::default()
12039                    },
12040                    secondaries: Some(vec![Secondary {
12041                        chance: 20.0,
12042                        target: MoveTarget::Opponent,
12043                        effect: Effect::Status(PokemonStatus::POISON),
12044                    }]),
12045                    ..Default::default()
12046                },
12047            );
12048        } else {
12049            moves.insert(
12050                Choices::POISONSTING,
12051                Choice {
12052                    move_id: Choices::POISONSTING,
12053                    base_power: 15.0,
12054                    category: MoveCategory::Physical,
12055                    move_type: PokemonType::POISON,
12056                    flags: Flags {
12057                        protect: true,
12058                        ..Default::default()
12059                    },
12060                    secondaries: Some(vec![Secondary {
12061                        chance: 30.0,
12062                        target: MoveTarget::Opponent,
12063                        effect: Effect::Status(PokemonStatus::POISON),
12064                    }]),
12065                    ..Default::default()
12066                },
12067            );
12068        }
12069        moves.insert(
12070            Choices::POISONTAIL,
12071            Choice {
12072                move_id: Choices::POISONTAIL,
12073                base_power: 50.0,
12074                category: MoveCategory::Physical,
12075                move_type: PokemonType::POISON,
12076                flags: Flags {
12077                    contact: true,
12078                    protect: true,
12079                    ..Default::default()
12080                },
12081                secondaries: Some(vec![Secondary {
12082                    chance: 10.0,
12083                    target: MoveTarget::Opponent,
12084                    effect: Effect::Status(PokemonStatus::POISON),
12085                }]),
12086                ..Default::default()
12087            },
12088        );
12089        moves.insert(
12090            Choices::POLLENPUFF,
12091            Choice {
12092                move_id: Choices::POLLENPUFF,
12093                base_power: 90.0,
12094                category: MoveCategory::Special,
12095                move_type: PokemonType::BUG,
12096                flags: Flags {
12097                    bullet: true,
12098                    protect: true,
12099                    ..Default::default()
12100                },
12101                ..Default::default()
12102            },
12103        );
12104        moves.insert(
12105            Choices::POLTERGEIST,
12106            Choice {
12107                move_id: Choices::POLTERGEIST,
12108                accuracy: 90.0,
12109                base_power: 110.0,
12110                category: MoveCategory::Physical,
12111                move_type: PokemonType::GHOST,
12112                flags: Flags {
12113                    protect: true,
12114                    ..Default::default()
12115                },
12116                ..Default::default()
12117            },
12118        );
12119        moves.insert(
12120            Choices::POPULATIONBOMB,
12121            Choice {
12122                move_id: Choices::POPULATIONBOMB,
12123                accuracy: 90.0,
12124                base_power: 20.0,
12125                category: MoveCategory::Physical,
12126                move_type: PokemonType::NORMAL,
12127                flags: Flags {
12128                    contact: true,
12129                    protect: true,
12130                    slicing: true,
12131                    ..Default::default()
12132                },
12133                ..Default::default()
12134            },
12135        );
12136        moves.insert(
12137            Choices::POUNCE,
12138            Choice {
12139                move_id: Choices::POUNCE,
12140                base_power: 50.0,
12141                category: MoveCategory::Physical,
12142                move_type: PokemonType::BUG,
12143                flags: Flags {
12144                    contact: true,
12145                    protect: true,
12146                    ..Default::default()
12147                },
12148                secondaries: Some(vec![Secondary {
12149                    chance: 100.0,
12150                    target: MoveTarget::Opponent,
12151                    effect: Effect::Boost(StatBoosts {
12152                        attack: 0,
12153                        defense: 0,
12154                        special_attack: 0,
12155                        special_defense: 0,
12156                        speed: -1,
12157                        accuracy: 0,
12158                    }),
12159                }]),
12160                ..Default::default()
12161            },
12162        );
12163        moves.insert(
12164            Choices::POUND,
12165            Choice {
12166                move_id: Choices::POUND,
12167                base_power: 40.0,
12168                category: MoveCategory::Physical,
12169                move_type: PokemonType::NORMAL,
12170                flags: Flags {
12171                    contact: true,
12172                    protect: true,
12173                    ..Default::default()
12174                },
12175                ..Default::default()
12176            },
12177        );
12178        moves.insert(
12179            Choices::POWDER,
12180            Choice {
12181                move_id: Choices::POWDER,
12182                priority: 1,
12183                move_type: PokemonType::BUG,
12184                flags: Flags {
12185                    powder: true,
12186                    protect: true,
12187                    reflectable: true,
12188                    ..Default::default()
12189                },
12190                volatile_status: Some(VolatileStatus {
12191                    target: MoveTarget::Opponent,
12192                    volatile_status: PokemonVolatileStatus::POWDER,
12193                }),
12194                ..Default::default()
12195            },
12196        );
12197        moves.insert(
12198            Choices::POWDERSNOW,
12199            Choice {
12200                move_id: Choices::POWDERSNOW,
12201                base_power: 40.0,
12202                category: MoveCategory::Special,
12203                move_type: PokemonType::ICE,
12204                flags: Flags {
12205                    protect: true,
12206                    ..Default::default()
12207                },
12208                secondaries: Some(vec![Secondary {
12209                    chance: 10.0,
12210                    target: MoveTarget::Opponent,
12211                    effect: Effect::Status(PokemonStatus::FREEZE),
12212                }]),
12213                ..Default::default()
12214            },
12215        );
12216        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
12217            moves.insert(
12218                Choices::POWERGEM,
12219                Choice {
12220                    move_id: Choices::POWERGEM,
12221                    base_power: 70.0,
12222                    category: MoveCategory::Special,
12223                    move_type: PokemonType::ROCK,
12224                    flags: Flags {
12225                            protect: true,
12226                        ..Default::default()
12227                    },
12228                    ..Default::default()
12229                },
12230            );
12231        } else {
12232            moves.insert(
12233                Choices::POWERGEM,
12234                Choice {
12235                    move_id: Choices::POWERGEM,
12236                    base_power: 80.0,
12237                    category: MoveCategory::Special,
12238                    move_type: PokemonType::ROCK,
12239                    flags: Flags {
12240                            protect: true,
12241                        ..Default::default()
12242                    },
12243                    ..Default::default()
12244                },
12245            );
12246        }
12247        moves.insert(
12248            Choices::POWERSHIFT,
12249            Choice {
12250                move_id: Choices::POWERSHIFT,
12251                target: MoveTarget::User,
12252                move_type: PokemonType::NORMAL,
12253                flags: Flags {
12254                    ..Default::default()
12255                },
12256                volatile_status: Some(VolatileStatus {
12257                    target: MoveTarget::User,
12258                    volatile_status: PokemonVolatileStatus::POWERSHIFT,
12259                }),
12260                ..Default::default()
12261            },
12262        );
12263        moves.insert(
12264            Choices::POWERSPLIT,
12265            Choice {
12266                move_id: Choices::POWERSPLIT,
12267                move_type: PokemonType::PSYCHIC,
12268                flags: Flags {
12269                    protect: true,
12270                    ..Default::default()
12271                },
12272                ..Default::default()
12273            },
12274        );
12275        moves.insert(
12276            Choices::POWERSWAP,
12277            Choice {
12278                move_id: Choices::POWERSWAP,
12279                move_type: PokemonType::PSYCHIC,
12280                flags: Flags {
12281                    protect: true,
12282                    ..Default::default()
12283                },
12284                ..Default::default()
12285            },
12286        );
12287        moves.insert(
12288            Choices::POWERTRICK,
12289            Choice {
12290                move_id: Choices::POWERTRICK,
12291                target: MoveTarget::User,
12292                move_type: PokemonType::PSYCHIC,
12293                flags: Flags {
12294                    ..Default::default()
12295                },
12296                volatile_status: Some(VolatileStatus {
12297                    target: MoveTarget::User,
12298                    volatile_status: PokemonVolatileStatus::POWERTRICK,
12299                }),
12300                ..Default::default()
12301            },
12302        );
12303        moves.insert(
12304            Choices::POWERTRIP,
12305            Choice {
12306                move_id: Choices::POWERTRIP,
12307                base_power: 20.0,
12308                category: MoveCategory::Physical,
12309                move_type: PokemonType::DARK,
12310                flags: Flags {
12311                    contact: true,
12312                    protect: true,
12313                    ..Default::default()
12314                },
12315                ..Default::default()
12316            },
12317        );
12318        moves.insert(
12319            Choices::POWERUPPUNCH,
12320            Choice {
12321                move_id: Choices::POWERUPPUNCH,
12322                base_power: 40.0,
12323                category: MoveCategory::Physical,
12324                move_type: PokemonType::FIGHTING,
12325                flags: Flags {
12326                    contact: true,
12327                    protect: true,
12328                    punch: true,
12329                    ..Default::default()
12330                },
12331                secondaries: Some(vec![Secondary {
12332                    chance: 100.0,
12333                    target: MoveTarget::User,
12334                    effect: Effect::Boost(StatBoosts {
12335                        attack: 1,
12336                        defense: 0,
12337                        special_attack: 0,
12338                        special_defense: 0,
12339                        speed: 0,
12340                        accuracy: 0,
12341                    }),
12342                }]),
12343                ..Default::default()
12344            },
12345        );
12346        moves.insert(
12347            Choices::POWERWHIP,
12348            Choice {
12349                move_id: Choices::POWERWHIP,
12350                accuracy: 85.0,
12351                base_power: 120.0,
12352                category: MoveCategory::Physical,
12353                move_type: PokemonType::GRASS,
12354                flags: Flags {
12355                    contact: true,
12356                    protect: true,
12357                    ..Default::default()
12358                },
12359                ..Default::default()
12360            },
12361        );
12362        moves.insert(
12363            Choices::PRECIPICEBLADES,
12364            Choice {
12365                move_id: Choices::PRECIPICEBLADES,
12366                accuracy: 85.0,
12367                base_power: 120.0,
12368                category: MoveCategory::Physical,
12369                move_type: PokemonType::GROUND,
12370                flags: Flags {
12371                    protect: true,
12372                    ..Default::default()
12373                },
12374                ..Default::default()
12375            },
12376        );
12377        moves.insert(
12378            Choices::PRESENT,
12379            Choice {
12380                move_id: Choices::PRESENT,
12381                accuracy: 90.0,
12382                category: MoveCategory::Physical,
12383                move_type: PokemonType::NORMAL,
12384                flags: Flags {
12385                    protect: true,
12386                    ..Default::default()
12387                },
12388                ..Default::default()
12389            },
12390        );
12391        moves.insert(
12392            Choices::PRISMATICLASER,
12393            Choice {
12394                move_id: Choices::PRISMATICLASER,
12395                base_power: 160.0,
12396                category: MoveCategory::Special,
12397                move_type: PokemonType::PSYCHIC,
12398                flags: Flags {
12399                    protect: true,
12400                    recharge: true,
12401                    ..Default::default()
12402                },
12403                ..Default::default()
12404            },
12405        );
12406        moves.insert(
12407            Choices::PROTECT,
12408            Choice {
12409                move_id: Choices::PROTECT,
12410                priority: 4,
12411                target: MoveTarget::User,
12412                move_type: PokemonType::NORMAL,
12413                flags: Flags {
12414                    ..Default::default()
12415                },
12416                volatile_status: Some(VolatileStatus {
12417                    target: MoveTarget::User,
12418                    volatile_status: PokemonVolatileStatus::PROTECT,
12419                }),
12420                ..Default::default()
12421            },
12422        );
12423        moves.insert(
12424            Choices::PSYBEAM,
12425            Choice {
12426                move_id: Choices::PSYBEAM,
12427                base_power: 65.0,
12428                category: MoveCategory::Special,
12429                move_type: PokemonType::PSYCHIC,
12430                flags: Flags {
12431                    protect: true,
12432                    ..Default::default()
12433                },
12434                secondaries: Some(vec![Secondary {
12435                    chance: 10.0,
12436                    target: MoveTarget::Opponent,
12437                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
12438                }]),
12439                ..Default::default()
12440            },
12441        );
12442        moves.insert(
12443            Choices::PSYBLADE,
12444            Choice {
12445                move_id: Choices::PSYBLADE,
12446                base_power: 80.0,
12447                category: MoveCategory::Physical,
12448                move_type: PokemonType::PSYCHIC,
12449                flags: Flags {
12450                    contact: true,
12451                    protect: true,
12452                    slicing: true,
12453                    ..Default::default()
12454                },
12455                ..Default::default()
12456            },
12457        );
12458        if cfg!(feature = "gen1") {
12459            moves.insert(
12460                Choices::PSYCHIC,
12461                Choice {
12462                    move_id: Choices::PSYCHIC,
12463                    base_power: 90.0,
12464                    category: MoveCategory::Special,
12465                    move_type: PokemonType::PSYCHIC,
12466                    flags: Flags {
12467                        protect: true,
12468                        ..Default::default()
12469                    },
12470                    secondaries: Some(vec![Secondary {
12471                        chance: 33.2,
12472                        target: MoveTarget::Opponent,
12473                        effect: Effect::Boost(StatBoosts {
12474                            attack: 0,
12475                            defense: 0,
12476                            special_attack: -1,
12477                            special_defense: 0,
12478                            speed: 0,
12479                            accuracy: 0,
12480                        }),
12481                    }]),
12482                    ..Default::default()
12483                },
12484            );
12485        } else {
12486            moves.insert(
12487                Choices::PSYCHIC,
12488                Choice {
12489                    move_id: Choices::PSYCHIC,
12490                    base_power: 90.0,
12491                    category: MoveCategory::Special,
12492                    move_type: PokemonType::PSYCHIC,
12493                    flags: Flags {
12494                        protect: true,
12495                        ..Default::default()
12496                    },
12497                    secondaries: Some(vec![Secondary {
12498                        chance: 10.0,
12499                        target: MoveTarget::Opponent,
12500                        effect: Effect::Boost(StatBoosts {
12501                            attack: 0,
12502                            defense: 0,
12503                            special_attack: 0,
12504                            special_defense: -1,
12505                            speed: 0,
12506                            accuracy: 0,
12507                        }),
12508                    }]),
12509                    ..Default::default()
12510                },
12511            );
12512        }
12513        moves.insert(
12514            Choices::PSYCHICFANGS,
12515            Choice {
12516                move_id: Choices::PSYCHICFANGS,
12517                base_power: 85.0,
12518                category: MoveCategory::Physical,
12519                move_type: PokemonType::PSYCHIC,
12520                flags: Flags {
12521                    bite: true,
12522                    contact: true,
12523                    protect: true,
12524                    ..Default::default()
12525                },
12526                ..Default::default()
12527            },
12528        );
12529        moves.insert(
12530            Choices::PSYCHICNOISE,
12531            Choice {
12532                move_id: Choices::PSYCHICNOISE,
12533                base_power: 75.0,
12534                category: MoveCategory::Special,
12535                move_type: PokemonType::PSYCHIC,
12536                flags: Flags {
12537                    protect: true,
12538                    sound: true,
12539                    ..Default::default()
12540                },
12541                volatile_status: Some(VolatileStatus {
12542                    target: MoveTarget::Opponent,
12543                    volatile_status: PokemonVolatileStatus::HEALBLOCK,
12544                }),
12545                ..Default::default()
12546            },
12547        );
12548        moves.insert(
12549            Choices::PSYCHICTERRAIN,
12550            Choice {
12551                move_id: Choices::PSYCHICTERRAIN,
12552                move_type: PokemonType::PSYCHIC,
12553                flags: Flags {
12554                    ..Default::default()
12555                },
12556                ..Default::default()
12557            },
12558        );
12559        moves.insert(
12560            Choices::PSYCHOBOOST,
12561            Choice {
12562                move_id: Choices::PSYCHOBOOST,
12563                accuracy: 90.0,
12564                base_power: 140.0,
12565                category: MoveCategory::Special,
12566                move_type: PokemonType::PSYCHIC,
12567                flags: Flags {
12568                    protect: true,
12569                    ..Default::default()
12570                },
12571                boost: Some(Boost {
12572                    target: MoveTarget::User,
12573                    boosts: StatBoosts {
12574                        attack: 0,
12575                        defense: 0,
12576                        special_attack: -2,
12577                        special_defense: 0,
12578                        speed: 0,
12579                        accuracy: 0,
12580                    },
12581                }),
12582                ..Default::default()
12583            },
12584        );
12585        moves.insert(
12586            Choices::PSYCHOCUT,
12587            Choice {
12588                move_id: Choices::PSYCHOCUT,
12589                base_power: 70.0,
12590                category: MoveCategory::Physical,
12591                move_type: PokemonType::PSYCHIC,
12592                flags: Flags {
12593                    protect: true,
12594                    slicing: true,
12595                    ..Default::default()
12596                },
12597                ..Default::default()
12598            },
12599        );
12600        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
12601            moves.insert(
12602                Choices::PSYCHOSHIFT,
12603                Choice {
12604                    accuracy: 90.0,
12605                    move_id: Choices::PSYCHOSHIFT,
12606                    move_type: PokemonType::PSYCHIC,
12607                    flags: Flags {
12608                            protect: true,
12609                        ..Default::default()
12610                    },
12611                    ..Default::default()
12612                },
12613            );
12614        } else {
12615            moves.insert(
12616                Choices::PSYCHOSHIFT,
12617                Choice {
12618                    move_id: Choices::PSYCHOSHIFT,
12619                    move_type: PokemonType::PSYCHIC,
12620                    flags: Flags {
12621                            protect: true,
12622                        ..Default::default()
12623                    },
12624                    ..Default::default()
12625                },
12626            );
12627        }
12628        moves.insert(
12629            Choices::PSYCHUP,
12630            Choice {
12631                move_id: Choices::PSYCHUP,
12632                move_type: PokemonType::NORMAL,
12633                flags: Flags {
12634                    ..Default::default()
12635                },
12636                ..Default::default()
12637            },
12638        );
12639        moves.insert(
12640            Choices::PSYSHIELDBASH,
12641            Choice {
12642                move_id: Choices::PSYSHIELDBASH,
12643                accuracy: 90.0,
12644                base_power: 70.0,
12645                category: MoveCategory::Physical,
12646                move_type: PokemonType::PSYCHIC,
12647                flags: Flags {
12648                    contact: true,
12649                    protect: true,
12650                    ..Default::default()
12651                },
12652                secondaries: Some(vec![Secondary {
12653                    chance: 100.0,
12654                    target: MoveTarget::User,
12655                    effect: Effect::Boost(StatBoosts {
12656                        attack: 0,
12657                        defense: 1,
12658                        special_attack: 0,
12659                        special_defense: 0,
12660                        speed: 0,
12661                        accuracy: 0,
12662                    }),
12663                }]),
12664                ..Default::default()
12665            },
12666        );
12667        moves.insert(
12668            Choices::PSYSHOCK,
12669            Choice {
12670                move_id: Choices::PSYSHOCK,
12671                base_power: 80.0,
12672                category: MoveCategory::Special,
12673                move_type: PokemonType::PSYCHIC,
12674                flags: Flags {
12675                    protect: true,
12676                    ..Default::default()
12677                },
12678                ..Default::default()
12679            },
12680        );
12681        moves.insert(
12682            Choices::PSYSTRIKE,
12683            Choice {
12684                move_id: Choices::PSYSTRIKE,
12685                base_power: 100.0,
12686                category: MoveCategory::Special,
12687                move_type: PokemonType::PSYCHIC,
12688                flags: Flags {
12689                    protect: true,
12690                    ..Default::default()
12691                },
12692                ..Default::default()
12693            },
12694        );
12695        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
12696            moves.insert(
12697                Choices::PSYWAVE,
12698                Choice {
12699                    accuracy: 90.0,
12700                    move_id: Choices::PSYWAVE,
12701                    category: MoveCategory::Special,
12702                    move_type: PokemonType::PSYCHIC,
12703                    flags: Flags {
12704                            protect: true,
12705                        ..Default::default()
12706                    },
12707                    ..Default::default()
12708                },
12709            );
12710        } else {
12711            moves.insert(
12712                Choices::PSYWAVE,
12713                Choice {
12714                    move_id: Choices::PSYWAVE,
12715                    category: MoveCategory::Special,
12716                    move_type: PokemonType::PSYCHIC,
12717                    flags: Flags {
12718                            protect: true,
12719                        ..Default::default()
12720                    },
12721                    ..Default::default()
12722                },
12723            );
12724        }
12725        moves.insert(
12726            Choices::PUNISHMENT,
12727            Choice {
12728                move_id: Choices::PUNISHMENT,
12729                category: MoveCategory::Physical,
12730                move_type: PokemonType::DARK,
12731                flags: Flags {
12732                    contact: true,
12733                    protect: true,
12734                    ..Default::default()
12735                },
12736                ..Default::default()
12737            },
12738        );
12739        moves.insert(
12740            Choices::PURIFY,
12741            Choice {
12742                move_id: Choices::PURIFY,
12743                move_type: PokemonType::POISON,
12744                flags: Flags {
12745                    heal: true,
12746                    protect: true,
12747                    reflectable: true,
12748                    ..Default::default()
12749                },
12750                ..Default::default()
12751            },
12752        );
12753        moves.insert(
12754            Choices::PURSUIT,
12755            Choice {
12756                move_id: Choices::PURSUIT,
12757                base_power: 40.0,
12758                category: MoveCategory::Physical,
12759                move_type: PokemonType::DARK,
12760                flags: Flags {
12761                    contact: true,
12762                    protect: true,
12763                    ..Default::default()
12764                },
12765                ..Default::default()
12766            },
12767        );
12768        moves.insert(
12769            Choices::PYROBALL,
12770            Choice {
12771                move_id: Choices::PYROBALL,
12772                accuracy: 90.0,
12773                base_power: 120.0,
12774                category: MoveCategory::Physical,
12775                move_type: PokemonType::FIRE,
12776                flags: Flags {
12777                    bullet: true,
12778                    protect: true,
12779                    ..Default::default()
12780                },
12781                secondaries: Some(vec![Secondary {
12782                    chance: 10.0,
12783                    target: MoveTarget::Opponent,
12784                    effect: Effect::Status(PokemonStatus::BURN),
12785                }]),
12786                ..Default::default()
12787            },
12788        );
12789        moves.insert(
12790            Choices::QUASH,
12791            Choice {
12792                move_id: Choices::QUASH,
12793                move_type: PokemonType::DARK,
12794                flags: Flags {
12795                    protect: true,
12796                    ..Default::default()
12797                },
12798                ..Default::default()
12799            },
12800        );
12801        moves.insert(
12802            Choices::QUICKATTACK,
12803            Choice {
12804                move_id: Choices::QUICKATTACK,
12805                base_power: 40.0,
12806                category: MoveCategory::Physical,
12807                priority: 1,
12808                move_type: PokemonType::NORMAL,
12809                flags: Flags {
12810                    contact: true,
12811                    protect: true,
12812                    ..Default::default()
12813                },
12814                ..Default::default()
12815            },
12816        );
12817        moves.insert(
12818            Choices::QUICKGUARD,
12819            Choice {
12820                move_id: Choices::QUICKGUARD,
12821                priority: 3,
12822                target: MoveTarget::User,
12823                move_type: PokemonType::FIGHTING,
12824                flags: Flags {
12825                    ..Default::default()
12826                },
12827                side_condition: Some(SideCondition {
12828                    target: MoveTarget::User,
12829                    condition: PokemonSideCondition::QuickGuard,
12830                }),
12831                ..Default::default()
12832            },
12833        );
12834        moves.insert(
12835            Choices::QUIVERDANCE,
12836            Choice {
12837                move_id: Choices::QUIVERDANCE,
12838                target: MoveTarget::User,
12839                move_type: PokemonType::BUG,
12840                flags: Flags {
12841                    ..Default::default()
12842                },
12843                boost: Some(Boost {
12844                    target: MoveTarget::User,
12845                    boosts: StatBoosts {
12846                        attack: 0,
12847                        defense: 0,
12848                        special_attack: 1,
12849                        special_defense: 1,
12850                        speed: 1,
12851                        accuracy: 0,
12852                    },
12853                }),
12854                ..Default::default()
12855            },
12856        );
12857        moves.insert(
12858            Choices::RAGE,
12859            Choice {
12860                move_id: Choices::RAGE,
12861                base_power: 20.0,
12862                category: MoveCategory::Physical,
12863                move_type: PokemonType::NORMAL,
12864                flags: Flags {
12865                    contact: true,
12866                    protect: true,
12867                    ..Default::default()
12868                },
12869                ..Default::default()
12870            },
12871        );
12872        moves.insert(
12873            Choices::RAGEFIST,
12874            Choice {
12875                move_id: Choices::RAGEFIST,
12876                base_power: 50.0,
12877                category: MoveCategory::Physical,
12878                move_type: PokemonType::GHOST,
12879                flags: Flags {
12880                    contact: true,
12881                    protect: true,
12882                    punch: true,
12883                    ..Default::default()
12884                },
12885                ..Default::default()
12886            },
12887        );
12888        moves.insert(
12889            Choices::RAGEPOWDER,
12890            Choice {
12891                move_id: Choices::RAGEPOWDER,
12892                priority: 2,
12893                target: MoveTarget::User,
12894                move_type: PokemonType::BUG,
12895                flags: Flags {
12896                    powder: true,
12897                    ..Default::default()
12898                },
12899                volatile_status: Some(VolatileStatus {
12900                    target: MoveTarget::User,
12901                    volatile_status: PokemonVolatileStatus::RAGEPOWDER,
12902                }),
12903                ..Default::default()
12904            },
12905        );
12906        moves.insert(
12907            Choices::RAGINGBULL,
12908            Choice {
12909                move_id: Choices::RAGINGBULL,
12910                base_power: 90.0,
12911                category: MoveCategory::Physical,
12912                move_type: PokemonType::NORMAL,
12913                flags: Flags {
12914                    contact: true,
12915                    protect: true,
12916                    ..Default::default()
12917                },
12918                ..Default::default()
12919            },
12920        );
12921        moves.insert(
12922            Choices::RAGINGFURY,
12923            Choice {
12924                move_id: Choices::RAGINGFURY,
12925                base_power: 120.0,
12926                category: MoveCategory::Physical,
12927                move_type: PokemonType::FIRE,
12928                flags: Flags {
12929                    protect: true,
12930                    ..Default::default()
12931                },
12932                volatile_status: Some(VolatileStatus {
12933                    target: MoveTarget::User,
12934                    volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
12935                }),
12936                ..Default::default()
12937            },
12938        );
12939        moves.insert(
12940            Choices::RAINDANCE,
12941            Choice {
12942                move_id: Choices::RAINDANCE,
12943                move_type: PokemonType::WATER,
12944                flags: Flags {
12945                    ..Default::default()
12946                },
12947                ..Default::default()
12948            },
12949        );
12950
12951        if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
12952            moves.insert(
12953                Choices::RAPIDSPIN,
12954                Choice {
12955                    move_id: Choices::RAPIDSPIN,
12956                    base_power: 50.0,
12957                    category: MoveCategory::Physical,
12958                    move_type: PokemonType::NORMAL,
12959                    flags: Flags {
12960                        contact: true,
12961                            protect: true,
12962                        ..Default::default()
12963                    },
12964                    secondaries: Some(vec![Secondary {
12965                        chance: 100.0,
12966                        target: MoveTarget::User,
12967                        effect: Effect::Boost(StatBoosts {
12968                            attack: 0,
12969                            defense: 0,
12970                            special_attack: 0,
12971                            special_defense: 0,
12972                            speed: 1,
12973                            accuracy: 0,
12974                        }),
12975                    }]),
12976                    ..Default::default()
12977                },
12978            );
12979        } else {
12980            moves.insert(
12981                Choices::RAPIDSPIN,
12982                Choice {
12983                    move_id: Choices::RAPIDSPIN,
12984                    base_power: 20.0,
12985                    category: MoveCategory::Physical,
12986                    move_type: PokemonType::NORMAL,
12987                    flags: Flags {
12988                        contact: true,
12989                            protect: true,
12990                        ..Default::default()
12991                    },
12992                    secondaries: None,
12993                    ..Default::default()
12994                },
12995            );
12996        }
12997        moves.insert(
12998            Choices::RAZORLEAF,
12999            Choice {
13000                move_id: Choices::RAZORLEAF,
13001                accuracy: 95.0,
13002                base_power: 55.0,
13003                category: MoveCategory::Physical,
13004                move_type: PokemonType::GRASS,
13005                flags: Flags {
13006                    protect: true,
13007                    slicing: true,
13008                    ..Default::default()
13009                },
13010                ..Default::default()
13011            },
13012        );
13013        moves.insert(
13014            Choices::RAZORSHELL,
13015            Choice {
13016                move_id: Choices::RAZORSHELL,
13017                accuracy: 95.0,
13018                base_power: 75.0,
13019                category: MoveCategory::Physical,
13020                move_type: PokemonType::WATER,
13021                flags: Flags {
13022                    contact: true,
13023                    protect: true,
13024                    slicing: true,
13025                    ..Default::default()
13026                },
13027                secondaries: Some(vec![Secondary {
13028                    chance: 50.0,
13029                    target: MoveTarget::Opponent,
13030                    effect: Effect::Boost(StatBoosts {
13031                        attack: 0,
13032                        defense: -1,
13033                        special_attack: 0,
13034                        special_defense: 0,
13035                        speed: 0,
13036                        accuracy: 0,
13037                    }),
13038                }]),
13039                ..Default::default()
13040            },
13041        );
13042        moves.insert(
13043            Choices::RAZORWIND,
13044            Choice {
13045                move_id: Choices::RAZORWIND,
13046                base_power: 80.0,
13047                category: MoveCategory::Special,
13048                move_type: PokemonType::NORMAL,
13049                flags: Flags {
13050                    charge: true,
13051                    protect: true,
13052                    ..Default::default()
13053                },
13054                ..Default::default()
13055            },
13056        );
13057        moves.insert(
13058            Choices::RECHARGE,
13059            Choice {
13060                move_id: Choices::RECHARGE,
13061                target: MoveTarget::User,
13062                move_type: PokemonType::NORMAL,
13063                flags: Flags {
13064                    ..Default::default()
13065                },
13066                ..Default::default()
13067            },
13068        );
13069        moves.insert(
13070            Choices::RECOVER,
13071            Choice {
13072                move_id: Choices::RECOVER,
13073                target: MoveTarget::User,
13074                move_type: PokemonType::NORMAL,
13075                flags: Flags {
13076                    heal: true,
13077                    ..Default::default()
13078                },
13079                heal: Some(Heal {
13080                    target: MoveTarget::User,
13081                    amount: 0.5,
13082                }),
13083                ..Default::default()
13084            },
13085        );
13086        moves.insert(
13087            Choices::RECYCLE,
13088            Choice {
13089                move_id: Choices::RECYCLE,
13090                target: MoveTarget::User,
13091                move_type: PokemonType::NORMAL,
13092                flags: Flags {
13093                    ..Default::default()
13094                },
13095                ..Default::default()
13096            },
13097        );
13098        if cfg!(feature = "gen1") {
13099            moves.insert(
13100                Choices::REFLECT,
13101                Choice {
13102                    move_id: Choices::REFLECT,
13103                    target: MoveTarget::User,
13104                    move_type: PokemonType::PSYCHIC,
13105                    flags: Flags {
13106                        ..Default::default()
13107                    },
13108                    volatile_status: Some(VolatileStatus {
13109                    target: MoveTarget::User,
13110                    volatile_status: PokemonVolatileStatus::REFLECT,
13111                }),
13112                    ..Default::default()
13113                },
13114            );
13115        } else {
13116            moves.insert(
13117                Choices::REFLECT,
13118                Choice {
13119                    move_id: Choices::REFLECT,
13120                    target: MoveTarget::User,
13121                    move_type: PokemonType::PSYCHIC,
13122                    flags: Flags {
13123                        ..Default::default()
13124                    },
13125                    side_condition: Some(SideCondition {
13126                        target: MoveTarget::User,
13127                        condition: PokemonSideCondition::Reflect,
13128                    }),
13129                    ..Default::default()
13130                },
13131            );
13132        }
13133        moves.insert(
13134            Choices::REFLECTTYPE,
13135            Choice {
13136                move_id: Choices::REFLECTTYPE,
13137                move_type: PokemonType::NORMAL,
13138                flags: Flags {
13139                    protect: true,
13140                    ..Default::default()
13141                },
13142                ..Default::default()
13143            },
13144        );
13145        moves.insert(
13146            Choices::REFRESH,
13147            Choice {
13148                move_id: Choices::REFRESH,
13149                target: MoveTarget::User,
13150                move_type: PokemonType::NORMAL,
13151                flags: Flags {
13152                    ..Default::default()
13153                },
13154                ..Default::default()
13155            },
13156        );
13157        moves.insert(
13158            Choices::RELICSONG,
13159            Choice {
13160                move_id: Choices::RELICSONG,
13161                base_power: 75.0,
13162                category: MoveCategory::Special,
13163                move_type: PokemonType::NORMAL,
13164                flags: Flags {
13165                    protect: true,
13166                    sound: true,
13167                    ..Default::default()
13168                },
13169                secondaries: Some(vec![Secondary {
13170                    chance: 10.0,
13171                    target: MoveTarget::Opponent,
13172                    effect: Effect::Status(PokemonStatus::SLEEP),
13173                }]),
13174                ..Default::default()
13175            },
13176        );
13177        moves.insert(
13178            Choices::REST,
13179            Choice {
13180                move_id: Choices::REST,
13181                status: None,  // Rest implemented in choice_special_effect()
13182                target: MoveTarget::User,
13183                move_type: PokemonType::PSYCHIC,
13184                flags: Flags {
13185                    heal: true,
13186                    ..Default::default()
13187                },
13188                heal: None,  // Rest implemented in choice_special_effect()
13189                ..Default::default()
13190            },
13191        );
13192        moves.insert(
13193            Choices::RETALIATE,
13194            Choice {
13195                move_id: Choices::RETALIATE,
13196                base_power: 70.0,
13197                category: MoveCategory::Physical,
13198                move_type: PokemonType::NORMAL,
13199                flags: Flags {
13200                    contact: true,
13201                    protect: true,
13202                    ..Default::default()
13203                },
13204                ..Default::default()
13205            },
13206        );
13207        moves.insert(
13208            Choices::RETURN,
13209            Choice {
13210                move_id: Choices::RETURN,
13211                base_power: 102.0,
13212                category: MoveCategory::Physical,
13213                move_type: PokemonType::NORMAL,
13214                flags: Flags {
13215                    contact: true,
13216                    protect: true,
13217                    ..Default::default()
13218                },
13219                ..Default::default()
13220            },
13221        );
13222        moves.insert(
13223            Choices::RETURN102,
13224            Choice {
13225                move_id: Choices::RETURN102,
13226                base_power: 102.0,
13227                category: MoveCategory::Physical,
13228                move_type: PokemonType::NORMAL,
13229                flags: Flags {
13230                    contact: true,
13231                    protect: true,
13232                    ..Default::default()
13233                },
13234                ..Default::default()
13235            },
13236        );
13237        moves.insert(
13238            Choices::REVELATIONDANCE,
13239            Choice {
13240                move_id: Choices::REVELATIONDANCE,
13241                base_power: 90.0,
13242                category: MoveCategory::Special,
13243                move_type: PokemonType::NORMAL,
13244                flags: Flags {
13245                    protect: true,
13246                    ..Default::default()
13247                },
13248                ..Default::default()
13249            },
13250        );
13251        moves.insert(
13252            Choices::REVENGE,
13253            Choice {
13254                move_id: Choices::REVENGE,
13255                base_power: 60.0,
13256                category: MoveCategory::Physical,
13257                priority: -4,
13258                move_type: PokemonType::FIGHTING,
13259                flags: Flags {
13260                    contact: true,
13261                    protect: true,
13262                    ..Default::default()
13263                },
13264                ..Default::default()
13265            },
13266        );
13267        moves.insert(
13268            Choices::REVERSAL,
13269            Choice {
13270                move_id: Choices::REVERSAL,
13271                category: MoveCategory::Physical,
13272                move_type: PokemonType::FIGHTING,
13273                flags: Flags {
13274                    contact: true,
13275                    protect: true,
13276                    ..Default::default()
13277                },
13278                ..Default::default()
13279            },
13280        );
13281        moves.insert(
13282            Choices::REVIVALBLESSING,
13283            Choice {
13284                move_id: Choices::REVIVALBLESSING,
13285                target: MoveTarget::User,
13286                move_type: PokemonType::NORMAL,
13287                flags: Flags {
13288                    heal: true,
13289                    ..Default::default()
13290                },
13291                ..Default::default()
13292            },
13293        );
13294        moves.insert(
13295            Choices::RISINGVOLTAGE,
13296            Choice {
13297                move_id: Choices::RISINGVOLTAGE,
13298                base_power: 70.0,
13299                category: MoveCategory::Special,
13300                move_type: PokemonType::ELECTRIC,
13301                flags: Flags {
13302                    protect: true,
13303                    ..Default::default()
13304                },
13305                ..Default::default()
13306            },
13307        );
13308        moves.insert(
13309            Choices::ROAR,
13310            Choice {
13311                move_id: Choices::ROAR,
13312                priority: -6,
13313                move_type: PokemonType::NORMAL,
13314                flags: Flags {
13315                    drag: true,
13316                    reflectable: true,
13317                    sound: true,
13318                    ..Default::default()
13319                },
13320                ..Default::default()
13321            },
13322        );
13323        moves.insert(
13324            Choices::ROAROFTIME,
13325            Choice {
13326                move_id: Choices::ROAROFTIME,
13327                accuracy: 90.0,
13328                base_power: 150.0,
13329                category: MoveCategory::Special,
13330                move_type: PokemonType::DRAGON,
13331                flags: Flags {
13332                    protect: true,
13333                    recharge: true,
13334                    ..Default::default()
13335                },
13336                ..Default::default()
13337            },
13338        );
13339        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
13340            moves.insert(
13341                Choices::ROCKBLAST,
13342                Choice {
13343                    move_id: Choices::ROCKBLAST,
13344                    accuracy: 80.0,
13345                    base_power: 25.0,
13346                    category: MoveCategory::Physical,
13347                    move_type: PokemonType::ROCK,
13348                    flags: Flags {
13349                        bullet: true,
13350                            protect: true,
13351                        ..Default::default()
13352                    },
13353                    ..Default::default()
13354                },
13355            );
13356        } else {
13357            moves.insert(
13358                Choices::ROCKBLAST,
13359                Choice {
13360                    move_id: Choices::ROCKBLAST,
13361                    accuracy: 90.0,
13362                    base_power: 25.0,
13363                    category: MoveCategory::Physical,
13364                    move_type: PokemonType::ROCK,
13365                    flags: Flags {
13366                        bullet: true,
13367                            protect: true,
13368                        ..Default::default()
13369                    },
13370                    ..Default::default()
13371                },
13372            );
13373        }
13374        moves.insert(
13375            Choices::ROCKCLIMB,
13376            Choice {
13377                move_id: Choices::ROCKCLIMB,
13378                accuracy: 85.0,
13379                base_power: 90.0,
13380                category: MoveCategory::Physical,
13381                move_type: PokemonType::NORMAL,
13382                flags: Flags {
13383                    contact: true,
13384                    protect: true,
13385                    ..Default::default()
13386                },
13387                secondaries: Some(vec![Secondary {
13388                    chance: 20.0,
13389                    target: MoveTarget::Opponent,
13390                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
13391                }]),
13392                ..Default::default()
13393            },
13394        );
13395        moves.insert(
13396            Choices::ROCKPOLISH,
13397            Choice {
13398                move_id: Choices::ROCKPOLISH,
13399                target: MoveTarget::User,
13400                move_type: PokemonType::ROCK,
13401                flags: Flags {
13402                    ..Default::default()
13403                },
13404                boost: Some(Boost {
13405                    target: MoveTarget::User,
13406                    boosts: StatBoosts {
13407                        attack: 0,
13408                        defense: 0,
13409                        special_attack: 0,
13410                        special_defense: 0,
13411                        speed: 2,
13412                        accuracy: 0,
13413                    },
13414                }),
13415                ..Default::default()
13416            },
13417        );
13418        if cfg!(feature = "gen1") {
13419            moves.insert(
13420                Choices::ROCKSLIDE,
13421                Choice {
13422                    move_id: Choices::ROCKSLIDE,
13423                    accuracy: 90.0,
13424                    base_power: 75.0,
13425                    category: MoveCategory::Physical,
13426                    move_type: PokemonType::ROCK,
13427                    flags: Flags {
13428                        protect: true,
13429                        ..Default::default()
13430                    },
13431                    ..Default::default()
13432                },
13433            );
13434        } else {
13435            moves.insert(
13436                Choices::ROCKSLIDE,
13437                Choice {
13438                    move_id: Choices::ROCKSLIDE,
13439                    accuracy: 90.0,
13440                    base_power: 75.0,
13441                    category: MoveCategory::Physical,
13442                    move_type: PokemonType::ROCK,
13443                    flags: Flags {
13444                        protect: true,
13445                        ..Default::default()
13446                    },
13447                    secondaries: Some(vec![Secondary {
13448                        chance: 30.0,
13449                        target: MoveTarget::Opponent,
13450                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
13451                    }]),
13452                    ..Default::default()
13453                },
13454            );
13455        }
13456        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
13457            moves.insert(
13458            Choices::ROCKSMASH,
13459            Choice {
13460                move_id: Choices::ROCKSMASH,
13461                base_power: 20.0,
13462                category: MoveCategory::Physical,
13463                move_type: PokemonType::FIGHTING,
13464                flags: Flags {
13465                    contact: true,
13466                    protect: true,
13467                    ..Default::default()
13468                },
13469                secondaries: Some(vec![Secondary {
13470                    chance: 50.0,
13471                    target: MoveTarget::Opponent,
13472                    effect: Effect::Boost(StatBoosts {
13473                        attack: 0,
13474                        defense: -1,
13475                        special_attack: 0,
13476                        special_defense: 0,
13477                        speed: 0,
13478                        accuracy: 0,
13479                    }),
13480                }]),
13481                ..Default::default()
13482            },
13483        );
13484        } else {
13485            moves.insert(
13486                Choices::ROCKSMASH,
13487                Choice {
13488                    move_id: Choices::ROCKSMASH,
13489                    base_power: 40.0,
13490                    category: MoveCategory::Physical,
13491                    move_type: PokemonType::FIGHTING,
13492                    flags: Flags {
13493                        contact: true,
13494                        protect: true,
13495                        ..Default::default()
13496                    },
13497                    secondaries: Some(vec![Secondary {
13498                        chance: 50.0,
13499                        target: MoveTarget::Opponent,
13500                        effect: Effect::Boost(StatBoosts {
13501                            attack: 0,
13502                            defense: -1,
13503                            special_attack: 0,
13504                            special_defense: 0,
13505                            speed: 0,
13506                            accuracy: 0,
13507                        }),
13508                    }]),
13509                    ..Default::default()
13510                },
13511            );
13512        }
13513        if cfg!(feature = "gen1") {
13514            moves.insert(
13515                Choices::ROCKTHROW,
13516                Choice {
13517                    move_id: Choices::ROCKTHROW,
13518                    accuracy: 65.0,
13519                    base_power: 50.0,
13520                    category: MoveCategory::Physical,
13521                    move_type: PokemonType::ROCK,
13522                    flags: Flags {
13523                        protect: true,
13524                        ..Default::default()
13525                    },
13526                    ..Default::default()
13527                },
13528            );
13529        } else {
13530            moves.insert(
13531                Choices::ROCKTHROW,
13532                Choice {
13533                    move_id: Choices::ROCKTHROW,
13534                    accuracy: 90.0,
13535                    base_power: 50.0,
13536                    category: MoveCategory::Physical,
13537                    move_type: PokemonType::ROCK,
13538                    flags: Flags {
13539                        protect: true,
13540                        ..Default::default()
13541                    },
13542                    ..Default::default()
13543                },
13544            );
13545        }
13546        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
13547            moves.insert(
13548                Choices::ROCKTOMB,
13549                Choice {
13550                    move_id: Choices::ROCKTOMB,
13551                    accuracy: 80.0,
13552                    base_power: 50.0,
13553                    category: MoveCategory::Physical,
13554                    move_type: PokemonType::ROCK,
13555                    flags: Flags {
13556                            protect: true,
13557                        ..Default::default()
13558                    },
13559                    secondaries: Some(vec![Secondary {
13560                        chance: 100.0,
13561                        target: MoveTarget::Opponent,
13562                        effect: Effect::Boost(StatBoosts {
13563                            attack: 0,
13564                            defense: 0,
13565                            special_attack: 0,
13566                            special_defense: 0,
13567                            speed: -1,
13568                            accuracy: 0,
13569                        }),
13570                    }]),
13571                    ..Default::default()
13572                },
13573            );
13574        } else {
13575            moves.insert(
13576                Choices::ROCKTOMB,
13577                Choice {
13578                    move_id: Choices::ROCKTOMB,
13579                    accuracy: 95.0,
13580                    base_power: 60.0,
13581                    category: MoveCategory::Physical,
13582                    move_type: PokemonType::ROCK,
13583                    flags: Flags {
13584                            protect: true,
13585                        ..Default::default()
13586                    },
13587                    secondaries: Some(vec![Secondary {
13588                        chance: 100.0,
13589                        target: MoveTarget::Opponent,
13590                        effect: Effect::Boost(StatBoosts {
13591                            attack: 0,
13592                            defense: 0,
13593                            special_attack: 0,
13594                            special_defense: 0,
13595                            speed: -1,
13596                            accuracy: 0,
13597                        }),
13598                    }]),
13599                    ..Default::default()
13600                },
13601            );
13602        }
13603        moves.insert(
13604            Choices::ROCKWRECKER,
13605            Choice {
13606                move_id: Choices::ROCKWRECKER,
13607                accuracy: 90.0,
13608                base_power: 150.0,
13609                category: MoveCategory::Physical,
13610                move_type: PokemonType::ROCK,
13611                flags: Flags {
13612                    bullet: true,
13613                    protect: true,
13614                    recharge: true,
13615                    ..Default::default()
13616                },
13617                ..Default::default()
13618            },
13619        );
13620        moves.insert(
13621            Choices::ROLEPLAY,
13622            Choice {
13623                move_id: Choices::ROLEPLAY,
13624                move_type: PokemonType::PSYCHIC,
13625                flags: Flags {
13626                    ..Default::default()
13627                },
13628                ..Default::default()
13629            },
13630        );
13631        moves.insert(
13632            Choices::ROLLINGKICK,
13633            Choice {
13634                move_id: Choices::ROLLINGKICK,
13635                accuracy: 85.0,
13636                base_power: 60.0,
13637                category: MoveCategory::Physical,
13638                move_type: PokemonType::FIGHTING,
13639                flags: Flags {
13640                    contact: true,
13641                    protect: true,
13642                    ..Default::default()
13643                },
13644                secondaries: Some(vec![Secondary {
13645                    chance: 30.0,
13646                    target: MoveTarget::Opponent,
13647                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
13648                }]),
13649                ..Default::default()
13650            },
13651        );
13652        moves.insert(
13653            Choices::ROLLOUT,
13654            Choice {
13655                move_id: Choices::ROLLOUT,
13656                accuracy: 90.0,
13657                base_power: 30.0,
13658                category: MoveCategory::Physical,
13659                move_type: PokemonType::ROCK,
13660                flags: Flags {
13661                    contact: true,
13662                    protect: true,
13663                    ..Default::default()
13664                },
13665                ..Default::default()
13666            },
13667        );
13668        moves.insert(
13669            Choices::ROOST,
13670            Choice {
13671                move_id: Choices::ROOST,
13672                target: MoveTarget::User,
13673                move_type: PokemonType::FLYING,
13674                flags: Flags {
13675                    heal: true,
13676                    ..Default::default()
13677                },
13678                volatile_status: Some(VolatileStatus {
13679                    target: MoveTarget::User,
13680                    volatile_status: PokemonVolatileStatus::ROOST,
13681                }),
13682                heal: Some(Heal {
13683                    target: MoveTarget::User,
13684                    amount: 0.5,
13685                }),
13686                ..Default::default()
13687            },
13688        );
13689        moves.insert(
13690            Choices::ROTOTILLER,
13691            Choice {
13692                move_id: Choices::ROTOTILLER,
13693                move_type: PokemonType::GROUND,
13694                flags: Flags {
13695                    ..Default::default()
13696                },
13697                ..Default::default()
13698            },
13699        );
13700        moves.insert(
13701            Choices::ROUND,
13702            Choice {
13703                move_id: Choices::ROUND,
13704                base_power: 60.0,
13705                category: MoveCategory::Special,
13706                move_type: PokemonType::NORMAL,
13707                flags: Flags {
13708                    protect: true,
13709                    sound: true,
13710                    ..Default::default()
13711                },
13712                ..Default::default()
13713            },
13714        );
13715        moves.insert(
13716            Choices::RUINATION,
13717            Choice {
13718                move_id: Choices::RUINATION,
13719                accuracy: 90.0,
13720                category: MoveCategory::Special,
13721                move_type: PokemonType::DARK,
13722                flags: Flags {
13723                    protect: true,
13724                    ..Default::default()
13725                },
13726                ..Default::default()
13727            },
13728        );
13729        moves.insert(
13730            Choices::SACREDFIRE,
13731            Choice {
13732                move_id: Choices::SACREDFIRE,
13733                accuracy: 95.0,
13734                base_power: 100.0,
13735                category: MoveCategory::Physical,
13736                move_type: PokemonType::FIRE,
13737                flags: Flags {
13738                    protect: true,
13739                    ..Default::default()
13740                },
13741                secondaries: Some(vec![Secondary {
13742                    chance: 50.0,
13743                    target: MoveTarget::Opponent,
13744                    effect: Effect::Status(PokemonStatus::BURN),
13745                }]),
13746                ..Default::default()
13747            },
13748        );
13749        moves.insert(
13750            Choices::SACREDSWORD,
13751            Choice {
13752                move_id: Choices::SACREDSWORD,
13753                base_power: 90.0,
13754                category: MoveCategory::Physical,
13755                move_type: PokemonType::FIGHTING,
13756                flags: Flags {
13757                    contact: true,
13758                    protect: true,
13759                    slicing: true,
13760                    ..Default::default()
13761                },
13762                ..Default::default()
13763            },
13764        );
13765        moves.insert(
13766            Choices::SAFEGUARD,
13767            Choice {
13768                move_id: Choices::SAFEGUARD,
13769                target: MoveTarget::User,
13770                move_type: PokemonType::NORMAL,
13771                flags: Flags {
13772                    ..Default::default()
13773                },
13774                side_condition: Some(SideCondition {
13775                    target: MoveTarget::User,
13776                    condition: PokemonSideCondition::Safeguard,
13777                }),
13778                ..Default::default()
13779            },
13780        );
13781        moves.insert(
13782            Choices::SALTCURE,
13783            Choice {
13784                move_id: Choices::SALTCURE,
13785                base_power: 40.0,
13786                category: MoveCategory::Physical,
13787                move_type: PokemonType::ROCK,
13788                flags: Flags {
13789                    protect: true,
13790                    ..Default::default()
13791                },
13792                volatile_status: Some(VolatileStatus {
13793                    target: MoveTarget::Opponent,
13794                    volatile_status: PokemonVolatileStatus::SALTCURE,
13795                }),
13796                ..Default::default()
13797            },
13798        );
13799        if cfg!(feature = "gen1") {
13800            moves.insert(
13801                Choices::SANDATTACK,
13802                Choice {
13803                    move_id: Choices::SANDATTACK,
13804                    move_type: PokemonType::NORMAL,
13805                    flags: Flags {
13806                        protect: true,
13807                        reflectable: true,
13808                        ..Default::default()
13809                    },
13810                    boost: Some(Boost {
13811                        target: MoveTarget::Opponent,
13812                        boosts: StatBoosts {
13813                            attack: 0,
13814                            defense: 0,
13815                            special_attack: 0,
13816                            special_defense: 0,
13817                            speed: 0,
13818                            accuracy: -1,
13819                        },
13820                    }),
13821                    ..Default::default()
13822                },
13823            );
13824        } else {
13825            moves.insert(
13826                Choices::SANDATTACK,
13827                Choice {
13828                    move_id: Choices::SANDATTACK,
13829                    move_type: PokemonType::GROUND,
13830                    flags: Flags {
13831                        protect: true,
13832                        reflectable: true,
13833                        ..Default::default()
13834                    },
13835                    boost: Some(Boost {
13836                        target: MoveTarget::Opponent,
13837                        boosts: StatBoosts {
13838                            attack: 0,
13839                            defense: 0,
13840                            special_attack: 0,
13841                            special_defense: 0,
13842                            speed: 0,
13843                            accuracy: -1,
13844                        },
13845                    }),
13846                    ..Default::default()
13847                },
13848            );
13849        }
13850        moves.insert(
13851            Choices::SANDSEARSTORM,
13852            Choice {
13853                move_id: Choices::SANDSEARSTORM,
13854                accuracy: 80.0,
13855                base_power: 100.0,
13856                category: MoveCategory::Special,
13857                move_type: PokemonType::GROUND,
13858                flags: Flags {
13859                    protect: true,
13860                    wind: true,
13861                    ..Default::default()
13862                },
13863                secondaries: Some(vec![Secondary {
13864                    chance: 20.0,
13865                    target: MoveTarget::Opponent,
13866                    effect: Effect::Status(PokemonStatus::BURN),
13867                }]),
13868                ..Default::default()
13869            },
13870        );
13871        moves.insert(
13872            Choices::SANDSTORM,
13873            Choice {
13874                move_id: Choices::SANDSTORM,
13875                move_type: PokemonType::ROCK,
13876                flags: Flags {
13877                    wind: true,
13878                    ..Default::default()
13879                },
13880                ..Default::default()
13881            },
13882        );
13883        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
13884            moves.insert(
13885                Choices::SANDTOMB,
13886                Choice {
13887                    move_id: Choices::SANDTOMB,
13888                    accuracy: 70.0,
13889                    base_power: 15.0,
13890                    category: MoveCategory::Physical,
13891                    move_type: PokemonType::GROUND,
13892                    flags: Flags {
13893                            protect: true,
13894                        ..Default::default()
13895                    },
13896                    volatile_status: Some(VolatileStatus {
13897                        target: MoveTarget::Opponent,
13898                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
13899                    }),
13900                    ..Default::default()
13901                },
13902            );
13903        } else {
13904            moves.insert(
13905                Choices::SANDTOMB,
13906                Choice {
13907                    move_id: Choices::SANDTOMB,
13908                    accuracy: 85.0,
13909                    base_power: 35.0,
13910                    category: MoveCategory::Physical,
13911                    move_type: PokemonType::GROUND,
13912                    flags: Flags {
13913                            protect: true,
13914                        ..Default::default()
13915                    },
13916                    volatile_status: Some(VolatileStatus {
13917                        target: MoveTarget::Opponent,
13918                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
13919                    }),
13920                    ..Default::default()
13921                },
13922            );
13923        }
13924        moves.insert(
13925            Choices::SAPPYSEED,
13926            Choice {
13927                move_id: Choices::SAPPYSEED,
13928                accuracy: 90.0,
13929                base_power: 100.0,
13930                category: MoveCategory::Physical,
13931                move_type: PokemonType::GRASS,
13932                flags: Flags {
13933                    protect: true,
13934                    reflectable: true,
13935                    ..Default::default()
13936                },
13937                ..Default::default()
13938            },
13939        );
13940        moves.insert(
13941            Choices::SCALD,
13942            Choice {
13943                move_id: Choices::SCALD,
13944                base_power: 80.0,
13945                category: MoveCategory::Special,
13946                move_type: PokemonType::WATER,
13947                flags: Flags {
13948                    protect: true,
13949                    ..Default::default()
13950                },
13951                secondaries: Some(vec![Secondary {
13952                    chance: 30.0,
13953                    target: MoveTarget::Opponent,
13954                    effect: Effect::Status(PokemonStatus::BURN),
13955                }]),
13956                ..Default::default()
13957            },
13958        );
13959        moves.insert(
13960            Choices::SCALESHOT,
13961            Choice {
13962                move_id: Choices::SCALESHOT,
13963                accuracy: 90.0,
13964                base_power: 25.0,
13965                category: MoveCategory::Physical,
13966                move_type: PokemonType::DRAGON,
13967                flags: Flags {
13968                    protect: true,
13969                    ..Default::default()
13970                },
13971                boost: Some(Boost {
13972                    target: MoveTarget::User,
13973                    boosts: StatBoosts {
13974                        attack: 0,
13975                        defense: -1,
13976                        special_attack: 0,
13977                        special_defense: 0,
13978                        speed: 1,
13979                        accuracy: 0,
13980                    },
13981                }),
13982                ..Default::default()
13983            },
13984        );
13985        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
13986            moves.insert(
13987                Choices::SCARYFACE,
13988                Choice {
13989                    move_id: Choices::SCARYFACE,
13990                    accuracy: 90.0,
13991                    move_type: PokemonType::NORMAL,
13992                    flags: Flags {
13993                            protect: true,
13994                        reflectable: true,
13995                        ..Default::default()
13996                    },
13997                    boost: Some(Boost {
13998                        target: MoveTarget::Opponent,
13999                        boosts: StatBoosts {
14000                            attack: 0,
14001                            defense: 0,
14002                            special_attack: 0,
14003                            special_defense: 0,
14004                            speed: -2,
14005                            accuracy: 0,
14006                        },
14007                    }),
14008                    ..Default::default()
14009                },
14010            );
14011        } else {
14012            moves.insert(
14013                Choices::SCARYFACE,
14014                Choice {
14015                    move_id: Choices::SCARYFACE,
14016                    move_type: PokemonType::NORMAL,
14017                    flags: Flags {
14018                            protect: true,
14019                        reflectable: true,
14020                        ..Default::default()
14021                    },
14022                    boost: Some(Boost {
14023                        target: MoveTarget::Opponent,
14024                        boosts: StatBoosts {
14025                            attack: 0,
14026                            defense: 0,
14027                            special_attack: 0,
14028                            special_defense: 0,
14029                            speed: -2,
14030                            accuracy: 0,
14031                        },
14032                    }),
14033                    ..Default::default()
14034                },
14035            );
14036        }
14037        moves.insert(
14038            Choices::SCORCHINGSANDS,
14039            Choice {
14040                move_id: Choices::SCORCHINGSANDS,
14041                base_power: 70.0,
14042                category: MoveCategory::Special,
14043                move_type: PokemonType::GROUND,
14044                flags: Flags {
14045                    protect: true,
14046                    ..Default::default()
14047                },
14048                secondaries: Some(vec![Secondary {
14049                    chance: 30.0,
14050                    target: MoveTarget::Opponent,
14051                    effect: Effect::Status(PokemonStatus::BURN),
14052                }]),
14053                ..Default::default()
14054            },
14055        );
14056        moves.insert(
14057            Choices::SCRATCH,
14058            Choice {
14059                move_id: Choices::SCRATCH,
14060                base_power: 40.0,
14061                category: MoveCategory::Physical,
14062                move_type: PokemonType::NORMAL,
14063                flags: Flags {
14064                    contact: true,
14065                    protect: true,
14066                    ..Default::default()
14067                },
14068                ..Default::default()
14069            },
14070        );
14071        moves.insert(
14072            Choices::SCREECH,
14073            Choice {
14074                move_id: Choices::SCREECH,
14075                accuracy: 85.0,
14076                move_type: PokemonType::NORMAL,
14077                flags: Flags {
14078                    protect: true,
14079                    reflectable: true,
14080                    sound: true,
14081                    ..Default::default()
14082                },
14083                boost: Some(Boost {
14084                    target: MoveTarget::Opponent,
14085                    boosts: StatBoosts {
14086                        attack: 0,
14087                        defense: -2,
14088                        special_attack: 0,
14089                        special_defense: 0,
14090                        speed: 0,
14091                        accuracy: 0,
14092                    },
14093                }),
14094                ..Default::default()
14095            },
14096        );
14097        moves.insert(
14098            Choices::SEARINGSHOT,
14099            Choice {
14100                move_id: Choices::SEARINGSHOT,
14101                base_power: 100.0,
14102                category: MoveCategory::Special,
14103                move_type: PokemonType::FIRE,
14104                flags: Flags {
14105                    bullet: true,
14106                    protect: true,
14107                    ..Default::default()
14108                },
14109                secondaries: Some(vec![Secondary {
14110                    chance: 30.0,
14111                    target: MoveTarget::Opponent,
14112                    effect: Effect::Status(PokemonStatus::BURN),
14113                }]),
14114                ..Default::default()
14115            },
14116        );
14117        moves.insert(
14118            Choices::SECRETPOWER,
14119            Choice {
14120                move_id: Choices::SECRETPOWER,
14121                base_power: 70.0,
14122                category: MoveCategory::Physical,
14123                move_type: PokemonType::NORMAL,
14124                flags: Flags {
14125                    protect: true,
14126                    ..Default::default()
14127                },
14128                secondaries: Some(vec![Secondary {
14129                    chance: 30.0,
14130                    target: MoveTarget::Opponent,
14131                    effect: Effect::Status(PokemonStatus::PARALYZE),
14132                }]),
14133                ..Default::default()
14134            },
14135        );
14136        moves.insert(
14137            Choices::SECRETSWORD,
14138            Choice {
14139                move_id: Choices::SECRETSWORD,
14140                base_power: 85.0,
14141                category: MoveCategory::Special,
14142                move_type: PokemonType::FIGHTING,
14143                flags: Flags {
14144                    protect: true,
14145                    slicing: true,
14146                    ..Default::default()
14147                },
14148                ..Default::default()
14149            },
14150        );
14151        moves.insert(
14152            Choices::SEEDBOMB,
14153            Choice {
14154                move_id: Choices::SEEDBOMB,
14155                base_power: 80.0,
14156                category: MoveCategory::Physical,
14157                move_type: PokemonType::GRASS,
14158                flags: Flags {
14159                    bullet: true,
14160                    protect: true,
14161                    ..Default::default()
14162                },
14163                ..Default::default()
14164            },
14165        );
14166        moves.insert(
14167            Choices::SEEDFLARE,
14168            Choice {
14169                move_id: Choices::SEEDFLARE,
14170                accuracy: 85.0,
14171                base_power: 120.0,
14172                category: MoveCategory::Special,
14173                move_type: PokemonType::GRASS,
14174                flags: Flags {
14175                    protect: true,
14176                    ..Default::default()
14177                },
14178                secondaries: Some(vec![Secondary {
14179                    chance: 40.0,
14180                    target: MoveTarget::Opponent,
14181                    effect: Effect::Boost(StatBoosts {
14182                        attack: 0,
14183                        defense: 0,
14184                        special_attack: 0,
14185                        special_defense: -2,
14186                        speed: 0,
14187                        accuracy: 0,
14188                    }),
14189                }]),
14190                ..Default::default()
14191            },
14192        );
14193        moves.insert(
14194            Choices::SEISMICTOSS,
14195            Choice {
14196                move_id: Choices::SEISMICTOSS,
14197                category: MoveCategory::Physical,
14198                move_type: PokemonType::FIGHTING,
14199                flags: Flags {
14200                    contact: true,
14201                    protect: true,
14202                    ..Default::default()
14203                },
14204                ..Default::default()
14205            },
14206        );
14207        if cfg!(feature = "gen1") {
14208            moves.insert(
14209                Choices::SELFDESTRUCT,
14210                Choice {
14211                    move_id: Choices::SELFDESTRUCT,
14212                    base_power: 130.0,
14213                    category: MoveCategory::Physical,
14214                    move_type: PokemonType::NORMAL,
14215                    flags: Flags {
14216                        protect: true,
14217                        ..Default::default()
14218                    },
14219                    ..Default::default()
14220                },
14221            );
14222        } else {
14223            moves.insert(
14224                Choices::SELFDESTRUCT,
14225                Choice {
14226                    move_id: Choices::SELFDESTRUCT,
14227                    base_power: 200.0,
14228                    category: MoveCategory::Physical,
14229                    move_type: PokemonType::NORMAL,
14230                    flags: Flags {
14231                        protect: true,
14232                        ..Default::default()
14233                    },
14234                    ..Default::default()
14235                },
14236            );
14237        }
14238        moves.insert(
14239            Choices::SHADOWBALL,
14240            Choice {
14241                move_id: Choices::SHADOWBALL,
14242                base_power: 80.0,
14243                category: MoveCategory::Special,
14244                move_type: PokemonType::GHOST,
14245                flags: Flags {
14246                    bullet: true,
14247                    protect: true,
14248                    ..Default::default()
14249                },
14250                secondaries: Some(vec![Secondary {
14251                    chance: 20.0,
14252                    target: MoveTarget::Opponent,
14253                    effect: Effect::Boost(StatBoosts {
14254                        attack: 0,
14255                        defense: 0,
14256                        special_attack: 0,
14257                        special_defense: -1,
14258                        speed: 0,
14259                        accuracy: 0,
14260                    }),
14261                }]),
14262                ..Default::default()
14263            },
14264        );
14265        moves.insert(
14266            Choices::SHADOWBONE,
14267            Choice {
14268                move_id: Choices::SHADOWBONE,
14269                base_power: 85.0,
14270                category: MoveCategory::Physical,
14271                move_type: PokemonType::GHOST,
14272                flags: Flags {
14273                    protect: true,
14274                    ..Default::default()
14275                },
14276                secondaries: Some(vec![Secondary {
14277                    chance: 20.0,
14278                    target: MoveTarget::Opponent,
14279                    effect: Effect::Boost(StatBoosts {
14280                        attack: 0,
14281                        defense: -1,
14282                        special_attack: 0,
14283                        special_defense: 0,
14284                        speed: 0,
14285                        accuracy: 0,
14286                    }),
14287                }]),
14288                ..Default::default()
14289            },
14290        );
14291        moves.insert(
14292            Choices::SHADOWCLAW,
14293            Choice {
14294                move_id: Choices::SHADOWCLAW,
14295                base_power: 70.0,
14296                category: MoveCategory::Physical,
14297                move_type: PokemonType::GHOST,
14298                flags: Flags {
14299                    contact: true,
14300                    protect: true,
14301                    ..Default::default()
14302                },
14303                ..Default::default()
14304            },
14305        );
14306        moves.insert(
14307            Choices::SHADOWFORCE,
14308            Choice {
14309                move_id: Choices::SHADOWFORCE,
14310                base_power: 120.0,
14311                category: MoveCategory::Physical,
14312                move_type: PokemonType::GHOST,
14313                flags: Flags {
14314                    charge: true,
14315                    contact: true,
14316                    ..Default::default()
14317                },
14318                ..Default::default()
14319            },
14320        );
14321        moves.insert(
14322            Choices::SHADOWPUNCH,
14323            Choice {
14324                move_id: Choices::SHADOWPUNCH,
14325                base_power: 60.0,
14326                category: MoveCategory::Physical,
14327                move_type: PokemonType::GHOST,
14328                flags: Flags {
14329                    contact: true,
14330                    protect: true,
14331                    punch: true,
14332                    ..Default::default()
14333                },
14334                ..Default::default()
14335            },
14336        );
14337        moves.insert(
14338            Choices::SHADOWSNEAK,
14339            Choice {
14340                move_id: Choices::SHADOWSNEAK,
14341                base_power: 40.0,
14342                category: MoveCategory::Physical,
14343                priority: 1,
14344                move_type: PokemonType::GHOST,
14345                flags: Flags {
14346                    contact: true,
14347                    protect: true,
14348                    ..Default::default()
14349                },
14350                ..Default::default()
14351            },
14352        );
14353        moves.insert(
14354            Choices::SHADOWSTRIKE,
14355            Choice {
14356                move_id: Choices::SHADOWSTRIKE,
14357                accuracy: 95.0,
14358                base_power: 80.0,
14359                category: MoveCategory::Physical,
14360                move_type: PokemonType::GHOST,
14361                flags: Flags {
14362                    contact: true,
14363                    protect: true,
14364                    ..Default::default()
14365                },
14366                secondaries: Some(vec![Secondary {
14367                    chance: 50.0,
14368                    target: MoveTarget::Opponent,
14369                    effect: Effect::Boost(StatBoosts {
14370                        attack: 0,
14371                        defense: -1,
14372                        special_attack: 0,
14373                        special_defense: 0,
14374                        speed: 0,
14375                        accuracy: 0,
14376                    }),
14377                }]),
14378                ..Default::default()
14379            },
14380        );
14381        moves.insert(
14382            Choices::SHARPEN,
14383            Choice {
14384                move_id: Choices::SHARPEN,
14385                target: MoveTarget::User,
14386                move_type: PokemonType::NORMAL,
14387                flags: Flags {
14388                    ..Default::default()
14389                },
14390                boost: Some(Boost {
14391                    target: MoveTarget::User,
14392                    boosts: StatBoosts {
14393                        attack: 1,
14394                        defense: 0,
14395                        special_attack: 0,
14396                        special_defense: 0,
14397                        speed: 0,
14398                        accuracy: 0,
14399                    },
14400                }),
14401                ..Default::default()
14402            },
14403        );
14404        moves.insert(
14405            Choices::SHEDTAIL,
14406            Choice {
14407                move_id: Choices::SHEDTAIL,
14408                target: MoveTarget::User,
14409                move_type: PokemonType::NORMAL,
14410                flags: Flags {
14411                    pivot: false, // Shed Tail implemented in choice_special_effect()
14412                    ..Default::default()
14413                },
14414                volatile_status: None, // Shed Tail implemented in choice_special_effect()
14415                ..Default::default()
14416            },
14417        );
14418        moves.insert(
14419            Choices::SHEERCOLD,
14420            Choice {
14421                move_id: Choices::SHEERCOLD,
14422                accuracy: 30.0,
14423                category: MoveCategory::Special,
14424                move_type: PokemonType::ICE,
14425                flags: Flags {
14426                    protect: true,
14427                    ..Default::default()
14428                },
14429                ..Default::default()
14430            },
14431        );
14432        moves.insert(
14433            Choices::SHELLSIDEARM,
14434            Choice {
14435                move_id: Choices::SHELLSIDEARM,
14436                base_power: 90.0,
14437                category: MoveCategory::Special,
14438                move_type: PokemonType::POISON,
14439                flags: Flags {
14440                    protect: true,
14441                    ..Default::default()
14442                },
14443                secondaries: Some(vec![Secondary {
14444                    chance: 20.0,
14445                    target: MoveTarget::Opponent,
14446                    effect: Effect::Status(PokemonStatus::POISON),
14447                }]),
14448                ..Default::default()
14449            },
14450        );
14451        moves.insert(
14452            Choices::SHELLSMASH,
14453            Choice {
14454                move_id: Choices::SHELLSMASH,
14455                target: MoveTarget::User,
14456                move_type: PokemonType::NORMAL,
14457                flags: Flags {
14458                    ..Default::default()
14459                },
14460                boost: Some(Boost {
14461                    target: MoveTarget::User,
14462                    boosts: StatBoosts {
14463                        attack: 2,
14464                        defense: -1,
14465                        special_attack: 2,
14466                        special_defense: -1,
14467                        speed: 2,
14468                        accuracy: 0,
14469                    },
14470                }),
14471                ..Default::default()
14472            },
14473        );
14474        moves.insert(
14475            Choices::SHELLTRAP,
14476            Choice {
14477                move_id: Choices::SHELLTRAP,
14478                base_power: 150.0,
14479                category: MoveCategory::Special,
14480                priority: -3,
14481                move_type: PokemonType::FIRE,
14482                flags: Flags {
14483                    protect: true,
14484                    ..Default::default()
14485                },
14486                ..Default::default()
14487            },
14488        );
14489        moves.insert(
14490            Choices::SHELTER,
14491            Choice {
14492                move_id: Choices::SHELTER,
14493                target: MoveTarget::User,
14494                move_type: PokemonType::STEEL,
14495                flags: Flags {
14496                    ..Default::default()
14497                },
14498                boost: Some(Boost {
14499                    target: MoveTarget::User,
14500                    boosts: StatBoosts {
14501                        attack: 0,
14502                        defense: 2,
14503                        special_attack: 0,
14504                        special_defense: 0,
14505                        speed: 0,
14506                        accuracy: 0,
14507                    },
14508                }),
14509                ..Default::default()
14510            },
14511        );
14512        moves.insert(
14513            Choices::SHIFTGEAR,
14514            Choice {
14515                move_id: Choices::SHIFTGEAR,
14516                target: MoveTarget::User,
14517                move_type: PokemonType::STEEL,
14518                flags: Flags {
14519                    ..Default::default()
14520                },
14521                boost: Some(Boost {
14522                    target: MoveTarget::User,
14523                    boosts: StatBoosts {
14524                        attack: 1,
14525                        defense: 0,
14526                        special_attack: 0,
14527                        special_defense: 0,
14528                        speed: 2,
14529                        accuracy: 0,
14530                    },
14531                }),
14532                ..Default::default()
14533            },
14534        );
14535        moves.insert(
14536            Choices::SHOCKWAVE,
14537            Choice {
14538                move_id: Choices::SHOCKWAVE,
14539                base_power: 60.0,
14540                category: MoveCategory::Special,
14541                move_type: PokemonType::ELECTRIC,
14542                flags: Flags {
14543                    protect: true,
14544                    ..Default::default()
14545                },
14546                ..Default::default()
14547            },
14548        );
14549        moves.insert(
14550            Choices::SHOREUP,
14551            Choice {
14552                move_id: Choices::SHOREUP,
14553                target: MoveTarget::User,
14554                move_type: PokemonType::GROUND,
14555                flags: Flags {
14556                    heal: true,
14557                    ..Default::default()
14558                },
14559                heal: Some(Heal {
14560                    target: MoveTarget::User,
14561                    amount: 0.5,
14562                }),
14563                ..Default::default()
14564            },
14565        );
14566        moves.insert(
14567            Choices::SIGNALBEAM,
14568            Choice {
14569                move_id: Choices::SIGNALBEAM,
14570                base_power: 75.0,
14571                category: MoveCategory::Special,
14572                move_type: PokemonType::BUG,
14573                flags: Flags {
14574                    protect: true,
14575                    ..Default::default()
14576                },
14577                secondaries: Some(vec![Secondary {
14578                    chance: 10.0,
14579                    target: MoveTarget::Opponent,
14580                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
14581                }]),
14582                ..Default::default()
14583            },
14584        );
14585        moves.insert(
14586            Choices::SILKTRAP,
14587            Choice {
14588                move_id: Choices::SILKTRAP,
14589                priority: 4,
14590                target: MoveTarget::User,
14591                move_type: PokemonType::BUG,
14592                flags: Flags {
14593                    ..Default::default()
14594                },
14595                volatile_status: Some(VolatileStatus {
14596                    target: MoveTarget::User,
14597                    volatile_status: PokemonVolatileStatus::SILKTRAP,
14598                }),
14599                ..Default::default()
14600            },
14601        );
14602        moves.insert(
14603            Choices::SILVERWIND,
14604            Choice {
14605                move_id: Choices::SILVERWIND,
14606                base_power: 60.0,
14607                category: MoveCategory::Special,
14608                move_type: PokemonType::BUG,
14609                flags: Flags {
14610                    protect: true,
14611                    ..Default::default()
14612                },
14613                secondaries: Some(vec![Secondary {
14614                    chance: 10.0,
14615                    target: MoveTarget::User,
14616                    effect: Effect::Boost(StatBoosts {
14617                        attack: 1,
14618                        defense: 1,
14619                        special_attack: 1,
14620                        special_defense: 1,
14621                        speed: 1,
14622                        accuracy: 0,
14623                    }),
14624                }]),
14625                ..Default::default()
14626            },
14627        );
14628        moves.insert(
14629            Choices::SIMPLEBEAM,
14630            Choice {
14631                move_id: Choices::SIMPLEBEAM,
14632                move_type: PokemonType::NORMAL,
14633                flags: Flags {
14634                    protect: true,
14635                    reflectable: true,
14636                    ..Default::default()
14637                },
14638                ..Default::default()
14639            },
14640        );
14641        moves.insert(
14642            Choices::SING,
14643            Choice {
14644                move_id: Choices::SING,
14645                accuracy: 55.0,
14646                status: Some(Status {
14647                    target: MoveTarget::Opponent,
14648                    status: PokemonStatus::SLEEP,
14649                }),
14650                move_type: PokemonType::NORMAL,
14651                flags: Flags {
14652                    protect: true,
14653                    reflectable: true,
14654                    sound: true,
14655                    ..Default::default()
14656                },
14657                ..Default::default()
14658            },
14659        );
14660        moves.insert(
14661            Choices::SIZZLYSLIDE,
14662            Choice {
14663                move_id: Choices::SIZZLYSLIDE,
14664                base_power: 60.0,
14665                category: MoveCategory::Physical,
14666                move_type: PokemonType::FIRE,
14667                flags: Flags {
14668                    contact: true,
14669                    protect: true,
14670                    ..Default::default()
14671                },
14672                secondaries: Some(vec![Secondary {
14673                    chance: 100.0,
14674                    target: MoveTarget::Opponent,
14675                    effect: Effect::Status(PokemonStatus::BURN),
14676                }]),
14677                ..Default::default()
14678            },
14679        );
14680        moves.insert(
14681            Choices::SKETCH,
14682            Choice {
14683                move_id: Choices::SKETCH,
14684                move_type: PokemonType::NORMAL,
14685                flags: Flags {
14686                    ..Default::default()
14687                },
14688                ..Default::default()
14689            },
14690        );
14691        moves.insert(
14692            Choices::SKILLSWAP,
14693            Choice {
14694                move_id: Choices::SKILLSWAP,
14695                move_type: PokemonType::PSYCHIC,
14696                flags: Flags {
14697                    protect: true,
14698                    ..Default::default()
14699                },
14700                ..Default::default()
14701            },
14702        );
14703        moves.insert(
14704            Choices::SKITTERSMACK,
14705            Choice {
14706                move_id: Choices::SKITTERSMACK,
14707                accuracy: 90.0,
14708                base_power: 70.0,
14709                category: MoveCategory::Physical,
14710                move_type: PokemonType::BUG,
14711                flags: Flags {
14712                    contact: true,
14713                    protect: true,
14714                    ..Default::default()
14715                },
14716                secondaries: Some(vec![Secondary {
14717                    chance: 100.0,
14718                    target: MoveTarget::Opponent,
14719                    effect: Effect::Boost(StatBoosts {
14720                        attack: 0,
14721                        defense: 0,
14722                        special_attack: -1,
14723                        special_defense: 0,
14724                        speed: 0,
14725                        accuracy: 0,
14726                    }),
14727                }]),
14728                ..Default::default()
14729            },
14730        );
14731        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
14732            moves.insert(
14733                Choices::SKULLBASH,
14734                Choice {
14735                    move_id: Choices::SKULLBASH,
14736                    base_power: 100.0,
14737                    category: MoveCategory::Physical,
14738                    move_type: PokemonType::NORMAL,
14739                    flags: Flags {
14740                        charge: true,
14741                        contact: true,
14742                            protect: true,
14743                        ..Default::default()
14744                    },
14745                    ..Default::default()
14746                },
14747            );
14748        } else {
14749            moves.insert(
14750                Choices::SKULLBASH,
14751                Choice {
14752                    move_id: Choices::SKULLBASH,
14753                    base_power: 130.0,
14754                    category: MoveCategory::Physical,
14755                    move_type: PokemonType::NORMAL,
14756                    flags: Flags {
14757                        charge: true,
14758                        contact: true,
14759                            protect: true,
14760                        ..Default::default()
14761                    },
14762                    ..Default::default()
14763                },
14764            );
14765        }
14766        moves.insert(
14767            Choices::SKYATTACK,
14768            Choice {
14769                move_id: Choices::SKYATTACK,
14770                accuracy: 90.0,
14771                base_power: 140.0,
14772                category: MoveCategory::Physical,
14773                move_type: PokemonType::FLYING,
14774                flags: Flags {
14775                    charge: true,
14776                    protect: true,
14777                    ..Default::default()
14778                },
14779                secondaries: Some(vec![Secondary {
14780                    chance: 30.0,
14781                    target: MoveTarget::Opponent,
14782                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
14783                }]),
14784                ..Default::default()
14785            },
14786        );
14787        moves.insert(
14788            Choices::SKYDROP,
14789            Choice {
14790                move_id: Choices::SKYDROP,
14791                base_power: 60.0,
14792                category: MoveCategory::Physical,
14793                move_type: PokemonType::FLYING,
14794                flags: Flags {
14795                    charge: true,
14796                    contact: true,
14797                    protect: true,
14798                    ..Default::default()
14799                },
14800                ..Default::default()
14801            },
14802        );
14803        moves.insert(
14804            Choices::SKYUPPERCUT,
14805            Choice {
14806                move_id: Choices::SKYUPPERCUT,
14807                accuracy: 90.0,
14808                base_power: 85.0,
14809                category: MoveCategory::Physical,
14810                move_type: PokemonType::FIGHTING,
14811                flags: Flags {
14812                    contact: true,
14813                    protect: true,
14814                    punch: true,
14815                    ..Default::default()
14816                },
14817                ..Default::default()
14818            },
14819        );
14820        moves.insert(
14821            Choices::SLACKOFF,
14822            Choice {
14823                move_id: Choices::SLACKOFF,
14824                target: MoveTarget::User,
14825                move_type: PokemonType::NORMAL,
14826                flags: Flags {
14827                    heal: true,
14828                    ..Default::default()
14829                },
14830                heal: Some(Heal {
14831                    target: MoveTarget::User,
14832                    amount: 0.5,
14833                }),
14834                ..Default::default()
14835            },
14836        );
14837        moves.insert(
14838            Choices::SLAM,
14839            Choice {
14840                move_id: Choices::SLAM,
14841                accuracy: 75.0,
14842                base_power: 80.0,
14843                category: MoveCategory::Physical,
14844                move_type: PokemonType::NORMAL,
14845                flags: Flags {
14846                    contact: true,
14847                    protect: true,
14848                    ..Default::default()
14849                },
14850                ..Default::default()
14851            },
14852        );
14853        moves.insert(
14854            Choices::SLASH,
14855            Choice {
14856                move_id: Choices::SLASH,
14857                base_power: 70.0,
14858                category: MoveCategory::Physical,
14859                move_type: PokemonType::NORMAL,
14860                flags: Flags {
14861                    contact: true,
14862                    protect: true,
14863                    slicing: true,
14864                    ..Default::default()
14865                },
14866                ..Default::default()
14867            },
14868        );
14869        moves.insert(
14870            Choices::SLEEPPOWDER,
14871            Choice {
14872                move_id: Choices::SLEEPPOWDER,
14873                accuracy: 75.0,
14874                status: Some(Status {
14875                    target: MoveTarget::Opponent,
14876                    status: PokemonStatus::SLEEP,
14877                }),
14878                move_type: PokemonType::GRASS,
14879                flags: Flags {
14880                    powder: true,
14881                    protect: true,
14882                    reflectable: true,
14883                    ..Default::default()
14884                },
14885                ..Default::default()
14886            },
14887        );
14888        moves.insert(
14889            Choices::SLEEPTALK,
14890            Choice {
14891                move_id: Choices::SLEEPTALK,
14892                target: MoveTarget::User,
14893                move_type: PokemonType::NORMAL,
14894                flags: Flags {
14895                    ..Default::default()
14896                },
14897                ..Default::default()
14898            },
14899        );
14900        if cfg!(feature = "gen1") {
14901            moves.insert(
14902                Choices::SLUDGE,
14903                Choice {
14904                    move_id: Choices::SLUDGE,
14905                    base_power: 65.0,
14906                    category: MoveCategory::Special,
14907                    move_type: PokemonType::POISON,
14908                    flags: Flags {
14909                        protect: true,
14910                        ..Default::default()
14911                    },
14912                    secondaries: Some(vec![Secondary {
14913                        chance: 40.0,
14914                        target: MoveTarget::Opponent,
14915                        effect: Effect::Status(PokemonStatus::POISON),
14916                    }]),
14917                    ..Default::default()
14918                },
14919            );
14920        } else {
14921            moves.insert(
14922                Choices::SLUDGE,
14923                Choice {
14924                    move_id: Choices::SLUDGE,
14925                    base_power: 65.0,
14926                    category: MoveCategory::Special,
14927                    move_type: PokemonType::POISON,
14928                    flags: Flags {
14929                        protect: true,
14930                        ..Default::default()
14931                    },
14932                    secondaries: Some(vec![Secondary {
14933                        chance: 30.0,
14934                        target: MoveTarget::Opponent,
14935                        effect: Effect::Status(PokemonStatus::POISON),
14936                    }]),
14937                    ..Default::default()
14938                },
14939            );
14940        }
14941        moves.insert(
14942            Choices::SLUDGEBOMB,
14943            Choice {
14944                move_id: Choices::SLUDGEBOMB,
14945                base_power: 90.0,
14946                category: MoveCategory::Special,
14947                move_type: PokemonType::POISON,
14948                flags: Flags {
14949                    bullet: true,
14950                    protect: true,
14951                    ..Default::default()
14952                },
14953                secondaries: Some(vec![Secondary {
14954                    chance: 30.0,
14955                    target: MoveTarget::Opponent,
14956                    effect: Effect::Status(PokemonStatus::POISON),
14957                }]),
14958                ..Default::default()
14959            },
14960        );
14961        moves.insert(
14962            Choices::SLUDGEWAVE,
14963            Choice {
14964                move_id: Choices::SLUDGEWAVE,
14965                base_power: 95.0,
14966                category: MoveCategory::Special,
14967                move_type: PokemonType::POISON,
14968                flags: Flags {
14969                    protect: true,
14970                    ..Default::default()
14971                },
14972                secondaries: Some(vec![Secondary {
14973                    chance: 10.0,
14974                    target: MoveTarget::Opponent,
14975                    effect: Effect::Status(PokemonStatus::POISON),
14976                }]),
14977                ..Default::default()
14978            },
14979        );
14980        moves.insert(
14981            Choices::SMACKDOWN,
14982            Choice {
14983                move_id: Choices::SMACKDOWN,
14984                base_power: 50.0,
14985                category: MoveCategory::Physical,
14986                move_type: PokemonType::ROCK,
14987                flags: Flags {
14988                    protect: true,
14989                    ..Default::default()
14990                },
14991                volatile_status: Some(VolatileStatus {
14992                    target: MoveTarget::Opponent,
14993                    volatile_status: PokemonVolatileStatus::SMACKDOWN,
14994                }),
14995                ..Default::default()
14996            },
14997        );
14998        moves.insert(
14999            Choices::SMARTSTRIKE,
15000            Choice {
15001                move_id: Choices::SMARTSTRIKE,
15002                base_power: 70.0,
15003                category: MoveCategory::Physical,
15004                move_type: PokemonType::STEEL,
15005                flags: Flags {
15006                    contact: true,
15007                    protect: true,
15008                    ..Default::default()
15009                },
15010                ..Default::default()
15011            },
15012        );
15013        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15014            moves.insert(
15015                Choices::SMELLINGSALTS,
15016                Choice {
15017                    move_id: Choices::SMELLINGSALTS,
15018                    base_power: 60.0,
15019                    category: MoveCategory::Physical,
15020                    move_type: PokemonType::NORMAL,
15021                    flags: Flags {
15022                        contact: true,
15023                            protect: true,
15024                        ..Default::default()
15025                    },
15026                    ..Default::default()
15027                },
15028            );
15029        } else {
15030            moves.insert(
15031                Choices::SMELLINGSALTS,
15032                Choice {
15033                    move_id: Choices::SMELLINGSALTS,
15034                    base_power: 70.0,
15035                    category: MoveCategory::Physical,
15036                    move_type: PokemonType::NORMAL,
15037                    flags: Flags {
15038                        contact: true,
15039                            protect: true,
15040                        ..Default::default()
15041                    },
15042                    ..Default::default()
15043                },
15044            );
15045        }
15046        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15047            moves.insert(
15048                Choices::SMOG,
15049                Choice {
15050                    move_id: Choices::SMOG,
15051                    accuracy: 70.0,
15052                    base_power: 20.0,
15053                    category: MoveCategory::Special,
15054                    move_type: PokemonType::POISON,
15055                    flags: Flags {
15056                            protect: true,
15057                        ..Default::default()
15058                    },
15059                    secondaries: Some(vec![Secondary {
15060                        chance: 40.0,
15061                        target: MoveTarget::Opponent,
15062                        effect: Effect::Status(PokemonStatus::POISON),
15063                    }]),
15064                    ..Default::default()
15065                },
15066            );
15067        } else {
15068            moves.insert(
15069                Choices::SMOG,
15070                Choice {
15071                    move_id: Choices::SMOG,
15072                    accuracy: 70.0,
15073                    base_power: 30.0,
15074                    category: MoveCategory::Special,
15075                    move_type: PokemonType::POISON,
15076                    flags: Flags {
15077                            protect: true,
15078                        ..Default::default()
15079                    },
15080                    secondaries: Some(vec![Secondary {
15081                        chance: 40.0,
15082                        target: MoveTarget::Opponent,
15083                        effect: Effect::Status(PokemonStatus::POISON),
15084                    }]),
15085                    ..Default::default()
15086                },
15087            );
15088        }
15089        moves.insert(
15090            Choices::SMOKESCREEN,
15091            Choice {
15092                move_id: Choices::SMOKESCREEN,
15093                move_type: PokemonType::NORMAL,
15094                flags: Flags {
15095                    protect: true,
15096                    reflectable: true,
15097                    ..Default::default()
15098                },
15099                boost: Some(Boost {
15100                    target: MoveTarget::Opponent,
15101                    boosts: StatBoosts {
15102                        attack: 0,
15103                        defense: 0,
15104                        special_attack: 0,
15105                        special_defense: 0,
15106                        speed: 0,
15107                        accuracy: -1,
15108                    },
15109                }),
15110                ..Default::default()
15111            },
15112        );
15113        moves.insert(
15114            Choices::SNAPTRAP,
15115            Choice {
15116                move_id: Choices::SNAPTRAP,
15117                base_power: 35.0,
15118                category: MoveCategory::Physical,
15119                move_type: PokemonType::GRASS,
15120                flags: Flags {
15121                    contact: true,
15122                    protect: true,
15123                    ..Default::default()
15124                },
15125                volatile_status: Some(VolatileStatus {
15126                    target: MoveTarget::Opponent,
15127                    volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
15128                }),
15129                ..Default::default()
15130            },
15131        );
15132        moves.insert(
15133            Choices::SNARL,
15134            Choice {
15135                move_id: Choices::SNARL,
15136                accuracy: 95.0,
15137                base_power: 55.0,
15138                category: MoveCategory::Special,
15139                move_type: PokemonType::DARK,
15140                flags: Flags {
15141                    protect: true,
15142                    sound: true,
15143                    ..Default::default()
15144                },
15145                secondaries: Some(vec![Secondary {
15146                    chance: 100.0,
15147                    target: MoveTarget::Opponent,
15148                    effect: Effect::Boost(StatBoosts {
15149                        attack: 0,
15150                        defense: 0,
15151                        special_attack: -1,
15152                        special_defense: 0,
15153                        speed: 0,
15154                        accuracy: 0,
15155                    }),
15156                }]),
15157                ..Default::default()
15158            },
15159        );
15160        moves.insert(
15161            Choices::SNATCH,
15162            Choice {
15163                move_id: Choices::SNATCH,
15164                priority: 4,
15165                target: MoveTarget::User,
15166                move_type: PokemonType::DARK,
15167                flags: Flags {
15168                    ..Default::default()
15169                },
15170                volatile_status: Some(VolatileStatus {
15171                    target: MoveTarget::User,
15172                    volatile_status: PokemonVolatileStatus::SNATCH,
15173                }),
15174                ..Default::default()
15175            },
15176        );
15177        moves.insert(
15178            Choices::SNIPESHOT,
15179            Choice {
15180                move_id: Choices::SNIPESHOT,
15181                base_power: 80.0,
15182                category: MoveCategory::Special,
15183                move_type: PokemonType::WATER,
15184                flags: Flags {
15185                    protect: true,
15186                    ..Default::default()
15187                },
15188                ..Default::default()
15189            },
15190        );
15191        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15192            moves.insert(
15193                Choices::SNORE,
15194                Choice {
15195                    move_id: Choices::SNORE,
15196                    base_power: 40.0,
15197                    category: MoveCategory::Special,
15198                    move_type: PokemonType::NORMAL,
15199                    flags: Flags {
15200                            protect: true,
15201                        sound: true,
15202                        ..Default::default()
15203                    },
15204                    secondaries: Some(vec![Secondary {
15205                        chance: 30.0,
15206                        target: MoveTarget::Opponent,
15207                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15208                    }]),
15209                    ..Default::default()
15210                },
15211            );
15212        } else {
15213            moves.insert(
15214                Choices::SNORE,
15215                Choice {
15216                    move_id: Choices::SNORE,
15217                    base_power: 50.0,
15218                    category: MoveCategory::Special,
15219                    move_type: PokemonType::NORMAL,
15220                    flags: Flags {
15221                            protect: true,
15222                        sound: true,
15223                        ..Default::default()
15224                    },
15225                    secondaries: Some(vec![Secondary {
15226                        chance: 30.0,
15227                        target: MoveTarget::Opponent,
15228                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15229                    }]),
15230                    ..Default::default()
15231                },
15232            );
15233        }
15234        moves.insert(
15235            Choices::SNOWSCAPE,
15236            Choice {
15237                move_id: Choices::SNOWSCAPE,
15238                move_type: PokemonType::ICE,
15239                flags: Flags {
15240                    ..Default::default()
15241                },
15242                ..Default::default()
15243            },
15244        );
15245        moves.insert(
15246            Choices::SOAK,
15247            Choice {
15248                move_id: Choices::SOAK,
15249                move_type: PokemonType::WATER,
15250                flags: Flags {
15251                    protect: true,
15252                    reflectable: true,
15253                    ..Default::default()
15254                },
15255                ..Default::default()
15256            },
15257        );
15258        moves.insert(
15259            Choices::SOFTBOILED,
15260            Choice {
15261                move_id: Choices::SOFTBOILED,
15262                target: MoveTarget::User,
15263                move_type: PokemonType::NORMAL,
15264                flags: Flags {
15265                    heal: true,
15266                    ..Default::default()
15267                },
15268                heal: Some(Heal {
15269                    target: MoveTarget::User,
15270                    amount: 0.5,
15271                }),
15272                ..Default::default()
15273            },
15274        );
15275        moves.insert(
15276            Choices::SOLARBEAM,
15277            Choice {
15278                move_id: Choices::SOLARBEAM,
15279                base_power: 120.0,
15280                category: MoveCategory::Special,
15281                move_type: PokemonType::GRASS,
15282                flags: Flags {
15283                    charge: true,
15284                    protect: true,
15285                    ..Default::default()
15286                },
15287                ..Default::default()
15288            },
15289        );
15290        moves.insert(
15291            Choices::SOLARBLADE,
15292            Choice {
15293                move_id: Choices::SOLARBLADE,
15294                base_power: 125.0,
15295                category: MoveCategory::Physical,
15296                move_type: PokemonType::GRASS,
15297                flags: Flags {
15298                    charge: true,
15299                    contact: true,
15300                    protect: true,
15301                    slicing: true,
15302                    ..Default::default()
15303                },
15304                ..Default::default()
15305            },
15306        );
15307        moves.insert(
15308            Choices::SONICBOOM,
15309            Choice {
15310                move_id: Choices::SONICBOOM,
15311                accuracy: 90.0,
15312                category: MoveCategory::Special,
15313                move_type: PokemonType::NORMAL,
15314                flags: Flags {
15315                    protect: true,
15316                    ..Default::default()
15317                },
15318                ..Default::default()
15319            },
15320        );
15321        moves.insert(
15322            Choices::SPACIALREND,
15323            Choice {
15324                move_id: Choices::SPACIALREND,
15325                accuracy: 95.0,
15326                base_power: 100.0,
15327                category: MoveCategory::Special,
15328                move_type: PokemonType::DRAGON,
15329                flags: Flags {
15330                    protect: true,
15331                    ..Default::default()
15332                },
15333                ..Default::default()
15334            },
15335        );
15336        moves.insert(
15337            Choices::SPARK,
15338            Choice {
15339                move_id: Choices::SPARK,
15340                base_power: 65.0,
15341                category: MoveCategory::Physical,
15342                move_type: PokemonType::ELECTRIC,
15343                flags: Flags {
15344                    contact: true,
15345                    protect: true,
15346                    ..Default::default()
15347                },
15348                secondaries: Some(vec![Secondary {
15349                    chance: 30.0,
15350                    target: MoveTarget::Opponent,
15351                    effect: Effect::Status(PokemonStatus::PARALYZE),
15352                }]),
15353                ..Default::default()
15354            },
15355        );
15356        moves.insert(
15357            Choices::SPARKLINGARIA,
15358            Choice {
15359                move_id: Choices::SPARKLINGARIA,
15360                base_power: 90.0,
15361                category: MoveCategory::Special,
15362                move_type: PokemonType::WATER,
15363                flags: Flags {
15364                    protect: true,
15365                    sound: true,
15366                    ..Default::default()
15367                },
15368                secondaries: Some(vec![Secondary {
15369                    chance: 100.0,
15370                    target: MoveTarget::Opponent,
15371                    effect: Effect::VolatileStatus(PokemonVolatileStatus::SPARKLINGARIA),
15372                }]),
15373                ..Default::default()
15374            },
15375        );
15376        moves.insert(
15377            Choices::SPARKLYSWIRL,
15378            Choice {
15379                move_id: Choices::SPARKLYSWIRL,
15380                accuracy: 85.0,
15381                base_power: 120.0,
15382                category: MoveCategory::Special,
15383                move_type: PokemonType::FAIRY,
15384                flags: Flags {
15385                    protect: true,
15386                    ..Default::default()
15387                },
15388                ..Default::default()
15389            },
15390        );
15391        moves.insert(
15392            Choices::SPECTRALTHIEF,
15393            Choice {
15394                move_id: Choices::SPECTRALTHIEF,
15395                base_power: 90.0,
15396                category: MoveCategory::Physical,
15397                move_type: PokemonType::GHOST,
15398                flags: Flags {
15399                    contact: true,
15400                    protect: true,
15401                    ..Default::default()
15402                },
15403                ..Default::default()
15404            },
15405        );
15406        moves.insert(
15407            Choices::SPEEDSWAP,
15408            Choice {
15409                move_id: Choices::SPEEDSWAP,
15410                move_type: PokemonType::PSYCHIC,
15411                flags: Flags {
15412                    protect: true,
15413                    ..Default::default()
15414                },
15415                ..Default::default()
15416            },
15417        );
15418        moves.insert(
15419            Choices::SPICYEXTRACT,
15420            Choice {
15421                move_id: Choices::SPICYEXTRACT,
15422                move_type: PokemonType::GRASS,
15423                flags: Flags {
15424                    protect: true,
15425                    reflectable: true,
15426                    ..Default::default()
15427                },
15428                boost: Some(Boost {
15429                    target: MoveTarget::Opponent,
15430                    boosts: StatBoosts {
15431                        attack: 2,
15432                        defense: -2,
15433                        special_attack: 0,
15434                        special_defense: 0,
15435                        speed: 0,
15436                        accuracy: 0,
15437                    },
15438                }),
15439                ..Default::default()
15440            },
15441        );
15442        moves.insert(
15443            Choices::SPIDERWEB,
15444            Choice {
15445                move_id: Choices::SPIDERWEB,
15446                move_type: PokemonType::BUG,
15447                flags: Flags {
15448                    protect: true,
15449                    reflectable: true,
15450                    ..Default::default()
15451                },
15452                ..Default::default()
15453            },
15454        );
15455        moves.insert(
15456            Choices::SPIKECANNON,
15457            Choice {
15458                move_id: Choices::SPIKECANNON,
15459                base_power: 20.0,
15460                category: MoveCategory::Physical,
15461                move_type: PokemonType::NORMAL,
15462                flags: Flags {
15463                    protect: true,
15464                    ..Default::default()
15465                },
15466                ..Default::default()
15467            },
15468        );
15469        moves.insert(
15470            Choices::SPIKES,
15471            Choice {
15472                move_id: Choices::SPIKES,
15473                move_type: PokemonType::GROUND,
15474                flags: Flags {
15475                    reflectable: true,
15476                    ..Default::default()
15477                },
15478                side_condition: Some(SideCondition {
15479                    target: MoveTarget::Opponent,
15480                    condition: PokemonSideCondition::Spikes,
15481                }),
15482                ..Default::default()
15483            },
15484        );
15485        moves.insert(
15486            Choices::SPIKYSHIELD,
15487            Choice {
15488                move_id: Choices::SPIKYSHIELD,
15489                priority: 4,
15490                target: MoveTarget::User,
15491                move_type: PokemonType::GRASS,
15492                flags: Flags {
15493                    ..Default::default()
15494                },
15495                volatile_status: Some(VolatileStatus {
15496                    target: MoveTarget::User,
15497                    volatile_status: PokemonVolatileStatus::SPIKYSHIELD,
15498                }),
15499                ..Default::default()
15500            },
15501        );
15502        moves.insert(
15503            Choices::SPINOUT,
15504            Choice {
15505                move_id: Choices::SPINOUT,
15506                base_power: 100.0,
15507                category: MoveCategory::Physical,
15508                move_type: PokemonType::STEEL,
15509                flags: Flags {
15510                    contact: true,
15511                    protect: true,
15512                    ..Default::default()
15513                },
15514                boost: Some(Boost {
15515                    target: MoveTarget::User,
15516                    boosts: StatBoosts {
15517                        attack: 0,
15518                        defense: 0,
15519                        special_attack: 0,
15520                        special_defense: 0,
15521                        speed: -2,
15522                        accuracy: 0,
15523                    },
15524                }),
15525                ..Default::default()
15526            },
15527        );
15528        moves.insert(
15529            Choices::SPIRITBREAK,
15530            Choice {
15531                move_id: Choices::SPIRITBREAK,
15532                base_power: 75.0,
15533                category: MoveCategory::Physical,
15534                move_type: PokemonType::FAIRY,
15535                flags: Flags {
15536                    contact: true,
15537                    protect: true,
15538                    ..Default::default()
15539                },
15540                secondaries: Some(vec![Secondary {
15541                    chance: 100.0,
15542                    target: MoveTarget::Opponent,
15543                    effect: Effect::Boost(StatBoosts {
15544                        attack: 0,
15545                        defense: 0,
15546                        special_attack: -1,
15547                        special_defense: 0,
15548                        speed: 0,
15549                        accuracy: 0,
15550                    }),
15551                }]),
15552                ..Default::default()
15553            },
15554        );
15555        moves.insert(
15556            Choices::SPIRITSHACKLE,
15557            Choice {
15558                move_id: Choices::SPIRITSHACKLE,
15559                base_power: 80.0,
15560                category: MoveCategory::Physical,
15561                move_type: PokemonType::GHOST,
15562                flags: Flags {
15563                    protect: true,
15564                    ..Default::default()
15565                },
15566                ..Default::default()
15567            },
15568        );
15569        moves.insert(
15570            Choices::SPITE,
15571            Choice {
15572                move_id: Choices::SPITE,
15573                move_type: PokemonType::GHOST,
15574                flags: Flags {
15575                    protect: true,
15576                    reflectable: true,
15577                    ..Default::default()
15578                },
15579                ..Default::default()
15580            },
15581        );
15582        moves.insert(
15583            Choices::SPITUP,
15584            Choice {
15585                move_id: Choices::SPITUP,
15586                category: MoveCategory::Special,
15587                move_type: PokemonType::NORMAL,
15588                flags: Flags {
15589                    protect: true,
15590                    ..Default::default()
15591                },
15592                ..Default::default()
15593            },
15594        );
15595        moves.insert(
15596            Choices::SPLASH,
15597            Choice {
15598                move_id: Choices::SPLASH,
15599                target: MoveTarget::User,
15600                move_type: PokemonType::NORMAL,
15601                flags: Flags {
15602                    ..Default::default()
15603                },
15604                ..Default::default()
15605            },
15606        );
15607        moves.insert(
15608            Choices::SPLISHYSPLASH,
15609            Choice {
15610                move_id: Choices::SPLISHYSPLASH,
15611                base_power: 90.0,
15612                category: MoveCategory::Special,
15613                move_type: PokemonType::WATER,
15614                flags: Flags {
15615                    protect: true,
15616                    ..Default::default()
15617                },
15618                secondaries: Some(vec![Secondary {
15619                    chance: 30.0,
15620                    target: MoveTarget::Opponent,
15621                    effect: Effect::Status(PokemonStatus::PARALYZE),
15622                }]),
15623                ..Default::default()
15624            },
15625        );
15626        moves.insert(
15627            Choices::SPORE,
15628            Choice {
15629                move_id: Choices::SPORE,
15630                status: Some(Status {
15631                    target: MoveTarget::Opponent,
15632                    status: PokemonStatus::SLEEP,
15633                }),
15634                move_type: PokemonType::GRASS,
15635                flags: Flags {
15636                    powder: true,
15637                    protect: true,
15638                    reflectable: true,
15639                    ..Default::default()
15640                },
15641                ..Default::default()
15642            },
15643        );
15644        moves.insert(
15645            Choices::SPOTLIGHT,
15646            Choice {
15647                move_id: Choices::SPOTLIGHT,
15648                priority: 3,
15649                move_type: PokemonType::NORMAL,
15650                flags: Flags {
15651                    protect: true,
15652                    reflectable: true,
15653                    ..Default::default()
15654                },
15655                volatile_status: Some(VolatileStatus {
15656                    target: MoveTarget::Opponent,
15657                    volatile_status: PokemonVolatileStatus::SPOTLIGHT,
15658                }),
15659                ..Default::default()
15660            },
15661        );
15662        moves.insert(
15663            Choices::SPRINGTIDESTORM,
15664            Choice {
15665                move_id: Choices::SPRINGTIDESTORM,
15666                accuracy: 80.0,
15667                base_power: 100.0,
15668                category: MoveCategory::Special,
15669                move_type: PokemonType::FAIRY,
15670                flags: Flags {
15671                    protect: true,
15672                    wind: true,
15673                    ..Default::default()
15674                },
15675                secondaries: Some(vec![Secondary {
15676                    chance: 30.0,
15677                    target: MoveTarget::Opponent,
15678                    effect: Effect::Boost(StatBoosts {
15679                        attack: -1,
15680                        defense: 0,
15681                        special_attack: 0,
15682                        special_defense: 0,
15683                        speed: 0,
15684                        accuracy: 0,
15685                    }),
15686                }]),
15687                ..Default::default()
15688            },
15689        );
15690        moves.insert(
15691            Choices::STEALTHROCK,
15692            Choice {
15693                move_id: Choices::STEALTHROCK,
15694                move_type: PokemonType::ROCK,
15695                flags: Flags {
15696                    reflectable: true,
15697                    ..Default::default()
15698                },
15699                side_condition: Some(SideCondition {
15700                    target: MoveTarget::Opponent,
15701                    condition: PokemonSideCondition::Stealthrock,
15702                }),
15703                ..Default::default()
15704            },
15705        );
15706        moves.insert(
15707            Choices::STEAMERUPTION,
15708            Choice {
15709                move_id: Choices::STEAMERUPTION,
15710                accuracy: 95.0,
15711                base_power: 110.0,
15712                category: MoveCategory::Special,
15713                move_type: PokemonType::WATER,
15714                flags: Flags {
15715                    protect: true,
15716                    ..Default::default()
15717                },
15718                secondaries: Some(vec![Secondary {
15719                    chance: 30.0,
15720                    target: MoveTarget::Opponent,
15721                    effect: Effect::Status(PokemonStatus::BURN),
15722                }]),
15723                ..Default::default()
15724            },
15725        );
15726        moves.insert(
15727            Choices::STEAMROLLER,
15728            Choice {
15729                move_id: Choices::STEAMROLLER,
15730                base_power: 65.0,
15731                category: MoveCategory::Physical,
15732                move_type: PokemonType::BUG,
15733                flags: Flags {
15734                    contact: true,
15735                    protect: true,
15736                    ..Default::default()
15737                },
15738                secondaries: Some(vec![Secondary {
15739                    chance: 30.0,
15740                    target: MoveTarget::Opponent,
15741                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15742                }]),
15743                ..Default::default()
15744            },
15745        );
15746        moves.insert(
15747            Choices::STEELBEAM,
15748            Choice {
15749                move_id: Choices::STEELBEAM,
15750                accuracy: 95.0,
15751                base_power: 140.0,
15752                category: MoveCategory::Special,
15753                move_type: PokemonType::STEEL,
15754                flags: Flags {
15755                    protect: true,
15756                    ..Default::default()
15757                },
15758                heal: Some(Heal {
15759                    target: MoveTarget::User,
15760                    amount: -0.5,
15761                }),
15762                ..Default::default()
15763            },
15764        );
15765        moves.insert(
15766            Choices::STEELROLLER,
15767            Choice {
15768                move_id: Choices::STEELROLLER,
15769                base_power: 130.0,
15770                category: MoveCategory::Physical,
15771                move_type: PokemonType::STEEL,
15772                flags: Flags {
15773                    contact: true,
15774                    protect: true,
15775                    ..Default::default()
15776                },
15777                ..Default::default()
15778            },
15779        );
15780        moves.insert(
15781            Choices::STEELWING,
15782            Choice {
15783                move_id: Choices::STEELWING,
15784                accuracy: 90.0,
15785                base_power: 70.0,
15786                category: MoveCategory::Physical,
15787                move_type: PokemonType::STEEL,
15788                flags: Flags {
15789                    contact: true,
15790                    protect: true,
15791                    ..Default::default()
15792                },
15793                secondaries: Some(vec![Secondary {
15794                    chance: 10.0,
15795                    target: MoveTarget::User,
15796                    effect: Effect::Boost(StatBoosts {
15797                        attack: 0,
15798                        defense: 1,
15799                        special_attack: 0,
15800                        special_defense: 0,
15801                        speed: 0,
15802                        accuracy: 0,
15803                    }),
15804                }]),
15805                ..Default::default()
15806            },
15807        );
15808        moves.insert(
15809            Choices::STICKYWEB,
15810            Choice {
15811                move_id: Choices::STICKYWEB,
15812                move_type: PokemonType::BUG,
15813                flags: Flags {
15814                    reflectable: true,
15815                    ..Default::default()
15816                },
15817                side_condition: Some(SideCondition {
15818                    target: MoveTarget::Opponent,
15819                    condition: PokemonSideCondition::StickyWeb,
15820                }),
15821                ..Default::default()
15822            },
15823        );
15824        moves.insert(
15825            Choices::STOCKPILE,
15826            Choice {
15827                move_id: Choices::STOCKPILE,
15828                target: MoveTarget::User,
15829                move_type: PokemonType::NORMAL,
15830                flags: Flags {
15831                    ..Default::default()
15832                },
15833                volatile_status: Some(VolatileStatus {
15834                    target: MoveTarget::User,
15835                    volatile_status: PokemonVolatileStatus::STOCKPILE,
15836                }),
15837                ..Default::default()
15838            },
15839        );
15840        moves.insert(
15841            Choices::STOMP,
15842            Choice {
15843                move_id: Choices::STOMP,
15844                base_power: 65.0,
15845                category: MoveCategory::Physical,
15846                move_type: PokemonType::NORMAL,
15847                flags: Flags {
15848                    contact: true,
15849                    protect: true,
15850                    ..Default::default()
15851                },
15852                secondaries: Some(vec![Secondary {
15853                    chance: 30.0,
15854                    target: MoveTarget::Opponent,
15855                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
15856                }]),
15857                ..Default::default()
15858            },
15859        );
15860        moves.insert(
15861            Choices::STOMPINGTANTRUM,
15862            Choice {
15863                move_id: Choices::STOMPINGTANTRUM,
15864                base_power: 75.0,
15865                category: MoveCategory::Physical,
15866                move_type: PokemonType::GROUND,
15867                flags: Flags {
15868                    contact: true,
15869                    protect: true,
15870                    ..Default::default()
15871                },
15872                ..Default::default()
15873            },
15874        );
15875        moves.insert(
15876            Choices::STONEAXE,
15877            Choice {
15878                move_id: Choices::STONEAXE,
15879                accuracy: 90.0,
15880                base_power: 65.0,
15881                category: MoveCategory::Physical,
15882                move_type: PokemonType::ROCK,
15883                flags: Flags {
15884                    contact: true,
15885                    protect: true,
15886                    slicing: true,
15887                    ..Default::default()
15888                },
15889                side_condition: Some(SideCondition {
15890                    target: MoveTarget::Opponent,
15891                    condition: PokemonSideCondition::Stealthrock,
15892                }),
15893                ..Default::default()
15894            },
15895        );
15896        moves.insert(
15897            Choices::STONEEDGE,
15898            Choice {
15899                move_id: Choices::STONEEDGE,
15900                accuracy: 80.0,
15901                base_power: 100.0,
15902                category: MoveCategory::Physical,
15903                move_type: PokemonType::ROCK,
15904                flags: Flags {
15905                    protect: true,
15906                    ..Default::default()
15907                },
15908                ..Default::default()
15909            },
15910        );
15911        moves.insert(
15912            Choices::STOREDPOWER,
15913            Choice {
15914                move_id: Choices::STOREDPOWER,
15915                base_power: 20.0,
15916                category: MoveCategory::Special,
15917                move_type: PokemonType::PSYCHIC,
15918                flags: Flags {
15919                    protect: true,
15920                    ..Default::default()
15921                },
15922                ..Default::default()
15923            },
15924        );
15925        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
15926            moves.insert(
15927                Choices::STORMTHROW,
15928                Choice {
15929                    move_id: Choices::STORMTHROW,
15930                    base_power: 40.0,
15931                    category: MoveCategory::Physical,
15932                    move_type: PokemonType::FIGHTING,
15933                    flags: Flags {
15934                        contact: true,
15935                            protect: true,
15936                        ..Default::default()
15937                    },
15938                    ..Default::default()
15939                },
15940            );
15941        } else {
15942            moves.insert(
15943                Choices::STORMTHROW,
15944                Choice {
15945                    move_id: Choices::STORMTHROW,
15946                    base_power: 60.0,
15947                    category: MoveCategory::Physical,
15948                    move_type: PokemonType::FIGHTING,
15949                    flags: Flags {
15950                        contact: true,
15951                            protect: true,
15952                        ..Default::default()
15953                    },
15954                    ..Default::default()
15955                },
15956            );
15957        }
15958        moves.insert(
15959            Choices::STRANGESTEAM,
15960            Choice {
15961                move_id: Choices::STRANGESTEAM,
15962                accuracy: 95.0,
15963                base_power: 90.0,
15964                category: MoveCategory::Special,
15965                move_type: PokemonType::FAIRY,
15966                flags: Flags {
15967                    protect: true,
15968                    ..Default::default()
15969                },
15970                secondaries: Some(vec![Secondary {
15971                    chance: 20.0,
15972                    target: MoveTarget::Opponent,
15973                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
15974                }]),
15975                ..Default::default()
15976            },
15977        );
15978        moves.insert(
15979            Choices::STRENGTH,
15980            Choice {
15981                move_id: Choices::STRENGTH,
15982                base_power: 80.0,
15983                category: MoveCategory::Physical,
15984                move_type: PokemonType::NORMAL,
15985                flags: Flags {
15986                    contact: true,
15987                    protect: true,
15988                    ..Default::default()
15989                },
15990                ..Default::default()
15991            },
15992        );
15993        moves.insert(
15994            Choices::STRENGTHSAP,
15995            Choice {
15996                move_id: Choices::STRENGTHSAP,
15997                move_type: PokemonType::GRASS,
15998                flags: Flags {
15999                    heal: true,
16000                    protect: true,
16001                    reflectable: true,
16002                    ..Default::default()
16003                },
16004                ..Default::default()
16005            },
16006        );
16007        moves.insert(
16008            Choices::STRINGSHOT,
16009            Choice {
16010                move_id: Choices::STRINGSHOT,
16011                accuracy: 95.0,
16012                move_type: PokemonType::BUG,
16013                flags: Flags {
16014                    protect: true,
16015                    reflectable: true,
16016                    ..Default::default()
16017                },
16018                boost: Some(Boost {
16019                    target: MoveTarget::Opponent,
16020                    boosts: StatBoosts {
16021                        attack: 0,
16022                        defense: 0,
16023                        special_attack: 0,
16024                        special_defense: 0,
16025                        speed: -2,
16026                        accuracy: 0,
16027                    },
16028                }),
16029                ..Default::default()
16030            },
16031        );
16032        moves.insert(
16033            Choices::STRUGGLE,
16034            Choice {
16035                move_id: Choices::STRUGGLE,
16036                base_power: 50.0,
16037                category: MoveCategory::Physical,
16038                move_type: PokemonType::NORMAL,
16039                flags: Flags {
16040                    contact: true,
16041                    protect: true,
16042                    ..Default::default()
16043                },
16044                ..Default::default()
16045            },
16046        );
16047        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16048            moves.insert(
16049                Choices::STRUGGLEBUG,
16050                Choice {
16051                    move_id: Choices::STRUGGLEBUG,
16052                    base_power: 30.0,
16053                    category: MoveCategory::Special,
16054                    move_type: PokemonType::BUG,
16055                    flags: Flags {
16056                            protect: true,
16057                        ..Default::default()
16058                    },
16059                    secondaries: Some(vec![Secondary {
16060                        chance: 100.0,
16061                        target: MoveTarget::Opponent,
16062                        effect: Effect::Boost(StatBoosts {
16063                            attack: 0,
16064                            defense: 0,
16065                            special_attack: -1,
16066                            special_defense: 0,
16067                            speed: 0,
16068                            accuracy: 0,
16069                        }),
16070                    }]),
16071                    ..Default::default()
16072                },
16073            );
16074        } else {
16075            moves.insert(
16076                Choices::STRUGGLEBUG,
16077                Choice {
16078                    move_id: Choices::STRUGGLEBUG,
16079                    base_power: 50.0,
16080                    category: MoveCategory::Special,
16081                    move_type: PokemonType::BUG,
16082                    flags: Flags {
16083                            protect: true,
16084                        ..Default::default()
16085                    },
16086                    secondaries: Some(vec![Secondary {
16087                        chance: 100.0,
16088                        target: MoveTarget::Opponent,
16089                        effect: Effect::Boost(StatBoosts {
16090                            attack: 0,
16091                            defense: 0,
16092                            special_attack: -1,
16093                            special_defense: 0,
16094                            speed: 0,
16095                            accuracy: 0,
16096                        }),
16097                    }]),
16098                    ..Default::default()
16099                },
16100            );
16101        }
16102        moves.insert(
16103            Choices::STUFFCHEEKS,
16104            Choice {
16105                move_id: Choices::STUFFCHEEKS,
16106                target: MoveTarget::User,
16107                move_type: PokemonType::NORMAL,
16108                flags: Flags {
16109                    ..Default::default()
16110                },
16111                ..Default::default()
16112            },
16113        );
16114        moves.insert(
16115            Choices::STUNSPORE,
16116            Choice {
16117                move_id: Choices::STUNSPORE,
16118                accuracy: 75.0,
16119                status: Some(Status {
16120                    target: MoveTarget::Opponent,
16121                    status: PokemonStatus::PARALYZE,
16122                }),
16123                move_type: PokemonType::GRASS,
16124                flags: Flags {
16125                    powder: true,
16126                    protect: true,
16127                    reflectable: true,
16128                    ..Default::default()
16129                },
16130                ..Default::default()
16131            },
16132        );
16133        moves.insert(
16134            Choices::SUBMISSION,
16135            Choice {
16136                move_id: Choices::SUBMISSION,
16137                accuracy: 80.0,
16138                base_power: 80.0,
16139                category: MoveCategory::Physical,
16140                move_type: PokemonType::FIGHTING,
16141                flags: Flags {
16142                    contact: true,
16143                    protect: true,
16144                    ..Default::default()
16145                },
16146                recoil: Some(0.25),
16147                ..Default::default()
16148            },
16149        );
16150        moves.insert(
16151            Choices::SUBSTITUTE,
16152            Choice {
16153                move_id: Choices::SUBSTITUTE,
16154                target: MoveTarget::User,
16155                move_type: PokemonType::NORMAL,
16156                flags: Flags {
16157                    ..Default::default()
16158                },
16159                volatile_status: Some(VolatileStatus {
16160                    target: MoveTarget::User,
16161                    volatile_status: PokemonVolatileStatus::SUBSTITUTE,
16162                }),
16163                ..Default::default()
16164            },
16165        );
16166        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
16167            moves.insert(
16168                Choices::SUCKERPUNCH,
16169                Choice {
16170                    move_id: Choices::SUCKERPUNCH,
16171                    base_power: 80.0,
16172                    category: MoveCategory::Physical,
16173                    priority: 1,
16174                    move_type: PokemonType::DARK,
16175                    flags: Flags {
16176                        contact: true,
16177                            protect: true,
16178                        ..Default::default()
16179                    },
16180                    ..Default::default()
16181                },
16182            );
16183        } else {
16184            moves.insert(
16185                Choices::SUCKERPUNCH,
16186                Choice {
16187                    move_id: Choices::SUCKERPUNCH,
16188                    base_power: 70.0,
16189                    category: MoveCategory::Physical,
16190                    priority: 1,
16191                    move_type: PokemonType::DARK,
16192                    flags: Flags {
16193                        contact: true,
16194                            protect: true,
16195                        ..Default::default()
16196                    },
16197                    ..Default::default()
16198                },
16199            );
16200        }
16201        moves.insert(
16202            Choices::SUNNYDAY,
16203            Choice {
16204                move_id: Choices::SUNNYDAY,
16205                move_type: PokemonType::FIRE,
16206                flags: Flags {
16207                    ..Default::default()
16208                },
16209                ..Default::default()
16210            },
16211        );
16212        moves.insert(
16213            Choices::SUNSTEELSTRIKE,
16214            Choice {
16215                move_id: Choices::SUNSTEELSTRIKE,
16216                base_power: 100.0,
16217                category: MoveCategory::Physical,
16218                move_type: PokemonType::STEEL,
16219                flags: Flags {
16220                    contact: true,
16221                    protect: true,
16222                    ..Default::default()
16223                },
16224                ..Default::default()
16225            },
16226        );
16227        moves.insert(
16228            Choices::SUPERCELLSLAM,
16229            Choice {
16230                accuracy: 95.0,
16231                move_id: Choices::SUPERCELLSLAM,
16232                base_power: 100.0,
16233                category: MoveCategory::Physical,
16234                move_type: PokemonType::ELECTRIC,
16235                flags: Flags {
16236                    contact: true,
16237                    protect: true,
16238                    ..Default::default()
16239                },
16240                crash: Some(0.5),
16241                ..Default::default()
16242            },
16243        );
16244        moves.insert(
16245            Choices::SUPERFANG,
16246            Choice {
16247                move_id: Choices::SUPERFANG,
16248                accuracy: 90.0,
16249                category: MoveCategory::Physical,
16250                move_type: PokemonType::NORMAL,
16251                flags: Flags {
16252                    contact: true,
16253                    protect: true,
16254                    ..Default::default()
16255                },
16256                ..Default::default()
16257            },
16258        );
16259        moves.insert(
16260            Choices::SUPERPOWER,
16261            Choice {
16262                move_id: Choices::SUPERPOWER,
16263                base_power: 120.0,
16264                category: MoveCategory::Physical,
16265                move_type: PokemonType::FIGHTING,
16266                flags: Flags {
16267                    contact: true,
16268                    protect: true,
16269                    ..Default::default()
16270                },
16271                boost: Some(Boost {
16272                    target: MoveTarget::User,
16273                    boosts: StatBoosts {
16274                        attack: -1,
16275                        defense: -1,
16276                        special_attack: 0,
16277                        special_defense: 0,
16278                        speed: 0,
16279                        accuracy: 0,
16280                    },
16281                }),
16282                ..Default::default()
16283            },
16284        );
16285        moves.insert(
16286            Choices::SUPERSONIC,
16287            Choice {
16288                move_id: Choices::SUPERSONIC,
16289                accuracy: 55.0,
16290                move_type: PokemonType::NORMAL,
16291                flags: Flags {
16292                    protect: true,
16293                    reflectable: true,
16294                    sound: true,
16295                    ..Default::default()
16296                },
16297                volatile_status: Some(VolatileStatus {
16298                    target: MoveTarget::Opponent,
16299                    volatile_status: PokemonVolatileStatus::CONFUSION,
16300                }),
16301                ..Default::default()
16302            },
16303        );
16304        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16305            moves.insert(
16306                Choices::SURF,
16307                Choice {
16308                    move_id: Choices::SURF,
16309                    base_power: 95.0,
16310                    category: MoveCategory::Special,
16311                    move_type: PokemonType::WATER,
16312                    flags: Flags {
16313                                protect: true,
16314                        ..Default::default()
16315                    },
16316                    ..Default::default()
16317                },
16318            );
16319        } else {
16320            moves.insert(
16321                Choices::SURF,
16322                Choice {
16323                    move_id: Choices::SURF,
16324                    base_power: 90.0,
16325                    category: MoveCategory::Special,
16326                    move_type: PokemonType::WATER,
16327                    flags: Flags {
16328                                protect: true,
16329                        ..Default::default()
16330                    },
16331                    ..Default::default()
16332                },
16333            );
16334        }
16335        moves.insert(
16336            Choices::SURGINGSTRIKES,
16337            Choice {
16338                move_id: Choices::SURGINGSTRIKES,
16339                base_power: 25.0,
16340                category: MoveCategory::Physical,
16341                move_type: PokemonType::WATER,
16342                flags: Flags {
16343                    contact: true,
16344                    protect: true,
16345                    punch: true,
16346                    ..Default::default()
16347                },
16348                ..Default::default()
16349            },
16350        );
16351
16352        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
16353            moves.insert(
16354                Choices::SWAGGER,
16355                Choice {
16356                    move_id: Choices::SWAGGER,
16357                    accuracy: 85.0,
16358                    move_type: PokemonType::NORMAL,
16359                    flags: Flags {
16360                            protect: true,
16361                        reflectable: true,
16362                        ..Default::default()
16363                    },
16364                    boost: Some(Boost {
16365                        target: MoveTarget::Opponent,
16366                        boosts: StatBoosts {
16367                            attack: 2,
16368                            defense: 0,
16369                            special_attack: 0,
16370                            special_defense: 0,
16371                            speed: 0,
16372                            accuracy: 0,
16373                        },
16374                    }),
16375                    volatile_status: Some(VolatileStatus {
16376                        target: MoveTarget::Opponent,
16377                        volatile_status: PokemonVolatileStatus::CONFUSION,
16378                    }),
16379                    ..Default::default()
16380                },
16381            );
16382        } else {
16383            moves.insert(
16384                Choices::SWAGGER,
16385                Choice {
16386                    move_id: Choices::SWAGGER,
16387                    accuracy: 90.0,
16388                    move_type: PokemonType::NORMAL,
16389                    flags: Flags {
16390                            protect: true,
16391                        reflectable: true,
16392                        ..Default::default()
16393                    },
16394                    boost: Some(Boost {
16395                        target: MoveTarget::Opponent,
16396                        boosts: StatBoosts {
16397                            attack: 2,
16398                            defense: 0,
16399                            special_attack: 0,
16400                            special_defense: 0,
16401                            speed: 0,
16402                            accuracy: 0,
16403                        },
16404                    }),
16405                    volatile_status: Some(VolatileStatus {
16406                        target: MoveTarget::Opponent,
16407                        volatile_status: PokemonVolatileStatus::CONFUSION,
16408                    }),
16409                    ..Default::default()
16410                },
16411            );
16412        }
16413        moves.insert(
16414            Choices::SWALLOW,
16415            Choice {
16416                move_id: Choices::SWALLOW,
16417                target: MoveTarget::User,
16418                move_type: PokemonType::NORMAL,
16419                flags: Flags {
16420                    heal: true,
16421                    ..Default::default()
16422                },
16423                ..Default::default()
16424            },
16425        );
16426        moves.insert(
16427            Choices::SWEETKISS,
16428            Choice {
16429                move_id: Choices::SWEETKISS,
16430                accuracy: 75.0,
16431                move_type: PokemonType::FAIRY,
16432                flags: Flags {
16433                    protect: true,
16434                    reflectable: true,
16435                    ..Default::default()
16436                },
16437                volatile_status: Some(VolatileStatus {
16438                    target: MoveTarget::Opponent,
16439                    volatile_status: PokemonVolatileStatus::CONFUSION,
16440                }),
16441                ..Default::default()
16442            },
16443        );
16444        moves.insert(
16445            Choices::SWEETSCENT,
16446            Choice {
16447                move_id: Choices::SWEETSCENT,
16448                move_type: PokemonType::NORMAL,
16449                flags: Flags {
16450                    protect: true,
16451                    reflectable: true,
16452                    ..Default::default()
16453                },
16454                boost: Some(Boost {
16455                    target: MoveTarget::Opponent,
16456                    boosts: StatBoosts {
16457                        attack: 0,
16458                        defense: 0,
16459                        special_attack: 0,
16460                        special_defense: 0,
16461                        speed: 0,
16462                        accuracy: 0,
16463                    },
16464                }),
16465                ..Default::default()
16466            },
16467        );
16468        moves.insert(
16469            Choices::SWIFT,
16470            Choice {
16471                move_id: Choices::SWIFT,
16472                base_power: 60.0,
16473                category: MoveCategory::Special,
16474                move_type: PokemonType::NORMAL,
16475                flags: Flags {
16476                    protect: true,
16477                    ..Default::default()
16478                },
16479                ..Default::default()
16480            },
16481        );
16482        moves.insert(
16483            Choices::SWITCHEROO,
16484            Choice {
16485                move_id: Choices::SWITCHEROO,
16486                move_type: PokemonType::DARK,
16487                flags: Flags {
16488                    protect: true,
16489                    ..Default::default()
16490                },
16491                ..Default::default()
16492            },
16493        );
16494        moves.insert(
16495            Choices::SWORDSDANCE,
16496            Choice {
16497                move_id: Choices::SWORDSDANCE,
16498                target: MoveTarget::User,
16499                move_type: PokemonType::NORMAL,
16500                flags: Flags {
16501                    ..Default::default()
16502                },
16503                boost: Some(Boost {
16504                    target: MoveTarget::User,
16505                    boosts: StatBoosts {
16506                        attack: 2,
16507                        defense: 0,
16508                        special_attack: 0,
16509                        special_defense: 0,
16510                        speed: 0,
16511                        accuracy: 0,
16512                    },
16513                }),
16514                ..Default::default()
16515            },
16516        );
16517        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16518            moves.insert(
16519                Choices::SYNCHRONOISE,
16520                Choice {
16521                    move_id: Choices::SYNCHRONOISE,
16522                    base_power: 70.0,
16523                    category: MoveCategory::Special,
16524                    move_type: PokemonType::PSYCHIC,
16525                    flags: Flags {
16526                            protect: true,
16527                        ..Default::default()
16528                    },
16529                    ..Default::default()
16530                },
16531            );
16532        } else {
16533            moves.insert(
16534                Choices::SYNCHRONOISE,
16535                Choice {
16536                    move_id: Choices::SYNCHRONOISE,
16537                    base_power: 120.0,
16538                    category: MoveCategory::Special,
16539                    move_type: PokemonType::PSYCHIC,
16540                    flags: Flags {
16541                            protect: true,
16542                        ..Default::default()
16543                    },
16544                    ..Default::default()
16545                },
16546            );
16547        }
16548        moves.insert(
16549            Choices::SYNTHESIS,
16550            Choice {
16551                move_id: Choices::SYNTHESIS,
16552                target: MoveTarget::User,
16553                move_type: PokemonType::GRASS,
16554                flags: Flags {
16555                    heal: true,
16556                    ..Default::default()
16557                },
16558                heal: Some(Heal {
16559                    target: MoveTarget::User,
16560                    amount: 0.5,
16561                }),
16562                ..Default::default()
16563            },
16564        );
16565        moves.insert(
16566            Choices::SYRUPBOMB,
16567            Choice {
16568                move_id: Choices::SYRUPBOMB,
16569                accuracy: 85.0,
16570                base_power: 60.0,
16571                category: MoveCategory::Special,
16572                move_type: PokemonType::GRASS,
16573                flags: Flags {
16574                    bullet: true,
16575                    protect: true,
16576                    ..Default::default()
16577                },
16578                secondaries: Some(vec![Secondary {
16579                    chance: 100.0,
16580                    target: MoveTarget::Opponent,
16581                    effect: Effect::VolatileStatus(PokemonVolatileStatus::SYRUPBOMB),
16582                }]),
16583                ..Default::default()
16584            },
16585        );
16586        moves.insert(
16587            Choices::TACHYONCUTTER,
16588            Choice {
16589                move_id: Choices::TACHYONCUTTER,
16590                base_power: 50.0,
16591                category: MoveCategory::Special,
16592                move_type: PokemonType::STEEL,
16593                flags: Flags {
16594                    protect: true,
16595                    slicing: true,
16596                    ..Default::default()
16597                },
16598                ..Default::default()
16599            },
16600        );
16601        moves.insert(
16602            Choices::TACKLE,
16603            Choice {
16604                move_id: Choices::TACKLE,
16605                base_power: 40.0,
16606                category: MoveCategory::Physical,
16607                move_type: PokemonType::NORMAL,
16608                flags: Flags {
16609                    contact: true,
16610                    protect: true,
16611                    ..Default::default()
16612                },
16613                ..Default::default()
16614            },
16615        );
16616        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
16617            moves.insert(
16618                Choices::TAILGLOW,
16619                Choice {
16620                    move_id: Choices::TAILGLOW,
16621                    target: MoveTarget::User,
16622                    move_type: PokemonType::BUG,
16623                    flags: Flags {
16624                            ..Default::default()
16625                    },
16626                    boost: Some(Boost {
16627                        target: MoveTarget::User,
16628                        boosts: StatBoosts {
16629                            attack: 0,
16630                            defense: 0,
16631                            special_attack: 2,
16632                            special_defense: 0,
16633                            speed: 0,
16634                            accuracy: 0,
16635                        },
16636                    }),
16637                    ..Default::default()
16638                },
16639            );
16640        } else {
16641            moves.insert(
16642                Choices::TAILGLOW,
16643                Choice {
16644                    move_id: Choices::TAILGLOW,
16645                    target: MoveTarget::User,
16646                    move_type: PokemonType::BUG,
16647                    flags: Flags {
16648                            ..Default::default()
16649                    },
16650                    boost: Some(Boost {
16651                        target: MoveTarget::User,
16652                        boosts: StatBoosts {
16653                            attack: 0,
16654                            defense: 0,
16655                            special_attack: 3,
16656                            special_defense: 0,
16657                            speed: 0,
16658                            accuracy: 0,
16659                        },
16660                    }),
16661                    ..Default::default()
16662                },
16663            );
16664        }
16665        moves.insert(
16666            Choices::TAILSLAP,
16667            Choice {
16668                move_id: Choices::TAILSLAP,
16669                accuracy: 85.0,
16670                base_power: 25.0,
16671                category: MoveCategory::Physical,
16672                move_type: PokemonType::NORMAL,
16673                flags: Flags {
16674                    contact: true,
16675                    protect: true,
16676                    ..Default::default()
16677                },
16678                ..Default::default()
16679            },
16680        );
16681        moves.insert(
16682            Choices::TAILWHIP,
16683            Choice {
16684                move_id: Choices::TAILWHIP,
16685                move_type: PokemonType::NORMAL,
16686                flags: Flags {
16687                    protect: true,
16688                    reflectable: true,
16689                    ..Default::default()
16690                },
16691                boost: Some(Boost {
16692                    target: MoveTarget::Opponent,
16693                    boosts: StatBoosts {
16694                        attack: 0,
16695                        defense: -1,
16696                        special_attack: 0,
16697                        special_defense: 0,
16698                        speed: 0,
16699                        accuracy: 0,
16700                    },
16701                }),
16702                ..Default::default()
16703            },
16704        );
16705        moves.insert(
16706            Choices::TAILWIND,
16707            Choice {
16708                move_id: Choices::TAILWIND,
16709                target: MoveTarget::User,
16710                move_type: PokemonType::FLYING,
16711                flags: Flags {
16712                    wind: true,
16713                    ..Default::default()
16714                },
16715                side_condition: Some(SideCondition {
16716                    target: MoveTarget::User,
16717                    condition: PokemonSideCondition::Tailwind,
16718                }),
16719                ..Default::default()
16720            },
16721        );
16722        moves.insert(
16723            Choices::TAKEDOWN,
16724            Choice {
16725                move_id: Choices::TAKEDOWN,
16726                accuracy: 85.0,
16727                base_power: 90.0,
16728                category: MoveCategory::Physical,
16729                move_type: PokemonType::NORMAL,
16730                flags: Flags {
16731                    contact: true,
16732                    protect: true,
16733                    ..Default::default()
16734                },
16735                recoil: Some(0.33),
16736                ..Default::default()
16737            },
16738        );
16739        moves.insert(
16740            Choices::TAKEHEART,
16741            Choice {
16742                move_id: Choices::TAKEHEART,
16743                target: MoveTarget::User,
16744                move_type: PokemonType::PSYCHIC,
16745                flags: Flags {
16746                    ..Default::default()
16747                },
16748                ..Default::default()
16749            },
16750        );
16751        moves.insert(
16752            Choices::TARSHOT,
16753            Choice {
16754                move_id: Choices::TARSHOT,
16755                move_type: PokemonType::ROCK,
16756                flags: Flags {
16757                    protect: true,
16758                    reflectable: true,
16759                    ..Default::default()
16760                },
16761                boost: Some(Boost {
16762                    target: MoveTarget::Opponent,
16763                    boosts: StatBoosts {
16764                        attack: 0,
16765                        defense: 0,
16766                        special_attack: 0,
16767                        special_defense: 0,
16768                        speed: -1,
16769                        accuracy: 0,
16770                    },
16771                }),
16772                volatile_status: Some(VolatileStatus {
16773                    target: MoveTarget::Opponent,
16774                    volatile_status: PokemonVolatileStatus::TARSHOT,
16775                }),
16776                ..Default::default()
16777            },
16778        );
16779        moves.insert(
16780            Choices::TAUNT,
16781            Choice {
16782                move_id: Choices::TAUNT,
16783                move_type: PokemonType::DARK,
16784                flags: Flags {
16785                    protect: true,
16786                    reflectable: true,
16787                    ..Default::default()
16788                },
16789                volatile_status: Some(VolatileStatus {
16790                    target: MoveTarget::Opponent,
16791                    volatile_status: PokemonVolatileStatus::TAUNT,
16792                }),
16793                ..Default::default()
16794            },
16795        );
16796        moves.insert(
16797            Choices::TEARFULLOOK,
16798            Choice {
16799                move_id: Choices::TEARFULLOOK,
16800                move_type: PokemonType::NORMAL,
16801                flags: Flags {
16802                    reflectable: true,
16803                    ..Default::default()
16804                },
16805                boost: Some(Boost {
16806                    target: MoveTarget::Opponent,
16807                    boosts: StatBoosts {
16808                        attack: -1,
16809                        defense: 0,
16810                        special_attack: -1,
16811                        special_defense: 0,
16812                        speed: 0,
16813                        accuracy: 0,
16814                    },
16815                }),
16816                ..Default::default()
16817            },
16818        );
16819        moves.insert(
16820            Choices::TEATIME,
16821            Choice {
16822                move_id: Choices::TEATIME,
16823                move_type: PokemonType::NORMAL,
16824                flags: Flags {
16825                    ..Default::default()
16826                },
16827                ..Default::default()
16828            },
16829        );
16830        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16831            moves.insert(
16832                Choices::TECHNOBLAST,
16833                Choice {
16834                    move_id: Choices::TECHNOBLAST,
16835                    base_power: 85.0,
16836                    category: MoveCategory::Special,
16837                    move_type: PokemonType::NORMAL,
16838                    flags: Flags {
16839                            protect: true,
16840                        ..Default::default()
16841                    },
16842                    ..Default::default()
16843                },
16844            );
16845        } else {
16846            moves.insert(
16847                Choices::TECHNOBLAST,
16848                Choice {
16849                    move_id: Choices::TECHNOBLAST,
16850                    base_power: 120.0,
16851                    category: MoveCategory::Special,
16852                    move_type: PokemonType::NORMAL,
16853                    flags: Flags {
16854                            protect: true,
16855                        ..Default::default()
16856                    },
16857                    ..Default::default()
16858                },
16859            );
16860        }
16861        moves.insert(
16862            Choices::TEETERDANCE,
16863            Choice {
16864                move_id: Choices::TEETERDANCE,
16865                move_type: PokemonType::NORMAL,
16866                flags: Flags {
16867                    protect: true,
16868                    ..Default::default()
16869                },
16870                volatile_status: Some(VolatileStatus {
16871                    target: MoveTarget::Opponent,
16872                    volatile_status: PokemonVolatileStatus::CONFUSION,
16873                }),
16874                ..Default::default()
16875            },
16876        );
16877        moves.insert(
16878            Choices::TELEKINESIS,
16879            Choice {
16880                move_id: Choices::TELEKINESIS,
16881                move_type: PokemonType::PSYCHIC,
16882                flags: Flags {
16883                    protect: true,
16884                    reflectable: true,
16885                    ..Default::default()
16886                },
16887                volatile_status: Some(VolatileStatus {
16888                    target: MoveTarget::Opponent,
16889                    volatile_status: PokemonVolatileStatus::TELEKINESIS,
16890                }),
16891                ..Default::default()
16892            },
16893        );
16894
16895        if cfg!(feature = "gen9") || cfg!(feature = "gen8") {
16896            moves.insert(
16897                Choices::TELEPORT,
16898                Choice {
16899                    move_id: Choices::TELEPORT,
16900                    priority: -6,
16901                    target: MoveTarget::User,
16902                    move_type: PokemonType::PSYCHIC,
16903                    flags: Flags {
16904                        pivot: true,
16905                        ..Default::default()
16906                    },
16907                    ..Default::default()
16908                },
16909            );
16910        } else {
16911            moves.insert(
16912                Choices::TELEPORT,
16913                Choice {
16914                    move_id: Choices::TELEPORT,
16915                    priority: 0,
16916                    target: MoveTarget::User,
16917                    move_type: PokemonType::PSYCHIC,
16918                    flags: Flags {
16919                        ..Default::default()
16920                    },
16921                    ..Default::default()
16922                },
16923            );
16924        }
16925        moves.insert(
16926            Choices::TEMPERFLARE,
16927            Choice {
16928                move_id: Choices::TEMPERFLARE,
16929                base_power: 75.0,
16930                category: MoveCategory::Physical,
16931                move_type: PokemonType::FIRE,
16932                flags: Flags {
16933                    contact: true,
16934                    protect: true,
16935                    ..Default::default()
16936                },
16937                ..Default::default()
16938            },
16939        );
16940        moves.insert(
16941            Choices::TERABLAST,
16942            Choice {
16943                move_id: Choices::TERABLAST,
16944                base_power: 80.0,
16945                category: MoveCategory::Special,
16946                move_type: PokemonType::NORMAL,
16947                flags: Flags {
16948                    protect: true,
16949                    ..Default::default()
16950                },
16951                ..Default::default()
16952            },
16953        );
16954        moves.insert(
16955            Choices::TERASTARSTORM,
16956            Choice {
16957                move_id: Choices::TERASTARSTORM,
16958                base_power: 120.0,
16959                category: MoveCategory::Special,
16960                move_type: PokemonType::NORMAL,
16961                flags: Flags {
16962                    protect: true,
16963                    ..Default::default()
16964                },
16965                ..Default::default()
16966            },
16967        );
16968        moves.insert(
16969            Choices::TERRAINPULSE,
16970            Choice {
16971                move_id: Choices::TERRAINPULSE,
16972                base_power: 50.0,
16973                category: MoveCategory::Special,
16974                move_type: PokemonType::NORMAL,
16975                flags: Flags {
16976                    protect: true,
16977                    pulse: true,
16978                    ..Default::default()
16979                },
16980                ..Default::default()
16981            },
16982        );
16983        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
16984            moves.insert(
16985                Choices::THIEF,
16986                Choice {
16987                    move_id: Choices::THIEF,
16988                    base_power: 40.0,
16989                    category: MoveCategory::Physical,
16990                    move_type: PokemonType::DARK,
16991                    flags: Flags {
16992                        contact: true,
16993                            protect: true,
16994                        ..Default::default()
16995                    },
16996                    ..Default::default()
16997                },
16998            );
16999        } else {
17000            moves.insert(
17001                Choices::THIEF,
17002                Choice {
17003                    move_id: Choices::THIEF,
17004                    base_power: 60.0,
17005                    category: MoveCategory::Physical,
17006                    move_type: PokemonType::DARK,
17007                    flags: Flags {
17008                        contact: true,
17009                            protect: true,
17010                        ..Default::default()
17011                    },
17012                    ..Default::default()
17013                },
17014            );
17015        }
17016        moves.insert(
17017            Choices::THOUSANDARROWS,
17018            Choice {
17019                move_id: Choices::THOUSANDARROWS,
17020                base_power: 90.0,
17021                category: MoveCategory::Physical,
17022                move_type: PokemonType::GROUND,
17023                flags: Flags {
17024                    protect: true,
17025                    ..Default::default()
17026                },
17027                volatile_status: Some(VolatileStatus {
17028                    target: MoveTarget::Opponent,
17029                    volatile_status: PokemonVolatileStatus::SMACKDOWN,
17030                }),
17031                ..Default::default()
17032            },
17033        );
17034        moves.insert(
17035            Choices::THOUSANDWAVES,
17036            Choice {
17037                move_id: Choices::THOUSANDWAVES,
17038                base_power: 90.0,
17039                category: MoveCategory::Physical,
17040                move_type: PokemonType::GROUND,
17041                flags: Flags {
17042                    protect: true,
17043                    ..Default::default()
17044                },
17045                ..Default::default()
17046            },
17047        );
17048        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17049            moves.insert(
17050                Choices::THRASH,
17051                Choice {
17052                    move_id: Choices::THRASH,
17053                    base_power: 90.0,
17054                    category: MoveCategory::Physical,
17055                    move_type: PokemonType::NORMAL,
17056                    flags: Flags {
17057                        contact: true,
17058                            protect: true,
17059                        ..Default::default()
17060                    },
17061                    volatile_status: Some(VolatileStatus {
17062                        target: MoveTarget::User,
17063                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
17064                    }),
17065                    ..Default::default()
17066                },
17067            );
17068        } else {
17069            moves.insert(
17070                Choices::THRASH,
17071                Choice {
17072                    move_id: Choices::THRASH,
17073                    base_power: 120.0,
17074                    category: MoveCategory::Physical,
17075                    move_type: PokemonType::NORMAL,
17076                    flags: Flags {
17077                        contact: true,
17078                            protect: true,
17079                        ..Default::default()
17080                    },
17081                    volatile_status: Some(VolatileStatus {
17082                        target: MoveTarget::User,
17083                        volatile_status: PokemonVolatileStatus::LOCKEDMOVE,
17084                    }),
17085                    ..Default::default()
17086                },
17087            );
17088        }
17089        moves.insert(
17090            Choices::THROATCHOP,
17091            Choice {
17092                move_id: Choices::THROATCHOP,
17093                base_power: 80.0,
17094                category: MoveCategory::Physical,
17095                move_type: PokemonType::DARK,
17096                flags: Flags {
17097                    contact: true,
17098                    protect: true,
17099                    ..Default::default()
17100                },
17101                volatile_status: Some(VolatileStatus {
17102                    target: MoveTarget::Opponent,
17103                    volatile_status: PokemonVolatileStatus::THROATCHOP,
17104                }),
17105                ..Default::default()
17106            },
17107        );
17108        if cfg!(feature = "gen1") {
17109            moves.insert(
17110                Choices::THUNDER,
17111                Choice {
17112                    move_id: Choices::THUNDER,
17113                    accuracy: 70.0,
17114                    base_power: 120.0,
17115                    category: MoveCategory::Special,
17116                    move_type: PokemonType::ELECTRIC,
17117                    flags: Flags {
17118                            protect: true,
17119                        ..Default::default()
17120                    },
17121                    secondaries: Some(vec![Secondary {
17122                        chance: 10.0,
17123                        target: MoveTarget::Opponent,
17124                        effect: Effect::Status(PokemonStatus::PARALYZE),
17125                    }]),
17126                    ..Default::default()
17127                },
17128            );
17129        } else if cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
17130            moves.insert(
17131                Choices::THUNDER,
17132                Choice {
17133                    move_id: Choices::THUNDER,
17134                    accuracy: 70.0,
17135                    base_power: 120.0,
17136                    category: MoveCategory::Special,
17137                    move_type: PokemonType::ELECTRIC,
17138                    flags: Flags {
17139                            protect: true,
17140                        ..Default::default()
17141                    },
17142                    secondaries: Some(vec![Secondary {
17143                        chance: 30.0,
17144                        target: MoveTarget::Opponent,
17145                        effect: Effect::Status(PokemonStatus::PARALYZE),
17146                    }]),
17147                    ..Default::default()
17148                },
17149            );
17150        } else {
17151            moves.insert(
17152                Choices::THUNDER,
17153                Choice {
17154                    move_id: Choices::THUNDER,
17155                    accuracy: 70.0,
17156                    base_power: 110.0,
17157                    category: MoveCategory::Special,
17158                    move_type: PokemonType::ELECTRIC,
17159                    flags: Flags {
17160                            protect: true,
17161                        ..Default::default()
17162                    },
17163                    secondaries: Some(vec![Secondary {
17164                        chance: 30.0,
17165                        target: MoveTarget::Opponent,
17166                        effect: Effect::Status(PokemonStatus::PARALYZE),
17167                    }]),
17168                    ..Default::default()
17169                },
17170            );
17171        }
17172        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
17173            moves.insert(
17174                Choices::THUNDERBOLT,
17175                Choice {
17176                    move_id: Choices::THUNDERBOLT,
17177                    base_power: 95.0,
17178                    category: MoveCategory::Special,
17179                    move_type: PokemonType::ELECTRIC,
17180                    flags: Flags {
17181                            protect: true,
17182                        ..Default::default()
17183                    },
17184                    secondaries: Some(vec![Secondary {
17185                        chance: 10.0,
17186                        target: MoveTarget::Opponent,
17187                        effect: Effect::Status(PokemonStatus::PARALYZE),
17188                    }]),
17189                    ..Default::default()
17190                },
17191            );
17192        } else {
17193            moves.insert(
17194                Choices::THUNDERBOLT,
17195                Choice {
17196                    move_id: Choices::THUNDERBOLT,
17197                    base_power: 90.0,
17198                    category: MoveCategory::Special,
17199                    move_type: PokemonType::ELECTRIC,
17200                    flags: Flags {
17201                            protect: true,
17202                        ..Default::default()
17203                    },
17204                    secondaries: Some(vec![Secondary {
17205                        chance: 10.0,
17206                        target: MoveTarget::Opponent,
17207                        effect: Effect::Status(PokemonStatus::PARALYZE),
17208                    }]),
17209                    ..Default::default()
17210                },
17211            );
17212        }
17213        moves.insert(
17214            Choices::THUNDERCAGE,
17215            Choice {
17216                move_id: Choices::THUNDERCAGE,
17217                accuracy: 90.0,
17218                base_power: 80.0,
17219                category: MoveCategory::Special,
17220                move_type: PokemonType::ELECTRIC,
17221                flags: Flags {
17222                    protect: true,
17223                    ..Default::default()
17224                },
17225                volatile_status: Some(VolatileStatus {
17226                    target: MoveTarget::Opponent,
17227                    volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
17228                }),
17229                ..Default::default()
17230            },
17231        );
17232        moves.insert(
17233            Choices::THUNDERCLAP,
17234            Choice {
17235                move_id: Choices::THUNDERCLAP,
17236                base_power: 70.0,
17237                priority: 1,
17238                category: MoveCategory::Special,
17239                move_type: PokemonType::ELECTRIC,
17240                flags: Flags {
17241                    protect: true,
17242                    ..Default::default()
17243                },
17244                ..Default::default()
17245            },
17246        );
17247        moves.insert(
17248            Choices::THUNDERFANG,
17249            Choice {
17250                move_id: Choices::THUNDERFANG,
17251                accuracy: 95.0,
17252                base_power: 65.0,
17253                category: MoveCategory::Physical,
17254                move_type: PokemonType::ELECTRIC,
17255                flags: Flags {
17256                    bite: true,
17257                    contact: true,
17258                    protect: true,
17259                    ..Default::default()
17260                },
17261                secondaries: Some(vec![
17262                    Secondary {
17263                        chance: 10.0,
17264                        target: MoveTarget::Opponent,
17265                        effect: Effect::Status(PokemonStatus::PARALYZE),
17266                    },
17267                    Secondary {
17268                        chance: 10.0,
17269                        target: MoveTarget::Opponent,
17270                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17271                    },
17272                ]),
17273                ..Default::default()
17274            },
17275        );
17276        moves.insert(
17277            Choices::THUNDEROUSKICK,
17278            Choice {
17279                move_id: Choices::THUNDEROUSKICK,
17280                base_power: 90.0,
17281                category: MoveCategory::Physical,
17282                move_type: PokemonType::FIGHTING,
17283                flags: Flags {
17284                    contact: true,
17285                    protect: true,
17286                    ..Default::default()
17287                },
17288                secondaries: Some(vec![Secondary {
17289                    chance: 100.0,
17290                    target: MoveTarget::Opponent,
17291                    effect: Effect::Boost(StatBoosts {
17292                        attack: 0,
17293                        defense: -1,
17294                        special_attack: 0,
17295                        special_defense: 0,
17296                        speed: 0,
17297                        accuracy: 0,
17298                    }),
17299                }]),
17300                ..Default::default()
17301            },
17302        );
17303        moves.insert(
17304            Choices::THUNDERPUNCH,
17305            Choice {
17306                move_id: Choices::THUNDERPUNCH,
17307                base_power: 75.0,
17308                category: MoveCategory::Physical,
17309                move_type: PokemonType::ELECTRIC,
17310                flags: Flags {
17311                    contact: true,
17312                    protect: true,
17313                    punch: true,
17314                    ..Default::default()
17315                },
17316                secondaries: Some(vec![Secondary {
17317                    chance: 10.0,
17318                    target: MoveTarget::Opponent,
17319                    effect: Effect::Status(PokemonStatus::PARALYZE),
17320                }]),
17321                ..Default::default()
17322            },
17323        );
17324        moves.insert(
17325            Choices::THUNDERSHOCK,
17326            Choice {
17327                move_id: Choices::THUNDERSHOCK,
17328                base_power: 40.0,
17329                category: MoveCategory::Special,
17330                move_type: PokemonType::ELECTRIC,
17331                flags: Flags {
17332                    protect: true,
17333                    ..Default::default()
17334                },
17335                secondaries: Some(vec![Secondary {
17336                    chance: 10.0,
17337                    target: MoveTarget::Opponent,
17338                    effect: Effect::Status(PokemonStatus::PARALYZE),
17339                }]),
17340                ..Default::default()
17341            },
17342        );
17343        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
17344            moves.insert(
17345                Choices::THUNDERWAVE,
17346                Choice {
17347                    move_id: Choices::THUNDERWAVE,
17348                    accuracy: 100.0,
17349                    status: Some(Status {
17350                        target: MoveTarget::Opponent,
17351                        status: PokemonStatus::PARALYZE,
17352                    }),
17353                    move_type: PokemonType::ELECTRIC,
17354                    flags: Flags {
17355                            protect: true,
17356                        reflectable: true,
17357                        ..Default::default()
17358                    },
17359                    ..Default::default()
17360                },
17361            );
17362        } else {
17363            moves.insert(
17364                Choices::THUNDERWAVE,
17365                Choice {
17366                    move_id: Choices::THUNDERWAVE,
17367                    accuracy: 90.0,
17368                    status: Some(Status {
17369                        target: MoveTarget::Opponent,
17370                        status: PokemonStatus::PARALYZE,
17371                    }),
17372                    move_type: PokemonType::ELECTRIC,
17373                    flags: Flags {
17374                            protect: true,
17375                        reflectable: true,
17376                        ..Default::default()
17377                    },
17378                    ..Default::default()
17379                },
17380            );
17381        }
17382        moves.insert(
17383            Choices::TICKLE,
17384            Choice {
17385                move_id: Choices::TICKLE,
17386                move_type: PokemonType::NORMAL,
17387                flags: Flags {
17388                    protect: true,
17389                    reflectable: true,
17390                    ..Default::default()
17391                },
17392                boost: Some(Boost {
17393                    target: MoveTarget::Opponent,
17394                    boosts: StatBoosts {
17395                        attack: -1,
17396                        defense: -1,
17397                        special_attack: 0,
17398                        special_defense: 0,
17399                        speed: 0,
17400                        accuracy: 0,
17401                    },
17402                }),
17403                ..Default::default()
17404            },
17405        );
17406        moves.insert(
17407            Choices::TIDYUP,
17408            Choice {
17409                move_id: Choices::TIDYUP,
17410                target: MoveTarget::User,
17411                move_type: PokemonType::NORMAL,
17412                flags: Flags {
17413                    ..Default::default()
17414                },
17415                boost: Some(Boost {
17416                    target: MoveTarget::User,
17417                    boosts: StatBoosts {
17418                        attack: 1,
17419                        defense: 0,
17420                        special_attack: 0,
17421                        special_defense: 0,
17422                        speed: 1,
17423                        accuracy: 0,
17424                    },
17425                }),
17426                ..Default::default()
17427            },
17428        );
17429        moves.insert(
17430            Choices::TOPSYTURVY,
17431            Choice {
17432                move_id: Choices::TOPSYTURVY,
17433                move_type: PokemonType::DARK,
17434                flags: Flags {
17435                    protect: true,
17436                    reflectable: true,
17437                    ..Default::default()
17438                },
17439                ..Default::default()
17440            },
17441        );
17442        moves.insert(
17443            Choices::TORCHSONG,
17444            Choice {
17445                move_id: Choices::TORCHSONG,
17446                base_power: 80.0,
17447                category: MoveCategory::Special,
17448                move_type: PokemonType::FIRE,
17449                flags: Flags {
17450                    protect: true,
17451                    sound: true,
17452                    ..Default::default()
17453                },
17454                secondaries: Some(vec![Secondary {
17455                    chance: 100.0,
17456                    target: MoveTarget::User,
17457                    effect: Effect::Boost(StatBoosts {
17458                        attack: 0,
17459                        defense: 0,
17460                        special_attack: 1,
17461                        special_defense: 0,
17462                        speed: 0,
17463                        accuracy: 0,
17464                    }),
17465                }]),
17466                ..Default::default()
17467            },
17468        );
17469        moves.insert(
17470            Choices::TORMENT,
17471            Choice {
17472                move_id: Choices::TORMENT,
17473                move_type: PokemonType::DARK,
17474                flags: Flags {
17475                    protect: true,
17476                    reflectable: true,
17477                    ..Default::default()
17478                },
17479                volatile_status: Some(VolatileStatus {
17480                    target: MoveTarget::Opponent,
17481                    volatile_status: PokemonVolatileStatus::TORMENT,
17482                }),
17483                ..Default::default()
17484            },
17485        );
17486        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17487            moves.insert(
17488                Choices::TOXIC,
17489                Choice {
17490                    move_id: Choices::TOXIC,
17491                    accuracy: 85.0,
17492                    status: Some(Status {
17493                        target: MoveTarget::Opponent,
17494                        status: PokemonStatus::TOXIC,
17495                    }),
17496                    move_type: PokemonType::POISON,
17497                    flags: Flags {
17498                            protect: true,
17499                        reflectable: true,
17500                        ..Default::default()
17501                    },
17502                    ..Default::default()
17503                },
17504            );
17505        } else {
17506            moves.insert(
17507                Choices::TOXIC,
17508                Choice {
17509                    move_id: Choices::TOXIC,
17510                    accuracy: 90.0,
17511                    status: Some(Status {
17512                        target: MoveTarget::Opponent,
17513                        status: PokemonStatus::TOXIC,
17514                    }),
17515                    move_type: PokemonType::POISON,
17516                    flags: Flags {
17517                            protect: true,
17518                        reflectable: true,
17519                        ..Default::default()
17520                    },
17521                    ..Default::default()
17522                },
17523            );
17524        }
17525        moves.insert(
17526            Choices::TOXICSPIKES,
17527            Choice {
17528                move_id: Choices::TOXICSPIKES,
17529                move_type: PokemonType::POISON,
17530                flags: Flags {
17531                    reflectable: true,
17532                    ..Default::default()
17533                },
17534                side_condition: Some(SideCondition {
17535                    target: MoveTarget::Opponent,
17536                    condition: PokemonSideCondition::ToxicSpikes,
17537                }),
17538                ..Default::default()
17539            },
17540        );
17541        moves.insert(
17542            Choices::TOXICTHREAD,
17543            Choice {
17544                move_id: Choices::TOXICTHREAD,
17545                status: Some(Status {
17546                    target: MoveTarget::Opponent,
17547                    status: PokemonStatus::POISON,
17548                }),
17549                move_type: PokemonType::POISON,
17550                flags: Flags {
17551                    protect: true,
17552                    reflectable: true,
17553                    ..Default::default()
17554                },
17555                boost: Some(Boost {
17556                    target: MoveTarget::Opponent,
17557                    boosts: StatBoosts {
17558                        attack: 0,
17559                        defense: 0,
17560                        special_attack: 0,
17561                        special_defense: 0,
17562                        speed: -1,
17563                        accuracy: 0,
17564                    },
17565                }),
17566                ..Default::default()
17567            },
17568        );
17569        moves.insert(
17570            Choices::TRAILBLAZE,
17571            Choice {
17572                move_id: Choices::TRAILBLAZE,
17573                base_power: 50.0,
17574                category: MoveCategory::Physical,
17575                move_type: PokemonType::GRASS,
17576                flags: Flags {
17577                    contact: true,
17578                    protect: true,
17579                    ..Default::default()
17580                },
17581                secondaries: Some(vec![Secondary {
17582                    chance: 100.0,
17583                    target: MoveTarget::User,
17584                    effect: Effect::Boost(StatBoosts {
17585                        attack: 0,
17586                        defense: 0,
17587                        special_attack: 0,
17588                        special_defense: 0,
17589                        speed: 1,
17590                        accuracy: 0,
17591                    }),
17592                }]),
17593                ..Default::default()
17594            },
17595        );
17596        moves.insert(
17597            Choices::TRANSFORM,
17598            Choice {
17599                move_id: Choices::TRANSFORM,
17600                move_type: PokemonType::NORMAL,
17601                flags: Flags {
17602                    ..Default::default()
17603                },
17604                ..Default::default()
17605            },
17606        );
17607        if cfg!(feature = "gen1") {
17608            moves.insert(
17609                Choices::TRIATTACK,
17610                Choice {
17611                    move_id: Choices::TRIATTACK,
17612                    base_power: 80.0,
17613                    category: MoveCategory::Special,
17614                    move_type: PokemonType::NORMAL,
17615                    flags: Flags {
17616                        protect: true,
17617                        ..Default::default()
17618                    },
17619                    ..Default::default()
17620                },
17621            );
17622        } else {
17623            moves.insert(
17624                Choices::TRIATTACK,
17625                Choice {
17626                    move_id: Choices::TRIATTACK,
17627                    base_power: 80.0,
17628                    category: MoveCategory::Special,
17629                    move_type: PokemonType::NORMAL,
17630                    flags: Flags {
17631                        protect: true,
17632                        ..Default::default()
17633                    },
17634                    // not technically correct but idgaf
17635                    // this should roll 20% chance to inflict, and then roll for the status
17636                    secondaries: Some(
17637                        vec![
17638                            Secondary {
17639                                chance: 6.67,
17640                                target: MoveTarget::Opponent,
17641                                effect: Effect::Status(PokemonStatus::PARALYZE),
17642                            },
17643                            Secondary {
17644                                chance: 6.67,
17645                                target: MoveTarget::Opponent,
17646                                effect: Effect::Status(PokemonStatus::BURN),
17647                            },
17648                            Secondary {
17649                                chance: 6.67,
17650                                target: MoveTarget::Opponent,
17651                                effect: Effect::Status(PokemonStatus::FREEZE),
17652                            },
17653                        ]
17654                    ),
17655                    ..Default::default()
17656                },
17657            );
17658        }
17659        moves.insert(
17660            Choices::TRICK,
17661            Choice {
17662                move_id: Choices::TRICK,
17663                move_type: PokemonType::PSYCHIC,
17664                flags: Flags {
17665                    protect: true,
17666                    ..Default::default()
17667                },
17668                ..Default::default()
17669            },
17670        );
17671        moves.insert(
17672            Choices::TRICKORTREAT,
17673            Choice {
17674                move_id: Choices::TRICKORTREAT,
17675                move_type: PokemonType::GHOST,
17676                flags: Flags {
17677                    protect: true,
17678                    reflectable: true,
17679                    ..Default::default()
17680                },
17681                ..Default::default()
17682            },
17683        );
17684        moves.insert(
17685            Choices::TRICKROOM,
17686            Choice {
17687                move_id: Choices::TRICKROOM,
17688                priority: -7,
17689                move_type: PokemonType::PSYCHIC,
17690                flags: Flags {
17691                    ..Default::default()
17692                },
17693                ..Default::default()
17694            },
17695        );
17696        moves.insert(
17697            Choices::TRIPLEARROWS,
17698            Choice {
17699                move_id: Choices::TRIPLEARROWS,
17700                base_power: 90.0,
17701                category: MoveCategory::Physical,
17702                move_type: PokemonType::FIGHTING,
17703                flags: Flags {
17704                    protect: true,
17705                    ..Default::default()
17706                },
17707                secondaries: Some(vec![
17708                    Secondary {
17709                        chance: 50.0,
17710                        target: MoveTarget::Opponent,
17711                        effect: Effect::Boost(StatBoosts {
17712                            attack: 0,
17713                            defense: -1,
17714                            special_attack: 0,
17715                            special_defense: 0,
17716                            speed: 0,
17717                            accuracy: 0,
17718                        }),
17719                    },
17720                    Secondary {
17721                        chance: 30.0,
17722                        target: MoveTarget::Opponent,
17723                        effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17724                    },
17725                ]),
17726                ..Default::default()
17727            },
17728        );
17729        moves.insert(
17730            Choices::TRIPLEAXEL,
17731            Choice {
17732                move_id: Choices::TRIPLEAXEL,
17733                accuracy: 90.0,
17734                base_power: 40.0,
17735                category: MoveCategory::Physical,
17736                move_type: PokemonType::ICE,
17737                flags: Flags {
17738                    contact: true,
17739                    protect: true,
17740                    ..Default::default()
17741                },
17742                ..Default::default()
17743            },
17744        );
17745        moves.insert(
17746            Choices::TRIPLEDIVE,
17747            Choice {
17748                move_id: Choices::TRIPLEDIVE,
17749                accuracy: 95.0,
17750                base_power: 30.0,
17751                category: MoveCategory::Physical,
17752                move_type: PokemonType::WATER,
17753                flags: Flags {
17754                    contact: true,
17755                    protect: true,
17756                    ..Default::default()
17757                },
17758                ..Default::default()
17759            },
17760        );
17761        moves.insert(
17762            Choices::TRIPLEKICK,
17763            Choice {
17764                move_id: Choices::TRIPLEKICK,
17765                accuracy: 90.0,
17766                base_power: 10.0,
17767                category: MoveCategory::Physical,
17768                move_type: PokemonType::FIGHTING,
17769                flags: Flags {
17770                    contact: true,
17771                    protect: true,
17772                    ..Default::default()
17773                },
17774                ..Default::default()
17775            },
17776        );
17777        moves.insert(
17778            Choices::TROPKICK,
17779            Choice {
17780                move_id: Choices::TROPKICK,
17781                base_power: 70.0,
17782                category: MoveCategory::Physical,
17783                move_type: PokemonType::GRASS,
17784                flags: Flags {
17785                    contact: true,
17786                    protect: true,
17787                    ..Default::default()
17788                },
17789                secondaries: Some(vec![Secondary {
17790                    chance: 100.0,
17791                    target: MoveTarget::Opponent,
17792                    effect: Effect::Boost(StatBoosts {
17793                        attack: -1,
17794                        defense: 0,
17795                        special_attack: 0,
17796                        special_defense: 0,
17797                        speed: 0,
17798                        accuracy: 0,
17799                    }),
17800                }]),
17801                ..Default::default()
17802            },
17803        );
17804        moves.insert(
17805            Choices::TRUMPCARD,
17806            Choice {
17807                move_id: Choices::TRUMPCARD,
17808                category: MoveCategory::Special,
17809                move_type: PokemonType::NORMAL,
17810                flags: Flags {
17811                    contact: true,
17812                    protect: true,
17813                    ..Default::default()
17814                },
17815                ..Default::default()
17816            },
17817        );
17818        moves.insert(
17819            Choices::TWINBEAM,
17820            Choice {
17821                move_id: Choices::TWINBEAM,
17822                base_power: 40.0,
17823                category: MoveCategory::Special,
17824                move_type: PokemonType::PSYCHIC,
17825                flags: Flags {
17826                    protect: true,
17827                    ..Default::default()
17828                },
17829                ..Default::default()
17830            },
17831        );
17832        moves.insert(
17833            Choices::TWINEEDLE,
17834            Choice {
17835                move_id: Choices::TWINEEDLE,
17836                base_power: 25.0,
17837                category: MoveCategory::Physical,
17838                move_type: PokemonType::BUG,
17839                flags: Flags {
17840                    protect: true,
17841                    ..Default::default()
17842                },
17843                secondaries: Some(vec![Secondary {
17844                    chance: 20.0,
17845                    target: MoveTarget::Opponent,
17846                    effect: Effect::Status(PokemonStatus::POISON),
17847                }]),
17848                ..Default::default()
17849            },
17850        );
17851        moves.insert(
17852            Choices::TWISTER,
17853            Choice {
17854                move_id: Choices::TWISTER,
17855                base_power: 40.0,
17856                category: MoveCategory::Special,
17857                move_type: PokemonType::DRAGON,
17858                flags: Flags {
17859                    protect: true,
17860                    wind: true,
17861                    ..Default::default()
17862                },
17863                secondaries: Some(vec![Secondary {
17864                    chance: 20.0,
17865                    target: MoveTarget::Opponent,
17866                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17867                }]),
17868                ..Default::default()
17869            },
17870        );
17871        moves.insert(
17872            Choices::UPPERHAND,
17873            Choice {
17874                move_id: Choices::UPPERHAND,
17875                base_power: 65.0,
17876                priority: 3,
17877                category: MoveCategory::Physical,
17878                move_type: PokemonType::FIGHTING,
17879                flags: Flags {
17880                    contact: true,
17881                    protect: true,
17882                    ..Default::default()
17883                },
17884                secondaries: Some(vec![Secondary {
17885                    chance: 100.0,
17886                    target: MoveTarget::Opponent,
17887                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
17888                }]),
17889                ..Default::default()
17890            },
17891        );
17892        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
17893            moves.insert(
17894                Choices::UPROAR,
17895                Choice {
17896                    move_id: Choices::UPROAR,
17897                    base_power: 50.0,
17898                    category: MoveCategory::Special,
17899                    move_type: PokemonType::NORMAL,
17900                    flags: Flags {
17901                            protect: true,
17902                        sound: true,
17903                        ..Default::default()
17904                    },
17905                    ..Default::default()
17906                },
17907            );
17908        } else {
17909            moves.insert(
17910                Choices::UPROAR,
17911                Choice {
17912                    move_id: Choices::UPROAR,
17913                    base_power: 90.0,
17914                    category: MoveCategory::Special,
17915                    move_type: PokemonType::NORMAL,
17916                    flags: Flags {
17917                            protect: true,
17918                        sound: true,
17919                        ..Default::default()
17920                    },
17921                    ..Default::default()
17922                },
17923            );
17924        }
17925        moves.insert(
17926            Choices::UTURN,
17927            Choice {
17928                move_id: Choices::UTURN,
17929                base_power: 70.0,
17930                category: MoveCategory::Physical,
17931                move_type: PokemonType::BUG,
17932                flags: Flags {
17933                    contact: true,
17934                    protect: true,
17935                    pivot: true,
17936                    ..Default::default()
17937                },
17938                ..Default::default()
17939            },
17940        );
17941        moves.insert(
17942            Choices::VACUUMWAVE,
17943            Choice {
17944                move_id: Choices::VACUUMWAVE,
17945                base_power: 40.0,
17946                category: MoveCategory::Special,
17947                priority: 1,
17948                move_type: PokemonType::FIGHTING,
17949                flags: Flags {
17950                    protect: true,
17951                    ..Default::default()
17952                },
17953                ..Default::default()
17954            },
17955        );
17956        moves.insert(
17957            Choices::VCREATE,
17958            Choice {
17959                move_id: Choices::VCREATE,
17960                accuracy: 95.0,
17961                base_power: 180.0,
17962                category: MoveCategory::Physical,
17963                move_type: PokemonType::FIRE,
17964                flags: Flags {
17965                    contact: true,
17966                    protect: true,
17967                    ..Default::default()
17968                },
17969                boost: Some(Boost {
17970                    target: MoveTarget::User,
17971                    boosts: StatBoosts {
17972                        attack: 0,
17973                        defense: -1,
17974                        special_attack: 0,
17975                        special_defense: -1,
17976                        speed: -1,
17977                        accuracy: 0,
17978                    },
17979                }),
17980                ..Default::default()
17981            },
17982        );
17983        moves.insert(
17984            Choices::VEEVEEVOLLEY,
17985            Choice {
17986                move_id: Choices::VEEVEEVOLLEY,
17987                category: MoveCategory::Physical,
17988                move_type: PokemonType::NORMAL,
17989                flags: Flags {
17990                    contact: true,
17991                    protect: true,
17992                    ..Default::default()
17993                },
17994                ..Default::default()
17995            },
17996        );
17997        moves.insert(
17998            Choices::VENOMDRENCH,
17999            Choice {
18000                move_id: Choices::VENOMDRENCH,
18001                move_type: PokemonType::POISON,
18002                flags: Flags {
18003                    protect: true,
18004                    reflectable: true,
18005                    ..Default::default()
18006                },
18007                ..Default::default()
18008            },
18009        );
18010        moves.insert(
18011            Choices::VENOSHOCK,
18012            Choice {
18013                move_id: Choices::VENOSHOCK,
18014                base_power: 65.0,
18015                category: MoveCategory::Special,
18016                move_type: PokemonType::POISON,
18017                flags: Flags {
18018                    protect: true,
18019                    ..Default::default()
18020                },
18021                ..Default::default()
18022            },
18023        );
18024        moves.insert(
18025            Choices::VICTORYDANCE,
18026            Choice {
18027                move_id: Choices::VICTORYDANCE,
18028                target: MoveTarget::User,
18029                move_type: PokemonType::FIGHTING,
18030                flags: Flags {
18031                    ..Default::default()
18032                },
18033                boost: Some(Boost {
18034                    target: MoveTarget::User,
18035                    boosts: StatBoosts {
18036                        attack: 1,
18037                        defense: 1,
18038                        special_attack: 0,
18039                        special_defense: 0,
18040                        speed: 1,
18041                        accuracy: 0,
18042                    },
18043                }),
18044                ..Default::default()
18045            },
18046        );
18047        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18048            moves.insert(
18049                Choices::VINEWHIP,
18050                Choice {
18051                    move_id: Choices::VINEWHIP,
18052                    base_power: 35.0,
18053                    category: MoveCategory::Physical,
18054                    move_type: PokemonType::GRASS,
18055                    flags: Flags {
18056                        contact: true,
18057                            protect: true,
18058                        ..Default::default()
18059                    },
18060                    ..Default::default()
18061                },
18062            );
18063        } else {
18064            moves.insert(
18065                Choices::VINEWHIP,
18066                Choice {
18067                    move_id: Choices::VINEWHIP,
18068                    base_power: 45.0,
18069                    category: MoveCategory::Physical,
18070                    move_type: PokemonType::GRASS,
18071                    flags: Flags {
18072                        contact: true,
18073                            protect: true,
18074                        ..Default::default()
18075                    },
18076                    ..Default::default()
18077                },
18078            );
18079        }
18080        moves.insert(
18081            Choices::VISEGRIP,
18082            Choice {
18083                move_id: Choices::VISEGRIP,
18084                base_power: 55.0,
18085                category: MoveCategory::Physical,
18086                move_type: PokemonType::NORMAL,
18087                flags: Flags {
18088                    contact: true,
18089                    protect: true,
18090                    ..Default::default()
18091                },
18092                ..Default::default()
18093            },
18094        );
18095        moves.insert(
18096            Choices::VITALTHROW,
18097            Choice {
18098                move_id: Choices::VITALTHROW,
18099                base_power: 70.0,
18100                category: MoveCategory::Physical,
18101                priority: -1,
18102                move_type: PokemonType::FIGHTING,
18103                flags: Flags {
18104                    contact: true,
18105                    protect: true,
18106                    ..Default::default()
18107                },
18108                ..Default::default()
18109            },
18110        );
18111        moves.insert(
18112            Choices::VOLTSWITCH,
18113            Choice {
18114                move_id: Choices::VOLTSWITCH,
18115                base_power: 70.0,
18116                category: MoveCategory::Special,
18117                move_type: PokemonType::ELECTRIC,
18118                flags: Flags {
18119                    protect: true,
18120                    pivot: true,
18121                    ..Default::default()
18122                },
18123                ..Default::default()
18124            },
18125        );
18126        moves.insert(
18127            Choices::VOLTTACKLE,
18128            Choice {
18129                move_id: Choices::VOLTTACKLE,
18130                base_power: 120.0,
18131                category: MoveCategory::Physical,
18132                move_type: PokemonType::ELECTRIC,
18133                flags: Flags {
18134                    contact: true,
18135                    protect: true,
18136                    ..Default::default()
18137                },
18138                secondaries: Some(vec![Secondary {
18139                    chance: 10.0,
18140                    target: MoveTarget::Opponent,
18141                    effect: Effect::Status(PokemonStatus::PARALYZE),
18142                }]),
18143                recoil: Some(0.33),
18144                ..Default::default()
18145            },
18146        );
18147        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18148            moves.insert(
18149                Choices::WAKEUPSLAP,
18150                Choice {
18151                    move_id: Choices::WAKEUPSLAP,
18152                    base_power: 60.0,
18153                    category: MoveCategory::Physical,
18154                    move_type: PokemonType::FIGHTING,
18155                    flags: Flags {
18156                        contact: true,
18157                            protect: true,
18158                        ..Default::default()
18159                    },
18160                    ..Default::default()
18161                },
18162            );
18163        } else {
18164            moves.insert(
18165                Choices::WAKEUPSLAP,
18166                Choice {
18167                    move_id: Choices::WAKEUPSLAP,
18168                    base_power: 70.0,
18169                    category: MoveCategory::Physical,
18170                    move_type: PokemonType::FIGHTING,
18171                    flags: Flags {
18172                        contact: true,
18173                            protect: true,
18174                        ..Default::default()
18175                    },
18176                    ..Default::default()
18177                },
18178            );
18179        }
18180        moves.insert(
18181            Choices::WATERFALL,
18182            Choice {
18183                move_id: Choices::WATERFALL,
18184                base_power: 80.0,
18185                category: MoveCategory::Physical,
18186                move_type: PokemonType::WATER,
18187                flags: Flags {
18188                    contact: true,
18189                    protect: true,
18190                    ..Default::default()
18191                },
18192                secondaries: Some(vec![Secondary {
18193                    chance: 20.0,
18194                    target: MoveTarget::Opponent,
18195                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18196                }]),
18197                ..Default::default()
18198            },
18199        );
18200        moves.insert(
18201            Choices::WATERGUN,
18202            Choice {
18203                move_id: Choices::WATERGUN,
18204                base_power: 40.0,
18205                category: MoveCategory::Special,
18206                move_type: PokemonType::WATER,
18207                flags: Flags {
18208                    protect: true,
18209                    ..Default::default()
18210                },
18211                ..Default::default()
18212            },
18213        );
18214        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18215            moves.insert(
18216                Choices::WATERPLEDGE,
18217                Choice {
18218                    move_id: Choices::WATERPLEDGE,
18219                    base_power: 50.0,
18220                    category: MoveCategory::Special,
18221                    move_type: PokemonType::WATER,
18222                    flags: Flags {
18223                                protect: true,
18224                        ..Default::default()
18225                    },
18226                    ..Default::default()
18227                },
18228            );
18229        } else {
18230            moves.insert(
18231                Choices::WATERPLEDGE,
18232                Choice {
18233                    move_id: Choices::WATERPLEDGE,
18234                    base_power: 80.0,
18235                    category: MoveCategory::Special,
18236                    move_type: PokemonType::WATER,
18237                    flags: Flags {
18238                                protect: true,
18239                        ..Default::default()
18240                    },
18241                    ..Default::default()
18242                },
18243            );
18244        }
18245        moves.insert(
18246            Choices::WATERPULSE,
18247            Choice {
18248                move_id: Choices::WATERPULSE,
18249                base_power: 60.0,
18250                category: MoveCategory::Special,
18251                move_type: PokemonType::WATER,
18252                flags: Flags {
18253                    protect: true,
18254                    pulse: true,
18255                    ..Default::default()
18256                },
18257                secondaries: Some(vec![Secondary {
18258                    chance: 20.0,
18259                    target: MoveTarget::Opponent,
18260                    effect: Effect::VolatileStatus(PokemonVolatileStatus::CONFUSION),
18261                }]),
18262                ..Default::default()
18263            },
18264        );
18265
18266        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") || cfg!(feature = "gen6") {
18267            moves.insert(
18268                Choices::WATERSHURIKEN,
18269                Choice {
18270                    move_id: Choices::WATERSHURIKEN,
18271                    base_power: 15.0,
18272                    category: MoveCategory::Physical,
18273                    priority: 1,
18274                    move_type: PokemonType::WATER,
18275                    flags: Flags {
18276                            protect: true,
18277                        ..Default::default()
18278                    },
18279                    ..Default::default()
18280                },
18281            );
18282        } else {
18283            moves.insert(
18284                Choices::WATERSHURIKEN,
18285                Choice {
18286                    move_id: Choices::WATERSHURIKEN,
18287                    base_power: 15.0,
18288                    category: MoveCategory::Special,
18289                    priority: 1,
18290                    move_type: PokemonType::WATER,
18291                    flags: Flags {
18292                            protect: true,
18293                        ..Default::default()
18294                    },
18295                    ..Default::default()
18296                },
18297            );
18298        }
18299
18300        moves.insert(
18301            Choices::WATERSPORT,
18302            Choice {
18303                move_id: Choices::WATERSPORT,
18304                move_type: PokemonType::WATER,
18305                flags: Flags {
18306                    ..Default::default()
18307                },
18308                ..Default::default()
18309            },
18310        );
18311        moves.insert(
18312            Choices::WATERSPOUT,
18313            Choice {
18314                move_id: Choices::WATERSPOUT,
18315                base_power: 150.0,
18316                category: MoveCategory::Special,
18317                move_type: PokemonType::WATER,
18318                flags: Flags {
18319                    protect: true,
18320                    ..Default::default()
18321                },
18322                ..Default::default()
18323            },
18324        );
18325        moves.insert(
18326            Choices::WAVECRASH,
18327            Choice {
18328                move_id: Choices::WAVECRASH,
18329                base_power: 120.0,
18330                category: MoveCategory::Physical,
18331                move_type: PokemonType::WATER,
18332                flags: Flags {
18333                    contact: true,
18334                    protect: true,
18335                    ..Default::default()
18336                },
18337                recoil: Some(0.33),
18338                ..Default::default()
18339            },
18340        );
18341        moves.insert(
18342            Choices::WEATHERBALL,
18343            Choice {
18344                move_id: Choices::WEATHERBALL,
18345                base_power: 50.0,
18346                category: MoveCategory::Special,
18347                move_type: PokemonType::NORMAL,
18348                flags: Flags {
18349                    bullet: true,
18350                    protect: true,
18351                    ..Default::default()
18352                },
18353                ..Default::default()
18354            },
18355        );
18356        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
18357            moves.insert(
18358                Choices::WHIRLPOOL,
18359                Choice {
18360                    move_id: Choices::WHIRLPOOL,
18361                    accuracy: 70.0,
18362                    base_power: 15.0,
18363                    category: MoveCategory::Special,
18364                    move_type: PokemonType::WATER,
18365                    flags: Flags {
18366                            protect: true,
18367                        ..Default::default()
18368                    },
18369                    volatile_status: Some(VolatileStatus {
18370                        target: MoveTarget::Opponent,
18371                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18372                    }),
18373                    ..Default::default()
18374                },
18375            );
18376        } else {
18377            moves.insert(
18378                Choices::WHIRLPOOL,
18379                Choice {
18380                    move_id: Choices::WHIRLPOOL,
18381                    accuracy: 85.0,
18382                    base_power: 35.0,
18383                    category: MoveCategory::Special,
18384                    move_type: PokemonType::WATER,
18385                    flags: Flags {
18386                            protect: true,
18387                        ..Default::default()
18388                    },
18389                    volatile_status: Some(VolatileStatus {
18390                        target: MoveTarget::Opponent,
18391                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18392                    }),
18393                    ..Default::default()
18394                },
18395            );
18396        }
18397        moves.insert(
18398            Choices::WHIRLWIND,
18399            Choice {
18400                move_id: Choices::WHIRLWIND,
18401                priority: -6,
18402                move_type: PokemonType::NORMAL,
18403                flags: Flags {
18404                    drag: true,
18405                    reflectable: true,
18406                    wind: true,
18407                    ..Default::default()
18408                },
18409                ..Default::default()
18410            },
18411        );
18412
18413        if cfg!(feature = "gen9") {
18414            moves.insert(
18415                Choices::WICKEDBLOW,
18416                Choice {
18417                    move_id: Choices::WICKEDBLOW,
18418                    base_power: 75.0,
18419                    category: MoveCategory::Physical,
18420                    move_type: PokemonType::DARK,
18421                    flags: Flags {
18422                        contact: true,
18423                            protect: true,
18424                        punch: true,
18425                        ..Default::default()
18426                    },
18427                    ..Default::default()
18428                },
18429            );
18430        } else {
18431            moves.insert(
18432                Choices::WICKEDBLOW,
18433                Choice {
18434                    move_id: Choices::WICKEDBLOW,
18435                    base_power: 80.0,
18436                    category: MoveCategory::Physical,
18437                    move_type: PokemonType::DARK,
18438                    flags: Flags {
18439                        contact: true,
18440                            protect: true,
18441                        punch: true,
18442                        ..Default::default()
18443                    },
18444                    ..Default::default()
18445                },
18446            );
18447        }
18448
18449        moves.insert(
18450            Choices::WICKEDTORQUE,
18451            Choice {
18452                move_id: Choices::WICKEDTORQUE,
18453                base_power: 80.0,
18454                category: MoveCategory::Physical,
18455                move_type: PokemonType::DARK,
18456                flags: Flags {
18457                    protect: true,
18458                    ..Default::default()
18459                },
18460                secondaries: Some(vec![Secondary {
18461                    chance: 10.0,
18462                    target: MoveTarget::Opponent,
18463                    effect: Effect::Status(PokemonStatus::SLEEP),
18464                }]),
18465                ..Default::default()
18466            },
18467        );
18468        moves.insert(
18469            Choices::WIDEGUARD,
18470            Choice {
18471                move_id: Choices::WIDEGUARD,
18472                priority: 3,
18473                target: MoveTarget::User,
18474                move_type: PokemonType::ROCK,
18475                flags: Flags {
18476                    ..Default::default()
18477                },
18478                side_condition: Some(SideCondition {
18479                    target: MoveTarget::User,
18480                    condition: PokemonSideCondition::WideGuard,
18481                }),
18482                ..Default::default()
18483            },
18484        );
18485        moves.insert(
18486            Choices::WILDBOLTSTORM,
18487            Choice {
18488                move_id: Choices::WILDBOLTSTORM,
18489                accuracy: 80.0,
18490                base_power: 100.0,
18491                category: MoveCategory::Special,
18492                move_type: PokemonType::ELECTRIC,
18493                flags: Flags {
18494                    protect: true,
18495                    wind: true,
18496                    ..Default::default()
18497                },
18498                secondaries: Some(vec![Secondary {
18499                    chance: 20.0,
18500                    target: MoveTarget::Opponent,
18501                    effect: Effect::Status(PokemonStatus::PARALYZE),
18502                }]),
18503                ..Default::default()
18504            },
18505        );
18506        moves.insert(
18507            Choices::WILDCHARGE,
18508            Choice {
18509                move_id: Choices::WILDCHARGE,
18510                base_power: 90.0,
18511                category: MoveCategory::Physical,
18512                move_type: PokemonType::ELECTRIC,
18513                flags: Flags {
18514                    contact: true,
18515                    protect: true,
18516                    ..Default::default()
18517                },
18518                recoil: Some(0.25),
18519                ..Default::default()
18520            },
18521        );
18522        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") || cfg!(feature = "gen5") {
18523            moves.insert(
18524                Choices::WILLOWISP,
18525                Choice {
18526                    move_id: Choices::WILLOWISP,
18527                    accuracy: 75.0,
18528                    status: Some(Status {
18529                        target: MoveTarget::Opponent,
18530                        status: PokemonStatus::BURN,
18531                    }),
18532                    move_type: PokemonType::FIRE,
18533                    flags: Flags {
18534                            protect: true,
18535                        reflectable: true,
18536                        ..Default::default()
18537                    },
18538                    ..Default::default()
18539                },
18540            );
18541        } else {
18542            moves.insert(
18543                Choices::WILLOWISP,
18544                Choice {
18545                    move_id: Choices::WILLOWISP,
18546                    accuracy: 85.0,
18547                    status: Some(Status {
18548                        target: MoveTarget::Opponent,
18549                        status: PokemonStatus::BURN,
18550                    }),
18551                    move_type: PokemonType::FIRE,
18552                    flags: Flags {
18553                            protect: true,
18554                        reflectable: true,
18555                        ..Default::default()
18556                    },
18557                    ..Default::default()
18558                },
18559            );
18560        }
18561        if cfg!(feature = "gen1") {
18562            moves.insert(
18563                Choices::WINGATTACK,
18564                Choice {
18565                    move_id: Choices::WINGATTACK,
18566                    base_power: 35.0,
18567                    category: MoveCategory::Physical,
18568                    move_type: PokemonType::FLYING,
18569                    flags: Flags {
18570                        contact: true,
18571                        protect: true,
18572                        ..Default::default()
18573                    },
18574                    ..Default::default()
18575                },
18576            );
18577        } else {
18578            moves.insert(
18579                Choices::WINGATTACK,
18580                Choice {
18581                    move_id: Choices::WINGATTACK,
18582                    base_power: 60.0,
18583                    category: MoveCategory::Physical,
18584                    move_type: PokemonType::FLYING,
18585                    flags: Flags {
18586                        contact: true,
18587                        protect: true,
18588                        ..Default::default()
18589                    },
18590                    ..Default::default()
18591                },
18592            );
18593        }
18594        moves.insert(
18595            Choices::WISH,
18596            Choice {
18597                move_id: Choices::WISH,
18598                target: MoveTarget::User,
18599                move_type: PokemonType::NORMAL,
18600                flags: Flags {
18601                    heal: true,
18602                    ..Default::default()
18603                },
18604                ..Default::default()
18605            },
18606        );
18607        moves.insert(
18608            Choices::WITHDRAW,
18609            Choice {
18610                move_id: Choices::WITHDRAW,
18611                target: MoveTarget::User,
18612                move_type: PokemonType::WATER,
18613                flags: Flags {
18614                    ..Default::default()
18615                },
18616                boost: Some(Boost {
18617                    target: MoveTarget::User,
18618                    boosts: StatBoosts {
18619                        attack: 0,
18620                        defense: 1,
18621                        special_attack: 0,
18622                        special_defense: 0,
18623                        speed: 0,
18624                        accuracy: 0,
18625                    },
18626                }),
18627                ..Default::default()
18628            },
18629        );
18630        moves.insert(
18631            Choices::WONDERROOM,
18632            Choice {
18633                move_id: Choices::WONDERROOM,
18634                move_type: PokemonType::PSYCHIC,
18635                flags: Flags {
18636                    ..Default::default()
18637                },
18638                ..Default::default()
18639            },
18640        );
18641        moves.insert(
18642            Choices::WOODHAMMER,
18643            Choice {
18644                move_id: Choices::WOODHAMMER,
18645                base_power: 120.0,
18646                category: MoveCategory::Physical,
18647                move_type: PokemonType::GRASS,
18648                flags: Flags {
18649                    contact: true,
18650                    protect: true,
18651                    ..Default::default()
18652                },
18653                recoil: Some(0.33),
18654                ..Default::default()
18655            },
18656        );
18657        moves.insert(
18658            Choices::WORKUP,
18659            Choice {
18660                move_id: Choices::WORKUP,
18661                target: MoveTarget::User,
18662                move_type: PokemonType::NORMAL,
18663                flags: Flags {
18664                    ..Default::default()
18665                },
18666                boost: Some(Boost {
18667                    target: MoveTarget::User,
18668                    boosts: StatBoosts {
18669                        attack: 1,
18670                        defense: 0,
18671                        special_attack: 1,
18672                        special_defense: 0,
18673                        speed: 0,
18674                        accuracy: 0,
18675                    },
18676                }),
18677                ..Default::default()
18678            },
18679        );
18680        moves.insert(
18681            Choices::WORRYSEED,
18682            Choice {
18683                move_id: Choices::WORRYSEED,
18684                move_type: PokemonType::GRASS,
18685                flags: Flags {
18686                    protect: true,
18687                    reflectable: true,
18688                    ..Default::default()
18689                },
18690                ..Default::default()
18691            },
18692        );
18693        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") || cfg!(feature = "gen4") {
18694            moves.insert(
18695                Choices::WRAP,
18696                Choice {
18697                    move_id: Choices::WRAP,
18698                    accuracy: 85.0,
18699                    base_power: 15.0,
18700                    category: MoveCategory::Physical,
18701                    move_type: PokemonType::NORMAL,
18702                    flags: Flags {
18703                        contact: true,
18704                        protect: true,
18705                        ..Default::default()
18706                    },
18707                    volatile_status: Some(VolatileStatus {
18708                        target: MoveTarget::Opponent,
18709                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18710                    }),
18711                    ..Default::default()
18712                },
18713            );
18714        } else {
18715            moves.insert(
18716                Choices::WRAP,
18717                Choice {
18718                    move_id: Choices::WRAP,
18719                    accuracy: 90.0,
18720                    base_power: 15.0,
18721                    category: MoveCategory::Physical,
18722                    move_type: PokemonType::NORMAL,
18723                    flags: Flags {
18724                        contact: true,
18725                        protect: true,
18726                        ..Default::default()
18727                    },
18728                    volatile_status: Some(VolatileStatus {
18729                        target: MoveTarget::Opponent,
18730                        volatile_status: PokemonVolatileStatus::PARTIALLYTRAPPED,
18731                    }),
18732                    ..Default::default()
18733                },
18734            );
18735        }
18736        moves.insert(
18737            Choices::WRINGOUT,
18738            Choice {
18739                move_id: Choices::WRINGOUT,
18740                category: MoveCategory::Special,
18741                move_type: PokemonType::NORMAL,
18742                flags: Flags {
18743                    contact: true,
18744                    protect: true,
18745                    ..Default::default()
18746                },
18747                ..Default::default()
18748            },
18749        );
18750        moves.insert(
18751            Choices::XSCISSOR,
18752            Choice {
18753                move_id: Choices::XSCISSOR,
18754                base_power: 80.0,
18755                category: MoveCategory::Physical,
18756                move_type: PokemonType::BUG,
18757                flags: Flags {
18758                    contact: true,
18759                    protect: true,
18760                    slicing: true,
18761                    ..Default::default()
18762                },
18763                ..Default::default()
18764            },
18765        );
18766        moves.insert(
18767            Choices::YAWN,
18768            Choice {
18769                move_id: Choices::YAWN,
18770                move_type: PokemonType::NORMAL,
18771                flags: Flags {
18772                    protect: true,
18773                    reflectable: true,
18774                    ..Default::default()
18775                },
18776                volatile_status: Some(VolatileStatus {
18777                    target: MoveTarget::Opponent,
18778                    volatile_status: PokemonVolatileStatus::YAWN,
18779                }),
18780                ..Default::default()
18781            },
18782        );
18783        if cfg!(feature = "gen1") || cfg!(feature = "gen2") || cfg!(feature = "gen3") {
18784            moves.insert(
18785                Choices::ZAPCANNON,
18786                Choice {
18787                    move_id: Choices::ZAPCANNON,
18788                    accuracy: 50.0,
18789                    base_power: 100.0,
18790                    category: MoveCategory::Special,
18791                    move_type: PokemonType::ELECTRIC,
18792                    flags: Flags {
18793                        bullet: true,
18794                        protect: true,
18795                        ..Default::default()
18796                    },
18797                    secondaries: Some(vec![Secondary {
18798                        chance: 100.0,
18799                        target: MoveTarget::Opponent,
18800                        effect: Effect::Status(PokemonStatus::PARALYZE),
18801                    }]),
18802                    ..Default::default()
18803                },
18804            );
18805        } else {
18806            moves.insert(
18807                Choices::ZAPCANNON,
18808                Choice {
18809                    move_id: Choices::ZAPCANNON,
18810                    accuracy: 50.0,
18811                    base_power: 120.0,
18812                    category: MoveCategory::Special,
18813                    move_type: PokemonType::ELECTRIC,
18814                    flags: Flags {
18815                        bullet: true,
18816                        protect: true,
18817                        ..Default::default()
18818                    },
18819                    secondaries: Some(vec![Secondary {
18820                        chance: 100.0,
18821                        target: MoveTarget::Opponent,
18822                        effect: Effect::Status(PokemonStatus::PARALYZE),
18823                    }]),
18824                    ..Default::default()
18825                },
18826            );
18827        }
18828        moves.insert(
18829            Choices::ZENHEADBUTT,
18830            Choice {
18831                move_id: Choices::ZENHEADBUTT,
18832                accuracy: 90.0,
18833                base_power: 80.0,
18834                category: MoveCategory::Physical,
18835                move_type: PokemonType::PSYCHIC,
18836                flags: Flags {
18837                    contact: true,
18838                    protect: true,
18839                    ..Default::default()
18840                },
18841                secondaries: Some(vec![Secondary {
18842                    chance: 20.0,
18843                    target: MoveTarget::Opponent,
18844                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18845                }]),
18846                ..Default::default()
18847            },
18848        );
18849        moves.insert(
18850            Choices::ZINGZAP,
18851            Choice {
18852                move_id: Choices::ZINGZAP,
18853                base_power: 80.0,
18854                category: MoveCategory::Physical,
18855                move_type: PokemonType::ELECTRIC,
18856                flags: Flags {
18857                    contact: true,
18858                    protect: true,
18859                    ..Default::default()
18860                },
18861                secondaries: Some(vec![Secondary {
18862                    chance: 30.0,
18863                    target: MoveTarget::Opponent,
18864                    effect: Effect::VolatileStatus(PokemonVolatileStatus::FLINCH),
18865                }]),
18866                ..Default::default()
18867            },
18868        );
18869        moves.insert(
18870            Choices::ZIPPYZAP,
18871            Choice {
18872                move_id: Choices::ZIPPYZAP,
18873                base_power: 80.0,
18874                category: MoveCategory::Physical,
18875                priority: 2,
18876                move_type: PokemonType::ELECTRIC,
18877                flags: Flags {
18878                    contact: true,
18879                    protect: true,
18880                    ..Default::default()
18881                },
18882                secondaries: Some(vec![Secondary {
18883                    chance: 100.0,
18884                    target: MoveTarget::User,
18885                    effect: Effect::Boost(StatBoosts {
18886                        attack: 0,
18887                        defense: 0,
18888                        special_attack: 0,
18889                        special_defense: 0,
18890                        speed: 0,
18891                        accuracy: 0,
18892                    }),
18893                }]),
18894                ..Default::default()
18895            },
18896        );
18897
18898        #[cfg(any(feature = "gen1", feature = "gen2", feature = "gen3"))]
18899        undo_physical_special_split(&mut moves);
18900
18901        moves
18902    };
18903}
18904
18905#[derive(Debug, PartialEq, Clone, Copy)]
18906pub enum MoveCategory {
18907    Physical,
18908    Special,
18909    Status,
18910    Switch,
18911}
18912
18913#[derive(PartialEq, Debug, Clone)]
18914pub enum MoveTarget {
18915    User,
18916    Opponent,
18917}
18918
18919#[derive(Debug, Clone)]
18920pub struct VolatileStatus {
18921    pub target: MoveTarget,
18922    pub volatile_status: PokemonVolatileStatus,
18923}
18924
18925#[derive(Debug, Clone)]
18926pub struct SideCondition {
18927    pub target: MoveTarget,
18928    pub condition: PokemonSideCondition,
18929}
18930
18931#[derive(Debug, Clone)]
18932pub struct Boost {
18933    pub target: MoveTarget,
18934    pub boosts: StatBoosts,
18935}
18936
18937#[derive(Debug, Clone)]
18938pub struct Heal {
18939    pub target: MoveTarget,
18940    pub amount: f32,
18941}
18942
18943#[derive(Debug, Clone)]
18944pub struct Status {
18945    pub target: MoveTarget,
18946    pub status: PokemonStatus,
18947}
18948
18949#[derive(Debug, Clone, PartialEq)]
18950pub struct StatBoosts {
18951    pub attack: i8,
18952    pub defense: i8,
18953    pub special_attack: i8,
18954    pub special_defense: i8,
18955    pub speed: i8,
18956    pub accuracy: i8,
18957}
18958
18959impl Default for StatBoosts {
18960    fn default() -> StatBoosts {
18961        StatBoosts {
18962            attack: 0,
18963            defense: 0,
18964            special_attack: 0,
18965            special_defense: 0,
18966            speed: 0,
18967            accuracy: 0,
18968        }
18969    }
18970}
18971
18972impl StatBoosts {
18973    pub fn get_as_pokemon_boostable(&self) -> [(PokemonBoostableStat, i8); 6] {
18974        [
18975            (PokemonBoostableStat::Attack, self.attack),
18976            (PokemonBoostableStat::Defense, self.defense),
18977            (PokemonBoostableStat::SpecialAttack, self.special_attack),
18978            (PokemonBoostableStat::SpecialDefense, self.special_defense),
18979            (PokemonBoostableStat::Speed, self.speed),
18980            (PokemonBoostableStat::Accuracy, self.accuracy),
18981        ]
18982    }
18983}
18984
18985#[derive(Debug)]
18986pub struct Myself {
18987    pub volatile_status: Option<VolatileStatus>,
18988    pub boosts: StatBoosts,
18989}
18990
18991#[derive(Debug, Clone)]
18992pub struct Flags {
18993    pub bite: bool,
18994    pub bullet: bool,
18995    pub charge: bool,
18996    pub contact: bool,
18997    pub drag: bool,
18998    pub heal: bool,
18999    pub powder: bool,
19000    pub protect: bool,
19001    pub pulse: bool,
19002    pub punch: bool,
19003    pub recharge: bool,
19004    pub reflectable: bool,
19005    pub slicing: bool,
19006    pub sound: bool,
19007    pub pivot: bool,
19008    pub wind: bool,
19009}
19010
19011impl Default for Flags {
19012    fn default() -> Flags {
19013        Flags {
19014            bite: false,
19015            bullet: false,
19016            charge: false,
19017            contact: false,
19018            drag: false,
19019            heal: false,
19020            powder: false,
19021            protect: false,
19022            pulse: false,
19023            punch: false,
19024            recharge: false,
19025            reflectable: false,
19026            slicing: false,
19027            sound: false,
19028            pivot: false,
19029            wind: false,
19030        }
19031    }
19032}
19033
19034impl Flags {
19035    pub fn clear_all(&mut self) {
19036        self.bite = false;
19037        self.bullet = false;
19038        self.charge = false;
19039        self.contact = false;
19040        self.drag = false;
19041        self.heal = false;
19042        self.powder = false;
19043        self.protect = false;
19044        self.pulse = false;
19045        self.punch = false;
19046        self.recharge = false;
19047        self.reflectable = false;
19048        self.slicing = false;
19049        self.sound = false;
19050        self.pivot = false;
19051        self.wind = false;
19052    }
19053}
19054
19055#[derive(Debug, Clone)]
19056pub struct Secondary {
19057    pub chance: f32,
19058    pub target: MoveTarget,
19059    pub effect: Effect,
19060}
19061
19062#[derive(Debug, Clone, PartialEq)]
19063pub enum Effect {
19064    VolatileStatus(PokemonVolatileStatus),
19065    Boost(StatBoosts),
19066    Status(PokemonStatus),
19067    Heal(f32),
19068    RemoveItem,
19069}
19070
19071#[derive(PartialEq)]
19072pub enum MultiHitMove {
19073    None,
19074    DoubleHit,
19075    TripleHit,
19076    TwoToFiveHits,
19077    PopulationBomb,
19078    TripleAxel,
19079}
19080
19081#[derive(PartialEq)]
19082pub enum MultiAccuracyMove {
19083    None,
19084    TripleHit,
19085    TenHits,
19086}
19087
19088define_enum_with_from_str! {
19089    #[repr(u16)]
19090    #[derive(Eq, PartialEq, Debug, Hash, Copy, Clone)]
19091    Choices {
19092        NONE,
19093        ABSORB,
19094        ACCELEROCK,
19095        ACID,
19096        ACIDARMOR,
19097        ACIDSPRAY,
19098        ACROBATICS,
19099        ACUPRESSURE,
19100        AERIALACE,
19101        AEROBLAST,
19102        AFTERYOU,
19103        AGILITY,
19104        AIRCUTTER,
19105        AIRSLASH,
19106        ALLURINGVOICE,
19107        ALLYSWITCH,
19108        AMNESIA,
19109        ANCHORSHOT,
19110        ANCIENTPOWER,
19111        APPLEACID,
19112        AQUACUTTER,
19113        AQUAJET,
19114        AQUARING,
19115        AQUASTEP,
19116        AQUATAIL,
19117        ARMORCANNON,
19118        ARMTHRUST,
19119        AROMATHERAPY,
19120        AROMATICMIST,
19121        ASSIST,
19122        ASSURANCE,
19123        ASTONISH,
19124        ASTRALBARRAGE,
19125        ATTACKORDER,
19126        ATTRACT,
19127        AURASPHERE,
19128        AURAWHEEL,
19129        AURORABEAM,
19130        AURORAVEIL,
19131        AUTOTOMIZE,
19132        AVALANCHE,
19133        AXEKICK,
19134        BABYDOLLEYES,
19135        BADDYBAD,
19136        BANEFULBUNKER,
19137        BARBBARRAGE,
19138        BARRAGE,
19139        BARRIER,
19140        BATONPASS,
19141        BEAKBLAST,
19142        BEATUP,
19143        BEHEMOTHBASH,
19144        BEHEMOTHBLADE,
19145        BELCH,
19146        BELLYDRUM,
19147        BESTOW,
19148        BIDE,
19149        BIND,
19150        BITE,
19151        BITTERBLADE,
19152        BITTERMALICE,
19153        BLASTBURN,
19154        BLAZEKICK,
19155        BLAZINGTORQUE,
19156        BLEAKWINDSTORM,
19157        BLIZZARD,
19158        BLOCK,
19159        BLOODMOON,
19160        BLUEFLARE,
19161        BODYPRESS,
19162        BODYSLAM,
19163        BOLTBEAK,
19164        BOLTSTRIKE,
19165        BONECLUB,
19166        BONEMERANG,
19167        BONERUSH,
19168        BOOMBURST,
19169        BOUNCE,
19170        BOUNCYBUBBLE,
19171        BRANCHPOKE,
19172        BRAVEBIRD,
19173        BREAKINGSWIPE,
19174        BRICKBREAK,
19175        BRINE,
19176        BRUTALSWING,
19177        BUBBLE,
19178        BUBBLEBEAM,
19179        BUGBITE,
19180        BUGBUZZ,
19181        BULKUP,
19182        BULLDOZE,
19183        BULLETPUNCH,
19184        BULLETSEED,
19185        BURNINGBULWARK,
19186        BURNINGJEALOUSY,
19187        BURNUP,
19188        BUZZYBUZZ,
19189        CALMMIND,
19190        CAMOUFLAGE,
19191        CAPTIVATE,
19192        CEASELESSEDGE,
19193        CELEBRATE,
19194        CHARGE,
19195        CHARGEBEAM,
19196        CHARM,
19197        CHATTER,
19198        CHILLINGWATER,
19199        CHILLYRECEPTION,
19200        CHIPAWAY,
19201        CHLOROBLAST,
19202        CIRCLETHROW,
19203        CLAMP,
19204        CLANGINGSCALES,
19205        CLANGOROUSSOUL,
19206        CLEARSMOG,
19207        CLOSECOMBAT,
19208        COACHING,
19209        COIL,
19210        COLLISIONCOURSE,
19211        COMBATTORQUE,
19212        COMETPUNCH,
19213        COMEUPPANCE,
19214        CONFIDE,
19215        CONFUSERAY,
19216        CONFUSION,
19217        CONSTRICT,
19218        CONVERSION,
19219        CONVERSION2,
19220        COPYCAT,
19221        COREENFORCER,
19222        CORROSIVEGAS,
19223        COSMICPOWER,
19224        COTTONGUARD,
19225        COTTONSPORE,
19226        COUNTER,
19227        COURTCHANGE,
19228        COVET,
19229        CRABHAMMER,
19230        CRAFTYSHIELD,
19231        CROSSCHOP,
19232        CROSSPOISON,
19233        CRUNCH,
19234        CRUSHCLAW,
19235        CRUSHGRIP,
19236        CURSE,
19237        CUT,
19238        DARKESTLARIAT,
19239        DARKPULSE,
19240        DARKVOID,
19241        DAZZLINGGLEAM,
19242        DECORATE,
19243        DEFENDORDER,
19244        DEFENSECURL,
19245        DEFOG,
19246        DESTINYBOND,
19247        DETECT,
19248        DIAMONDSTORM,
19249        DIG,
19250        DIRECLAW,
19251        DISABLE,
19252        DISARMINGVOICE,
19253        DISCHARGE,
19254        DIVE,
19255        DIZZYPUNCH,
19256        DOODLE,
19257        DOOMDESIRE,
19258        DOUBLEEDGE,
19259        DOUBLEHIT,
19260        DOUBLEIRONBASH,
19261        DOUBLEKICK,
19262        DOUBLESHOCK,
19263        DOUBLESLAP,
19264        DOUBLETEAM,
19265        DRACOMETEOR,
19266        DRAGONASCENT,
19267        DRAGONBREATH,
19268        DRAGONCHEER,
19269        DRAGONCLAW,
19270        DRAGONDANCE,
19271        DRAGONDARTS,
19272        DRAGONENERGY,
19273        DRAGONHAMMER,
19274        DRAGONPULSE,
19275        DRAGONRAGE,
19276        DRAGONRUSH,
19277        DRAGONTAIL,
19278        DRAININGKISS,
19279        DRAINPUNCH,
19280        DREAMEATER,
19281        DRILLPECK,
19282        DRILLRUN,
19283        DRUMBEATING,
19284        DUALCHOP,
19285        DUALWINGBEAT,
19286        DYNAMAXCANNON,
19287        DYNAMICPUNCH,
19288        EARTHPOWER,
19289        EARTHQUAKE,
19290        ECHOEDVOICE,
19291        EERIEIMPULSE,
19292        EERIESPELL,
19293        EGGBOMB,
19294        ELECTRICTERRAIN,
19295        ELECTRIFY,
19296        ELECTROBALL,
19297        ELECTRODRIFT,
19298        ELECTROSHOT,
19299        ELECTROWEB,
19300        EMBARGO,
19301        EMBER,
19302        ENCORE,
19303        ENDEAVOR,
19304        ENDURE,
19305        ENERGYBALL,
19306        ENTRAINMENT,
19307        ERUPTION,
19308        ESPERWING,
19309        ETERNABEAM,
19310        EXPANDINGFORCE,
19311        EXPLOSION,
19312        EXTRASENSORY,
19313        EXTREMESPEED,
19314        FACADE,
19315        FAIRYLOCK,
19316        FAIRYWIND,
19317        FAKEOUT,
19318        FAKETEARS,
19319        FALSESURRENDER,
19320        FALSESWIPE,
19321        FEATHERDANCE,
19322        FEINT,
19323        FEINTATTACK,
19324        FELLSTINGER,
19325        FICKLEBEAM,
19326        FIERYDANCE,
19327        FIERYWRATH,
19328        FILLETAWAY,
19329        FINALGAMBIT,
19330        FIREBLAST,
19331        FIREFANG,
19332        FIRELASH,
19333        FIREPLEDGE,
19334        FIREPUNCH,
19335        FIRESPIN,
19336        FIRSTIMPRESSION,
19337        FISHIOUSREND,
19338        FISSURE,
19339        FLAIL,
19340        FLAMEBURST,
19341        FLAMECHARGE,
19342        FLAMETHROWER,
19343        FLAMEWHEEL,
19344        FLAREBLITZ,
19345        FLASH,
19346        FLASHCANNON,
19347        FLATTER,
19348        FLEURCANNON,
19349        FLING,
19350        FLIPTURN,
19351        FLOATYFALL,
19352        FLORALHEALING,
19353        FLOWERSHIELD,
19354        FLOWERTRICK,
19355        FLY,
19356        FLYINGPRESS,
19357        FOCUSBLAST,
19358        FOCUSENERGY,
19359        FOCUSPUNCH,
19360        FOLLOWME,
19361        FORCEPALM,
19362        FORESIGHT,
19363        FORESTSCURSE,
19364        FOULPLAY,
19365        FREEZEDRY,
19366        FREEZESHOCK,
19367        FREEZINGGLARE,
19368        FREEZYFROST,
19369        FRENZYPLANT,
19370        FROSTBREATH,
19371        FRUSTRATION,
19372        FURYATTACK,
19373        FURYCUTTER,
19374        FURYSWIPES,
19375        FUSIONBOLT,
19376        FUSIONFLARE,
19377        FUTURESIGHT,
19378        GASTROACID,
19379        GEARGRIND,
19380        GEARUP,
19381        GEOMANCY,
19382        GIGADRAIN,
19383        GIGAIMPACT,
19384        GIGATONHAMMER,
19385        GLACIALLANCE,
19386        GLACIATE,
19387        GLAIVERUSH,
19388        GLARE,
19389        GLITZYGLOW,
19390        GRASSKNOT,
19391        GRASSPLEDGE,
19392        GRASSWHISTLE,
19393        GRASSYGLIDE,
19394        GRASSYTERRAIN,
19395        GRAVAPPLE,
19396        GRAVITY,
19397        GROWL,
19398        GROWTH,
19399        GRUDGE,
19400        GUARDSPLIT,
19401        GUARDSWAP,
19402        GUILLOTINE,
19403        GUNKSHOT,
19404        GUST,
19405        GYROBALL,
19406        HAIL,
19407        HAMMERARM,
19408        HAPPYHOUR,
19409        HARDEN,
19410        HARDPRESS,
19411        HAZE,
19412        HEADBUTT,
19413        HEADCHARGE,
19414        HEADLONGRUSH,
19415        HEADSMASH,
19416        HEALBELL,
19417        HEALBLOCK,
19418        HEALINGWISH,
19419        HEALORDER,
19420        HEALPULSE,
19421        HEARTSTAMP,
19422        HEARTSWAP,
19423        HEATCRASH,
19424        HEATWAVE,
19425        HEAVYSLAM,
19426        HELPINGHAND,
19427        HEX,
19428        HIDDENPOWER,
19429        HIDDENPOWERBUG60,
19430        HIDDENPOWERBUG70,
19431        HIDDENPOWERDARK60,
19432        HIDDENPOWERDARK70,
19433        HIDDENPOWERDRAGON60,
19434        HIDDENPOWERDRAGON70,
19435        HIDDENPOWERELECTRIC60,
19436        HIDDENPOWERELECTRIC70,
19437        HIDDENPOWERFIGHTING60,
19438        HIDDENPOWERFIGHTING70,
19439        HIDDENPOWERFIRE60,
19440        HIDDENPOWERFIRE70,
19441        HIDDENPOWERFLYING60,
19442        HIDDENPOWERFLYING70,
19443        HIDDENPOWERGHOST60,
19444        HIDDENPOWERGHOST70,
19445        HIDDENPOWERGRASS60,
19446        HIDDENPOWERGRASS70,
19447        HIDDENPOWERGROUND60,
19448        HIDDENPOWERGROUND70,
19449        HIDDENPOWERICE60,
19450        HIDDENPOWERICE70,
19451        HIDDENPOWERPOISON60,
19452        HIDDENPOWERPOISON70,
19453        HIDDENPOWERPSYCHIC60,
19454        HIDDENPOWERPSYCHIC70,
19455        HIDDENPOWERROCK60,
19456        HIDDENPOWERROCK70,
19457        HIDDENPOWERSTEEL60,
19458        HIDDENPOWERSTEEL70,
19459        HIDDENPOWERWATER60,
19460        HIDDENPOWERWATER70,
19461        HIGHHORSEPOWER,
19462        HIGHJUMPKICK,
19463        HOLDBACK,
19464        HOLDHANDS,
19465        HONECLAWS,
19466        HORNATTACK,
19467        HORNDRILL,
19468        HORNLEECH,
19469        HOWL,
19470        HURRICANE,
19471        HYDROCANNON,
19472        HYDROPUMP,
19473        HYDROSTEAM,
19474        HYPERBEAM,
19475        HYPERDRILL,
19476        HYPERFANG,
19477        HYPERSPACEFURY,
19478        HYPERSPACEHOLE,
19479        HYPERVOICE,
19480        HYPNOSIS,
19481        ICEBALL,
19482        ICEBEAM,
19483        ICEBURN,
19484        ICEFANG,
19485        ICEHAMMER,
19486        ICEPUNCH,
19487        ICESHARD,
19488        ICESPINNER,
19489        ICICLECRASH,
19490        ICICLESPEAR,
19491        ICYWIND,
19492        IMPRISON,
19493        INCINERATE,
19494        INFERNALPARADE,
19495        INFERNO,
19496        INFESTATION,
19497        INGRAIN,
19498        INSTRUCT,
19499        IONDELUGE,
19500        IRONDEFENSE,
19501        IRONHEAD,
19502        IRONTAIL,
19503        IVYCUDGEL,
19504        JAWLOCK,
19505        JETPUNCH,
19506        JUDGMENT,
19507        JUMPKICK,
19508        JUNGLEHEALING,
19509        KARATECHOP,
19510        KINESIS,
19511        KINGSSHIELD,
19512        KNOCKOFF,
19513        KOWTOWCLEAVE,
19514        LANDSWRATH,
19515        LASERFOCUS,
19516        LASHOUT,
19517        LASTRESORT,
19518        LASTRESPECTS,
19519        LAVAPLUME,
19520        LEAFAGE,
19521        LEAFBLADE,
19522        LEAFSTORM,
19523        LEAFTORNADO,
19524        LEECHLIFE,
19525        LEECHSEED,
19526        LEER,
19527        LICK,
19528        LIFEDEW,
19529        LIGHTOFRUIN,
19530        LIGHTSCREEN,
19531        LIQUIDATION,
19532        LOCKON,
19533        LOVELYKISS,
19534        LOWKICK,
19535        LOWSWEEP,
19536        LUCKYCHANT,
19537        LUMINACRASH,
19538        LUNARBLESSING,
19539        LUNARDANCE,
19540        LUNGE,
19541        LUSTERPURGE,
19542        MACHPUNCH,
19543        MAGICALLEAF,
19544        MAGICALTORQUE,
19545        MAGICCOAT,
19546        MAGICPOWDER,
19547        MAGICROOM,
19548        MAGMASTORM,
19549        MAGNETBOMB,
19550        MAGNETICFLUX,
19551        MAGNETRISE,
19552        MAGNITUDE,
19553        MAKEITRAIN,
19554        MALIGNANTCHAIN,
19555        MATBLOCK,
19556        MATCHAGOTCHA,
19557        MEANLOOK,
19558        MEDITATE,
19559        MEFIRST,
19560        MEGADRAIN,
19561        MEGAHORN,
19562        MEGAKICK,
19563        MEGAPUNCH,
19564        MEMENTO,
19565        METALBURST,
19566        METALCLAW,
19567        METALSOUND,
19568        METEORASSAULT,
19569        METEORBEAM,
19570        METEORMASH,
19571        METRONOME,
19572        MIGHTYCLEAVE,
19573        MILKDRINK,
19574        MIMIC,
19575        MINDBLOWN,
19576        MINDREADER,
19577        MINIMIZE,
19578        MIRACLEEYE,
19579        MIRRORCOAT,
19580        MIRRORMOVE,
19581        MIRRORSHOT,
19582        MIST,
19583        MISTBALL,
19584        MISTYEXPLOSION,
19585        MISTYTERRAIN,
19586        MOONBLAST,
19587        MOONGEISTBEAM,
19588        MOONLIGHT,
19589        MORNINGSUN,
19590        MORTALSPIN,
19591        MOUNTAINGALE,
19592        MUDBOMB,
19593        MUDDYWATER,
19594        MUDSHOT,
19595        MUDSLAP,
19596        MUDSPORT,
19597        MULTIATTACK,
19598        MYSTICALFIRE,
19599        MYSTICALPOWER,
19600        NASTYPLOT,
19601        NATURALGIFT,
19602        NATUREPOWER,
19603        NATURESMADNESS,
19604        NEEDLEARM,
19605        NIGHTDAZE,
19606        NIGHTMARE,
19607        NIGHTSHADE,
19608        NIGHTSLASH,
19609        NOBLEROAR,
19610        NORETREAT,
19611        NOTHING,
19612        NOXIOUSTORQUE,
19613        NUZZLE,
19614        OBLIVIONWING,
19615        OBSTRUCT,
19616        OCTAZOOKA,
19617        OCTOLOCK,
19618        ODORSLEUTH,
19619        OMINOUSWIND,
19620        ORDERUP,
19621        ORIGINPULSE,
19622        OUTRAGE,
19623        OVERDRIVE,
19624        OVERHEAT,
19625        PAINSPLIT,
19626        PALEOWAVE,
19627        PARABOLICCHARGE,
19628        PARTINGSHOT,
19629        PAYBACK,
19630        PAYDAY,
19631        PECK,
19632        PERISHSONG,
19633        PETALBLIZZARD,
19634        PETALDANCE,
19635        PHANTOMFORCE,
19636        PHOTONGEYSER,
19637        PIKAPAPOW,
19638        PINMISSILE,
19639        PLASMAFISTS,
19640        PLAYNICE,
19641        PLAYROUGH,
19642        PLUCK,
19643        POISONFANG,
19644        POISONGAS,
19645        POISONJAB,
19646        POISONPOWDER,
19647        POISONSTING,
19648        POISONTAIL,
19649        POLLENPUFF,
19650        POLTERGEIST,
19651        POPULATIONBOMB,
19652        POUNCE,
19653        POUND,
19654        POWDER,
19655        POWDERSNOW,
19656        POWERGEM,
19657        POWERSHIFT,
19658        POWERSPLIT,
19659        POWERSWAP,
19660        POWERTRICK,
19661        POWERTRIP,
19662        POWERUPPUNCH,
19663        POWERWHIP,
19664        PRECIPICEBLADES,
19665        PRESENT,
19666        PRISMATICLASER,
19667        PROTECT,
19668        PSYBEAM,
19669        PSYBLADE,
19670        PSYCHIC,
19671        PSYCHICFANGS,
19672        PSYCHICNOISE,
19673        PSYCHICTERRAIN,
19674        PSYCHOBOOST,
19675        PSYCHOCUT,
19676        PSYCHOSHIFT,
19677        PSYCHUP,
19678        PSYSHIELDBASH,
19679        PSYSHOCK,
19680        PSYSTRIKE,
19681        PSYWAVE,
19682        PUNISHMENT,
19683        PURIFY,
19684        PURSUIT,
19685        PYROBALL,
19686        QUASH,
19687        QUICKATTACK,
19688        QUICKGUARD,
19689        QUIVERDANCE,
19690        RAGE,
19691        RAGEFIST,
19692        RAGEPOWDER,
19693        RAGINGBULL,
19694        RAGINGFURY,
19695        RAINDANCE,
19696        RAPIDSPIN,
19697        RAZORLEAF,
19698        RAZORSHELL,
19699        RAZORWIND,
19700        RECHARGE,
19701        RECOVER,
19702        RECYCLE,
19703        REFLECT,
19704        REFLECTTYPE,
19705        REFRESH,
19706        RELICSONG,
19707        REST,
19708        RETALIATE,
19709        RETURN,
19710        RETURN102,
19711        REVELATIONDANCE,
19712        REVENGE,
19713        REVERSAL,
19714        REVIVALBLESSING,
19715        RISINGVOLTAGE,
19716        ROAR,
19717        ROAROFTIME,
19718        ROCKBLAST,
19719        ROCKCLIMB,
19720        ROCKPOLISH,
19721        ROCKSLIDE,
19722        ROCKSMASH,
19723        ROCKTHROW,
19724        ROCKTOMB,
19725        ROCKWRECKER,
19726        ROLEPLAY,
19727        ROLLINGKICK,
19728        ROLLOUT,
19729        ROOST,
19730        ROTOTILLER,
19731        ROUND,
19732        RUINATION,
19733        SACREDFIRE,
19734        SACREDSWORD,
19735        SAFEGUARD,
19736        SALTCURE,
19737        SANDATTACK,
19738        SANDSEARSTORM,
19739        SANDSTORM,
19740        SANDTOMB,
19741        SAPPYSEED,
19742        SCALD,
19743        SCALESHOT,
19744        SCARYFACE,
19745        SCORCHINGSANDS,
19746        SCRATCH,
19747        SCREECH,
19748        SEARINGSHOT,
19749        SECRETPOWER,
19750        SECRETSWORD,
19751        SEEDBOMB,
19752        SEEDFLARE,
19753        SEISMICTOSS,
19754        SELFDESTRUCT,
19755        SHADOWBALL,
19756        SHADOWBONE,
19757        SHADOWCLAW,
19758        SHADOWFORCE,
19759        SHADOWPUNCH,
19760        SHADOWSNEAK,
19761        SHADOWSTRIKE,
19762        SHARPEN,
19763        SHEDTAIL,
19764        SHEERCOLD,
19765        SHELLSIDEARM,
19766        SHELLSMASH,
19767        SHELLTRAP,
19768        SHELTER,
19769        SHIFTGEAR,
19770        SHOCKWAVE,
19771        SHOREUP,
19772        SIGNALBEAM,
19773        SILKTRAP,
19774        SILVERWIND,
19775        SIMPLEBEAM,
19776        SING,
19777        SIZZLYSLIDE,
19778        SKETCH,
19779        SKILLSWAP,
19780        SKITTERSMACK,
19781        SKULLBASH,
19782        SKYATTACK,
19783        SKYDROP,
19784        SKYUPPERCUT,
19785        SLACKOFF,
19786        SLAM,
19787        SLASH,
19788        SLEEPPOWDER,
19789        SLEEPTALK,
19790        SLUDGE,
19791        SLUDGEBOMB,
19792        SLUDGEWAVE,
19793        SMACKDOWN,
19794        SMARTSTRIKE,
19795        SMELLINGSALTS,
19796        SMOG,
19797        SMOKESCREEN,
19798        SNAPTRAP,
19799        SNARL,
19800        SNATCH,
19801        SNIPESHOT,
19802        SNORE,
19803        SNOWSCAPE,
19804        SOAK,
19805        SOFTBOILED,
19806        SOLARBEAM,
19807        SOLARBLADE,
19808        SONICBOOM,
19809        SPACIALREND,
19810        SPARK,
19811        SPARKLINGARIA,
19812        SPARKLYSWIRL,
19813        SPECTRALTHIEF,
19814        SPEEDSWAP,
19815        SPICYEXTRACT,
19816        SPIDERWEB,
19817        SPIKECANNON,
19818        SPIKES,
19819        SPIKYSHIELD,
19820        SPINOUT,
19821        SPIRITBREAK,
19822        SPIRITSHACKLE,
19823        SPITE,
19824        SPITUP,
19825        SPLASH,
19826        SPLISHYSPLASH,
19827        SPORE,
19828        SPOTLIGHT,
19829        SPRINGTIDESTORM,
19830        STEALTHROCK,
19831        STEAMERUPTION,
19832        STEAMROLLER,
19833        STEELBEAM,
19834        STEELROLLER,
19835        STEELWING,
19836        STICKYWEB,
19837        STOCKPILE,
19838        STOMP,
19839        STOMPINGTANTRUM,
19840        STONEAXE,
19841        STONEEDGE,
19842        STOREDPOWER,
19843        STORMTHROW,
19844        STRANGESTEAM,
19845        STRENGTH,
19846        STRENGTHSAP,
19847        STRINGSHOT,
19848        STRUGGLE,
19849        STRUGGLEBUG,
19850        STUFFCHEEKS,
19851        STUNSPORE,
19852        SUBMISSION,
19853        SUBSTITUTE,
19854        SUCKERPUNCH,
19855        SUNNYDAY,
19856        SUNSTEELSTRIKE,
19857        SUPERCELLSLAM,
19858        SUPERFANG,
19859        SUPERPOWER,
19860        SUPERSONIC,
19861        SURF,
19862        SURGINGSTRIKES,
19863        SWAGGER,
19864        SWALLOW,
19865        SWEETKISS,
19866        SWEETSCENT,
19867        SWIFT,
19868        SWITCHEROO,
19869        SWORDSDANCE,
19870        SYNCHRONOISE,
19871        SYNTHESIS,
19872        SYRUPBOMB,
19873        TACHYONCUTTER,
19874        TACKLE,
19875        TAILGLOW,
19876        TAILSLAP,
19877        TAILWHIP,
19878        TAILWIND,
19879        TAKEDOWN,
19880        TAKEHEART,
19881        TARSHOT,
19882        TAUNT,
19883        TEARFULLOOK,
19884        TEATIME,
19885        TECHNOBLAST,
19886        TEETERDANCE,
19887        TELEKINESIS,
19888        TELEPORT,
19889        TEMPERFLARE,
19890        TERABLAST,
19891        TERASTARSTORM,
19892        TERRAINPULSE,
19893        THIEF,
19894        THOUSANDARROWS,
19895        THOUSANDWAVES,
19896        THRASH,
19897        THROATCHOP,
19898        THUNDER,
19899        THUNDERBOLT,
19900        THUNDERCAGE,
19901        THUNDERCLAP,
19902        THUNDERFANG,
19903        THUNDEROUSKICK,
19904        THUNDERPUNCH,
19905        THUNDERSHOCK,
19906        THUNDERWAVE,
19907        TICKLE,
19908        TIDYUP,
19909        TOPSYTURVY,
19910        TORCHSONG,
19911        TORMENT,
19912        TOXIC,
19913        TOXICSPIKES,
19914        TOXICTHREAD,
19915        TRAILBLAZE,
19916        TRANSFORM,
19917        TRIATTACK,
19918        TRICK,
19919        TRICKORTREAT,
19920        TRICKROOM,
19921        TRIPLEARROWS,
19922        TRIPLEAXEL,
19923        TRIPLEDIVE,
19924        TRIPLEKICK,
19925        TROPKICK,
19926        TRUMPCARD,
19927        TWINBEAM,
19928        TWINEEDLE,
19929        TWISTER,
19930        UPPERHAND,
19931        UPROAR,
19932        UTURN,
19933        VACUUMWAVE,
19934        VCREATE,
19935        VEEVEEVOLLEY,
19936        VENOMDRENCH,
19937        VENOSHOCK,
19938        VICTORYDANCE,
19939        VINEWHIP,
19940        VISEGRIP,
19941        VITALTHROW,
19942        VOLTSWITCH,
19943        VOLTTACKLE,
19944        WAKEUPSLAP,
19945        WATERFALL,
19946        WATERGUN,
19947        WATERPLEDGE,
19948        WATERPULSE,
19949        WATERSHURIKEN,
19950        WATERSPORT,
19951        WATERSPOUT,
19952        WAVECRASH,
19953        WEATHERBALL,
19954        WHIRLPOOL,
19955        WHIRLWIND,
19956        WICKEDBLOW,
19957        WICKEDTORQUE,
19958        WIDEGUARD,
19959        WILDBOLTSTORM,
19960        WILDCHARGE,
19961        WILLOWISP,
19962        WINGATTACK,
19963        WISH,
19964        WITHDRAW,
19965        WONDERROOM,
19966        WOODHAMMER,
19967        WORKUP,
19968        WORRYSEED,
19969        WRAP,
19970        WRINGOUT,
19971        XSCISSOR,
19972        YAWN,
19973        ZAPCANNON,
19974        ZENHEADBUTT,
19975        ZINGZAP,
19976        ZIPPYZAP,
19977    },
19978    default = NONE
19979}
19980
19981impl Choices {
19982    pub fn is_hiddenpower(&self) -> bool {
19983        match self {
19984            Choices::HIDDENPOWER
19985            | Choices::HIDDENPOWERBUG60
19986            | Choices::HIDDENPOWERBUG70
19987            | Choices::HIDDENPOWERDARK60
19988            | Choices::HIDDENPOWERDARK70
19989            | Choices::HIDDENPOWERDRAGON60
19990            | Choices::HIDDENPOWERDRAGON70
19991            | Choices::HIDDENPOWERELECTRIC60
19992            | Choices::HIDDENPOWERELECTRIC70
19993            | Choices::HIDDENPOWERFIGHTING60
19994            | Choices::HIDDENPOWERFIGHTING70
19995            | Choices::HIDDENPOWERFIRE60
19996            | Choices::HIDDENPOWERFIRE70
19997            | Choices::HIDDENPOWERFLYING60
19998            | Choices::HIDDENPOWERFLYING70
19999            | Choices::HIDDENPOWERGHOST60
20000            | Choices::HIDDENPOWERGHOST70
20001            | Choices::HIDDENPOWERGRASS60
20002            | Choices::HIDDENPOWERGRASS70
20003            | Choices::HIDDENPOWERGROUND60
20004            | Choices::HIDDENPOWERGROUND70
20005            | Choices::HIDDENPOWERICE60
20006            | Choices::HIDDENPOWERICE70
20007            | Choices::HIDDENPOWERPOISON60
20008            | Choices::HIDDENPOWERPOISON70
20009            | Choices::HIDDENPOWERPSYCHIC60
20010            | Choices::HIDDENPOWERPSYCHIC70
20011            | Choices::HIDDENPOWERROCK60
20012            | Choices::HIDDENPOWERROCK70
20013            | Choices::HIDDENPOWERSTEEL60
20014            | Choices::HIDDENPOWERSTEEL70
20015            | Choices::HIDDENPOWERWATER60
20016            | Choices::HIDDENPOWERWATER70 => true,
20017            _ => false,
20018        }
20019    }
20020    pub fn increased_crit_ratio(&self) -> bool {
20021        match self {
20022            Choices::AEROBLAST
20023            | Choices::AIRCUTTER
20024            | Choices::AQUACUTTER
20025            | Choices::ATTACKORDER
20026            | Choices::BLAZEKICK
20027            | Choices::CRABHAMMER
20028            | Choices::CROSSCHOP
20029            | Choices::CROSSPOISON
20030            | Choices::DIRECLAW
20031            | Choices::DRILLRUN
20032            | Choices::ESPERWING
20033            | Choices::IVYCUDGEL
20034            | Choices::KARATECHOP
20035            | Choices::LEAFBLADE
20036            | Choices::NIGHTSLASH
20037            | Choices::POISONTAIL
20038            | Choices::PSYCHOCUT
20039            | Choices::RAZORLEAF
20040            | Choices::RAZORWIND
20041            | Choices::SHADOWCLAW
20042            | Choices::SKYATTACK
20043            | Choices::SLASH
20044            | Choices::SNIPESHOT
20045            | Choices::SPACIALREND
20046            | Choices::STONEEDGE
20047            | Choices::TRIPLEARROWS => true,
20048            _ => false,
20049        }
20050    }
20051    pub fn guaranteed_crit(&self) -> bool {
20052        match self {
20053            Choices::WICKEDBLOW
20054            | Choices::SURGINGSTRIKES
20055            | Choices::FLOWERTRICK
20056            | Choices::STORMTHROW
20057            | Choices::FROSTBREATH => true,
20058            _ => false,
20059        }
20060    }
20061}
20062
20063#[derive(Clone)]
20064pub struct Choice {
20065    // Basic move information
20066    pub move_id: Choices, // in the case of category::Switch, this is not used
20067    pub move_index: PokemonMoveIndex,
20068    pub switch_id: PokemonIndex,
20069    pub move_type: PokemonType,
20070    pub accuracy: f32,
20071    pub category: MoveCategory,
20072    pub base_power: f32,
20073    pub boost: Option<Boost>,
20074    pub priority: i8,
20075    pub flags: Flags,
20076    pub drain: Option<f32>,
20077    pub recoil: Option<f32>,
20078    pub crash: Option<f32>,
20079    pub heal: Option<Heal>,
20080    pub status: Option<Status>,
20081    pub volatile_status: Option<VolatileStatus>,
20082    pub side_condition: Option<SideCondition>,
20083    pub secondaries: Option<Vec<Secondary>>,
20084
20085    pub target: MoveTarget,
20086
20087    pub first_move: bool,
20088    pub sleep_talk_move: bool,
20089}
20090
20091impl fmt::Debug for Choice {
20092    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
20093        write!(f, "Choice: {:?}", self.move_id)
20094    }
20095}
20096
20097impl Choice {
20098    pub fn multi_accuracy(&self) -> MultiAccuracyMove {
20099        match self.move_id {
20100            Choices::TRIPLEAXEL => MultiAccuracyMove::TripleHit,
20101            Choices::TRIPLEKICK => MultiAccuracyMove::TripleHit,
20102            Choices::POPULATIONBOMB => MultiAccuracyMove::TenHits,
20103            _ => MultiAccuracyMove::None,
20104        }
20105    }
20106    pub fn multi_hit(&self) -> MultiHitMove {
20107        match self.move_id {
20108            Choices::ARMTHRUST => MultiHitMove::TwoToFiveHits,
20109            Choices::BARRAGE => MultiHitMove::TwoToFiveHits,
20110            Choices::BONEMERANG => MultiHitMove::DoubleHit,
20111            Choices::BONERUSH => MultiHitMove::TwoToFiveHits,
20112            Choices::BULLETSEED => MultiHitMove::TwoToFiveHits,
20113            Choices::COMETPUNCH => MultiHitMove::TwoToFiveHits,
20114            Choices::DOUBLEHIT => MultiHitMove::DoubleHit,
20115            Choices::DOUBLEIRONBASH => MultiHitMove::DoubleHit,
20116            Choices::DOUBLEKICK => MultiHitMove::DoubleHit,
20117            Choices::DOUBLESLAP => MultiHitMove::TwoToFiveHits,
20118            Choices::DRAGONDARTS => MultiHitMove::DoubleHit,
20119            Choices::DUALCHOP => MultiHitMove::DoubleHit,
20120            Choices::DUALWINGBEAT => MultiHitMove::DoubleHit,
20121            Choices::FURYATTACK => MultiHitMove::TwoToFiveHits,
20122            Choices::FURYSWIPES => MultiHitMove::TwoToFiveHits,
20123            Choices::GEARGRIND => MultiHitMove::DoubleHit,
20124            Choices::ICICLESPEAR => MultiHitMove::TwoToFiveHits,
20125            Choices::PINMISSILE => MultiHitMove::TwoToFiveHits,
20126            Choices::ROCKBLAST => MultiHitMove::TwoToFiveHits,
20127            Choices::SCALESHOT => MultiHitMove::TwoToFiveHits,
20128            Choices::SPIKECANNON => MultiHitMove::TwoToFiveHits,
20129            Choices::SURGINGSTRIKES => MultiHitMove::TripleHit,
20130            Choices::TACHYONCUTTER => MultiHitMove::DoubleHit,
20131            Choices::TAILSLAP => MultiHitMove::TwoToFiveHits,
20132            Choices::TRIPLEDIVE => MultiHitMove::TripleHit,
20133            Choices::TWINBEAM => MultiHitMove::DoubleHit,
20134            Choices::TWINEEDLE => MultiHitMove::DoubleHit,
20135            Choices::WATERSHURIKEN => MultiHitMove::TwoToFiveHits,
20136
20137            // These are multi-accuracy
20138            // but until that is implemented we approximate them as multi-hit
20139            Choices::POPULATIONBOMB => MultiHitMove::PopulationBomb,
20140            Choices::TRIPLEAXEL => MultiHitMove::TripleAxel,
20141            _ => MultiHitMove::None,
20142        }
20143    }
20144    pub fn targets_special_defense(&self) -> bool {
20145        self.category == MoveCategory::Special
20146            && !(self.move_id == Choices::PSYSHOCK
20147                || self.move_id == Choices::SECRETSWORD
20148                || self.move_id == Choices::PSYSTRIKE)
20149    }
20150    pub fn add_or_create_secondaries(&mut self, secondary: Secondary) {
20151        if let Some(secondaries) = &mut self.secondaries {
20152            secondaries.push(secondary);
20153        } else {
20154            self.secondaries = Some(vec![secondary]);
20155        }
20156    }
20157    pub fn remove_effects_for_protect(&mut self) {
20158        // Crash is not removed
20159
20160        self.base_power = 0.0;
20161        self.category = MoveCategory::Status;
20162        self.accuracy = 100.0;
20163        self.flags.drag = false;
20164        self.flags.pivot = false;
20165        self.heal = None;
20166        self.drain = None;
20167        self.recoil = None;
20168        self.boost = None;
20169        self.status = None;
20170        self.volatile_status = None;
20171        self.side_condition = None;
20172        self.secondaries = None;
20173    }
20174    pub fn remove_all_effects(&mut self) {
20175        self.category = MoveCategory::Status;
20176        self.flags.clear_all();
20177        self.base_power = 0.0;
20178        self.accuracy = 100.0;
20179        self.heal = None;
20180        self.drain = None;
20181        self.recoil = None;
20182        self.crash = None;
20183        self.heal = None;
20184        self.boost = None;
20185        self.status = None;
20186        self.volatile_status = None;
20187        self.side_condition = None;
20188        self.secondaries = None;
20189    }
20190}
20191
20192impl Default for Choice {
20193    fn default() -> Choice {
20194        Choice {
20195            move_id: Choices::NONE,
20196            move_index: PokemonMoveIndex::M0,
20197            switch_id: PokemonIndex::P0,
20198            move_type: PokemonType::NORMAL,
20199            accuracy: 100.0,
20200            category: MoveCategory::Status,
20201            base_power: 0.0,
20202            boost: None,
20203            priority: 0,
20204            flags: Flags {
20205                ..Default::default()
20206            },
20207            drain: None,
20208            recoil: None,
20209            crash: None,
20210            heal: None,
20211            status: None,
20212            volatile_status: None,
20213            side_condition: None,
20214            secondaries: None,
20215            target: MoveTarget::Opponent,
20216            first_move: true,
20217            sleep_talk_move: false,
20218        }
20219    }
20220}
20221
20222pub fn undo_physical_special_split(moves: &mut HashMap<Choices, Choice>) {
20223    for (_, choice) in moves.iter_mut() {
20224        if choice.category == MoveCategory::Status {
20225            continue;
20226        }
20227        match choice.move_type {
20228            PokemonType::NORMAL
20229            | PokemonType::FIGHTING
20230            | PokemonType::POISON
20231            | PokemonType::GROUND
20232            | PokemonType::FLYING
20233            | PokemonType::BUG
20234            | PokemonType::ROCK
20235            | PokemonType::GHOST
20236            | PokemonType::STEEL => {
20237                choice.category = MoveCategory::Physical;
20238            }
20239            _ => {
20240                choice.category = MoveCategory::Special;
20241            }
20242        }
20243    }
20244}