diff --git a/public/audio/se/battle_anims/Absorb2.m4a b/public/audio/battle_anims/Absorb2.m4a similarity index 100% rename from public/audio/se/battle_anims/Absorb2.m4a rename to public/audio/battle_anims/Absorb2.m4a diff --git a/public/audio/se/battle_anims/Ace.m4a b/public/audio/battle_anims/Ace.m4a similarity index 100% rename from public/audio/se/battle_anims/Ace.m4a rename to public/audio/battle_anims/Ace.m4a diff --git a/public/audio/se/battle_anims/Acupressure.mp3 b/public/audio/battle_anims/Acupressure.mp3 similarity index 100% rename from public/audio/se/battle_anims/Acupressure.mp3 rename to public/audio/battle_anims/Acupressure.mp3 diff --git a/public/audio/se/battle_anims/Applause.m4a b/public/audio/battle_anims/Applause.m4a similarity index 100% rename from public/audio/se/battle_anims/Applause.m4a rename to public/audio/battle_anims/Applause.m4a diff --git a/public/audio/se/battle_anims/Battle1.m4a b/public/audio/battle_anims/Battle1.m4a similarity index 100% rename from public/audio/se/battle_anims/Battle1.m4a rename to public/audio/battle_anims/Battle1.m4a diff --git a/public/audio/se/battle_anims/Blow1.m4a b/public/audio/battle_anims/Blow1.m4a similarity index 100% rename from public/audio/se/battle_anims/Blow1.m4a rename to public/audio/battle_anims/Blow1.m4a diff --git a/public/audio/se/battle_anims/Blow3.m4a b/public/audio/battle_anims/Blow3.m4a similarity index 100% rename from public/audio/se/battle_anims/Blow3.m4a rename to public/audio/battle_anims/Blow3.m4a diff --git a/public/audio/se/battle_anims/Blow4.m4a b/public/audio/battle_anims/Blow4.m4a similarity index 100% rename from public/audio/se/battle_anims/Blow4.m4a rename to public/audio/battle_anims/Blow4.m4a diff --git a/public/audio/se/battle_anims/Blow5.m4a b/public/audio/battle_anims/Blow5.m4a similarity index 100% rename from public/audio/se/battle_anims/Blow5.m4a rename to public/audio/battle_anims/Blow5.m4a diff --git a/public/audio/se/battle_anims/Blow6.m4a b/public/audio/battle_anims/Blow6.m4a similarity index 100% rename from public/audio/se/battle_anims/Blow6.m4a rename to public/audio/battle_anims/Blow6.m4a diff --git a/public/audio/se/battle_anims/Blow7.m4a b/public/audio/battle_anims/Blow7.m4a similarity index 100% rename from public/audio/se/battle_anims/Blow7.m4a rename to public/audio/battle_anims/Blow7.m4a diff --git a/public/audio/se/battle_anims/Bow1.m4a b/public/audio/battle_anims/Bow1.m4a similarity index 100% rename from public/audio/se/battle_anims/Bow1.m4a rename to public/audio/battle_anims/Bow1.m4a diff --git a/public/audio/se/battle_anims/Collapse1.m4a b/public/audio/battle_anims/Collapse1.m4a similarity index 100% rename from public/audio/se/battle_anims/Collapse1.m4a rename to public/audio/battle_anims/Collapse1.m4a diff --git a/public/audio/se/battle_anims/Comet Punch.mp3 b/public/audio/battle_anims/Comet Punch.mp3 similarity index 100% rename from public/audio/se/battle_anims/Comet Punch.mp3 rename to public/audio/battle_anims/Comet Punch.mp3 diff --git a/public/audio/se/battle_anims/Confuse.m4a b/public/audio/battle_anims/Confuse.m4a similarity index 100% rename from public/audio/se/battle_anims/Confuse.m4a rename to public/audio/battle_anims/Confuse.m4a diff --git a/public/audio/se/battle_anims/Crash.m4a b/public/audio/battle_anims/Crash.m4a similarity index 100% rename from public/audio/se/battle_anims/Crash.m4a rename to public/audio/battle_anims/Crash.m4a diff --git a/public/audio/se/battle_anims/Damage1.m4a b/public/audio/battle_anims/Damage1.m4a similarity index 100% rename from public/audio/se/battle_anims/Damage1.m4a rename to public/audio/battle_anims/Damage1.m4a diff --git a/public/audio/se/battle_anims/Darkness2.m4a b/public/audio/battle_anims/Darkness2.m4a similarity index 100% rename from public/audio/se/battle_anims/Darkness2.m4a rename to public/audio/battle_anims/Darkness2.m4a diff --git a/public/audio/se/battle_anims/Darkness6.m4a b/public/audio/battle_anims/Darkness6.m4a similarity index 100% rename from public/audio/se/battle_anims/Darkness6.m4a rename to public/audio/battle_anims/Darkness6.m4a diff --git a/public/audio/se/battle_anims/Defense Curl.mp3 b/public/audio/battle_anims/Defense Curl.mp3 similarity index 100% rename from public/audio/se/battle_anims/Defense Curl.mp3 rename to public/audio/battle_anims/Defense Curl.mp3 diff --git a/public/audio/se/battle_anims/Dizzy Punch.mp3 b/public/audio/battle_anims/Dizzy Punch.mp3 similarity index 100% rename from public/audio/se/battle_anims/Dizzy Punch.mp3 rename to public/audio/battle_anims/Dizzy Punch.mp3 diff --git a/public/audio/se/battle_anims/Earth1.m4a b/public/audio/battle_anims/Earth1.m4a similarity index 100% rename from public/audio/se/battle_anims/Earth1.m4a rename to public/audio/battle_anims/Earth1.m4a diff --git a/public/audio/se/battle_anims/Earth3.m4a b/public/audio/battle_anims/Earth3.m4a similarity index 100% rename from public/audio/se/battle_anims/Earth3.m4a rename to public/audio/battle_anims/Earth3.m4a diff --git a/public/audio/se/battle_anims/Earth4.m4a b/public/audio/battle_anims/Earth4.m4a similarity index 100% rename from public/audio/se/battle_anims/Earth4.m4a rename to public/audio/battle_anims/Earth4.m4a diff --git a/public/audio/se/battle_anims/Earth5.m4a b/public/audio/battle_anims/Earth5.m4a similarity index 100% rename from public/audio/se/battle_anims/Earth5.m4a rename to public/audio/battle_anims/Earth5.m4a diff --git a/public/audio/se/battle_anims/Explosion.mp3 b/public/audio/battle_anims/Explosion.mp3 similarity index 100% rename from public/audio/se/battle_anims/Explosion.mp3 rename to public/audio/battle_anims/Explosion.mp3 diff --git a/public/audio/se/battle_anims/Explosion1.m4a b/public/audio/battle_anims/Explosion1.m4a similarity index 100% rename from public/audio/se/battle_anims/Explosion1.m4a rename to public/audio/battle_anims/Explosion1.m4a diff --git a/public/audio/se/battle_anims/Explosion2.m4a b/public/audio/battle_anims/Explosion2.m4a similarity index 100% rename from public/audio/se/battle_anims/Explosion2.m4a rename to public/audio/battle_anims/Explosion2.m4a diff --git a/public/audio/se/battle_anims/Explosion3.m4a b/public/audio/battle_anims/Explosion3.m4a similarity index 100% rename from public/audio/se/battle_anims/Explosion3.m4a rename to public/audio/battle_anims/Explosion3.m4a diff --git a/public/audio/se/battle_anims/Explosion4.m4a b/public/audio/battle_anims/Explosion4.m4a similarity index 100% rename from public/audio/se/battle_anims/Explosion4.m4a rename to public/audio/battle_anims/Explosion4.m4a diff --git a/public/audio/se/battle_anims/Explosion6.m4a b/public/audio/battle_anims/Explosion6.m4a similarity index 100% rename from public/audio/se/battle_anims/Explosion6.m4a rename to public/audio/battle_anims/Explosion6.m4a diff --git a/public/audio/se/battle_anims/Explosion7.m4a b/public/audio/battle_anims/Explosion7.m4a similarity index 100% rename from public/audio/se/battle_anims/Explosion7.m4a rename to public/audio/battle_anims/Explosion7.m4a diff --git a/public/audio/se/battle_anims/Fire1.m4a b/public/audio/battle_anims/Fire1.m4a similarity index 100% rename from public/audio/se/battle_anims/Fire1.m4a rename to public/audio/battle_anims/Fire1.m4a diff --git a/public/audio/se/battle_anims/Fire2.m4a b/public/audio/battle_anims/Fire2.m4a similarity index 100% rename from public/audio/se/battle_anims/Fire2.m4a rename to public/audio/battle_anims/Fire2.m4a diff --git a/public/audio/se/battle_anims/Fire3.m4a b/public/audio/battle_anims/Fire3.m4a similarity index 100% rename from public/audio/se/battle_anims/Fire3.m4a rename to public/audio/battle_anims/Fire3.m4a diff --git a/public/audio/se/battle_anims/Fire4.m4a b/public/audio/battle_anims/Fire4.m4a similarity index 100% rename from public/audio/se/battle_anims/Fire4.m4a rename to public/audio/battle_anims/Fire4.m4a diff --git a/public/audio/se/battle_anims/Fire5.m4a b/public/audio/battle_anims/Fire5.m4a similarity index 100% rename from public/audio/se/battle_anims/Fire5.m4a rename to public/audio/battle_anims/Fire5.m4a diff --git a/public/audio/se/battle_anims/Fire6.m4a b/public/audio/battle_anims/Fire6.m4a similarity index 100% rename from public/audio/se/battle_anims/Fire6.m4a rename to public/audio/battle_anims/Fire6.m4a diff --git a/public/audio/se/battle_anims/Flail.mp3 b/public/audio/battle_anims/Flail.mp3 similarity index 100% rename from public/audio/se/battle_anims/Flail.mp3 rename to public/audio/battle_anims/Flail.mp3 diff --git a/public/audio/se/battle_anims/Flash2.m4a b/public/audio/battle_anims/Flash2.m4a similarity index 100% rename from public/audio/se/battle_anims/Flash2.m4a rename to public/audio/battle_anims/Flash2.m4a diff --git a/public/audio/se/battle_anims/Follow Me.mp3 b/public/audio/battle_anims/Follow Me.mp3 similarity index 100% rename from public/audio/se/battle_anims/Follow Me.mp3 rename to public/audio/battle_anims/Follow Me.mp3 diff --git a/public/audio/se/battle_anims/Fury Swipes.m4a b/public/audio/battle_anims/Fury Swipes.m4a similarity index 100% rename from public/audio/se/battle_anims/Fury Swipes.m4a rename to public/audio/battle_anims/Fury Swipes.m4a diff --git a/public/audio/se/battle_anims/GEN8- Electricity1.wav b/public/audio/battle_anims/GEN8- Electricity1.wav similarity index 100% rename from public/audio/se/battle_anims/GEN8- Electricity1.wav rename to public/audio/battle_anims/GEN8- Electricity1.wav diff --git a/public/audio/se/battle_anims/GEN8- Exclaim.wav b/public/audio/battle_anims/GEN8- Exclaim.wav similarity index 100% rename from public/audio/se/battle_anims/GEN8- Exclaim.wav rename to public/audio/battle_anims/GEN8- Exclaim.wav diff --git a/public/audio/se/battle_anims/GEN8- Revelation Dance 1.m4a b/public/audio/battle_anims/GEN8- Revelation Dance 1.m4a similarity index 100% rename from public/audio/se/battle_anims/GEN8- Revelation Dance 1.m4a rename to public/audio/battle_anims/GEN8- Revelation Dance 1.m4a diff --git a/public/audio/se/battle_anims/GEN8- Revelation Dance 2.m4a b/public/audio/battle_anims/GEN8- Revelation Dance 2.m4a similarity index 100% rename from public/audio/se/battle_anims/GEN8- Revelation Dance 2.m4a rename to public/audio/battle_anims/GEN8- Revelation Dance 2.m4a diff --git a/public/audio/se/battle_anims/Gen8- Pyroball.wav b/public/audio/battle_anims/Gen8- Pyroball.wav similarity index 100% rename from public/audio/se/battle_anims/Gen8- Pyroball.wav rename to public/audio/battle_anims/Gen8- Pyroball.wav diff --git a/public/audio/se/battle_anims/Harden.mp3 b/public/audio/battle_anims/Harden.mp3 similarity index 100% rename from public/audio/se/battle_anims/Harden.mp3 rename to public/audio/battle_anims/Harden.mp3 diff --git a/public/audio/se/battle_anims/Ice2.m4a b/public/audio/battle_anims/Ice2.m4a similarity index 100% rename from public/audio/se/battle_anims/Ice2.m4a rename to public/audio/battle_anims/Ice2.m4a diff --git a/public/audio/se/battle_anims/Ice5.m4a b/public/audio/battle_anims/Ice5.m4a similarity index 100% rename from public/audio/se/battle_anims/Ice5.m4a rename to public/audio/battle_anims/Ice5.m4a diff --git a/public/audio/se/battle_anims/Ice8.m4a b/public/audio/battle_anims/Ice8.m4a similarity index 100% rename from public/audio/se/battle_anims/Ice8.m4a rename to public/audio/battle_anims/Ice8.m4a diff --git a/public/audio/se/battle_anims/Knock.m4a b/public/audio/battle_anims/Knock.m4a similarity index 100% rename from public/audio/se/battle_anims/Knock.m4a rename to public/audio/battle_anims/Knock.m4a diff --git a/public/audio/se/battle_anims/Lock On.mp3 b/public/audio/battle_anims/Lock On.mp3 similarity index 100% rename from public/audio/se/battle_anims/Lock On.mp3 rename to public/audio/battle_anims/Lock On.mp3 diff --git a/public/audio/se/battle_anims/Lovely Kiss.mp3 b/public/audio/battle_anims/Lovely Kiss.mp3 similarity index 100% rename from public/audio/se/battle_anims/Lovely Kiss.mp3 rename to public/audio/battle_anims/Lovely Kiss.mp3 diff --git a/public/audio/se/battle_anims/Lucky Chant.mp3 b/public/audio/battle_anims/Lucky Chant.mp3 similarity index 100% rename from public/audio/se/battle_anims/Lucky Chant.mp3 rename to public/audio/battle_anims/Lucky Chant.mp3 diff --git a/public/audio/se/battle_anims/Mega Punch.mp3 b/public/audio/battle_anims/Mega Punch.mp3 similarity index 100% rename from public/audio/se/battle_anims/Mega Punch.mp3 rename to public/audio/battle_anims/Mega Punch.mp3 diff --git a/public/audio/se/battle_anims/Metronome.mp3 b/public/audio/battle_anims/Metronome.mp3 similarity index 100% rename from public/audio/se/battle_anims/Metronome.mp3 rename to public/audio/battle_anims/Metronome.mp3 diff --git a/public/audio/se/battle_anims/MiningCollapse.mp3 b/public/audio/battle_anims/MiningCollapse.mp3 similarity index 100% rename from public/audio/se/battle_anims/MiningCollapse.mp3 rename to public/audio/battle_anims/MiningCollapse.mp3 diff --git a/public/audio/se/battle_anims/MiningPing.mp3 b/public/audio/battle_anims/MiningPing.mp3 similarity index 100% rename from public/audio/se/battle_anims/MiningPing.mp3 rename to public/audio/battle_anims/MiningPing.mp3 diff --git a/public/audio/se/battle_anims/Natural Gift.mp3 b/public/audio/battle_anims/Natural Gift.mp3 similarity index 100% rename from public/audio/se/battle_anims/Natural Gift.mp3 rename to public/audio/battle_anims/Natural Gift.mp3 diff --git a/public/audio/se/battle_anims/PRSFX- Absorb1.wav b/public/audio/battle_anims/PRSFX- Absorb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Absorb1.wav rename to public/audio/battle_anims/PRSFX- Absorb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Absorb2.wav b/public/audio/battle_anims/PRSFX- Absorb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Absorb2.wav rename to public/audio/battle_anims/PRSFX- Absorb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Accelerock1.wav b/public/audio/battle_anims/PRSFX- Accelerock1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Accelerock1.wav rename to public/audio/battle_anims/PRSFX- Accelerock1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Accelerock2.wav b/public/audio/battle_anims/PRSFX- Accelerock2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Accelerock2.wav rename to public/audio/battle_anims/PRSFX- Accelerock2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Accelerock3.wav b/public/audio/battle_anims/PRSFX- Accelerock3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Accelerock3.wav rename to public/audio/battle_anims/PRSFX- Accelerock3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acid Armor1.wav b/public/audio/battle_anims/PRSFX- Acid Armor1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acid Armor1.wav rename to public/audio/battle_anims/PRSFX- Acid Armor1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acid Armor2.wav b/public/audio/battle_anims/PRSFX- Acid Armor2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acid Armor2.wav rename to public/audio/battle_anims/PRSFX- Acid Armor2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acid Spray.wav b/public/audio/battle_anims/PRSFX- Acid Spray.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acid Spray.wav rename to public/audio/battle_anims/PRSFX- Acid Spray.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acid.wav b/public/audio/battle_anims/PRSFX- Acid.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acid.wav rename to public/audio/battle_anims/PRSFX- Acid.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acrobatics1.wav b/public/audio/battle_anims/PRSFX- Acrobatics1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acrobatics1.wav rename to public/audio/battle_anims/PRSFX- Acrobatics1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acrobatics2.wav b/public/audio/battle_anims/PRSFX- Acrobatics2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acrobatics2.wav rename to public/audio/battle_anims/PRSFX- Acrobatics2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acrobatics3.wav b/public/audio/battle_anims/PRSFX- Acrobatics3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acrobatics3.wav rename to public/audio/battle_anims/PRSFX- Acrobatics3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acupressure1.wav b/public/audio/battle_anims/PRSFX- Acupressure1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acupressure1.wav rename to public/audio/battle_anims/PRSFX- Acupressure1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Acupressure2.wav b/public/audio/battle_anims/PRSFX- Acupressure2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Acupressure2.wav rename to public/audio/battle_anims/PRSFX- Acupressure2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aerial Ace.wav b/public/audio/battle_anims/PRSFX- Aerial Ace.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aerial Ace.wav rename to public/audio/battle_anims/PRSFX- Aerial Ace.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aeroblast.wav b/public/audio/battle_anims/PRSFX- Aeroblast.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aeroblast.wav rename to public/audio/battle_anims/PRSFX- Aeroblast.wav diff --git a/public/audio/se/battle_anims/PRSFX- After You1.wav b/public/audio/battle_anims/PRSFX- After You1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- After You1.wav rename to public/audio/battle_anims/PRSFX- After You1.wav diff --git a/public/audio/se/battle_anims/PRSFX- After You2.wav b/public/audio/battle_anims/PRSFX- After You2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- After You2.wav rename to public/audio/battle_anims/PRSFX- After You2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Agility.wav b/public/audio/battle_anims/PRSFX- Agility.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Agility.wav rename to public/audio/battle_anims/PRSFX- Agility.wav diff --git a/public/audio/se/battle_anims/PRSFX- Air Cutter1.wav b/public/audio/battle_anims/PRSFX- Air Cutter1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Air Cutter1.wav rename to public/audio/battle_anims/PRSFX- Air Cutter1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Air Cutter2.wav b/public/audio/battle_anims/PRSFX- Air Cutter2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Air Cutter2.wav rename to public/audio/battle_anims/PRSFX- Air Cutter2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Air Slash1.wav b/public/audio/battle_anims/PRSFX- Air Slash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Air Slash1.wav rename to public/audio/battle_anims/PRSFX- Air Slash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Air Slash2.wav b/public/audio/battle_anims/PRSFX- Air Slash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Air Slash2.wav rename to public/audio/battle_anims/PRSFX- Air Slash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Air Slash3.wav b/public/audio/battle_anims/PRSFX- Air Slash3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Air Slash3.wav rename to public/audio/battle_anims/PRSFX- Air Slash3.wav diff --git a/public/audio/se/battle_anims/PRSFX- All Out Pummeling1.wav b/public/audio/battle_anims/PRSFX- All Out Pummeling1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- All Out Pummeling1.wav rename to public/audio/battle_anims/PRSFX- All Out Pummeling1.wav diff --git a/public/audio/se/battle_anims/PRSFX- All Out Pummeling2.wav b/public/audio/battle_anims/PRSFX- All Out Pummeling2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- All Out Pummeling2.wav rename to public/audio/battle_anims/PRSFX- All Out Pummeling2.wav diff --git a/public/audio/se/battle_anims/PRSFX- All Out Pummeling3.wav b/public/audio/battle_anims/PRSFX- All Out Pummeling3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- All Out Pummeling3.wav rename to public/audio/battle_anims/PRSFX- All Out Pummeling3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ally Switch.wav b/public/audio/battle_anims/PRSFX- Ally Switch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ally Switch.wav rename to public/audio/battle_anims/PRSFX- Ally Switch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Amnesia.wav b/public/audio/battle_anims/PRSFX- Amnesia.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Amnesia.wav rename to public/audio/battle_anims/PRSFX- Amnesia.wav diff --git a/public/audio/se/battle_anims/PRSFX- Anchor Shot.wav b/public/audio/battle_anims/PRSFX- Anchor Shot.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Anchor Shot.wav rename to public/audio/battle_anims/PRSFX- Anchor Shot.wav diff --git a/public/audio/se/battle_anims/PRSFX- Anchor Shot1.wav b/public/audio/battle_anims/PRSFX- Anchor Shot1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Anchor Shot1.wav rename to public/audio/battle_anims/PRSFX- Anchor Shot1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Anchor Shot2.wav b/public/audio/battle_anims/PRSFX- Anchor Shot2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Anchor Shot2.wav rename to public/audio/battle_anims/PRSFX- Anchor Shot2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ancient Power1.wav b/public/audio/battle_anims/PRSFX- Ancient Power1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ancient Power1.wav rename to public/audio/battle_anims/PRSFX- Ancient Power1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ancient Power2.wav b/public/audio/battle_anims/PRSFX- Ancient Power2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ancient Power2.wav rename to public/audio/battle_anims/PRSFX- Ancient Power2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aqua Jet.wav b/public/audio/battle_anims/PRSFX- Aqua Jet.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aqua Jet.wav rename to public/audio/battle_anims/PRSFX- Aqua Jet.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aqua Ring1.wav b/public/audio/battle_anims/PRSFX- Aqua Ring1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aqua Ring1.wav rename to public/audio/battle_anims/PRSFX- Aqua Ring1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aqua Ring2.wav b/public/audio/battle_anims/PRSFX- Aqua Ring2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aqua Ring2.wav rename to public/audio/battle_anims/PRSFX- Aqua Ring2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aqua Tail.wav b/public/audio/battle_anims/PRSFX- Aqua Tail.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aqua Tail.wav rename to public/audio/battle_anims/PRSFX- Aqua Tail.wav diff --git a/public/audio/se/battle_anims/PRSFX- Arm Thrust.wav b/public/audio/battle_anims/PRSFX- Arm Thrust.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Arm Thrust.wav rename to public/audio/battle_anims/PRSFX- Arm Thrust.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aromatherapy.wav b/public/audio/battle_anims/PRSFX- Aromatherapy.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aromatherapy.wav rename to public/audio/battle_anims/PRSFX- Aromatherapy.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aromatic Mist.wav b/public/audio/battle_anims/PRSFX- Aromatic Mist.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aromatic Mist.wav rename to public/audio/battle_anims/PRSFX- Aromatic Mist.wav diff --git a/public/audio/se/battle_anims/PRSFX- Assist.wav b/public/audio/battle_anims/PRSFX- Assist.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Assist.wav rename to public/audio/battle_anims/PRSFX- Assist.wav diff --git a/public/audio/se/battle_anims/PRSFX- Assurance.wav b/public/audio/battle_anims/PRSFX- Assurance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Assurance.wav rename to public/audio/battle_anims/PRSFX- Assurance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Astonish1.wav b/public/audio/battle_anims/PRSFX- Astonish1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Astonish1.wav rename to public/audio/battle_anims/PRSFX- Astonish1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Astonish2.wav b/public/audio/battle_anims/PRSFX- Astonish2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Astonish2.wav rename to public/audio/battle_anims/PRSFX- Astonish2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Attack Order1.wav b/public/audio/battle_anims/PRSFX- Attack Order1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Attack Order1.wav rename to public/audio/battle_anims/PRSFX- Attack Order1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Attack Order2.wav b/public/audio/battle_anims/PRSFX- Attack Order2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Attack Order2.wav rename to public/audio/battle_anims/PRSFX- Attack Order2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Attract.wav b/public/audio/battle_anims/PRSFX- Attract.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Attract.wav rename to public/audio/battle_anims/PRSFX- Attract.wav diff --git a/public/audio/se/battle_anims/PRSFX- Attract1.wav b/public/audio/battle_anims/PRSFX- Attract1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Attract1.wav rename to public/audio/battle_anims/PRSFX- Attract1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Attract2.wav b/public/audio/battle_anims/PRSFX- Attract2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Attract2.wav rename to public/audio/battle_anims/PRSFX- Attract2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aura Sphere1.wav b/public/audio/battle_anims/PRSFX- Aura Sphere1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aura Sphere1.wav rename to public/audio/battle_anims/PRSFX- Aura Sphere1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aura Sphere2.wav b/public/audio/battle_anims/PRSFX- Aura Sphere2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aura Sphere2.wav rename to public/audio/battle_anims/PRSFX- Aura Sphere2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aurora Beam.wav b/public/audio/battle_anims/PRSFX- Aurora Beam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aurora Beam.wav rename to public/audio/battle_anims/PRSFX- Aurora Beam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aurora Veil1.wav b/public/audio/battle_anims/PRSFX- Aurora Veil1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aurora Veil1.wav rename to public/audio/battle_anims/PRSFX- Aurora Veil1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aurora Veil2.wav b/public/audio/battle_anims/PRSFX- Aurora Veil2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aurora Veil2.wav rename to public/audio/battle_anims/PRSFX- Aurora Veil2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aurora Veil3.wav b/public/audio/battle_anims/PRSFX- Aurora Veil3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aurora Veil3.wav rename to public/audio/battle_anims/PRSFX- Aurora Veil3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Aurora Veil4.wav b/public/audio/battle_anims/PRSFX- Aurora Veil4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Aurora Veil4.wav rename to public/audio/battle_anims/PRSFX- Aurora Veil4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Autotomize.wav b/public/audio/battle_anims/PRSFX- Autotomize.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Autotomize.wav rename to public/audio/battle_anims/PRSFX- Autotomize.wav diff --git a/public/audio/se/battle_anims/PRSFX- Autotomize1.mp3 b/public/audio/battle_anims/PRSFX- Autotomize1.mp3 similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Autotomize1.mp3 rename to public/audio/battle_anims/PRSFX- Autotomize1.mp3 diff --git a/public/audio/se/battle_anims/PRSFX- Autotomize2.wav b/public/audio/battle_anims/PRSFX- Autotomize2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Autotomize2.wav rename to public/audio/battle_anims/PRSFX- Autotomize2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Avalanche.wav b/public/audio/battle_anims/PRSFX- Avalanche.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Avalanche.wav rename to public/audio/battle_anims/PRSFX- Avalanche.wav diff --git a/public/audio/se/battle_anims/PRSFX- Baby Doll Eyes.wav b/public/audio/battle_anims/PRSFX- Baby Doll Eyes.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Baby Doll Eyes.wav rename to public/audio/battle_anims/PRSFX- Baby Doll Eyes.wav diff --git a/public/audio/se/battle_anims/PRSFX- Baneful Bunker1.wav b/public/audio/battle_anims/PRSFX- Baneful Bunker1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Baneful Bunker1.wav rename to public/audio/battle_anims/PRSFX- Baneful Bunker1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Baneful Bunker2.wav b/public/audio/battle_anims/PRSFX- Baneful Bunker2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Baneful Bunker2.wav rename to public/audio/battle_anims/PRSFX- Baneful Bunker2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Baneful Bunker3.wav b/public/audio/battle_anims/PRSFX- Baneful Bunker3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Baneful Bunker3.wav rename to public/audio/battle_anims/PRSFX- Baneful Bunker3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Barrage1.wav b/public/audio/battle_anims/PRSFX- Barrage1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Barrage1.wav rename to public/audio/battle_anims/PRSFX- Barrage1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Barrage2.wav b/public/audio/battle_anims/PRSFX- Barrage2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Barrage2.wav rename to public/audio/battle_anims/PRSFX- Barrage2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Barrier.wav b/public/audio/battle_anims/PRSFX- Barrier.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Barrier.wav rename to public/audio/battle_anims/PRSFX- Barrier.wav diff --git a/public/audio/se/battle_anims/PRSFX- Baton Pass1.wav b/public/audio/battle_anims/PRSFX- Baton Pass1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Baton Pass1.wav rename to public/audio/battle_anims/PRSFX- Baton Pass1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Baton Pass2.wav b/public/audio/battle_anims/PRSFX- Baton Pass2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Baton Pass2.wav rename to public/audio/battle_anims/PRSFX- Baton Pass2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Beak Blast1.wav b/public/audio/battle_anims/PRSFX- Beak Blast1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Beak Blast1.wav rename to public/audio/battle_anims/PRSFX- Beak Blast1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Beak Blast2.wav b/public/audio/battle_anims/PRSFX- Beak Blast2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Beak Blast2.wav rename to public/audio/battle_anims/PRSFX- Beak Blast2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Beak Blast3.wav b/public/audio/battle_anims/PRSFX- Beak Blast3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Beak Blast3.wav rename to public/audio/battle_anims/PRSFX- Beak Blast3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Beak Blast4.wav b/public/audio/battle_anims/PRSFX- Beak Blast4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Beak Blast4.wav rename to public/audio/battle_anims/PRSFX- Beak Blast4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Beat Up.wav b/public/audio/battle_anims/PRSFX- Beat Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Beat Up.wav rename to public/audio/battle_anims/PRSFX- Beat Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Belch1.wav b/public/audio/battle_anims/PRSFX- Belch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Belch1.wav rename to public/audio/battle_anims/PRSFX- Belch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Belch2.wav b/public/audio/battle_anims/PRSFX- Belch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Belch2.wav rename to public/audio/battle_anims/PRSFX- Belch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Belch3.wav b/public/audio/battle_anims/PRSFX- Belch3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Belch3.wav rename to public/audio/battle_anims/PRSFX- Belch3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Belly Drum.wav b/public/audio/battle_anims/PRSFX- Belly Drum.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Belly Drum.wav rename to public/audio/battle_anims/PRSFX- Belly Drum.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bestow1.wav b/public/audio/battle_anims/PRSFX- Bestow1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bestow1.wav rename to public/audio/battle_anims/PRSFX- Bestow1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bestow2.wav b/public/audio/battle_anims/PRSFX- Bestow2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bestow2.wav rename to public/audio/battle_anims/PRSFX- Bestow2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bide1.wav b/public/audio/battle_anims/PRSFX- Bide1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bide1.wav rename to public/audio/battle_anims/PRSFX- Bide1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bide2.wav b/public/audio/battle_anims/PRSFX- Bide2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bide2.wav rename to public/audio/battle_anims/PRSFX- Bide2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bind.wav b/public/audio/battle_anims/PRSFX- Bind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bind.wav rename to public/audio/battle_anims/PRSFX- Bind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bite.wav b/public/audio/battle_anims/PRSFX- Bite.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bite.wav rename to public/audio/battle_anims/PRSFX- Bite.wav diff --git a/public/audio/se/battle_anims/PRSFX- Black Hole Eclipse1.wav b/public/audio/battle_anims/PRSFX- Black Hole Eclipse1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Black Hole Eclipse1.wav rename to public/audio/battle_anims/PRSFX- Black Hole Eclipse1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Black Hole Eclipse2.wav b/public/audio/battle_anims/PRSFX- Black Hole Eclipse2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Black Hole Eclipse2.wav rename to public/audio/battle_anims/PRSFX- Black Hole Eclipse2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Black Hole Eclipse3.wav b/public/audio/battle_anims/PRSFX- Black Hole Eclipse3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Black Hole Eclipse3.wav rename to public/audio/battle_anims/PRSFX- Black Hole Eclipse3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Black Hole Eclipse4.wav b/public/audio/battle_anims/PRSFX- Black Hole Eclipse4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Black Hole Eclipse4.wav rename to public/audio/battle_anims/PRSFX- Black Hole Eclipse4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blast Burn.wav b/public/audio/battle_anims/PRSFX- Blast Burn.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blast Burn.wav rename to public/audio/battle_anims/PRSFX- Blast Burn.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blast Burn2.wav b/public/audio/battle_anims/PRSFX- Blast Burn2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blast Burn2.wav rename to public/audio/battle_anims/PRSFX- Blast Burn2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blast Burn3.wav b/public/audio/battle_anims/PRSFX- Blast Burn3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blast Burn3.wav rename to public/audio/battle_anims/PRSFX- Blast Burn3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blaze Kick1.wav b/public/audio/battle_anims/PRSFX- Blaze Kick1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blaze Kick1.wav rename to public/audio/battle_anims/PRSFX- Blaze Kick1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blaze Kick2.wav b/public/audio/battle_anims/PRSFX- Blaze Kick2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blaze Kick2.wav rename to public/audio/battle_anims/PRSFX- Blaze Kick2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blizzard.wav b/public/audio/battle_anims/PRSFX- Blizzard.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blizzard.wav rename to public/audio/battle_anims/PRSFX- Blizzard.wav diff --git a/public/audio/se/battle_anims/PRSFX- Block.wav b/public/audio/battle_anims/PRSFX- Block.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Block.wav rename to public/audio/battle_anims/PRSFX- Block.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bloom Doom1.wav b/public/audio/battle_anims/PRSFX- Bloom Doom1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bloom Doom1.wav rename to public/audio/battle_anims/PRSFX- Bloom Doom1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bloom Doom2.wav b/public/audio/battle_anims/PRSFX- Bloom Doom2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bloom Doom2.wav rename to public/audio/battle_anims/PRSFX- Bloom Doom2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bloom Doom3.wav b/public/audio/battle_anims/PRSFX- Bloom Doom3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bloom Doom3.wav rename to public/audio/battle_anims/PRSFX- Bloom Doom3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blue Flare1.wav b/public/audio/battle_anims/PRSFX- Blue Flare1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blue Flare1.wav rename to public/audio/battle_anims/PRSFX- Blue Flare1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Blue Flare2.wav b/public/audio/battle_anims/PRSFX- Blue Flare2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Blue Flare2.wav rename to public/audio/battle_anims/PRSFX- Blue Flare2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Body Slam1.wav b/public/audio/battle_anims/PRSFX- Body Slam1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Body Slam1.wav rename to public/audio/battle_anims/PRSFX- Body Slam1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Body Slam2.wav b/public/audio/battle_anims/PRSFX- Body Slam2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Body Slam2.wav rename to public/audio/battle_anims/PRSFX- Body Slam2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bolt Strike1.wav b/public/audio/battle_anims/PRSFX- Bolt Strike1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bolt Strike1.wav rename to public/audio/battle_anims/PRSFX- Bolt Strike1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bolt Strike2.wav b/public/audio/battle_anims/PRSFX- Bolt Strike2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bolt Strike2.wav rename to public/audio/battle_anims/PRSFX- Bolt Strike2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bone Club1.wav b/public/audio/battle_anims/PRSFX- Bone Club1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bone Club1.wav rename to public/audio/battle_anims/PRSFX- Bone Club1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bone Club2.wav b/public/audio/battle_anims/PRSFX- Bone Club2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bone Club2.wav rename to public/audio/battle_anims/PRSFX- Bone Club2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bone Rush1.wav b/public/audio/battle_anims/PRSFX- Bone Rush1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bone Rush1.wav rename to public/audio/battle_anims/PRSFX- Bone Rush1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bone Rush2.wav b/public/audio/battle_anims/PRSFX- Bone Rush2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bone Rush2.wav rename to public/audio/battle_anims/PRSFX- Bone Rush2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bonemerang1.wav b/public/audio/battle_anims/PRSFX- Bonemerang1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bonemerang1.wav rename to public/audio/battle_anims/PRSFX- Bonemerang1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bonemerang2.wav b/public/audio/battle_anims/PRSFX- Bonemerang2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bonemerang2.wav rename to public/audio/battle_anims/PRSFX- Bonemerang2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Boomburst.wav b/public/audio/battle_anims/PRSFX- Boomburst.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Boomburst.wav rename to public/audio/battle_anims/PRSFX- Boomburst.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bounce1.wav b/public/audio/battle_anims/PRSFX- Bounce1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bounce1.wav rename to public/audio/battle_anims/PRSFX- Bounce1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bounce2.wav b/public/audio/battle_anims/PRSFX- Bounce2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bounce2.wav rename to public/audio/battle_anims/PRSFX- Bounce2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bounce3.wav b/public/audio/battle_anims/PRSFX- Bounce3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bounce3.wav rename to public/audio/battle_anims/PRSFX- Bounce3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bounce4.wav b/public/audio/battle_anims/PRSFX- Bounce4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bounce4.wav rename to public/audio/battle_anims/PRSFX- Bounce4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brave Bird1.wav b/public/audio/battle_anims/PRSFX- Brave Bird1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brave Bird1.wav rename to public/audio/battle_anims/PRSFX- Brave Bird1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brave Bird2.wav b/public/audio/battle_anims/PRSFX- Brave Bird2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brave Bird2.wav rename to public/audio/battle_anims/PRSFX- Brave Bird2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brick Break1.wav b/public/audio/battle_anims/PRSFX- Brick Break1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brick Break1.wav rename to public/audio/battle_anims/PRSFX- Brick Break1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brick Break2.wav b/public/audio/battle_anims/PRSFX- Brick Break2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brick Break2.wav rename to public/audio/battle_anims/PRSFX- Brick Break2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brine.wav b/public/audio/battle_anims/PRSFX- Brine.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brine.wav rename to public/audio/battle_anims/PRSFX- Brine.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brutal Swing1.wav b/public/audio/battle_anims/PRSFX- Brutal Swing1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brutal Swing1.wav rename to public/audio/battle_anims/PRSFX- Brutal Swing1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brutal Swing2.wav b/public/audio/battle_anims/PRSFX- Brutal Swing2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brutal Swing2.wav rename to public/audio/battle_anims/PRSFX- Brutal Swing2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Brutal Swing3.wav b/public/audio/battle_anims/PRSFX- Brutal Swing3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Brutal Swing3.wav rename to public/audio/battle_anims/PRSFX- Brutal Swing3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bubble.wav b/public/audio/battle_anims/PRSFX- Bubble.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bubble.wav rename to public/audio/battle_anims/PRSFX- Bubble.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bubblebeam.wav b/public/audio/battle_anims/PRSFX- Bubblebeam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bubblebeam.wav rename to public/audio/battle_anims/PRSFX- Bubblebeam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bug Bite.wav b/public/audio/battle_anims/PRSFX- Bug Bite.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bug Bite.wav rename to public/audio/battle_anims/PRSFX- Bug Bite.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bug Buzz.wav b/public/audio/battle_anims/PRSFX- Bug Buzz.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bug Buzz.wav rename to public/audio/battle_anims/PRSFX- Bug Buzz.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bulk Up1.wav b/public/audio/battle_anims/PRSFX- Bulk Up1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bulk Up1.wav rename to public/audio/battle_anims/PRSFX- Bulk Up1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bulk Up2.wav b/public/audio/battle_anims/PRSFX- Bulk Up2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bulk Up2.wav rename to public/audio/battle_anims/PRSFX- Bulk Up2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bulldoze.wav b/public/audio/battle_anims/PRSFX- Bulldoze.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bulldoze.wav rename to public/audio/battle_anims/PRSFX- Bulldoze.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bullet Punch.wav b/public/audio/battle_anims/PRSFX- Bullet Punch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bullet Punch.wav rename to public/audio/battle_anims/PRSFX- Bullet Punch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Bullet Seed.wav b/public/audio/battle_anims/PRSFX- Bullet Seed.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Bullet Seed.wav rename to public/audio/battle_anims/PRSFX- Bullet Seed.wav diff --git a/public/audio/se/battle_anims/PRSFX- Burn Up1.wav b/public/audio/battle_anims/PRSFX- Burn Up1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Burn Up1.wav rename to public/audio/battle_anims/PRSFX- Burn Up1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Burn Up2.wav b/public/audio/battle_anims/PRSFX- Burn Up2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Burn Up2.wav rename to public/audio/battle_anims/PRSFX- Burn Up2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Burn.wav b/public/audio/battle_anims/PRSFX- Burn.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Burn.wav rename to public/audio/battle_anims/PRSFX- Burn.wav diff --git a/public/audio/se/battle_anims/PRSFX- Calm Mind.wav b/public/audio/battle_anims/PRSFX- Calm Mind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Calm Mind.wav rename to public/audio/battle_anims/PRSFX- Calm Mind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Camouflage.wav b/public/audio/battle_anims/PRSFX- Camouflage.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Camouflage.wav rename to public/audio/battle_anims/PRSFX- Camouflage.wav diff --git a/public/audio/se/battle_anims/PRSFX- Captivate.wav b/public/audio/battle_anims/PRSFX- Captivate.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Captivate.wav rename to public/audio/battle_anims/PRSFX- Captivate.wav diff --git a/public/audio/se/battle_anims/PRSFX- Catastropika1.wav b/public/audio/battle_anims/PRSFX- Catastropika1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Catastropika1.wav rename to public/audio/battle_anims/PRSFX- Catastropika1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Catastropika2.wav b/public/audio/battle_anims/PRSFX- Catastropika2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Catastropika2.wav rename to public/audio/battle_anims/PRSFX- Catastropika2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Catastropika3.wav b/public/audio/battle_anims/PRSFX- Catastropika3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Catastropika3.wav rename to public/audio/battle_anims/PRSFX- Catastropika3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Catastropika4.wav b/public/audio/battle_anims/PRSFX- Catastropika4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Catastropika4.wav rename to public/audio/battle_anims/PRSFX- Catastropika4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Catastropika5.wav b/public/audio/battle_anims/PRSFX- Catastropika5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Catastropika5.wav rename to public/audio/battle_anims/PRSFX- Catastropika5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Catastropika6.wav b/public/audio/battle_anims/PRSFX- Catastropika6.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Catastropika6.wav rename to public/audio/battle_anims/PRSFX- Catastropika6.wav diff --git a/public/audio/se/battle_anims/PRSFX- Charge Beam.wav b/public/audio/battle_anims/PRSFX- Charge Beam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Charge Beam.wav rename to public/audio/battle_anims/PRSFX- Charge Beam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Charge.wav b/public/audio/battle_anims/PRSFX- Charge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Charge.wav rename to public/audio/battle_anims/PRSFX- Charge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Charm.wav b/public/audio/battle_anims/PRSFX- Charm.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Charm.wav rename to public/audio/battle_anims/PRSFX- Charm.wav diff --git a/public/audio/se/battle_anims/PRSFX- Chatter.wav b/public/audio/battle_anims/PRSFX- Chatter.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Chatter.wav rename to public/audio/battle_anims/PRSFX- Chatter.wav diff --git a/public/audio/se/battle_anims/PRSFX- Chip Away.wav b/public/audio/battle_anims/PRSFX- Chip Away.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Chip Away.wav rename to public/audio/battle_anims/PRSFX- Chip Away.wav diff --git a/public/audio/se/battle_anims/PRSFX- Circle Throw1.wav b/public/audio/battle_anims/PRSFX- Circle Throw1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Circle Throw1.wav rename to public/audio/battle_anims/PRSFX- Circle Throw1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Circle Throw2.wav b/public/audio/battle_anims/PRSFX- Circle Throw2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Circle Throw2.wav rename to public/audio/battle_anims/PRSFX- Circle Throw2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Clamp1.wav b/public/audio/battle_anims/PRSFX- Clamp1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Clamp1.wav rename to public/audio/battle_anims/PRSFX- Clamp1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Clamp2.wav b/public/audio/battle_anims/PRSFX- Clamp2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Clamp2.wav rename to public/audio/battle_anims/PRSFX- Clamp2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Clamp3.wav b/public/audio/battle_anims/PRSFX- Clamp3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Clamp3.wav rename to public/audio/battle_anims/PRSFX- Clamp3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Clear Smog.wav b/public/audio/battle_anims/PRSFX- Clear Smog.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Clear Smog.wav rename to public/audio/battle_anims/PRSFX- Clear Smog.wav diff --git a/public/audio/se/battle_anims/PRSFX- Close Combat.wav b/public/audio/battle_anims/PRSFX- Close Combat.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Close Combat.wav rename to public/audio/battle_anims/PRSFX- Close Combat.wav diff --git a/public/audio/se/battle_anims/PRSFX- Coil.wav b/public/audio/battle_anims/PRSFX- Coil.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Coil.wav rename to public/audio/battle_anims/PRSFX- Coil.wav diff --git a/public/audio/se/battle_anims/PRSFX- Comet Punch.wav b/public/audio/battle_anims/PRSFX- Comet Punch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Comet Punch.wav rename to public/audio/battle_anims/PRSFX- Comet Punch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Confide.wav b/public/audio/battle_anims/PRSFX- Confide.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Confide.wav rename to public/audio/battle_anims/PRSFX- Confide.wav diff --git a/public/audio/se/battle_anims/PRSFX- Confuse Ray.wav b/public/audio/battle_anims/PRSFX- Confuse Ray.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Confuse Ray.wav rename to public/audio/battle_anims/PRSFX- Confuse Ray.wav diff --git a/public/audio/se/battle_anims/PRSFX- Confused.wav b/public/audio/battle_anims/PRSFX- Confused.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Confused.wav rename to public/audio/battle_anims/PRSFX- Confused.wav diff --git a/public/audio/se/battle_anims/PRSFX- Confusion.wav b/public/audio/battle_anims/PRSFX- Confusion.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Confusion.wav rename to public/audio/battle_anims/PRSFX- Confusion.wav diff --git a/public/audio/se/battle_anims/PRSFX- Constrict.wav b/public/audio/battle_anims/PRSFX- Constrict.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Constrict.wav rename to public/audio/battle_anims/PRSFX- Constrict.wav diff --git a/public/audio/se/battle_anims/PRSFX- Conversion.wav b/public/audio/battle_anims/PRSFX- Conversion.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Conversion.wav rename to public/audio/battle_anims/PRSFX- Conversion.wav diff --git a/public/audio/se/battle_anims/PRSFX- Conversion2.wav b/public/audio/battle_anims/PRSFX- Conversion2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Conversion2.wav rename to public/audio/battle_anims/PRSFX- Conversion2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cosmic Power.wav b/public/audio/battle_anims/PRSFX- Cosmic Power.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cosmic Power.wav rename to public/audio/battle_anims/PRSFX- Cosmic Power.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cotton Guard.wav b/public/audio/battle_anims/PRSFX- Cotton Guard.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cotton Guard.wav rename to public/audio/battle_anims/PRSFX- Cotton Guard.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cotton Spore.wav b/public/audio/battle_anims/PRSFX- Cotton Spore.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cotton Spore.wav rename to public/audio/battle_anims/PRSFX- Cotton Spore.wav diff --git a/public/audio/se/battle_anims/PRSFX- Counter1.wav b/public/audio/battle_anims/PRSFX- Counter1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Counter1.wav rename to public/audio/battle_anims/PRSFX- Counter1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Counter2.wav b/public/audio/battle_anims/PRSFX- Counter2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Counter2.wav rename to public/audio/battle_anims/PRSFX- Counter2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Covet1.wav b/public/audio/battle_anims/PRSFX- Covet1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Covet1.wav rename to public/audio/battle_anims/PRSFX- Covet1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Covet2.wav b/public/audio/battle_anims/PRSFX- Covet2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Covet2.wav rename to public/audio/battle_anims/PRSFX- Covet2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Crabhammer.wav b/public/audio/battle_anims/PRSFX- Crabhammer.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Crabhammer.wav rename to public/audio/battle_anims/PRSFX- Crabhammer.wav diff --git a/public/audio/se/battle_anims/PRSFX- Crafty Shield.wav b/public/audio/battle_anims/PRSFX- Crafty Shield.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Crafty Shield.wav rename to public/audio/battle_anims/PRSFX- Crafty Shield.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cross Chop1.wav b/public/audio/battle_anims/PRSFX- Cross Chop1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cross Chop1.wav rename to public/audio/battle_anims/PRSFX- Cross Chop1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cross Chop2.wav b/public/audio/battle_anims/PRSFX- Cross Chop2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cross Chop2.wav rename to public/audio/battle_anims/PRSFX- Cross Chop2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cross Poison1.wav b/public/audio/battle_anims/PRSFX- Cross Poison1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cross Poison1.wav rename to public/audio/battle_anims/PRSFX- Cross Poison1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cross Poison2.wav b/public/audio/battle_anims/PRSFX- Cross Poison2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cross Poison2.wav rename to public/audio/battle_anims/PRSFX- Cross Poison2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Crunch.wav b/public/audio/battle_anims/PRSFX- Crunch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Crunch.wav rename to public/audio/battle_anims/PRSFX- Crunch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Crush Claw.wav b/public/audio/battle_anims/PRSFX- Crush Claw.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Crush Claw.wav rename to public/audio/battle_anims/PRSFX- Crush Claw.wav diff --git a/public/audio/se/battle_anims/PRSFX- Crush Grip1.wav b/public/audio/battle_anims/PRSFX- Crush Grip1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Crush Grip1.wav rename to public/audio/battle_anims/PRSFX- Crush Grip1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Crush Grip2.wav b/public/audio/battle_anims/PRSFX- Crush Grip2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Crush Grip2.wav rename to public/audio/battle_anims/PRSFX- Crush Grip2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Curse.wav b/public/audio/battle_anims/PRSFX- Curse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Curse.wav rename to public/audio/battle_anims/PRSFX- Curse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Curse2.wav b/public/audio/battle_anims/PRSFX- Curse2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Curse2.wav rename to public/audio/battle_anims/PRSFX- Curse2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Cut.wav b/public/audio/battle_anims/PRSFX- Cut.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Cut.wav rename to public/audio/battle_anims/PRSFX- Cut.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dark Pulse1.wav b/public/audio/battle_anims/PRSFX- Dark Pulse1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dark Pulse1.wav rename to public/audio/battle_anims/PRSFX- Dark Pulse1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dark Pulse2.wav b/public/audio/battle_anims/PRSFX- Dark Pulse2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dark Pulse2.wav rename to public/audio/battle_anims/PRSFX- Dark Pulse2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dark Void.wav b/public/audio/battle_anims/PRSFX- Dark Void.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dark Void.wav rename to public/audio/battle_anims/PRSFX- Dark Void.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dazzling Gleam.wav b/public/audio/battle_anims/PRSFX- Dazzling Gleam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dazzling Gleam.wav rename to public/audio/battle_anims/PRSFX- Dazzling Gleam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Defend Order1.wav b/public/audio/battle_anims/PRSFX- Defend Order1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Defend Order1.wav rename to public/audio/battle_anims/PRSFX- Defend Order1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Defend Order2.wav b/public/audio/battle_anims/PRSFX- Defend Order2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Defend Order2.wav rename to public/audio/battle_anims/PRSFX- Defend Order2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Defense Curl1.wav b/public/audio/battle_anims/PRSFX- Defense Curl1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Defense Curl1.wav rename to public/audio/battle_anims/PRSFX- Defense Curl1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Defense Curl2.wav b/public/audio/battle_anims/PRSFX- Defense Curl2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Defense Curl2.wav rename to public/audio/battle_anims/PRSFX- Defense Curl2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Defog.wav b/public/audio/battle_anims/PRSFX- Defog.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Defog.wav rename to public/audio/battle_anims/PRSFX- Defog.wav diff --git a/public/audio/se/battle_anims/PRSFX- Destiny Bond1.wav b/public/audio/battle_anims/PRSFX- Destiny Bond1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Destiny Bond1.wav rename to public/audio/battle_anims/PRSFX- Destiny Bond1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Destiny Bond2.wav b/public/audio/battle_anims/PRSFX- Destiny Bond2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Destiny Bond2.wav rename to public/audio/battle_anims/PRSFX- Destiny Bond2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Detect.wav b/public/audio/battle_anims/PRSFX- Detect.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Detect.wav rename to public/audio/battle_anims/PRSFX- Detect.wav diff --git a/public/audio/se/battle_anims/PRSFX- Devastating Drake1.wav b/public/audio/battle_anims/PRSFX- Devastating Drake1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Devastating Drake1.wav rename to public/audio/battle_anims/PRSFX- Devastating Drake1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Devastating Drake2.wav b/public/audio/battle_anims/PRSFX- Devastating Drake2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Devastating Drake2.wav rename to public/audio/battle_anims/PRSFX- Devastating Drake2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Devastating Drake3.wav b/public/audio/battle_anims/PRSFX- Devastating Drake3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Devastating Drake3.wav rename to public/audio/battle_anims/PRSFX- Devastating Drake3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Diamond Storm1.wav b/public/audio/battle_anims/PRSFX- Diamond Storm1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Diamond Storm1.wav rename to public/audio/battle_anims/PRSFX- Diamond Storm1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Diamond Storm2.wav b/public/audio/battle_anims/PRSFX- Diamond Storm2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Diamond Storm2.wav rename to public/audio/battle_anims/PRSFX- Diamond Storm2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dig1.wav b/public/audio/battle_anims/PRSFX- Dig1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dig1.wav rename to public/audio/battle_anims/PRSFX- Dig1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dig2.wav b/public/audio/battle_anims/PRSFX- Dig2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dig2.wav rename to public/audio/battle_anims/PRSFX- Dig2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Disable.wav b/public/audio/battle_anims/PRSFX- Disable.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Disable.wav rename to public/audio/battle_anims/PRSFX- Disable.wav diff --git a/public/audio/se/battle_anims/PRSFX- Discharge.wav b/public/audio/battle_anims/PRSFX- Discharge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Discharge.wav rename to public/audio/battle_anims/PRSFX- Discharge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dive1.wav b/public/audio/battle_anims/PRSFX- Dive1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dive1.wav rename to public/audio/battle_anims/PRSFX- Dive1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dive2.wav b/public/audio/battle_anims/PRSFX- Dive2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dive2.wav rename to public/audio/battle_anims/PRSFX- Dive2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dive3.wav b/public/audio/battle_anims/PRSFX- Dive3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dive3.wav rename to public/audio/battle_anims/PRSFX- Dive3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dizzy Punch1.wav b/public/audio/battle_anims/PRSFX- Dizzy Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dizzy Punch1.wav rename to public/audio/battle_anims/PRSFX- Dizzy Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dizzy Punch2.wav b/public/audio/battle_anims/PRSFX- Dizzy Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dizzy Punch2.wav rename to public/audio/battle_anims/PRSFX- Dizzy Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Doom Desire1.wav b/public/audio/battle_anims/PRSFX- Doom Desire1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Doom Desire1.wav rename to public/audio/battle_anims/PRSFX- Doom Desire1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Doom Desire2.wav b/public/audio/battle_anims/PRSFX- Doom Desire2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Doom Desire2.wav rename to public/audio/battle_anims/PRSFX- Doom Desire2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Double Edge1.wav b/public/audio/battle_anims/PRSFX- Double Edge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Double Edge1.wav rename to public/audio/battle_anims/PRSFX- Double Edge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Double Edge2.wav b/public/audio/battle_anims/PRSFX- Double Edge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Double Edge2.wav rename to public/audio/battle_anims/PRSFX- Double Edge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Double Hit.wav b/public/audio/battle_anims/PRSFX- Double Hit.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Double Hit.wav rename to public/audio/battle_anims/PRSFX- Double Hit.wav diff --git a/public/audio/se/battle_anims/PRSFX- Double Kick.wav b/public/audio/battle_anims/PRSFX- Double Kick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Double Kick.wav rename to public/audio/battle_anims/PRSFX- Double Kick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Double Slap.wav b/public/audio/battle_anims/PRSFX- Double Slap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Double Slap.wav rename to public/audio/battle_anims/PRSFX- Double Slap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Double Team.wav b/public/audio/battle_anims/PRSFX- Double Team.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Double Team.wav rename to public/audio/battle_anims/PRSFX- Double Team.wav diff --git a/public/audio/se/battle_anims/PRSFX- Draco Meteor1.wav b/public/audio/battle_anims/PRSFX- Draco Meteor1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Draco Meteor1.wav rename to public/audio/battle_anims/PRSFX- Draco Meteor1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Draco Meteor2.wav b/public/audio/battle_anims/PRSFX- Draco Meteor2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Draco Meteor2.wav rename to public/audio/battle_anims/PRSFX- Draco Meteor2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Draco Meteor3.wav b/public/audio/battle_anims/PRSFX- Draco Meteor3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Draco Meteor3.wav rename to public/audio/battle_anims/PRSFX- Draco Meteor3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Ascent1.wav b/public/audio/battle_anims/PRSFX- Dragon Ascent1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Ascent1.wav rename to public/audio/battle_anims/PRSFX- Dragon Ascent1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Ascent2.wav b/public/audio/battle_anims/PRSFX- Dragon Ascent2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Ascent2.wav rename to public/audio/battle_anims/PRSFX- Dragon Ascent2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Ascent3.wav b/public/audio/battle_anims/PRSFX- Dragon Ascent3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Ascent3.wav rename to public/audio/battle_anims/PRSFX- Dragon Ascent3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Breath.wav b/public/audio/battle_anims/PRSFX- Dragon Breath.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Breath.wav rename to public/audio/battle_anims/PRSFX- Dragon Breath.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Claw.wav b/public/audio/battle_anims/PRSFX- Dragon Claw.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Claw.wav rename to public/audio/battle_anims/PRSFX- Dragon Claw.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Dance.wav b/public/audio/battle_anims/PRSFX- Dragon Dance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Dance.wav rename to public/audio/battle_anims/PRSFX- Dragon Dance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Pulse.wav b/public/audio/battle_anims/PRSFX- Dragon Pulse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Pulse.wav rename to public/audio/battle_anims/PRSFX- Dragon Pulse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Rage.wav b/public/audio/battle_anims/PRSFX- Dragon Rage.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Rage.wav rename to public/audio/battle_anims/PRSFX- Dragon Rage.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Rush1.wav b/public/audio/battle_anims/PRSFX- Dragon Rush1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Rush1.wav rename to public/audio/battle_anims/PRSFX- Dragon Rush1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Rush2.wav b/public/audio/battle_anims/PRSFX- Dragon Rush2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Rush2.wav rename to public/audio/battle_anims/PRSFX- Dragon Rush2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dragon Tail.wav b/public/audio/battle_anims/PRSFX- Dragon Tail.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dragon Tail.wav rename to public/audio/battle_anims/PRSFX- Dragon Tail.wav diff --git a/public/audio/se/battle_anims/PRSFX- Drain Punch1.wav b/public/audio/battle_anims/PRSFX- Drain Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Drain Punch1.wav rename to public/audio/battle_anims/PRSFX- Drain Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Drain Punch2.wav b/public/audio/battle_anims/PRSFX- Drain Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Drain Punch2.wav rename to public/audio/battle_anims/PRSFX- Drain Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Draining Kiss1.wav b/public/audio/battle_anims/PRSFX- Draining Kiss1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Draining Kiss1.wav rename to public/audio/battle_anims/PRSFX- Draining Kiss1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Draining Kiss2.wav b/public/audio/battle_anims/PRSFX- Draining Kiss2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Draining Kiss2.wav rename to public/audio/battle_anims/PRSFX- Draining Kiss2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dream Eater1.wav b/public/audio/battle_anims/PRSFX- Dream Eater1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dream Eater1.wav rename to public/audio/battle_anims/PRSFX- Dream Eater1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dream Eater2.wav b/public/audio/battle_anims/PRSFX- Dream Eater2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dream Eater2.wav rename to public/audio/battle_anims/PRSFX- Dream Eater2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dream Eater3.wav b/public/audio/battle_anims/PRSFX- Dream Eater3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dream Eater3.wav rename to public/audio/battle_anims/PRSFX- Dream Eater3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Drill Peck.wav b/public/audio/battle_anims/PRSFX- Drill Peck.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Drill Peck.wav rename to public/audio/battle_anims/PRSFX- Drill Peck.wav diff --git a/public/audio/se/battle_anims/PRSFX- Drill Run.wav b/public/audio/battle_anims/PRSFX- Drill Run.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Drill Run.wav rename to public/audio/battle_anims/PRSFX- Drill Run.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dual Chop.wav b/public/audio/battle_anims/PRSFX- Dual Chop.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dual Chop.wav rename to public/audio/battle_anims/PRSFX- Dual Chop.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dynamic Punch1.wav b/public/audio/battle_anims/PRSFX- Dynamic Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dynamic Punch1.wav rename to public/audio/battle_anims/PRSFX- Dynamic Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Dynamic Punch2.wav b/public/audio/battle_anims/PRSFX- Dynamic Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Dynamic Punch2.wav rename to public/audio/battle_anims/PRSFX- Dynamic Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Earth Power.wav b/public/audio/battle_anims/PRSFX- Earth Power.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Earth Power.wav rename to public/audio/battle_anims/PRSFX- Earth Power.wav diff --git a/public/audio/se/battle_anims/PRSFX- Earthquake.wav b/public/audio/battle_anims/PRSFX- Earthquake.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Earthquake.wav rename to public/audio/battle_anims/PRSFX- Earthquake.wav diff --git a/public/audio/se/battle_anims/PRSFX- Earthquake1.wav b/public/audio/battle_anims/PRSFX- Earthquake1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Earthquake1.wav rename to public/audio/battle_anims/PRSFX- Earthquake1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Earthquake2.wav b/public/audio/battle_anims/PRSFX- Earthquake2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Earthquake2.wav rename to public/audio/battle_anims/PRSFX- Earthquake2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Echoed Voice.wav b/public/audio/battle_anims/PRSFX- Echoed Voice.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Echoed Voice.wav rename to public/audio/battle_anims/PRSFX- Echoed Voice.wav diff --git a/public/audio/se/battle_anims/PRSFX- Eerie Impulse.wav b/public/audio/battle_anims/PRSFX- Eerie Impulse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Eerie Impulse.wav rename to public/audio/battle_anims/PRSFX- Eerie Impulse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Egg Bomb1.wav b/public/audio/battle_anims/PRSFX- Egg Bomb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Egg Bomb1.wav rename to public/audio/battle_anims/PRSFX- Egg Bomb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Egg Bomb2.wav b/public/audio/battle_anims/PRSFX- Egg Bomb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Egg Bomb2.wav rename to public/audio/battle_anims/PRSFX- Egg Bomb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electric Terrain.wav b/public/audio/battle_anims/PRSFX- Electric Terrain.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electric Terrain.wav rename to public/audio/battle_anims/PRSFX- Electric Terrain.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electric Terrain2.wav b/public/audio/battle_anims/PRSFX- Electric Terrain2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electric Terrain2.wav rename to public/audio/battle_anims/PRSFX- Electric Terrain2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electrify.wav b/public/audio/battle_anims/PRSFX- Electrify.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electrify.wav rename to public/audio/battle_anims/PRSFX- Electrify.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electro Ball1.wav b/public/audio/battle_anims/PRSFX- Electro Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electro Ball1.wav rename to public/audio/battle_anims/PRSFX- Electro Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electro Ball2.wav b/public/audio/battle_anims/PRSFX- Electro Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electro Ball2.wav rename to public/audio/battle_anims/PRSFX- Electro Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electroweb1.wav b/public/audio/battle_anims/PRSFX- Electroweb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electroweb1.wav rename to public/audio/battle_anims/PRSFX- Electroweb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Electroweb2.wav b/public/audio/battle_anims/PRSFX- Electroweb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Electroweb2.wav rename to public/audio/battle_anims/PRSFX- Electroweb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Embargo.wav b/public/audio/battle_anims/PRSFX- Embargo.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Embargo.wav rename to public/audio/battle_anims/PRSFX- Embargo.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ember.wav b/public/audio/battle_anims/PRSFX- Ember.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ember.wav rename to public/audio/battle_anims/PRSFX- Ember.wav diff --git a/public/audio/se/battle_anims/PRSFX- Encore.wav b/public/audio/battle_anims/PRSFX- Encore.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Encore.wav rename to public/audio/battle_anims/PRSFX- Encore.wav diff --git a/public/audio/se/battle_anims/PRSFX- Endeavor1.wav b/public/audio/battle_anims/PRSFX- Endeavor1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Endeavor1.wav rename to public/audio/battle_anims/PRSFX- Endeavor1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Endeavor2.wav b/public/audio/battle_anims/PRSFX- Endeavor2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Endeavor2.wav rename to public/audio/battle_anims/PRSFX- Endeavor2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Endure.wav b/public/audio/battle_anims/PRSFX- Endure.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Endure.wav rename to public/audio/battle_anims/PRSFX- Endure.wav diff --git a/public/audio/se/battle_anims/PRSFX- Energy Ball1.wav b/public/audio/battle_anims/PRSFX- Energy Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Energy Ball1.wav rename to public/audio/battle_anims/PRSFX- Energy Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Energy Ball2.wav b/public/audio/battle_anims/PRSFX- Energy Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Energy Ball2.wav rename to public/audio/battle_anims/PRSFX- Energy Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Entrainment.wav b/public/audio/battle_anims/PRSFX- Entrainment.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Entrainment.wav rename to public/audio/battle_anims/PRSFX- Entrainment.wav diff --git a/public/audio/se/battle_anims/PRSFX- Eruption1.wav b/public/audio/battle_anims/PRSFX- Eruption1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Eruption1.wav rename to public/audio/battle_anims/PRSFX- Eruption1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Eruption2.wav b/public/audio/battle_anims/PRSFX- Eruption2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Eruption2.wav rename to public/audio/battle_anims/PRSFX- Eruption2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Explosion.wav b/public/audio/battle_anims/PRSFX- Explosion.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Explosion.wav rename to public/audio/battle_anims/PRSFX- Explosion.wav diff --git a/public/audio/se/battle_anims/PRSFX- Explosion2.wav b/public/audio/battle_anims/PRSFX- Explosion2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Explosion2.wav rename to public/audio/battle_anims/PRSFX- Explosion2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Extrasensory.wav b/public/audio/battle_anims/PRSFX- Extrasensory.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Extrasensory.wav rename to public/audio/battle_anims/PRSFX- Extrasensory.wav diff --git a/public/audio/se/battle_anims/PRSFX- Extreme Evoboost1.wav b/public/audio/battle_anims/PRSFX- Extreme Evoboost1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Extreme Evoboost1.wav rename to public/audio/battle_anims/PRSFX- Extreme Evoboost1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Extreme Evoboost2.wav b/public/audio/battle_anims/PRSFX- Extreme Evoboost2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Extreme Evoboost2.wav rename to public/audio/battle_anims/PRSFX- Extreme Evoboost2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Extreme Evoboost3.wav b/public/audio/battle_anims/PRSFX- Extreme Evoboost3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Extreme Evoboost3.wav rename to public/audio/battle_anims/PRSFX- Extreme Evoboost3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Extremespeed1.wav b/public/audio/battle_anims/PRSFX- Extremespeed1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Extremespeed1.wav rename to public/audio/battle_anims/PRSFX- Extremespeed1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Extremespeed2.wav b/public/audio/battle_anims/PRSFX- Extremespeed2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Extremespeed2.wav rename to public/audio/battle_anims/PRSFX- Extremespeed2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Facade1.wav b/public/audio/battle_anims/PRSFX- Facade1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Facade1.wav rename to public/audio/battle_anims/PRSFX- Facade1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Facade2.wav b/public/audio/battle_anims/PRSFX- Facade2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Facade2.wav rename to public/audio/battle_anims/PRSFX- Facade2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fairy Lock.wav b/public/audio/battle_anims/PRSFX- Fairy Lock.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fairy Lock.wav rename to public/audio/battle_anims/PRSFX- Fairy Lock.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fairy Wind.wav b/public/audio/battle_anims/PRSFX- Fairy Wind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fairy Wind.wav rename to public/audio/battle_anims/PRSFX- Fairy Wind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fake Out1.wav b/public/audio/battle_anims/PRSFX- Fake Out1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fake Out1.wav rename to public/audio/battle_anims/PRSFX- Fake Out1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fake Out2.wav b/public/audio/battle_anims/PRSFX- Fake Out2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fake Out2.wav rename to public/audio/battle_anims/PRSFX- Fake Out2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fake Tears.wav b/public/audio/battle_anims/PRSFX- Fake Tears.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fake Tears.wav rename to public/audio/battle_anims/PRSFX- Fake Tears.wav diff --git a/public/audio/se/battle_anims/PRSFX- False Swipe.wav b/public/audio/battle_anims/PRSFX- False Swipe.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- False Swipe.wav rename to public/audio/battle_anims/PRSFX- False Swipe.wav diff --git a/public/audio/se/battle_anims/PRSFX- Featherdance1.wav b/public/audio/battle_anims/PRSFX- Featherdance1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Featherdance1.wav rename to public/audio/battle_anims/PRSFX- Featherdance1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Featherdance2.wav b/public/audio/battle_anims/PRSFX- Featherdance2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Featherdance2.wav rename to public/audio/battle_anims/PRSFX- Featherdance2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Feint Attack1.wav b/public/audio/battle_anims/PRSFX- Feint Attack1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Feint Attack1.wav rename to public/audio/battle_anims/PRSFX- Feint Attack1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Feint Attack2.wav b/public/audio/battle_anims/PRSFX- Feint Attack2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Feint Attack2.wav rename to public/audio/battle_anims/PRSFX- Feint Attack2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Feint1.wav b/public/audio/battle_anims/PRSFX- Feint1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Feint1.wav rename to public/audio/battle_anims/PRSFX- Feint1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Feint2.wav b/public/audio/battle_anims/PRSFX- Feint2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Feint2.wav rename to public/audio/battle_anims/PRSFX- Feint2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fell Stinger1.wav b/public/audio/battle_anims/PRSFX- Fell Stinger1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fell Stinger1.wav rename to public/audio/battle_anims/PRSFX- Fell Stinger1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fell Stinger2.wav b/public/audio/battle_anims/PRSFX- Fell Stinger2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fell Stinger2.wav rename to public/audio/battle_anims/PRSFX- Fell Stinger2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fell Stinger3.wav b/public/audio/battle_anims/PRSFX- Fell Stinger3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fell Stinger3.wav rename to public/audio/battle_anims/PRSFX- Fell Stinger3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fiery Dance1.wav b/public/audio/battle_anims/PRSFX- Fiery Dance1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fiery Dance1.wav rename to public/audio/battle_anims/PRSFX- Fiery Dance1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fiery Dance2.wav b/public/audio/battle_anims/PRSFX- Fiery Dance2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fiery Dance2.wav rename to public/audio/battle_anims/PRSFX- Fiery Dance2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Final Gambit1.wav b/public/audio/battle_anims/PRSFX- Final Gambit1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Final Gambit1.wav rename to public/audio/battle_anims/PRSFX- Final Gambit1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Final Gambit2.wav b/public/audio/battle_anims/PRSFX- Final Gambit2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Final Gambit2.wav rename to public/audio/battle_anims/PRSFX- Final Gambit2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Blast.wav b/public/audio/battle_anims/PRSFX- Fire Blast.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Blast.wav rename to public/audio/battle_anims/PRSFX- Fire Blast.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Fang1.wav b/public/audio/battle_anims/PRSFX- Fire Fang1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Fang1.wav rename to public/audio/battle_anims/PRSFX- Fire Fang1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Fang2.wav b/public/audio/battle_anims/PRSFX- Fire Fang2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Fang2.wav rename to public/audio/battle_anims/PRSFX- Fire Fang2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Lash1.wav b/public/audio/battle_anims/PRSFX- Fire Lash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Lash1.wav rename to public/audio/battle_anims/PRSFX- Fire Lash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Lash2.wav b/public/audio/battle_anims/PRSFX- Fire Lash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Lash2.wav rename to public/audio/battle_anims/PRSFX- Fire Lash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Lash3.wav b/public/audio/battle_anims/PRSFX- Fire Lash3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Lash3.wav rename to public/audio/battle_anims/PRSFX- Fire Lash3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Lash4.wav b/public/audio/battle_anims/PRSFX- Fire Lash4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Lash4.wav rename to public/audio/battle_anims/PRSFX- Fire Lash4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Pledge.wav b/public/audio/battle_anims/PRSFX- Fire Pledge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Pledge.wav rename to public/audio/battle_anims/PRSFX- Fire Pledge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Punch1.wav b/public/audio/battle_anims/PRSFX- Fire Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Punch1.wav rename to public/audio/battle_anims/PRSFX- Fire Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Punch2.wav b/public/audio/battle_anims/PRSFX- Fire Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Punch2.wav rename to public/audio/battle_anims/PRSFX- Fire Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Punch3.wav b/public/audio/battle_anims/PRSFX- Fire Punch3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Punch3.wav rename to public/audio/battle_anims/PRSFX- Fire Punch3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fire Spin.wav b/public/audio/battle_anims/PRSFX- Fire Spin.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fire Spin.wav rename to public/audio/battle_anims/PRSFX- Fire Spin.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fissure.wav b/public/audio/battle_anims/PRSFX- Fissure.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fissure.wav rename to public/audio/battle_anims/PRSFX- Fissure.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flail.wav b/public/audio/battle_anims/PRSFX- Flail.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flail.wav rename to public/audio/battle_anims/PRSFX- Flail.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flame Burst.wav b/public/audio/battle_anims/PRSFX- Flame Burst.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flame Burst.wav rename to public/audio/battle_anims/PRSFX- Flame Burst.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flame Charge1.wav b/public/audio/battle_anims/PRSFX- Flame Charge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flame Charge1.wav rename to public/audio/battle_anims/PRSFX- Flame Charge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flame Charge2.wav b/public/audio/battle_anims/PRSFX- Flame Charge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flame Charge2.wav rename to public/audio/battle_anims/PRSFX- Flame Charge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flame Wheel1.wav b/public/audio/battle_anims/PRSFX- Flame Wheel1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flame Wheel1.wav rename to public/audio/battle_anims/PRSFX- Flame Wheel1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flame Wheel2.wav b/public/audio/battle_anims/PRSFX- Flame Wheel2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flame Wheel2.wav rename to public/audio/battle_anims/PRSFX- Flame Wheel2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flamethrower.wav b/public/audio/battle_anims/PRSFX- Flamethrower.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flamethrower.wav rename to public/audio/battle_anims/PRSFX- Flamethrower.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flare Blitz1.wav b/public/audio/battle_anims/PRSFX- Flare Blitz1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flare Blitz1.wav rename to public/audio/battle_anims/PRSFX- Flare Blitz1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flare Blitz2.wav b/public/audio/battle_anims/PRSFX- Flare Blitz2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flare Blitz2.wav rename to public/audio/battle_anims/PRSFX- Flare Blitz2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flare Blitz3.wav b/public/audio/battle_anims/PRSFX- Flare Blitz3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flare Blitz3.wav rename to public/audio/battle_anims/PRSFX- Flare Blitz3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flash Cannon.wav b/public/audio/battle_anims/PRSFX- Flash Cannon.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flash Cannon.wav rename to public/audio/battle_anims/PRSFX- Flash Cannon.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flash.wav b/public/audio/battle_anims/PRSFX- Flash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flash.wav rename to public/audio/battle_anims/PRSFX- Flash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flatter.wav b/public/audio/battle_anims/PRSFX- Flatter.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flatter.wav rename to public/audio/battle_anims/PRSFX- Flatter.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fling1.wav b/public/audio/battle_anims/PRSFX- Fling1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fling1.wav rename to public/audio/battle_anims/PRSFX- Fling1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fling2.wav b/public/audio/battle_anims/PRSFX- Fling2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fling2.wav rename to public/audio/battle_anims/PRSFX- Fling2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Floral Healing1.wav b/public/audio/battle_anims/PRSFX- Floral Healing1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Floral Healing1.wav rename to public/audio/battle_anims/PRSFX- Floral Healing1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Floral Healing2.wav b/public/audio/battle_anims/PRSFX- Floral Healing2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Floral Healing2.wav rename to public/audio/battle_anims/PRSFX- Floral Healing2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flower Shield.wav b/public/audio/battle_anims/PRSFX- Flower Shield.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flower Shield.wav rename to public/audio/battle_anims/PRSFX- Flower Shield.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fly1.wav b/public/audio/battle_anims/PRSFX- Fly1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fly1.wav rename to public/audio/battle_anims/PRSFX- Fly1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fly2.wav b/public/audio/battle_anims/PRSFX- Fly2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fly2.wav rename to public/audio/battle_anims/PRSFX- Fly2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flying Press1.wav b/public/audio/battle_anims/PRSFX- Flying Press1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flying Press1.wav rename to public/audio/battle_anims/PRSFX- Flying Press1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flying Press2.wav b/public/audio/battle_anims/PRSFX- Flying Press2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flying Press2.wav rename to public/audio/battle_anims/PRSFX- Flying Press2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Flying Press3.wav b/public/audio/battle_anims/PRSFX- Flying Press3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Flying Press3.wav rename to public/audio/battle_anims/PRSFX- Flying Press3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Blast1.wav b/public/audio/battle_anims/PRSFX- Focus Blast1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Blast1.wav rename to public/audio/battle_anims/PRSFX- Focus Blast1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Blast2.wav b/public/audio/battle_anims/PRSFX- Focus Blast2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Blast2.wav rename to public/audio/battle_anims/PRSFX- Focus Blast2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Blast3.wav b/public/audio/battle_anims/PRSFX- Focus Blast3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Blast3.wav rename to public/audio/battle_anims/PRSFX- Focus Blast3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Energy.wav b/public/audio/battle_anims/PRSFX- Focus Energy.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Energy.wav rename to public/audio/battle_anims/PRSFX- Focus Energy.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Punch1.wav b/public/audio/battle_anims/PRSFX- Focus Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Punch1.wav rename to public/audio/battle_anims/PRSFX- Focus Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Punch2.wav b/public/audio/battle_anims/PRSFX- Focus Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Punch2.wav rename to public/audio/battle_anims/PRSFX- Focus Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Focus Punch3.wav b/public/audio/battle_anims/PRSFX- Focus Punch3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Focus Punch3.wav rename to public/audio/battle_anims/PRSFX- Focus Punch3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Follow Me.wav b/public/audio/battle_anims/PRSFX- Follow Me.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Follow Me.wav rename to public/audio/battle_anims/PRSFX- Follow Me.wav diff --git a/public/audio/se/battle_anims/PRSFX- Force Palm1.wav b/public/audio/battle_anims/PRSFX- Force Palm1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Force Palm1.wav rename to public/audio/battle_anims/PRSFX- Force Palm1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Force Palm2.wav b/public/audio/battle_anims/PRSFX- Force Palm2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Force Palm2.wav rename to public/audio/battle_anims/PRSFX- Force Palm2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Foresight1.wav b/public/audio/battle_anims/PRSFX- Foresight1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Foresight1.wav rename to public/audio/battle_anims/PRSFX- Foresight1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Foresight2.wav b/public/audio/battle_anims/PRSFX- Foresight2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Foresight2.wav rename to public/audio/battle_anims/PRSFX- Foresight2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Forests Curse.wav b/public/audio/battle_anims/PRSFX- Forests Curse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Forests Curse.wav rename to public/audio/battle_anims/PRSFX- Forests Curse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Foul Play1.wav b/public/audio/battle_anims/PRSFX- Foul Play1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Foul Play1.wav rename to public/audio/battle_anims/PRSFX- Foul Play1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Foul Play2.wav b/public/audio/battle_anims/PRSFX- Foul Play2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Foul Play2.wav rename to public/audio/battle_anims/PRSFX- Foul Play2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Freeze Dry1.wav b/public/audio/battle_anims/PRSFX- Freeze Dry1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Freeze Dry1.wav rename to public/audio/battle_anims/PRSFX- Freeze Dry1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Freeze Dry2.wav b/public/audio/battle_anims/PRSFX- Freeze Dry2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Freeze Dry2.wav rename to public/audio/battle_anims/PRSFX- Freeze Dry2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Freeze Dry3.wav b/public/audio/battle_anims/PRSFX- Freeze Dry3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Freeze Dry3.wav rename to public/audio/battle_anims/PRSFX- Freeze Dry3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Freeze Shock1.wav b/public/audio/battle_anims/PRSFX- Freeze Shock1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Freeze Shock1.wav rename to public/audio/battle_anims/PRSFX- Freeze Shock1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Freeze Shock2.wav b/public/audio/battle_anims/PRSFX- Freeze Shock2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Freeze Shock2.wav rename to public/audio/battle_anims/PRSFX- Freeze Shock2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Freeze Shock3.wav b/public/audio/battle_anims/PRSFX- Freeze Shock3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Freeze Shock3.wav rename to public/audio/battle_anims/PRSFX- Freeze Shock3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frenzy Plant1.wav b/public/audio/battle_anims/PRSFX- Frenzy Plant1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frenzy Plant1.wav rename to public/audio/battle_anims/PRSFX- Frenzy Plant1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frenzy Plant2.wav b/public/audio/battle_anims/PRSFX- Frenzy Plant2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frenzy Plant2.wav rename to public/audio/battle_anims/PRSFX- Frenzy Plant2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frost Breath1.wav b/public/audio/battle_anims/PRSFX- Frost Breath1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frost Breath1.wav rename to public/audio/battle_anims/PRSFX- Frost Breath1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frost Breath2.wav b/public/audio/battle_anims/PRSFX- Frost Breath2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frost Breath2.wav rename to public/audio/battle_anims/PRSFX- Frost Breath2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frozen.wav b/public/audio/battle_anims/PRSFX- Frozen.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frozen.wav rename to public/audio/battle_anims/PRSFX- Frozen.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frustration1.wav b/public/audio/battle_anims/PRSFX- Frustration1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frustration1.wav rename to public/audio/battle_anims/PRSFX- Frustration1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Frustration2.wav b/public/audio/battle_anims/PRSFX- Frustration2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Frustration2.wav rename to public/audio/battle_anims/PRSFX- Frustration2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fury Attack.wav b/public/audio/battle_anims/PRSFX- Fury Attack.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fury Attack.wav rename to public/audio/battle_anims/PRSFX- Fury Attack.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fury Cutter.wav b/public/audio/battle_anims/PRSFX- Fury Cutter.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fury Cutter.wav rename to public/audio/battle_anims/PRSFX- Fury Cutter.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fury Swipes.wav b/public/audio/battle_anims/PRSFX- Fury Swipes.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fury Swipes.wav rename to public/audio/battle_anims/PRSFX- Fury Swipes.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fusion Bolt1.wav b/public/audio/battle_anims/PRSFX- Fusion Bolt1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fusion Bolt1.wav rename to public/audio/battle_anims/PRSFX- Fusion Bolt1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fusion Bolt2.wav b/public/audio/battle_anims/PRSFX- Fusion Bolt2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fusion Bolt2.wav rename to public/audio/battle_anims/PRSFX- Fusion Bolt2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fusion Flare1.wav b/public/audio/battle_anims/PRSFX- Fusion Flare1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fusion Flare1.wav rename to public/audio/battle_anims/PRSFX- Fusion Flare1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fusion Flare2.wav b/public/audio/battle_anims/PRSFX- Fusion Flare2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fusion Flare2.wav rename to public/audio/battle_anims/PRSFX- Fusion Flare2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Fusion Flare3.wav b/public/audio/battle_anims/PRSFX- Fusion Flare3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Fusion Flare3.wav rename to public/audio/battle_anims/PRSFX- Fusion Flare3.wav diff --git a/public/audio/se/battle_anims/PRSFX- FusionFlare3.wav b/public/audio/battle_anims/PRSFX- FusionFlare3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- FusionFlare3.wav rename to public/audio/battle_anims/PRSFX- FusionFlare3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Future Sight1.wav b/public/audio/battle_anims/PRSFX- Future Sight1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Future Sight1.wav rename to public/audio/battle_anims/PRSFX- Future Sight1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Future Sight2.wav b/public/audio/battle_anims/PRSFX- Future Sight2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Future Sight2.wav rename to public/audio/battle_anims/PRSFX- Future Sight2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gastro Acid.wav b/public/audio/battle_anims/PRSFX- Gastro Acid.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gastro Acid.wav rename to public/audio/battle_anims/PRSFX- Gastro Acid.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Grind.wav b/public/audio/battle_anims/PRSFX- Gear Grind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Grind.wav rename to public/audio/battle_anims/PRSFX- Gear Grind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Up1.wav b/public/audio/battle_anims/PRSFX- Gear Up1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Up1.wav rename to public/audio/battle_anims/PRSFX- Gear Up1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Up2.wav b/public/audio/battle_anims/PRSFX- Gear Up2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Up2.wav rename to public/audio/battle_anims/PRSFX- Gear Up2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Up3.wav b/public/audio/battle_anims/PRSFX- Gear Up3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Up3.wav rename to public/audio/battle_anims/PRSFX- Gear Up3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Up4.wav b/public/audio/battle_anims/PRSFX- Gear Up4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Up4.wav rename to public/audio/battle_anims/PRSFX- Gear Up4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Up5.wav b/public/audio/battle_anims/PRSFX- Gear Up5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Up5.wav rename to public/audio/battle_anims/PRSFX- Gear Up5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gear Up6.wav b/public/audio/battle_anims/PRSFX- Gear Up6.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gear Up6.wav rename to public/audio/battle_anims/PRSFX- Gear Up6.wav diff --git a/public/audio/se/battle_anims/PRSFX- Geomancy.wav b/public/audio/battle_anims/PRSFX- Geomancy.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Geomancy.wav rename to public/audio/battle_anims/PRSFX- Geomancy.wav diff --git a/public/audio/se/battle_anims/PRSFX- Giga Drain1.wav b/public/audio/battle_anims/PRSFX- Giga Drain1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Giga Drain1.wav rename to public/audio/battle_anims/PRSFX- Giga Drain1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Giga Drain2.wav b/public/audio/battle_anims/PRSFX- Giga Drain2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Giga Drain2.wav rename to public/audio/battle_anims/PRSFX- Giga Drain2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Giga Impact1.wav b/public/audio/battle_anims/PRSFX- Giga Impact1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Giga Impact1.wav rename to public/audio/battle_anims/PRSFX- Giga Impact1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Giga Impact2.wav b/public/audio/battle_anims/PRSFX- Giga Impact2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Giga Impact2.wav rename to public/audio/battle_anims/PRSFX- Giga Impact2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gigavolt Havoc1.wav b/public/audio/battle_anims/PRSFX- Gigavolt Havoc1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gigavolt Havoc1.wav rename to public/audio/battle_anims/PRSFX- Gigavolt Havoc1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gigavolt Havoc2.wav b/public/audio/battle_anims/PRSFX- Gigavolt Havoc2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gigavolt Havoc2.wav rename to public/audio/battle_anims/PRSFX- Gigavolt Havoc2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gigavolt Havoc3.wav b/public/audio/battle_anims/PRSFX- Gigavolt Havoc3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gigavolt Havoc3.wav rename to public/audio/battle_anims/PRSFX- Gigavolt Havoc3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Glaciate1.wav b/public/audio/battle_anims/PRSFX- Glaciate1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Glaciate1.wav rename to public/audio/battle_anims/PRSFX- Glaciate1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Glaciate2.wav b/public/audio/battle_anims/PRSFX- Glaciate2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Glaciate2.wav rename to public/audio/battle_anims/PRSFX- Glaciate2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Glare.wav b/public/audio/battle_anims/PRSFX- Glare.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Glare.wav rename to public/audio/battle_anims/PRSFX- Glare.wav diff --git a/public/audio/se/battle_anims/PRSFX- Glitch1.wav b/public/audio/battle_anims/PRSFX- Glitch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Glitch1.wav rename to public/audio/battle_anims/PRSFX- Glitch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Glitch2.wav b/public/audio/battle_anims/PRSFX- Glitch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Glitch2.wav rename to public/audio/battle_anims/PRSFX- Glitch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grass Knot1.wav b/public/audio/battle_anims/PRSFX- Grass Knot1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grass Knot1.wav rename to public/audio/battle_anims/PRSFX- Grass Knot1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grass Knot2.wav b/public/audio/battle_anims/PRSFX- Grass Knot2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grass Knot2.wav rename to public/audio/battle_anims/PRSFX- Grass Knot2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grass Pledge1.wav b/public/audio/battle_anims/PRSFX- Grass Pledge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grass Pledge1.wav rename to public/audio/battle_anims/PRSFX- Grass Pledge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grass Pledge2.wav b/public/audio/battle_anims/PRSFX- Grass Pledge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grass Pledge2.wav rename to public/audio/battle_anims/PRSFX- Grass Pledge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grass Whistle.wav b/public/audio/battle_anims/PRSFX- Grass Whistle.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grass Whistle.wav rename to public/audio/battle_anims/PRSFX- Grass Whistle.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grassy Terrain.wav b/public/audio/battle_anims/PRSFX- Grassy Terrain.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grassy Terrain.wav rename to public/audio/battle_anims/PRSFX- Grassy Terrain.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gravity.wav b/public/audio/battle_anims/PRSFX- Gravity.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gravity.wav rename to public/audio/battle_anims/PRSFX- Gravity.wav diff --git a/public/audio/se/battle_anims/PRSFX- Growth.wav b/public/audio/battle_anims/PRSFX- Growth.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Growth.wav rename to public/audio/battle_anims/PRSFX- Growth.wav diff --git a/public/audio/se/battle_anims/PRSFX- Grudge.wav b/public/audio/battle_anims/PRSFX- Grudge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Grudge.wav rename to public/audio/battle_anims/PRSFX- Grudge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Guard Split.wav b/public/audio/battle_anims/PRSFX- Guard Split.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Guard Split.wav rename to public/audio/battle_anims/PRSFX- Guard Split.wav diff --git a/public/audio/se/battle_anims/PRSFX- Guard Swap.wav b/public/audio/battle_anims/PRSFX- Guard Swap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Guard Swap.wav rename to public/audio/battle_anims/PRSFX- Guard Swap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Guillotine1.wav b/public/audio/battle_anims/PRSFX- Guillotine1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Guillotine1.wav rename to public/audio/battle_anims/PRSFX- Guillotine1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Guillotine2.wav b/public/audio/battle_anims/PRSFX- Guillotine2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Guillotine2.wav rename to public/audio/battle_anims/PRSFX- Guillotine2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gunk Shot.wav b/public/audio/battle_anims/PRSFX- Gunk Shot.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gunk Shot.wav rename to public/audio/battle_anims/PRSFX- Gunk Shot.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gust.wav b/public/audio/battle_anims/PRSFX- Gust.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gust.wav rename to public/audio/battle_anims/PRSFX- Gust.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gyro Ball1.wav b/public/audio/battle_anims/PRSFX- Gyro Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gyro Ball1.wav rename to public/audio/battle_anims/PRSFX- Gyro Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Gyro Ball2.wav b/public/audio/battle_anims/PRSFX- Gyro Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Gyro Ball2.wav rename to public/audio/battle_anims/PRSFX- Gyro Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hail.wav b/public/audio/battle_anims/PRSFX- Hail.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hail.wav rename to public/audio/battle_anims/PRSFX- Hail.wav diff --git a/public/audio/se/battle_anims/PRSFX- HailMove.wav b/public/audio/battle_anims/PRSFX- HailMove.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- HailMove.wav rename to public/audio/battle_anims/PRSFX- HailMove.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hammer Arm1.wav b/public/audio/battle_anims/PRSFX- Hammer Arm1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hammer Arm1.wav rename to public/audio/battle_anims/PRSFX- Hammer Arm1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hammer Arm2.wav b/public/audio/battle_anims/PRSFX- Hammer Arm2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hammer Arm2.wav rename to public/audio/battle_anims/PRSFX- Hammer Arm2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Harden.wav b/public/audio/battle_anims/PRSFX- Harden.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Harden.wav rename to public/audio/battle_anims/PRSFX- Harden.wav diff --git a/public/audio/se/battle_anims/PRSFX- Haze.wav b/public/audio/battle_anims/PRSFX- Haze.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Haze.wav rename to public/audio/battle_anims/PRSFX- Haze.wav diff --git a/public/audio/se/battle_anims/PRSFX- Head Charge.wav b/public/audio/battle_anims/PRSFX- Head Charge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Head Charge.wav rename to public/audio/battle_anims/PRSFX- Head Charge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Head Smash.wav b/public/audio/battle_anims/PRSFX- Head Smash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Head Smash.wav rename to public/audio/battle_anims/PRSFX- Head Smash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Headbutt1.wav b/public/audio/battle_anims/PRSFX- Headbutt1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Headbutt1.wav rename to public/audio/battle_anims/PRSFX- Headbutt1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Headbutt2.wav b/public/audio/battle_anims/PRSFX- Headbutt2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Headbutt2.wav rename to public/audio/battle_anims/PRSFX- Headbutt2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heal Bell.wav b/public/audio/battle_anims/PRSFX- Heal Bell.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heal Bell.wav rename to public/audio/battle_anims/PRSFX- Heal Bell.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heal Block.wav b/public/audio/battle_anims/PRSFX- Heal Block.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heal Block.wav rename to public/audio/battle_anims/PRSFX- Heal Block.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heal Order1.wav b/public/audio/battle_anims/PRSFX- Heal Order1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heal Order1.wav rename to public/audio/battle_anims/PRSFX- Heal Order1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heal Order2.wav b/public/audio/battle_anims/PRSFX- Heal Order2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heal Order2.wav rename to public/audio/battle_anims/PRSFX- Heal Order2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Healing Pulse.wav b/public/audio/battle_anims/PRSFX- Healing Pulse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Healing Pulse.wav rename to public/audio/battle_anims/PRSFX- Healing Pulse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Healing Wish.wav b/public/audio/battle_anims/PRSFX- Healing Wish.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Healing Wish.wav rename to public/audio/battle_anims/PRSFX- Healing Wish.wav diff --git a/public/audio/se/battle_anims/PRSFX- Health Down.wav b/public/audio/battle_anims/PRSFX- Health Down.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Health Down.wav rename to public/audio/battle_anims/PRSFX- Health Down.wav diff --git a/public/audio/se/battle_anims/PRSFX- Health Up.wav b/public/audio/battle_anims/PRSFX- Health Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Health Up.wav rename to public/audio/battle_anims/PRSFX- Health Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heart Stamp1.wav b/public/audio/battle_anims/PRSFX- Heart Stamp1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heart Stamp1.wav rename to public/audio/battle_anims/PRSFX- Heart Stamp1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heart Stamp2.wav b/public/audio/battle_anims/PRSFX- Heart Stamp2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heart Stamp2.wav rename to public/audio/battle_anims/PRSFX- Heart Stamp2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heart Swap.wav b/public/audio/battle_anims/PRSFX- Heart Swap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heart Swap.wav rename to public/audio/battle_anims/PRSFX- Heart Swap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heat Crash.wav b/public/audio/battle_anims/PRSFX- Heat Crash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heat Crash.wav rename to public/audio/battle_anims/PRSFX- Heat Crash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heat Wave.wav b/public/audio/battle_anims/PRSFX- Heat Wave.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heat Wave.wav rename to public/audio/battle_anims/PRSFX- Heat Wave.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heavy Slam1.wav b/public/audio/battle_anims/PRSFX- Heavy Slam1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heavy Slam1.wav rename to public/audio/battle_anims/PRSFX- Heavy Slam1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Heavy Slam2.wav b/public/audio/battle_anims/PRSFX- Heavy Slam2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Heavy Slam2.wav rename to public/audio/battle_anims/PRSFX- Heavy Slam2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Helping Hand.wav b/public/audio/battle_anims/PRSFX- Helping Hand.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Helping Hand.wav rename to public/audio/battle_anims/PRSFX- Helping Hand.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hex.wav b/public/audio/battle_anims/PRSFX- Hex.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hex.wav rename to public/audio/battle_anims/PRSFX- Hex.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hi Jump Kick1.wav b/public/audio/battle_anims/PRSFX- Hi Jump Kick1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hi Jump Kick1.wav rename to public/audio/battle_anims/PRSFX- Hi Jump Kick1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hi Jump Kick2.wav b/public/audio/battle_anims/PRSFX- Hi Jump Kick2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hi Jump Kick2.wav rename to public/audio/battle_anims/PRSFX- Hi Jump Kick2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hidden Power1.wav b/public/audio/battle_anims/PRSFX- Hidden Power1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hidden Power1.wav rename to public/audio/battle_anims/PRSFX- Hidden Power1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hidden Power2.wav b/public/audio/battle_anims/PRSFX- Hidden Power2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hidden Power2.wav rename to public/audio/battle_anims/PRSFX- Hidden Power2.wav diff --git a/public/audio/se/battle_anims/PRSFX- High Horse Power1.wav b/public/audio/battle_anims/PRSFX- High Horse Power1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- High Horse Power1.wav rename to public/audio/battle_anims/PRSFX- High Horse Power1.wav diff --git a/public/audio/se/battle_anims/PRSFX- High Horse Power2.wav b/public/audio/battle_anims/PRSFX- High Horse Power2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- High Horse Power2.wav rename to public/audio/battle_anims/PRSFX- High Horse Power2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hone Claws.wav b/public/audio/battle_anims/PRSFX- Hone Claws.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hone Claws.wav rename to public/audio/battle_anims/PRSFX- Hone Claws.wav diff --git a/public/audio/se/battle_anims/PRSFX- Horn Attack.wav b/public/audio/battle_anims/PRSFX- Horn Attack.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Attack.wav rename to public/audio/battle_anims/PRSFX- Horn Attack.wav diff --git a/public/audio/se/battle_anims/PRSFX- Horn Drill1.wav b/public/audio/battle_anims/PRSFX- Horn Drill1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Drill1.wav rename to public/audio/battle_anims/PRSFX- Horn Drill1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Horn Drill2.wav b/public/audio/battle_anims/PRSFX- Horn Drill2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Drill2.wav rename to public/audio/battle_anims/PRSFX- Horn Drill2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Horn Drill3.wav b/public/audio/battle_anims/PRSFX- Horn Drill3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Drill3.wav rename to public/audio/battle_anims/PRSFX- Horn Drill3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Horn Drill3_1.mp3 b/public/audio/battle_anims/PRSFX- Horn Drill3_1.mp3 similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Drill3_1.mp3 rename to public/audio/battle_anims/PRSFX- Horn Drill3_1.mp3 diff --git a/public/audio/se/battle_anims/PRSFX- Horn Leech1.wav b/public/audio/battle_anims/PRSFX- Horn Leech1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Leech1.wav rename to public/audio/battle_anims/PRSFX- Horn Leech1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Horn Leech2.wav b/public/audio/battle_anims/PRSFX- Horn Leech2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Horn Leech2.wav rename to public/audio/battle_anims/PRSFX- Horn Leech2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hurricane.wav b/public/audio/battle_anims/PRSFX- Hurricane.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hurricane.wav rename to public/audio/battle_anims/PRSFX- Hurricane.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Cannon.wav b/public/audio/battle_anims/PRSFX- Hydro Cannon.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Cannon.wav rename to public/audio/battle_anims/PRSFX- Hydro Cannon.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Cannon1.wav b/public/audio/battle_anims/PRSFX- Hydro Cannon1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Cannon1.wav rename to public/audio/battle_anims/PRSFX- Hydro Cannon1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Cannon2.wav b/public/audio/battle_anims/PRSFX- Hydro Cannon2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Cannon2.wav rename to public/audio/battle_anims/PRSFX- Hydro Cannon2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Pump.wav b/public/audio/battle_anims/PRSFX- Hydro Pump.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Pump.wav rename to public/audio/battle_anims/PRSFX- Hydro Pump.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Vortex1.wav b/public/audio/battle_anims/PRSFX- Hydro Vortex1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Vortex1.wav rename to public/audio/battle_anims/PRSFX- Hydro Vortex1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Vortex2.wav b/public/audio/battle_anims/PRSFX- Hydro Vortex2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Vortex2.wav rename to public/audio/battle_anims/PRSFX- Hydro Vortex2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hydro Vortex3.wav b/public/audio/battle_anims/PRSFX- Hydro Vortex3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hydro Vortex3.wav rename to public/audio/battle_anims/PRSFX- Hydro Vortex3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hyper Beam.wav b/public/audio/battle_anims/PRSFX- Hyper Beam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hyper Beam.wav rename to public/audio/battle_anims/PRSFX- Hyper Beam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hyper Fang.wav b/public/audio/battle_anims/PRSFX- Hyper Fang.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hyper Fang.wav rename to public/audio/battle_anims/PRSFX- Hyper Fang.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hyperspace Fury1.wav b/public/audio/battle_anims/PRSFX- Hyperspace Fury1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hyperspace Fury1.wav rename to public/audio/battle_anims/PRSFX- Hyperspace Fury1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hyperspace Fury2.wav b/public/audio/battle_anims/PRSFX- Hyperspace Fury2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hyperspace Fury2.wav rename to public/audio/battle_anims/PRSFX- Hyperspace Fury2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hyperspace Hole1.wav b/public/audio/battle_anims/PRSFX- Hyperspace Hole1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hyperspace Hole1.wav rename to public/audio/battle_anims/PRSFX- Hyperspace Hole1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hyperspace Hole2.wav b/public/audio/battle_anims/PRSFX- Hyperspace Hole2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hyperspace Hole2.wav rename to public/audio/battle_anims/PRSFX- Hyperspace Hole2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Hypnosis.wav b/public/audio/battle_anims/PRSFX- Hypnosis.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Hypnosis.wav rename to public/audio/battle_anims/PRSFX- Hypnosis.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Ball1.wav b/public/audio/battle_anims/PRSFX- Ice Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Ball1.wav rename to public/audio/battle_anims/PRSFX- Ice Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Ball2.wav b/public/audio/battle_anims/PRSFX- Ice Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Ball2.wav rename to public/audio/battle_anims/PRSFX- Ice Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Beam.wav b/public/audio/battle_anims/PRSFX- Ice Beam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Beam.wav rename to public/audio/battle_anims/PRSFX- Ice Beam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Burn1.wav b/public/audio/battle_anims/PRSFX- Ice Burn1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Burn1.wav rename to public/audio/battle_anims/PRSFX- Ice Burn1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Burn2.wav b/public/audio/battle_anims/PRSFX- Ice Burn2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Burn2.wav rename to public/audio/battle_anims/PRSFX- Ice Burn2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Burn3.wav b/public/audio/battle_anims/PRSFX- Ice Burn3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Burn3.wav rename to public/audio/battle_anims/PRSFX- Ice Burn3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Burn4.wav b/public/audio/battle_anims/PRSFX- Ice Burn4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Burn4.wav rename to public/audio/battle_anims/PRSFX- Ice Burn4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Fang1.wav b/public/audio/battle_anims/PRSFX- Ice Fang1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Fang1.wav rename to public/audio/battle_anims/PRSFX- Ice Fang1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Fang2.wav b/public/audio/battle_anims/PRSFX- Ice Fang2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Fang2.wav rename to public/audio/battle_anims/PRSFX- Ice Fang2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Hammer1.wav b/public/audio/battle_anims/PRSFX- Ice Hammer1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Hammer1.wav rename to public/audio/battle_anims/PRSFX- Ice Hammer1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Hammer2.wav b/public/audio/battle_anims/PRSFX- Ice Hammer2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Hammer2.wav rename to public/audio/battle_anims/PRSFX- Ice Hammer2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Punch1.wav b/public/audio/battle_anims/PRSFX- Ice Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Punch1.wav rename to public/audio/battle_anims/PRSFX- Ice Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Punch2.wav b/public/audio/battle_anims/PRSFX- Ice Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Punch2.wav rename to public/audio/battle_anims/PRSFX- Ice Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ice Shard.wav b/public/audio/battle_anims/PRSFX- Ice Shard.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ice Shard.wav rename to public/audio/battle_anims/PRSFX- Ice Shard.wav diff --git a/public/audio/se/battle_anims/PRSFX- Icicle Crash1.wav b/public/audio/battle_anims/PRSFX- Icicle Crash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Icicle Crash1.wav rename to public/audio/battle_anims/PRSFX- Icicle Crash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Icicle Crash2.wav b/public/audio/battle_anims/PRSFX- Icicle Crash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Icicle Crash2.wav rename to public/audio/battle_anims/PRSFX- Icicle Crash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Icicle Spear.wav b/public/audio/battle_anims/PRSFX- Icicle Spear.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Icicle Spear.wav rename to public/audio/battle_anims/PRSFX- Icicle Spear.wav diff --git a/public/audio/se/battle_anims/PRSFX- Icy Wind1.wav b/public/audio/battle_anims/PRSFX- Icy Wind1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Icy Wind1.wav rename to public/audio/battle_anims/PRSFX- Icy Wind1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Icy Wind2.wav b/public/audio/battle_anims/PRSFX- Icy Wind2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Icy Wind2.wav rename to public/audio/battle_anims/PRSFX- Icy Wind2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Imprison1.wav b/public/audio/battle_anims/PRSFX- Imprison1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Imprison1.wav rename to public/audio/battle_anims/PRSFX- Imprison1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Imprison2.wav b/public/audio/battle_anims/PRSFX- Imprison2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Imprison2.wav rename to public/audio/battle_anims/PRSFX- Imprison2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Incinerate1.wav b/public/audio/battle_anims/PRSFX- Incinerate1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Incinerate1.wav rename to public/audio/battle_anims/PRSFX- Incinerate1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Incinerate2.wav b/public/audio/battle_anims/PRSFX- Incinerate2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Incinerate2.wav rename to public/audio/battle_anims/PRSFX- Incinerate2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Inferno Overdrive1.wav b/public/audio/battle_anims/PRSFX- Inferno Overdrive1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Inferno Overdrive1.wav rename to public/audio/battle_anims/PRSFX- Inferno Overdrive1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Inferno Overdrive2.wav b/public/audio/battle_anims/PRSFX- Inferno Overdrive2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Inferno Overdrive2.wav rename to public/audio/battle_anims/PRSFX- Inferno Overdrive2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Inferno Overdrive3.wav b/public/audio/battle_anims/PRSFX- Inferno Overdrive3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Inferno Overdrive3.wav rename to public/audio/battle_anims/PRSFX- Inferno Overdrive3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Inferno Overdrive4.wav b/public/audio/battle_anims/PRSFX- Inferno Overdrive4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Inferno Overdrive4.wav rename to public/audio/battle_anims/PRSFX- Inferno Overdrive4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Inferno Overdrive5.wav b/public/audio/battle_anims/PRSFX- Inferno Overdrive5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Inferno Overdrive5.wav rename to public/audio/battle_anims/PRSFX- Inferno Overdrive5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Inferno.wav b/public/audio/battle_anims/PRSFX- Inferno.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Inferno.wav rename to public/audio/battle_anims/PRSFX- Inferno.wav diff --git a/public/audio/se/battle_anims/PRSFX- Infestation.wav b/public/audio/battle_anims/PRSFX- Infestation.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Infestation.wav rename to public/audio/battle_anims/PRSFX- Infestation.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ingrain1.wav b/public/audio/battle_anims/PRSFX- Ingrain1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ingrain1.wav rename to public/audio/battle_anims/PRSFX- Ingrain1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ingrain2.wav b/public/audio/battle_anims/PRSFX- Ingrain2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ingrain2.wav rename to public/audio/battle_anims/PRSFX- Ingrain2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Instruct1.wav b/public/audio/battle_anims/PRSFX- Instruct1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Instruct1.wav rename to public/audio/battle_anims/PRSFX- Instruct1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Instruct2.wav b/public/audio/battle_anims/PRSFX- Instruct2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Instruct2.wav rename to public/audio/battle_anims/PRSFX- Instruct2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ion Deluge.wav b/public/audio/battle_anims/PRSFX- Ion Deluge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ion Deluge.wav rename to public/audio/battle_anims/PRSFX- Ion Deluge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Iron Defense.wav b/public/audio/battle_anims/PRSFX- Iron Defense.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Iron Defense.wav rename to public/audio/battle_anims/PRSFX- Iron Defense.wav diff --git a/public/audio/se/battle_anims/PRSFX- Iron Head.wav b/public/audio/battle_anims/PRSFX- Iron Head.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Iron Head.wav rename to public/audio/battle_anims/PRSFX- Iron Head.wav diff --git a/public/audio/se/battle_anims/PRSFX- Iron Tail1.wav b/public/audio/battle_anims/PRSFX- Iron Tail1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Iron Tail1.wav rename to public/audio/battle_anims/PRSFX- Iron Tail1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Iron Tail2.wav b/public/audio/battle_anims/PRSFX- Iron Tail2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Iron Tail2.wav rename to public/audio/battle_anims/PRSFX- Iron Tail2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Judgment.wav b/public/audio/battle_anims/PRSFX- Judgment.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Judgment.wav rename to public/audio/battle_anims/PRSFX- Judgment.wav diff --git a/public/audio/se/battle_anims/PRSFX- Jump Kick1.wav b/public/audio/battle_anims/PRSFX- Jump Kick1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Jump Kick1.wav rename to public/audio/battle_anims/PRSFX- Jump Kick1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Jump Kick2.wav b/public/audio/battle_anims/PRSFX- Jump Kick2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Jump Kick2.wav rename to public/audio/battle_anims/PRSFX- Jump Kick2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Karate Chop1.wav b/public/audio/battle_anims/PRSFX- Karate Chop1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Karate Chop1.wav rename to public/audio/battle_anims/PRSFX- Karate Chop1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Karate Chop2.wav b/public/audio/battle_anims/PRSFX- Karate Chop2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Karate Chop2.wav rename to public/audio/battle_anims/PRSFX- Karate Chop2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Kinesis.wav b/public/audio/battle_anims/PRSFX- Kinesis.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Kinesis.wav rename to public/audio/battle_anims/PRSFX- Kinesis.wav diff --git a/public/audio/se/battle_anims/PRSFX- King's Shield1.wav b/public/audio/battle_anims/PRSFX- King's Shield1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- King's Shield1.wav rename to public/audio/battle_anims/PRSFX- King's Shield1.wav diff --git a/public/audio/se/battle_anims/PRSFX- King's Shield2.wav b/public/audio/battle_anims/PRSFX- King's Shield2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- King's Shield2.wav rename to public/audio/battle_anims/PRSFX- King's Shield2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Knock Off.wav b/public/audio/battle_anims/PRSFX- Knock Off.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Knock Off.wav rename to public/audio/battle_anims/PRSFX- Knock Off.wav diff --git a/public/audio/se/battle_anims/PRSFX- LTBTS1.wav b/public/audio/battle_anims/PRSFX- LTBTS1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- LTBTS1.wav rename to public/audio/battle_anims/PRSFX- LTBTS1.wav diff --git a/public/audio/se/battle_anims/PRSFX- LTBTS2.wav b/public/audio/battle_anims/PRSFX- LTBTS2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- LTBTS2.wav rename to public/audio/battle_anims/PRSFX- LTBTS2.wav diff --git a/public/audio/se/battle_anims/PRSFX- LTBTS3.wav b/public/audio/battle_anims/PRSFX- LTBTS3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- LTBTS3.wav rename to public/audio/battle_anims/PRSFX- LTBTS3.wav diff --git a/public/audio/se/battle_anims/PRSFX- LTBTS4.wav b/public/audio/battle_anims/PRSFX- LTBTS4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- LTBTS4.wav rename to public/audio/battle_anims/PRSFX- LTBTS4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lands Wrath1.wav b/public/audio/battle_anims/PRSFX- Lands Wrath1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lands Wrath1.wav rename to public/audio/battle_anims/PRSFX- Lands Wrath1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lands Wrath2.wav b/public/audio/battle_anims/PRSFX- Lands Wrath2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lands Wrath2.wav rename to public/audio/battle_anims/PRSFX- Lands Wrath2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Laser Focus1.wav b/public/audio/battle_anims/PRSFX- Laser Focus1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Laser Focus1.wav rename to public/audio/battle_anims/PRSFX- Laser Focus1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Laser Focus2.wav b/public/audio/battle_anims/PRSFX- Laser Focus2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Laser Focus2.wav rename to public/audio/battle_anims/PRSFX- Laser Focus2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Last Resort1.wav b/public/audio/battle_anims/PRSFX- Last Resort1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Last Resort1.wav rename to public/audio/battle_anims/PRSFX- Last Resort1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Last Resort2.wav b/public/audio/battle_anims/PRSFX- Last Resort2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Last Resort2.wav rename to public/audio/battle_anims/PRSFX- Last Resort2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lava Plume.wav b/public/audio/battle_anims/PRSFX- Lava Plume.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lava Plume.wav rename to public/audio/battle_anims/PRSFX- Lava Plume.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leaf Blade.wav b/public/audio/battle_anims/PRSFX- Leaf Blade.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leaf Blade.wav rename to public/audio/battle_anims/PRSFX- Leaf Blade.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leaf Storm1.wav b/public/audio/battle_anims/PRSFX- Leaf Storm1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leaf Storm1.wav rename to public/audio/battle_anims/PRSFX- Leaf Storm1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leaf Storm2.wav b/public/audio/battle_anims/PRSFX- Leaf Storm2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leaf Storm2.wav rename to public/audio/battle_anims/PRSFX- Leaf Storm2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leaf Tornado1.wav b/public/audio/battle_anims/PRSFX- Leaf Tornado1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leaf Tornado1.wav rename to public/audio/battle_anims/PRSFX- Leaf Tornado1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leaf Tornado2.wav b/public/audio/battle_anims/PRSFX- Leaf Tornado2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leaf Tornado2.wav rename to public/audio/battle_anims/PRSFX- Leaf Tornado2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leafage 1.wav b/public/audio/battle_anims/PRSFX- Leafage 1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leafage 1.wav rename to public/audio/battle_anims/PRSFX- Leafage 1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leafage 2.wav b/public/audio/battle_anims/PRSFX- Leafage 2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leafage 2.wav rename to public/audio/battle_anims/PRSFX- Leafage 2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leech Life1.wav b/public/audio/battle_anims/PRSFX- Leech Life1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leech Life1.wav rename to public/audio/battle_anims/PRSFX- Leech Life1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leech Life2.wav b/public/audio/battle_anims/PRSFX- Leech Life2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leech Life2.wav rename to public/audio/battle_anims/PRSFX- Leech Life2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leech Seed1.wav b/public/audio/battle_anims/PRSFX- Leech Seed1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leech Seed1.wav rename to public/audio/battle_anims/PRSFX- Leech Seed1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leech Seed2.wav b/public/audio/battle_anims/PRSFX- Leech Seed2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leech Seed2.wav rename to public/audio/battle_anims/PRSFX- Leech Seed2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leech Seed3.wav b/public/audio/battle_anims/PRSFX- Leech Seed3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leech Seed3.wav rename to public/audio/battle_anims/PRSFX- Leech Seed3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Leer.wav b/public/audio/battle_anims/PRSFX- Leer.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Leer.wav rename to public/audio/battle_anims/PRSFX- Leer.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lick.wav b/public/audio/battle_anims/PRSFX- Lick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lick.wav rename to public/audio/battle_anims/PRSFX- Lick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Light Screen.wav b/public/audio/battle_anims/PRSFX- Light Screen.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Light Screen.wav rename to public/audio/battle_anims/PRSFX- Light Screen.wav diff --git a/public/audio/se/battle_anims/PRSFX- Liquidation1.wav b/public/audio/battle_anims/PRSFX- Liquidation1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Liquidation1.wav rename to public/audio/battle_anims/PRSFX- Liquidation1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Liquidation2.wav b/public/audio/battle_anims/PRSFX- Liquidation2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Liquidation2.wav rename to public/audio/battle_anims/PRSFX- Liquidation2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Liquidation3.wav b/public/audio/battle_anims/PRSFX- Liquidation3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Liquidation3.wav rename to public/audio/battle_anims/PRSFX- Liquidation3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Liquidation4.wav b/public/audio/battle_anims/PRSFX- Liquidation4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Liquidation4.wav rename to public/audio/battle_anims/PRSFX- Liquidation4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lock On.wav b/public/audio/battle_anims/PRSFX- Lock On.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lock On.wav rename to public/audio/battle_anims/PRSFX- Lock On.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lovely Kiss.wav b/public/audio/battle_anims/PRSFX- Lovely Kiss.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lovely Kiss.wav rename to public/audio/battle_anims/PRSFX- Lovely Kiss.wav diff --git a/public/audio/se/battle_anims/PRSFX- Low Kick.wav b/public/audio/battle_anims/PRSFX- Low Kick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Low Kick.wav rename to public/audio/battle_anims/PRSFX- Low Kick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Low Sweep.wav b/public/audio/battle_anims/PRSFX- Low Sweep.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Low Sweep.wav rename to public/audio/battle_anims/PRSFX- Low Sweep.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lucky Chant.wav b/public/audio/battle_anims/PRSFX- Lucky Chant.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lucky Chant.wav rename to public/audio/battle_anims/PRSFX- Lucky Chant.wav diff --git a/public/audio/se/battle_anims/PRSFX- Lunar Dance.wav b/public/audio/battle_anims/PRSFX- Lunar Dance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Lunar Dance.wav rename to public/audio/battle_anims/PRSFX- Lunar Dance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Luster Purge1.wav b/public/audio/battle_anims/PRSFX- Luster Purge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Luster Purge1.wav rename to public/audio/battle_anims/PRSFX- Luster Purge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Luster Purge2.wav b/public/audio/battle_anims/PRSFX- Luster Purge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Luster Purge2.wav rename to public/audio/battle_anims/PRSFX- Luster Purge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Luster Purge3.wav b/public/audio/battle_anims/PRSFX- Luster Purge3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Luster Purge3.wav rename to public/audio/battle_anims/PRSFX- Luster Purge3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mach Punch.wav b/public/audio/battle_anims/PRSFX- Mach Punch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mach Punch.wav rename to public/audio/battle_anims/PRSFX- Mach Punch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magic Coat.wav b/public/audio/battle_anims/PRSFX- Magic Coat.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magic Coat.wav rename to public/audio/battle_anims/PRSFX- Magic Coat.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magic Room.wav b/public/audio/battle_anims/PRSFX- Magic Room.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magic Room.wav rename to public/audio/battle_anims/PRSFX- Magic Room.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magical Leaf1.wav b/public/audio/battle_anims/PRSFX- Magical Leaf1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magical Leaf1.wav rename to public/audio/battle_anims/PRSFX- Magical Leaf1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magical Leaf2.wav b/public/audio/battle_anims/PRSFX- Magical Leaf2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magical Leaf2.wav rename to public/audio/battle_anims/PRSFX- Magical Leaf2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magma Storm1.wav b/public/audio/battle_anims/PRSFX- Magma Storm1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magma Storm1.wav rename to public/audio/battle_anims/PRSFX- Magma Storm1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magma Storm2.wav b/public/audio/battle_anims/PRSFX- Magma Storm2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magma Storm2.wav rename to public/audio/battle_anims/PRSFX- Magma Storm2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magnet Bomb1.wav b/public/audio/battle_anims/PRSFX- Magnet Bomb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magnet Bomb1.wav rename to public/audio/battle_anims/PRSFX- Magnet Bomb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magnet Bomb2.wav b/public/audio/battle_anims/PRSFX- Magnet Bomb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magnet Bomb2.wav rename to public/audio/battle_anims/PRSFX- Magnet Bomb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magnet Rise.wav b/public/audio/battle_anims/PRSFX- Magnet Rise.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magnet Rise.wav rename to public/audio/battle_anims/PRSFX- Magnet Rise.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magnetic Flux.wav b/public/audio/battle_anims/PRSFX- Magnetic Flux.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magnetic Flux.wav rename to public/audio/battle_anims/PRSFX- Magnetic Flux.wav diff --git a/public/audio/se/battle_anims/PRSFX- Magnitude.wav b/public/audio/battle_anims/PRSFX- Magnitude.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Magnitude.wav rename to public/audio/battle_anims/PRSFX- Magnitude.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mat Block.wav b/public/audio/battle_anims/PRSFX- Mat Block.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mat Block.wav rename to public/audio/battle_anims/PRSFX- Mat Block.wav diff --git a/public/audio/se/battle_anims/PRSFX- Me First1.wav b/public/audio/battle_anims/PRSFX- Me First1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Me First1.wav rename to public/audio/battle_anims/PRSFX- Me First1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Me First2.wav b/public/audio/battle_anims/PRSFX- Me First2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Me First2.wav rename to public/audio/battle_anims/PRSFX- Me First2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Me First3.wav b/public/audio/battle_anims/PRSFX- Me First3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Me First3.wav rename to public/audio/battle_anims/PRSFX- Me First3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mean Look.wav b/public/audio/battle_anims/PRSFX- Mean Look.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mean Look.wav rename to public/audio/battle_anims/PRSFX- Mean Look.wav diff --git a/public/audio/se/battle_anims/PRSFX- Meditate.wav b/public/audio/battle_anims/PRSFX- Meditate.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Meditate.wav rename to public/audio/battle_anims/PRSFX- Meditate.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mega Drain1.wav b/public/audio/battle_anims/PRSFX- Mega Drain1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mega Drain1.wav rename to public/audio/battle_anims/PRSFX- Mega Drain1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mega Drain2.wav b/public/audio/battle_anims/PRSFX- Mega Drain2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mega Drain2.wav rename to public/audio/battle_anims/PRSFX- Mega Drain2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mega Evolution1.wav b/public/audio/battle_anims/PRSFX- Mega Evolution1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mega Evolution1.wav rename to public/audio/battle_anims/PRSFX- Mega Evolution1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mega Evolution2.wav b/public/audio/battle_anims/PRSFX- Mega Evolution2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mega Evolution2.wav rename to public/audio/battle_anims/PRSFX- Mega Evolution2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mega Punch1.wav b/public/audio/battle_anims/PRSFX- Mega Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mega Punch1.wav rename to public/audio/battle_anims/PRSFX- Mega Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mega Punch2.wav b/public/audio/battle_anims/PRSFX- Mega Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mega Punch2.wav rename to public/audio/battle_anims/PRSFX- Mega Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Megahorn1.wav b/public/audio/battle_anims/PRSFX- Megahorn1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Megahorn1.wav rename to public/audio/battle_anims/PRSFX- Megahorn1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Megahorn2.wav b/public/audio/battle_anims/PRSFX- Megahorn2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Megahorn2.wav rename to public/audio/battle_anims/PRSFX- Megahorn2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Megakick.wav b/public/audio/battle_anims/PRSFX- Megakick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Megakick.wav rename to public/audio/battle_anims/PRSFX- Megakick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Memento1.wav b/public/audio/battle_anims/PRSFX- Memento1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Memento1.wav rename to public/audio/battle_anims/PRSFX- Memento1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Memento2.wav b/public/audio/battle_anims/PRSFX- Memento2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Memento2.wav rename to public/audio/battle_anims/PRSFX- Memento2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Metal Burst1.wav b/public/audio/battle_anims/PRSFX- Metal Burst1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Metal Burst1.wav rename to public/audio/battle_anims/PRSFX- Metal Burst1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Metal Burst2.wav b/public/audio/battle_anims/PRSFX- Metal Burst2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Metal Burst2.wav rename to public/audio/battle_anims/PRSFX- Metal Burst2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Metal Claw1.wav b/public/audio/battle_anims/PRSFX- Metal Claw1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Metal Claw1.wav rename to public/audio/battle_anims/PRSFX- Metal Claw1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Metal Claw2.wav b/public/audio/battle_anims/PRSFX- Metal Claw2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Metal Claw2.wav rename to public/audio/battle_anims/PRSFX- Metal Claw2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Metal Sound.wav b/public/audio/battle_anims/PRSFX- Metal Sound.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Metal Sound.wav rename to public/audio/battle_anims/PRSFX- Metal Sound.wav diff --git a/public/audio/se/battle_anims/PRSFX- Meteor Mash1.wav b/public/audio/battle_anims/PRSFX- Meteor Mash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Meteor Mash1.wav rename to public/audio/battle_anims/PRSFX- Meteor Mash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Meteor Mash2.wav b/public/audio/battle_anims/PRSFX- Meteor Mash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Meteor Mash2.wav rename to public/audio/battle_anims/PRSFX- Meteor Mash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Metronome.wav b/public/audio/battle_anims/PRSFX- Metronome.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Metronome.wav rename to public/audio/battle_anims/PRSFX- Metronome.wav diff --git a/public/audio/se/battle_anims/PRSFX- Milk Drink.wav b/public/audio/battle_anims/PRSFX- Milk Drink.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Milk Drink.wav rename to public/audio/battle_anims/PRSFX- Milk Drink.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mimic1.wav b/public/audio/battle_anims/PRSFX- Mimic1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mimic1.wav rename to public/audio/battle_anims/PRSFX- Mimic1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mimic2.wav b/public/audio/battle_anims/PRSFX- Mimic2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mimic2.wav rename to public/audio/battle_anims/PRSFX- Mimic2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mind Blow1.wav b/public/audio/battle_anims/PRSFX- Mind Blow1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mind Blow1.wav rename to public/audio/battle_anims/PRSFX- Mind Blow1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mind Blow2.wav b/public/audio/battle_anims/PRSFX- Mind Blow2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mind Blow2.wav rename to public/audio/battle_anims/PRSFX- Mind Blow2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mind Blow3.wav b/public/audio/battle_anims/PRSFX- Mind Blow3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mind Blow3.wav rename to public/audio/battle_anims/PRSFX- Mind Blow3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mind Blow4.wav b/public/audio/battle_anims/PRSFX- Mind Blow4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mind Blow4.wav rename to public/audio/battle_anims/PRSFX- Mind Blow4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mind Reader.wav b/public/audio/battle_anims/PRSFX- Mind Reader.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mind Reader.wav rename to public/audio/battle_anims/PRSFX- Mind Reader.wav diff --git a/public/audio/se/battle_anims/PRSFX- Minimize1.wav b/public/audio/battle_anims/PRSFX- Minimize1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Minimize1.wav rename to public/audio/battle_anims/PRSFX- Minimize1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Minimize2.wav b/public/audio/battle_anims/PRSFX- Minimize2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Minimize2.wav rename to public/audio/battle_anims/PRSFX- Minimize2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Minimize3.wav b/public/audio/battle_anims/PRSFX- Minimize3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Minimize3.wav rename to public/audio/battle_anims/PRSFX- Minimize3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Miracle Eye.wav b/public/audio/battle_anims/PRSFX- Miracle Eye.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Miracle Eye.wav rename to public/audio/battle_anims/PRSFX- Miracle Eye.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mirror Coat.wav b/public/audio/battle_anims/PRSFX- Mirror Coat.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mirror Coat.wav rename to public/audio/battle_anims/PRSFX- Mirror Coat.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mirror Shatter.wav b/public/audio/battle_anims/PRSFX- Mirror Shatter.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mirror Shatter.wav rename to public/audio/battle_anims/PRSFX- Mirror Shatter.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mirror Shot.wav b/public/audio/battle_anims/PRSFX- Mirror Shot.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mirror Shot.wav rename to public/audio/battle_anims/PRSFX- Mirror Shot.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mist Ball1.wav b/public/audio/battle_anims/PRSFX- Mist Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mist Ball1.wav rename to public/audio/battle_anims/PRSFX- Mist Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mist Ball2.wav b/public/audio/battle_anims/PRSFX- Mist Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mist Ball2.wav rename to public/audio/battle_anims/PRSFX- Mist Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mist.wav b/public/audio/battle_anims/PRSFX- Mist.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mist.wav rename to public/audio/battle_anims/PRSFX- Mist.wav diff --git a/public/audio/se/battle_anims/PRSFX- Misty Terrain.wav b/public/audio/battle_anims/PRSFX- Misty Terrain.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Misty Terrain.wav rename to public/audio/battle_anims/PRSFX- Misty Terrain.wav diff --git a/public/audio/se/battle_anims/PRSFX- Moonblast1.wav b/public/audio/battle_anims/PRSFX- Moonblast1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Moonblast1.wav rename to public/audio/battle_anims/PRSFX- Moonblast1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Moonblast2.wav b/public/audio/battle_anims/PRSFX- Moonblast2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Moonblast2.wav rename to public/audio/battle_anims/PRSFX- Moonblast2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Moonlight.wav b/public/audio/battle_anims/PRSFX- Moonlight.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Moonlight.wav rename to public/audio/battle_anims/PRSFX- Moonlight.wav diff --git a/public/audio/se/battle_anims/PRSFX- Morning Sun.wav b/public/audio/battle_anims/PRSFX- Morning Sun.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Morning Sun.wav rename to public/audio/battle_anims/PRSFX- Morning Sun.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mud Bomb1.wav b/public/audio/battle_anims/PRSFX- Mud Bomb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mud Bomb1.wav rename to public/audio/battle_anims/PRSFX- Mud Bomb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mud Bomb2.wav b/public/audio/battle_anims/PRSFX- Mud Bomb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mud Bomb2.wav rename to public/audio/battle_anims/PRSFX- Mud Bomb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mud Shot.wav b/public/audio/battle_anims/PRSFX- Mud Shot.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mud Shot.wav rename to public/audio/battle_anims/PRSFX- Mud Shot.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mud Slap.wav b/public/audio/battle_anims/PRSFX- Mud Slap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mud Slap.wav rename to public/audio/battle_anims/PRSFX- Mud Slap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mud Sport1.wav b/public/audio/battle_anims/PRSFX- Mud Sport1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mud Sport1.wav rename to public/audio/battle_anims/PRSFX- Mud Sport1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mud Sport2.wav b/public/audio/battle_anims/PRSFX- Mud Sport2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mud Sport2.wav rename to public/audio/battle_anims/PRSFX- Mud Sport2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Muddy Water.wav b/public/audio/battle_anims/PRSFX- Muddy Water.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Muddy Water.wav rename to public/audio/battle_anims/PRSFX- Muddy Water.wav diff --git a/public/audio/se/battle_anims/PRSFX- Multi Attack1.wav b/public/audio/battle_anims/PRSFX- Multi Attack1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Multi Attack1.wav rename to public/audio/battle_anims/PRSFX- Multi Attack1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Multi Attack2.wav b/public/audio/battle_anims/PRSFX- Multi Attack2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Multi Attack2.wav rename to public/audio/battle_anims/PRSFX- Multi Attack2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Multi Attack3.wav b/public/audio/battle_anims/PRSFX- Multi Attack3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Multi Attack3.wav rename to public/audio/battle_anims/PRSFX- Multi Attack3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Multi Attack4.wav b/public/audio/battle_anims/PRSFX- Multi Attack4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Multi Attack4.wav rename to public/audio/battle_anims/PRSFX- Multi Attack4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Multi Attack5.wav b/public/audio/battle_anims/PRSFX- Multi Attack5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Multi Attack5.wav rename to public/audio/battle_anims/PRSFX- Multi Attack5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mystical Fire1.wav b/public/audio/battle_anims/PRSFX- Mystical Fire1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mystical Fire1.wav rename to public/audio/battle_anims/PRSFX- Mystical Fire1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Mystical Fire2.wav b/public/audio/battle_anims/PRSFX- Mystical Fire2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Mystical Fire2.wav rename to public/audio/battle_anims/PRSFX- Mystical Fire2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Nasty Plot.wav b/public/audio/battle_anims/PRSFX- Nasty Plot.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Nasty Plot.wav rename to public/audio/battle_anims/PRSFX- Nasty Plot.wav diff --git a/public/audio/se/battle_anims/PRSFX- Natural Gift1.wav b/public/audio/battle_anims/PRSFX- Natural Gift1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Natural Gift1.wav rename to public/audio/battle_anims/PRSFX- Natural Gift1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Natural Gift2.wav b/public/audio/battle_anims/PRSFX- Natural Gift2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Natural Gift2.wav rename to public/audio/battle_anims/PRSFX- Natural Gift2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Natures Madness1.wav b/public/audio/battle_anims/PRSFX- Natures Madness1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Natures Madness1.wav rename to public/audio/battle_anims/PRSFX- Natures Madness1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Natures Madness2.wav b/public/audio/battle_anims/PRSFX- Natures Madness2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Natures Madness2.wav rename to public/audio/battle_anims/PRSFX- Natures Madness2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Needle Arm1.wav b/public/audio/battle_anims/PRSFX- Needle Arm1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Needle Arm1.wav rename to public/audio/battle_anims/PRSFX- Needle Arm1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Needle Arm2.wav b/public/audio/battle_anims/PRSFX- Needle Arm2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Needle Arm2.wav rename to public/audio/battle_anims/PRSFX- Needle Arm2.wav diff --git a/public/audio/se/battle_anims/PRSFX- NeverEndingNightmare1.wav b/public/audio/battle_anims/PRSFX- NeverEndingNightmare1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- NeverEndingNightmare1.wav rename to public/audio/battle_anims/PRSFX- NeverEndingNightmare1.wav diff --git a/public/audio/se/battle_anims/PRSFX- NeverEndingNightmare2.wav b/public/audio/battle_anims/PRSFX- NeverEndingNightmare2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- NeverEndingNightmare2.wav rename to public/audio/battle_anims/PRSFX- NeverEndingNightmare2.wav diff --git a/public/audio/se/battle_anims/PRSFX- NeverEndingNightmare3.wav b/public/audio/battle_anims/PRSFX- NeverEndingNightmare3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- NeverEndingNightmare3.wav rename to public/audio/battle_anims/PRSFX- NeverEndingNightmare3.wav diff --git a/public/audio/se/battle_anims/PRSFX- NeverEndingNightmare4.wav b/public/audio/battle_anims/PRSFX- NeverEndingNightmare4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- NeverEndingNightmare4.wav rename to public/audio/battle_anims/PRSFX- NeverEndingNightmare4.wav diff --git a/public/audio/se/battle_anims/PRSFX- NeverEndingNightmare5.wav b/public/audio/battle_anims/PRSFX- NeverEndingNightmare5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- NeverEndingNightmare5.wav rename to public/audio/battle_anims/PRSFX- NeverEndingNightmare5.wav diff --git a/public/audio/se/battle_anims/PRSFX- NeverEndingNightmare6.wav b/public/audio/battle_anims/PRSFX- NeverEndingNightmare6.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- NeverEndingNightmare6.wav rename to public/audio/battle_anims/PRSFX- NeverEndingNightmare6.wav diff --git a/public/audio/se/battle_anims/PRSFX- Night Daze1.wav b/public/audio/battle_anims/PRSFX- Night Daze1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Night Daze1.wav rename to public/audio/battle_anims/PRSFX- Night Daze1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Night Daze2.wav b/public/audio/battle_anims/PRSFX- Night Daze2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Night Daze2.wav rename to public/audio/battle_anims/PRSFX- Night Daze2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Night Shade.wav b/public/audio/battle_anims/PRSFX- Night Shade.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Night Shade.wav rename to public/audio/battle_anims/PRSFX- Night Shade.wav diff --git a/public/audio/se/battle_anims/PRSFX- Night Slash1.wav b/public/audio/battle_anims/PRSFX- Night Slash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Night Slash1.wav rename to public/audio/battle_anims/PRSFX- Night Slash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Night Slash2.wav b/public/audio/battle_anims/PRSFX- Night Slash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Night Slash2.wav rename to public/audio/battle_anims/PRSFX- Night Slash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Nightmare.wav b/public/audio/battle_anims/PRSFX- Nightmare.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Nightmare.wav rename to public/audio/battle_anims/PRSFX- Nightmare.wav diff --git a/public/audio/se/battle_anims/PRSFX- Noble Roar1.wav b/public/audio/battle_anims/PRSFX- Noble Roar1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Noble Roar1.wav rename to public/audio/battle_anims/PRSFX- Noble Roar1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Noble Roar2.wav b/public/audio/battle_anims/PRSFX- Noble Roar2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Noble Roar2.wav rename to public/audio/battle_anims/PRSFX- Noble Roar2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Nuzzle1.wav b/public/audio/battle_anims/PRSFX- Nuzzle1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Nuzzle1.wav rename to public/audio/battle_anims/PRSFX- Nuzzle1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Nuzzle2.wav b/public/audio/battle_anims/PRSFX- Nuzzle2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Nuzzle2.wav rename to public/audio/battle_anims/PRSFX- Nuzzle2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Oblivion Wing1.wav b/public/audio/battle_anims/PRSFX- Oblivion Wing1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Oblivion Wing1.wav rename to public/audio/battle_anims/PRSFX- Oblivion Wing1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Oblivion Wing2.wav b/public/audio/battle_anims/PRSFX- Oblivion Wing2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Oblivion Wing2.wav rename to public/audio/battle_anims/PRSFX- Oblivion Wing2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Oceanic Operetta1.wav b/public/audio/battle_anims/PRSFX- Oceanic Operetta1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Oceanic Operetta1.wav rename to public/audio/battle_anims/PRSFX- Oceanic Operetta1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Oceanic Operetta2.wav b/public/audio/battle_anims/PRSFX- Oceanic Operetta2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Oceanic Operetta2.wav rename to public/audio/battle_anims/PRSFX- Oceanic Operetta2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Oceanic Operetta3.wav b/public/audio/battle_anims/PRSFX- Oceanic Operetta3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Oceanic Operetta3.wav rename to public/audio/battle_anims/PRSFX- Oceanic Operetta3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Oceanic Operetta4.wav b/public/audio/battle_anims/PRSFX- Oceanic Operetta4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Oceanic Operetta4.wav rename to public/audio/battle_anims/PRSFX- Oceanic Operetta4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Octazooka.wav b/public/audio/battle_anims/PRSFX- Octazooka.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Octazooka.wav rename to public/audio/battle_anims/PRSFX- Octazooka.wav diff --git a/public/audio/se/battle_anims/PRSFX- Odor Sleuth1.wav b/public/audio/battle_anims/PRSFX- Odor Sleuth1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Odor Sleuth1.wav rename to public/audio/battle_anims/PRSFX- Odor Sleuth1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Odor Sleuth2.wav b/public/audio/battle_anims/PRSFX- Odor Sleuth2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Odor Sleuth2.wav rename to public/audio/battle_anims/PRSFX- Odor Sleuth2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Ominous Wind.wav b/public/audio/battle_anims/PRSFX- Ominous Wind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Ominous Wind.wav rename to public/audio/battle_anims/PRSFX- Ominous Wind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Origin Pulse.wav b/public/audio/battle_anims/PRSFX- Origin Pulse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Origin Pulse.wav rename to public/audio/battle_anims/PRSFX- Origin Pulse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Origin Pulse1.wav b/public/audio/battle_anims/PRSFX- Origin Pulse1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Origin Pulse1.wav rename to public/audio/battle_anims/PRSFX- Origin Pulse1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Origin Pulse2.wav b/public/audio/battle_anims/PRSFX- Origin Pulse2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Origin Pulse2.wav rename to public/audio/battle_anims/PRSFX- Origin Pulse2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Origin Pulse3.wav b/public/audio/battle_anims/PRSFX- Origin Pulse3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Origin Pulse3.wav rename to public/audio/battle_anims/PRSFX- Origin Pulse3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Outrage1.wav b/public/audio/battle_anims/PRSFX- Outrage1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Outrage1.wav rename to public/audio/battle_anims/PRSFX- Outrage1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Outrage2.wav b/public/audio/battle_anims/PRSFX- Outrage2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Outrage2.wav rename to public/audio/battle_anims/PRSFX- Outrage2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Overheat1.wav b/public/audio/battle_anims/PRSFX- Overheat1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Overheat1.wav rename to public/audio/battle_anims/PRSFX- Overheat1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Overheat2.wav b/public/audio/battle_anims/PRSFX- Overheat2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Overheat2.wav rename to public/audio/battle_anims/PRSFX- Overheat2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pain Split.wav b/public/audio/battle_anims/PRSFX- Pain Split.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pain Split.wav rename to public/audio/battle_anims/PRSFX- Pain Split.wav diff --git a/public/audio/se/battle_anims/PRSFX- Parabolic Charge.wav b/public/audio/battle_anims/PRSFX- Parabolic Charge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Parabolic Charge.wav rename to public/audio/battle_anims/PRSFX- Parabolic Charge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Paralysis.wav b/public/audio/battle_anims/PRSFX- Paralysis.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Paralysis.wav rename to public/audio/battle_anims/PRSFX- Paralysis.wav diff --git a/public/audio/se/battle_anims/PRSFX- Parting Shot.wav b/public/audio/battle_anims/PRSFX- Parting Shot.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Parting Shot.wav rename to public/audio/battle_anims/PRSFX- Parting Shot.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pay Day1.wav b/public/audio/battle_anims/PRSFX- Pay Day1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pay Day1.wav rename to public/audio/battle_anims/PRSFX- Pay Day1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pay Day2.wav b/public/audio/battle_anims/PRSFX- Pay Day2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pay Day2.wav rename to public/audio/battle_anims/PRSFX- Pay Day2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Payback1.wav b/public/audio/battle_anims/PRSFX- Payback1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Payback1.wav rename to public/audio/battle_anims/PRSFX- Payback1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Payback2.wav b/public/audio/battle_anims/PRSFX- Payback2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Payback2.wav rename to public/audio/battle_anims/PRSFX- Payback2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Peck.wav b/public/audio/battle_anims/PRSFX- Peck.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Peck.wav rename to public/audio/battle_anims/PRSFX- Peck.wav diff --git a/public/audio/se/battle_anims/PRSFX- Perish Song.wav b/public/audio/battle_anims/PRSFX- Perish Song.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Perish Song.wav rename to public/audio/battle_anims/PRSFX- Perish Song.wav diff --git a/public/audio/se/battle_anims/PRSFX- Petal Blizzard1.wav b/public/audio/battle_anims/PRSFX- Petal Blizzard1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Petal Blizzard1.wav rename to public/audio/battle_anims/PRSFX- Petal Blizzard1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Petal Blizzard2.wav b/public/audio/battle_anims/PRSFX- Petal Blizzard2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Petal Blizzard2.wav rename to public/audio/battle_anims/PRSFX- Petal Blizzard2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Petal Dance.wav b/public/audio/battle_anims/PRSFX- Petal Dance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Petal Dance.wav rename to public/audio/battle_anims/PRSFX- Petal Dance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Phantom Force1.wav b/public/audio/battle_anims/PRSFX- Phantom Force1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Phantom Force1.wav rename to public/audio/battle_anims/PRSFX- Phantom Force1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Phantom Force2.wav b/public/audio/battle_anims/PRSFX- Phantom Force2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Phantom Force2.wav rename to public/audio/battle_anims/PRSFX- Phantom Force2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Photon Guyser1.wav b/public/audio/battle_anims/PRSFX- Photon Guyser1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Photon Guyser1.wav rename to public/audio/battle_anims/PRSFX- Photon Guyser1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Photon Guyser2.wav b/public/audio/battle_anims/PRSFX- Photon Guyser2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Photon Guyser2.wav rename to public/audio/battle_anims/PRSFX- Photon Guyser2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Photon Guyser3.wav b/public/audio/battle_anims/PRSFX- Photon Guyser3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Photon Guyser3.wav rename to public/audio/battle_anims/PRSFX- Photon Guyser3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pin Missile.wav b/public/audio/battle_anims/PRSFX- Pin Missile.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pin Missile.wav rename to public/audio/battle_anims/PRSFX- Pin Missile.wav diff --git a/public/audio/se/battle_anims/PRSFX- Plasma Fist1.wav b/public/audio/battle_anims/PRSFX- Plasma Fist1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Plasma Fist1.wav rename to public/audio/battle_anims/PRSFX- Plasma Fist1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Plasma Fist2.wav b/public/audio/battle_anims/PRSFX- Plasma Fist2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Plasma Fist2.wav rename to public/audio/battle_anims/PRSFX- Plasma Fist2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Plasma Fist3.wav b/public/audio/battle_anims/PRSFX- Plasma Fist3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Plasma Fist3.wav rename to public/audio/battle_anims/PRSFX- Plasma Fist3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Play Nice1.wav b/public/audio/battle_anims/PRSFX- Play Nice1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Play Nice1.wav rename to public/audio/battle_anims/PRSFX- Play Nice1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Play Nice2.wav b/public/audio/battle_anims/PRSFX- Play Nice2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Play Nice2.wav rename to public/audio/battle_anims/PRSFX- Play Nice2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Play Rough1.wav b/public/audio/battle_anims/PRSFX- Play Rough1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Play Rough1.wav rename to public/audio/battle_anims/PRSFX- Play Rough1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Play Rough2.wav b/public/audio/battle_anims/PRSFX- Play Rough2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Play Rough2.wav rename to public/audio/battle_anims/PRSFX- Play Rough2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Play Rough3.wav b/public/audio/battle_anims/PRSFX- Play Rough3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Play Rough3.wav rename to public/audio/battle_anims/PRSFX- Play Rough3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Play Rough4.wav b/public/audio/battle_anims/PRSFX- Play Rough4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Play Rough4.wav rename to public/audio/battle_anims/PRSFX- Play Rough4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pluck1.wav b/public/audio/battle_anims/PRSFX- Pluck1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pluck1.wav rename to public/audio/battle_anims/PRSFX- Pluck1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pluck2.wav b/public/audio/battle_anims/PRSFX- Pluck2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pluck2.wav rename to public/audio/battle_anims/PRSFX- Pluck2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Fang1.wav b/public/audio/battle_anims/PRSFX- Poison Fang1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Fang1.wav rename to public/audio/battle_anims/PRSFX- Poison Fang1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Fang2.wav b/public/audio/battle_anims/PRSFX- Poison Fang2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Fang2.wav rename to public/audio/battle_anims/PRSFX- Poison Fang2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Gas.wav b/public/audio/battle_anims/PRSFX- Poison Gas.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Gas.wav rename to public/audio/battle_anims/PRSFX- Poison Gas.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Jab1.wav b/public/audio/battle_anims/PRSFX- Poison Jab1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Jab1.wav rename to public/audio/battle_anims/PRSFX- Poison Jab1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Jab2.wav b/public/audio/battle_anims/PRSFX- Poison Jab2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Jab2.wav rename to public/audio/battle_anims/PRSFX- Poison Jab2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Powder.wav b/public/audio/battle_anims/PRSFX- Poison Powder.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Powder.wav rename to public/audio/battle_anims/PRSFX- Poison Powder.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Sting.wav b/public/audio/battle_anims/PRSFX- Poison Sting.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Sting.wav rename to public/audio/battle_anims/PRSFX- Poison Sting.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Tail1.wav b/public/audio/battle_anims/PRSFX- Poison Tail1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Tail1.wav rename to public/audio/battle_anims/PRSFX- Poison Tail1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison Tail2.wav b/public/audio/battle_anims/PRSFX- Poison Tail2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison Tail2.wav rename to public/audio/battle_anims/PRSFX- Poison Tail2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Poison.wav b/public/audio/battle_anims/PRSFX- Poison.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Poison.wav rename to public/audio/battle_anims/PRSFX- Poison.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pollen Puff1.wav b/public/audio/battle_anims/PRSFX- Pollen Puff1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pollen Puff1.wav rename to public/audio/battle_anims/PRSFX- Pollen Puff1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pollen Puff2.wav b/public/audio/battle_anims/PRSFX- Pollen Puff2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pollen Puff2.wav rename to public/audio/battle_anims/PRSFX- Pollen Puff2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pollen Puff3.wav b/public/audio/battle_anims/PRSFX- Pollen Puff3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pollen Puff3.wav rename to public/audio/battle_anims/PRSFX- Pollen Puff3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pollen Puff4.wav b/public/audio/battle_anims/PRSFX- Pollen Puff4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pollen Puff4.wav rename to public/audio/battle_anims/PRSFX- Pollen Puff4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pollen Puff5.wav b/public/audio/battle_anims/PRSFX- Pollen Puff5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pollen Puff5.wav rename to public/audio/battle_anims/PRSFX- Pollen Puff5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pollen Puff6.wav b/public/audio/battle_anims/PRSFX- Pollen Puff6.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pollen Puff6.wav rename to public/audio/battle_anims/PRSFX- Pollen Puff6.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pound.wav b/public/audio/battle_anims/PRSFX- Pound.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pound.wav rename to public/audio/battle_anims/PRSFX- Pound.wav diff --git a/public/audio/se/battle_anims/PRSFX- Powder 1.wav b/public/audio/battle_anims/PRSFX- Powder 1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Powder 1.wav rename to public/audio/battle_anims/PRSFX- Powder 1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Powder 2.wav b/public/audio/battle_anims/PRSFX- Powder 2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Powder 2.wav rename to public/audio/battle_anims/PRSFX- Powder 2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Powder Snow1.wav b/public/audio/battle_anims/PRSFX- Powder Snow1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Powder Snow1.wav rename to public/audio/battle_anims/PRSFX- Powder Snow1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Powder Snow2.wav b/public/audio/battle_anims/PRSFX- Powder Snow2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Powder Snow2.wav rename to public/audio/battle_anims/PRSFX- Powder Snow2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Powder common1.wav b/public/audio/battle_anims/PRSFX- Powder common1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Powder common1.wav rename to public/audio/battle_anims/PRSFX- Powder common1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Powder common2.wav b/public/audio/battle_anims/PRSFX- Powder common2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Powder common2.wav rename to public/audio/battle_anims/PRSFX- Powder common2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Gem1.wav b/public/audio/battle_anims/PRSFX- Power Gem1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Gem1.wav rename to public/audio/battle_anims/PRSFX- Power Gem1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Split.wav b/public/audio/battle_anims/PRSFX- Power Split.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Split.wav rename to public/audio/battle_anims/PRSFX- Power Split.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Swap.wav b/public/audio/battle_anims/PRSFX- Power Swap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Swap.wav rename to public/audio/battle_anims/PRSFX- Power Swap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Trick.wav b/public/audio/battle_anims/PRSFX- Power Trick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Trick.wav rename to public/audio/battle_anims/PRSFX- Power Trick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Trip1.wav b/public/audio/battle_anims/PRSFX- Power Trip1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Trip1.wav rename to public/audio/battle_anims/PRSFX- Power Trip1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Trip2.wav b/public/audio/battle_anims/PRSFX- Power Trip2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Trip2.wav rename to public/audio/battle_anims/PRSFX- Power Trip2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Trip3.wav b/public/audio/battle_anims/PRSFX- Power Trip3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Trip3.wav rename to public/audio/battle_anims/PRSFX- Power Trip3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Trip4.wav b/public/audio/battle_anims/PRSFX- Power Trip4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Trip4.wav rename to public/audio/battle_anims/PRSFX- Power Trip4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Trip5.wav b/public/audio/battle_anims/PRSFX- Power Trip5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Trip5.wav rename to public/audio/battle_anims/PRSFX- Power Trip5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Up Punch1.wav b/public/audio/battle_anims/PRSFX- Power Up Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Up Punch1.wav rename to public/audio/battle_anims/PRSFX- Power Up Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Up Punch2.wav b/public/audio/battle_anims/PRSFX- Power Up Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Up Punch2.wav rename to public/audio/battle_anims/PRSFX- Power Up Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Power Whip.wav b/public/audio/battle_anims/PRSFX- Power Whip.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Power Whip.wav rename to public/audio/battle_anims/PRSFX- Power Whip.wav diff --git a/public/audio/se/battle_anims/PRSFX- Precipice Blades.wav b/public/audio/battle_anims/PRSFX- Precipice Blades.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Precipice Blades.wav rename to public/audio/battle_anims/PRSFX- Precipice Blades.wav diff --git a/public/audio/se/battle_anims/PRSFX- Present1.wav b/public/audio/battle_anims/PRSFX- Present1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Present1.wav rename to public/audio/battle_anims/PRSFX- Present1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Present2.wav b/public/audio/battle_anims/PRSFX- Present2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Present2.wav rename to public/audio/battle_anims/PRSFX- Present2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Prismatic Laser1.wav b/public/audio/battle_anims/PRSFX- Prismatic Laser1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Prismatic Laser1.wav rename to public/audio/battle_anims/PRSFX- Prismatic Laser1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Prismatic Laser2.wav b/public/audio/battle_anims/PRSFX- Prismatic Laser2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Prismatic Laser2.wav rename to public/audio/battle_anims/PRSFX- Prismatic Laser2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Prismatic Laser3.wav b/public/audio/battle_anims/PRSFX- Prismatic Laser3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Prismatic Laser3.wav rename to public/audio/battle_anims/PRSFX- Prismatic Laser3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Protect.wav b/public/audio/battle_anims/PRSFX- Protect.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Protect.wav rename to public/audio/battle_anims/PRSFX- Protect.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psybeam.wav b/public/audio/battle_anims/PRSFX- Psybeam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psybeam.wav rename to public/audio/battle_anims/PRSFX- Psybeam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psych Up.wav b/public/audio/battle_anims/PRSFX- Psych Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psych Up.wav rename to public/audio/battle_anims/PRSFX- Psych Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psychic Terrain1.wav b/public/audio/battle_anims/PRSFX- Psychic Terrain1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psychic Terrain1.wav rename to public/audio/battle_anims/PRSFX- Psychic Terrain1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psychic Terrain2.wav b/public/audio/battle_anims/PRSFX- Psychic Terrain2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psychic Terrain2.wav rename to public/audio/battle_anims/PRSFX- Psychic Terrain2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psychic Terrain3.wav b/public/audio/battle_anims/PRSFX- Psychic Terrain3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psychic Terrain3.wav rename to public/audio/battle_anims/PRSFX- Psychic Terrain3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psychic.wav b/public/audio/battle_anims/PRSFX- Psychic.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psychic.wav rename to public/audio/battle_anims/PRSFX- Psychic.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psycho Boost1.wav b/public/audio/battle_anims/PRSFX- Psycho Boost1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psycho Boost1.wav rename to public/audio/battle_anims/PRSFX- Psycho Boost1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psycho Boost2.wav b/public/audio/battle_anims/PRSFX- Psycho Boost2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psycho Boost2.wav rename to public/audio/battle_anims/PRSFX- Psycho Boost2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psycho Cut.wav b/public/audio/battle_anims/PRSFX- Psycho Cut.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psycho Cut.wav rename to public/audio/battle_anims/PRSFX- Psycho Cut.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psycho Shift.wav b/public/audio/battle_anims/PRSFX- Psycho Shift.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psycho Shift.wav rename to public/audio/battle_anims/PRSFX- Psycho Shift.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psyshock1.wav b/public/audio/battle_anims/PRSFX- Psyshock1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psyshock1.wav rename to public/audio/battle_anims/PRSFX- Psyshock1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psyshock2.wav b/public/audio/battle_anims/PRSFX- Psyshock2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psyshock2.wav rename to public/audio/battle_anims/PRSFX- Psyshock2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psystrike1.wav b/public/audio/battle_anims/PRSFX- Psystrike1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psystrike1.wav rename to public/audio/battle_anims/PRSFX- Psystrike1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psystrike2.wav b/public/audio/battle_anims/PRSFX- Psystrike2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psystrike2.wav rename to public/audio/battle_anims/PRSFX- Psystrike2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psystrike3.wav b/public/audio/battle_anims/PRSFX- Psystrike3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psystrike3.wav rename to public/audio/battle_anims/PRSFX- Psystrike3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Psywave.wav b/public/audio/battle_anims/PRSFX- Psywave.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Psywave.wav rename to public/audio/battle_anims/PRSFX- Psywave.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulse Evolution1.wav b/public/audio/battle_anims/PRSFX- Pulse Evolution1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulse Evolution1.wav rename to public/audio/battle_anims/PRSFX- Pulse Evolution1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulse Evolution2.wav b/public/audio/battle_anims/PRSFX- Pulse Evolution2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulse Evolution2.wav rename to public/audio/battle_anims/PRSFX- Pulse Evolution2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulverizing Pancake1.wav b/public/audio/battle_anims/PRSFX- Pulverizing Pancake1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulverizing Pancake1.wav rename to public/audio/battle_anims/PRSFX- Pulverizing Pancake1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulverizing Pancake2.wav b/public/audio/battle_anims/PRSFX- Pulverizing Pancake2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulverizing Pancake2.wav rename to public/audio/battle_anims/PRSFX- Pulverizing Pancake2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulverizing Pancake3.wav b/public/audio/battle_anims/PRSFX- Pulverizing Pancake3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulverizing Pancake3.wav rename to public/audio/battle_anims/PRSFX- Pulverizing Pancake3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulverizing Pancake4.wav b/public/audio/battle_anims/PRSFX- Pulverizing Pancake4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulverizing Pancake4.wav rename to public/audio/battle_anims/PRSFX- Pulverizing Pancake4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pulverizing Pancake5.wav b/public/audio/battle_anims/PRSFX- Pulverizing Pancake5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pulverizing Pancake5.wav rename to public/audio/battle_anims/PRSFX- Pulverizing Pancake5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Punishment1.wav b/public/audio/battle_anims/PRSFX- Punishment1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Punishment1.wav rename to public/audio/battle_anims/PRSFX- Punishment1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Punishment2.wav b/public/audio/battle_anims/PRSFX- Punishment2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Punishment2.wav rename to public/audio/battle_anims/PRSFX- Punishment2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Purify1.wav b/public/audio/battle_anims/PRSFX- Purify1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Purify1.wav rename to public/audio/battle_anims/PRSFX- Purify1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Purify2.wav b/public/audio/battle_anims/PRSFX- Purify2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Purify2.wav rename to public/audio/battle_anims/PRSFX- Purify2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Purify3.wav b/public/audio/battle_anims/PRSFX- Purify3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Purify3.wav rename to public/audio/battle_anims/PRSFX- Purify3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pursuit1.wav b/public/audio/battle_anims/PRSFX- Pursuit1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pursuit1.wav rename to public/audio/battle_anims/PRSFX- Pursuit1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Pursuit2.wav b/public/audio/battle_anims/PRSFX- Pursuit2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Pursuit2.wav rename to public/audio/battle_anims/PRSFX- Pursuit2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Quash.wav b/public/audio/battle_anims/PRSFX- Quash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Quash.wav rename to public/audio/battle_anims/PRSFX- Quash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Quick Attack.wav b/public/audio/battle_anims/PRSFX- Quick Attack.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Quick Attack.wav rename to public/audio/battle_anims/PRSFX- Quick Attack.wav diff --git a/public/audio/se/battle_anims/PRSFX- Quick Guard.wav b/public/audio/battle_anims/PRSFX- Quick Guard.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Quick Guard.wav rename to public/audio/battle_anims/PRSFX- Quick Guard.wav diff --git a/public/audio/se/battle_anims/PRSFX- Quiver Dance.wav b/public/audio/battle_anims/PRSFX- Quiver Dance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Quiver Dance.wav rename to public/audio/battle_anims/PRSFX- Quiver Dance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rage Powder.wav b/public/audio/battle_anims/PRSFX- Rage Powder.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rage Powder.wav rename to public/audio/battle_anims/PRSFX- Rage Powder.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rage1.wav b/public/audio/battle_anims/PRSFX- Rage1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rage1.wav rename to public/audio/battle_anims/PRSFX- Rage1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rage2.wav b/public/audio/battle_anims/PRSFX- Rage2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rage2.wav rename to public/audio/battle_anims/PRSFX- Rage2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rain Dance.wav b/public/audio/battle_anims/PRSFX- Rain Dance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rain Dance.wav rename to public/audio/battle_anims/PRSFX- Rain Dance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rain.wav b/public/audio/battle_anims/PRSFX- Rain.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rain.wav rename to public/audio/battle_anims/PRSFX- Rain.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rainbow Field.wav b/public/audio/battle_anims/PRSFX- Rainbow Field.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rainbow Field.wav rename to public/audio/battle_anims/PRSFX- Rainbow Field.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rapid Spin.wav b/public/audio/battle_anims/PRSFX- Rapid Spin.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rapid Spin.wav rename to public/audio/battle_anims/PRSFX- Rapid Spin.wav diff --git a/public/audio/se/battle_anims/PRSFX- Razor Leaf1.wav b/public/audio/battle_anims/PRSFX- Razor Leaf1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Razor Leaf1.wav rename to public/audio/battle_anims/PRSFX- Razor Leaf1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Razor Leaf2.wav b/public/audio/battle_anims/PRSFX- Razor Leaf2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Razor Leaf2.wav rename to public/audio/battle_anims/PRSFX- Razor Leaf2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Razor Shell.wav b/public/audio/battle_anims/PRSFX- Razor Shell.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Razor Shell.wav rename to public/audio/battle_anims/PRSFX- Razor Shell.wav diff --git a/public/audio/se/battle_anims/PRSFX- Razor Wind1.wav b/public/audio/battle_anims/PRSFX- Razor Wind1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Razor Wind1.wav rename to public/audio/battle_anims/PRSFX- Razor Wind1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Razor Wind2.wav b/public/audio/battle_anims/PRSFX- Razor Wind2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Razor Wind2.wav rename to public/audio/battle_anims/PRSFX- Razor Wind2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Recover.wav b/public/audio/battle_anims/PRSFX- Recover.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Recover.wav rename to public/audio/battle_anims/PRSFX- Recover.wav diff --git a/public/audio/se/battle_anims/PRSFX- Recycle.wav b/public/audio/battle_anims/PRSFX- Recycle.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Recycle.wav rename to public/audio/battle_anims/PRSFX- Recycle.wav diff --git a/public/audio/se/battle_anims/PRSFX- Reflect Type.wav b/public/audio/battle_anims/PRSFX- Reflect Type.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Reflect Type.wav rename to public/audio/battle_anims/PRSFX- Reflect Type.wav diff --git a/public/audio/se/battle_anims/PRSFX- Reflect.wav b/public/audio/battle_anims/PRSFX- Reflect.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Reflect.wav rename to public/audio/battle_anims/PRSFX- Reflect.wav diff --git a/public/audio/se/battle_anims/PRSFX- Refresh.wav b/public/audio/battle_anims/PRSFX- Refresh.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Refresh.wav rename to public/audio/battle_anims/PRSFX- Refresh.wav diff --git a/public/audio/se/battle_anims/PRSFX- Relic Song1.wav b/public/audio/battle_anims/PRSFX- Relic Song1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Relic Song1.wav rename to public/audio/battle_anims/PRSFX- Relic Song1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Relic Song2.wav b/public/audio/battle_anims/PRSFX- Relic Song2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Relic Song2.wav rename to public/audio/battle_anims/PRSFX- Relic Song2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Retaliate1.wav b/public/audio/battle_anims/PRSFX- Retaliate1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Retaliate1.wav rename to public/audio/battle_anims/PRSFX- Retaliate1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Retaliate2.wav b/public/audio/battle_anims/PRSFX- Retaliate2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Retaliate2.wav rename to public/audio/battle_anims/PRSFX- Retaliate2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Return1.wav b/public/audio/battle_anims/PRSFX- Return1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Return1.wav rename to public/audio/battle_anims/PRSFX- Return1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Return2.wav b/public/audio/battle_anims/PRSFX- Return2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Return2.wav rename to public/audio/battle_anims/PRSFX- Return2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Revenge1.wav b/public/audio/battle_anims/PRSFX- Revenge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Revenge1.wav rename to public/audio/battle_anims/PRSFX- Revenge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Revenge2.wav b/public/audio/battle_anims/PRSFX- Revenge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Revenge2.wav rename to public/audio/battle_anims/PRSFX- Revenge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Reversal1.wav b/public/audio/battle_anims/PRSFX- Reversal1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Reversal1.wav rename to public/audio/battle_anims/PRSFX- Reversal1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Reversal2.wav b/public/audio/battle_anims/PRSFX- Reversal2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Reversal2.wav rename to public/audio/battle_anims/PRSFX- Reversal2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Roar of Time.wav b/public/audio/battle_anims/PRSFX- Roar of Time.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Roar of Time.wav rename to public/audio/battle_anims/PRSFX- Roar of Time.wav diff --git a/public/audio/se/battle_anims/PRSFX- Roar.wav b/public/audio/battle_anims/PRSFX- Roar.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Roar.wav rename to public/audio/battle_anims/PRSFX- Roar.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Blast.wav b/public/audio/battle_anims/PRSFX- Rock Blast.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Blast.wav rename to public/audio/battle_anims/PRSFX- Rock Blast.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Climb.wav b/public/audio/battle_anims/PRSFX- Rock Climb.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Climb.wav rename to public/audio/battle_anims/PRSFX- Rock Climb.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Polish.wav b/public/audio/battle_anims/PRSFX- Rock Polish.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Polish.wav rename to public/audio/battle_anims/PRSFX- Rock Polish.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Slide.wav b/public/audio/battle_anims/PRSFX- Rock Slide.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Slide.wav rename to public/audio/battle_anims/PRSFX- Rock Slide.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Smash.wav b/public/audio/battle_anims/PRSFX- Rock Smash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Smash.wav rename to public/audio/battle_anims/PRSFX- Rock Smash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Throw1.wav b/public/audio/battle_anims/PRSFX- Rock Throw1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Throw1.wav rename to public/audio/battle_anims/PRSFX- Rock Throw1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Throw2.wav b/public/audio/battle_anims/PRSFX- Rock Throw2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Throw2.wav rename to public/audio/battle_anims/PRSFX- Rock Throw2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Tomb.wav b/public/audio/battle_anims/PRSFX- Rock Tomb.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Tomb.wav rename to public/audio/battle_anims/PRSFX- Rock Tomb.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Wrecker1.wav b/public/audio/battle_anims/PRSFX- Rock Wrecker1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Wrecker1.wav rename to public/audio/battle_anims/PRSFX- Rock Wrecker1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rock Wrecker2.wav b/public/audio/battle_anims/PRSFX- Rock Wrecker2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rock Wrecker2.wav rename to public/audio/battle_anims/PRSFX- Rock Wrecker2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Roleplay.wav b/public/audio/battle_anims/PRSFX- Roleplay.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Roleplay.wav rename to public/audio/battle_anims/PRSFX- Roleplay.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rolling Kick.wav b/public/audio/battle_anims/PRSFX- Rolling Kick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rolling Kick.wav rename to public/audio/battle_anims/PRSFX- Rolling Kick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rollout1.wav b/public/audio/battle_anims/PRSFX- Rollout1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rollout1.wav rename to public/audio/battle_anims/PRSFX- Rollout1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rollout2.wav b/public/audio/battle_anims/PRSFX- Rollout2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rollout2.wav rename to public/audio/battle_anims/PRSFX- Rollout2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Roost1.wav b/public/audio/battle_anims/PRSFX- Roost1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Roost1.wav rename to public/audio/battle_anims/PRSFX- Roost1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Roost2.wav b/public/audio/battle_anims/PRSFX- Roost2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Roost2.wav rename to public/audio/battle_anims/PRSFX- Roost2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Rototiller.wav b/public/audio/battle_anims/PRSFX- Rototiller.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Rototiller.wav rename to public/audio/battle_anims/PRSFX- Rototiller.wav diff --git a/public/audio/se/battle_anims/PRSFX- Round.wav b/public/audio/battle_anims/PRSFX- Round.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Round.wav rename to public/audio/battle_anims/PRSFX- Round.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sacred Fire1.wav b/public/audio/battle_anims/PRSFX- Sacred Fire1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sacred Fire1.wav rename to public/audio/battle_anims/PRSFX- Sacred Fire1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sacred Fire2.wav b/public/audio/battle_anims/PRSFX- Sacred Fire2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sacred Fire2.wav rename to public/audio/battle_anims/PRSFX- Sacred Fire2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sacred Sword1.wav b/public/audio/battle_anims/PRSFX- Sacred Sword1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sacred Sword1.wav rename to public/audio/battle_anims/PRSFX- Sacred Sword1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sacred Sword2.wav b/public/audio/battle_anims/PRSFX- Sacred Sword2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sacred Sword2.wav rename to public/audio/battle_anims/PRSFX- Sacred Sword2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Safeguard.wav b/public/audio/battle_anims/PRSFX- Safeguard.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Safeguard.wav rename to public/audio/battle_anims/PRSFX- Safeguard.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sand Attack.wav b/public/audio/battle_anims/PRSFX- Sand Attack.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sand Attack.wav rename to public/audio/battle_anims/PRSFX- Sand Attack.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sand Tomb.wav b/public/audio/battle_anims/PRSFX- Sand Tomb.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sand Tomb.wav rename to public/audio/battle_anims/PRSFX- Sand Tomb.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sand.wav b/public/audio/battle_anims/PRSFX- Sand.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sand.wav rename to public/audio/battle_anims/PRSFX- Sand.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sandstorm.wav b/public/audio/battle_anims/PRSFX- Sandstorm.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sandstorm.wav rename to public/audio/battle_anims/PRSFX- Sandstorm.wav diff --git a/public/audio/se/battle_anims/PRSFX- Scald1.wav b/public/audio/battle_anims/PRSFX- Scald1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Scald1.wav rename to public/audio/battle_anims/PRSFX- Scald1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Scald2.wav b/public/audio/battle_anims/PRSFX- Scald2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Scald2.wav rename to public/audio/battle_anims/PRSFX- Scald2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Scary Face.wav b/public/audio/battle_anims/PRSFX- Scary Face.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Scary Face.wav rename to public/audio/battle_anims/PRSFX- Scary Face.wav diff --git a/public/audio/se/battle_anims/PRSFX- Scratch.wav b/public/audio/battle_anims/PRSFX- Scratch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Scratch.wav rename to public/audio/battle_anims/PRSFX- Scratch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Screech.wav b/public/audio/battle_anims/PRSFX- Screech.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Screech.wav rename to public/audio/battle_anims/PRSFX- Screech.wav diff --git a/public/audio/se/battle_anims/PRSFX- Searing Shot1.wav b/public/audio/battle_anims/PRSFX- Searing Shot1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Searing Shot1.wav rename to public/audio/battle_anims/PRSFX- Searing Shot1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Searing Shot2.wav b/public/audio/battle_anims/PRSFX- Searing Shot2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Searing Shot2.wav rename to public/audio/battle_anims/PRSFX- Searing Shot2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Searing Shot3.wav b/public/audio/battle_anims/PRSFX- Searing Shot3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Searing Shot3.wav rename to public/audio/battle_anims/PRSFX- Searing Shot3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Secret Sword1.wav b/public/audio/battle_anims/PRSFX- Secret Sword1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Secret Sword1.wav rename to public/audio/battle_anims/PRSFX- Secret Sword1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Secret Sword2.wav b/public/audio/battle_anims/PRSFX- Secret Sword2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Secret Sword2.wav rename to public/audio/battle_anims/PRSFX- Secret Sword2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Secret Sword3.wav b/public/audio/battle_anims/PRSFX- Secret Sword3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Secret Sword3.wav rename to public/audio/battle_anims/PRSFX- Secret Sword3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seed Bomb1.wav b/public/audio/battle_anims/PRSFX- Seed Bomb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seed Bomb1.wav rename to public/audio/battle_anims/PRSFX- Seed Bomb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seed Bomb2.wav b/public/audio/battle_anims/PRSFX- Seed Bomb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seed Bomb2.wav rename to public/audio/battle_anims/PRSFX- Seed Bomb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seed Flare1.wav b/public/audio/battle_anims/PRSFX- Seed Flare1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seed Flare1.wav rename to public/audio/battle_anims/PRSFX- Seed Flare1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seed Flare2.wav b/public/audio/battle_anims/PRSFX- Seed Flare2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seed Flare2.wav rename to public/audio/battle_anims/PRSFX- Seed Flare2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seed Flare3.wav b/public/audio/battle_anims/PRSFX- Seed Flare3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seed Flare3.wav rename to public/audio/battle_anims/PRSFX- Seed Flare3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seismic Toss1.wav b/public/audio/battle_anims/PRSFX- Seismic Toss1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seismic Toss1.wav rename to public/audio/battle_anims/PRSFX- Seismic Toss1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seismic Toss2.wav b/public/audio/battle_anims/PRSFX- Seismic Toss2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seismic Toss2.wav rename to public/audio/battle_anims/PRSFX- Seismic Toss2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seismic Toss3.wav b/public/audio/battle_anims/PRSFX- Seismic Toss3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seismic Toss3.wav rename to public/audio/battle_anims/PRSFX- Seismic Toss3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seismic Toss4.wav b/public/audio/battle_anims/PRSFX- Seismic Toss4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seismic Toss4.wav rename to public/audio/battle_anims/PRSFX- Seismic Toss4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Seismic Toss5.wav b/public/audio/battle_anims/PRSFX- Seismic Toss5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Seismic Toss5.wav rename to public/audio/battle_anims/PRSFX- Seismic Toss5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Selfdestruct1.wav b/public/audio/battle_anims/PRSFX- Selfdestruct1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Selfdestruct1.wav rename to public/audio/battle_anims/PRSFX- Selfdestruct1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Selfedestruct2.wav b/public/audio/battle_anims/PRSFX- Selfedestruct2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Selfedestruct2.wav rename to public/audio/battle_anims/PRSFX- Selfedestruct2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Ball1.wav b/public/audio/battle_anims/PRSFX- Shadow Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Ball1.wav rename to public/audio/battle_anims/PRSFX- Shadow Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Ball2.wav b/public/audio/battle_anims/PRSFX- Shadow Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Ball2.wav rename to public/audio/battle_anims/PRSFX- Shadow Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Claw1.wav b/public/audio/battle_anims/PRSFX- Shadow Claw1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Claw1.wav rename to public/audio/battle_anims/PRSFX- Shadow Claw1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Claw2.wav b/public/audio/battle_anims/PRSFX- Shadow Claw2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Claw2.wav rename to public/audio/battle_anims/PRSFX- Shadow Claw2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Force1.wav b/public/audio/battle_anims/PRSFX- Shadow Force1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Force1.wav rename to public/audio/battle_anims/PRSFX- Shadow Force1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Force2.wav b/public/audio/battle_anims/PRSFX- Shadow Force2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Force2.wav rename to public/audio/battle_anims/PRSFX- Shadow Force2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Punch1.wav b/public/audio/battle_anims/PRSFX- Shadow Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Punch1.wav rename to public/audio/battle_anims/PRSFX- Shadow Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Punch2.wav b/public/audio/battle_anims/PRSFX- Shadow Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Punch2.wav rename to public/audio/battle_anims/PRSFX- Shadow Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Sneak1.wav b/public/audio/battle_anims/PRSFX- Shadow Sneak1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Sneak1.wav rename to public/audio/battle_anims/PRSFX- Shadow Sneak1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shadow Sneak2.wav b/public/audio/battle_anims/PRSFX- Shadow Sneak2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shadow Sneak2.wav rename to public/audio/battle_anims/PRSFX- Shadow Sneak2.wav diff --git a/public/audio/se/battle_anims/PRSFX- ShadowBone1.wav b/public/audio/battle_anims/PRSFX- ShadowBone1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- ShadowBone1.wav rename to public/audio/battle_anims/PRSFX- ShadowBone1.wav diff --git a/public/audio/se/battle_anims/PRSFX- ShadowBone2.wav b/public/audio/battle_anims/PRSFX- ShadowBone2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- ShadowBone2.wav rename to public/audio/battle_anims/PRSFX- ShadowBone2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sharpen.wav b/public/audio/battle_anims/PRSFX- Sharpen.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sharpen.wav rename to public/audio/battle_anims/PRSFX- Sharpen.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shattered Psyche1.wav b/public/audio/battle_anims/PRSFX- Shattered Psyche1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shattered Psyche1.wav rename to public/audio/battle_anims/PRSFX- Shattered Psyche1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shattered Psyche2.wav b/public/audio/battle_anims/PRSFX- Shattered Psyche2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shattered Psyche2.wav rename to public/audio/battle_anims/PRSFX- Shattered Psyche2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shattered Psyche3.wav b/public/audio/battle_anims/PRSFX- Shattered Psyche3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shattered Psyche3.wav rename to public/audio/battle_anims/PRSFX- Shattered Psyche3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sheer Cold.wav b/public/audio/battle_anims/PRSFX- Sheer Cold.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sheer Cold.wav rename to public/audio/battle_anims/PRSFX- Sheer Cold.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shell Smash1.wav b/public/audio/battle_anims/PRSFX- Shell Smash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shell Smash1.wav rename to public/audio/battle_anims/PRSFX- Shell Smash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shell Smash2.wav b/public/audio/battle_anims/PRSFX- Shell Smash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shell Smash2.wav rename to public/audio/battle_anims/PRSFX- Shell Smash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shell Trap1.wav b/public/audio/battle_anims/PRSFX- Shell Trap1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shell Trap1.wav rename to public/audio/battle_anims/PRSFX- Shell Trap1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shell Trap2.wav b/public/audio/battle_anims/PRSFX- Shell Trap2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shell Trap2.wav rename to public/audio/battle_anims/PRSFX- Shell Trap2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shell Trap3.wav b/public/audio/battle_anims/PRSFX- Shell Trap3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shell Trap3.wav rename to public/audio/battle_anims/PRSFX- Shell Trap3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shift Gear.wav b/public/audio/battle_anims/PRSFX- Shift Gear.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shift Gear.wav rename to public/audio/battle_anims/PRSFX- Shift Gear.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shiny.wav b/public/audio/battle_anims/PRSFX- Shiny.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shiny.wav rename to public/audio/battle_anims/PRSFX- Shiny.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shockwave.wav b/public/audio/battle_anims/PRSFX- Shockwave.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shockwave.wav rename to public/audio/battle_anims/PRSFX- Shockwave.wav diff --git a/public/audio/se/battle_anims/PRSFX- Shore Up.wav b/public/audio/battle_anims/PRSFX- Shore Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Shore Up.wav rename to public/audio/battle_anims/PRSFX- Shore Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Signal Beam.wav b/public/audio/battle_anims/PRSFX- Signal Beam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Signal Beam.wav rename to public/audio/battle_anims/PRSFX- Signal Beam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Silver Wind.wav b/public/audio/battle_anims/PRSFX- Silver Wind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Silver Wind.wav rename to public/audio/battle_anims/PRSFX- Silver Wind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Simple Beam.wav b/public/audio/battle_anims/PRSFX- Simple Beam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Simple Beam.wav rename to public/audio/battle_anims/PRSFX- Simple Beam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sing.wav b/public/audio/battle_anims/PRSFX- Sing.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sing.wav rename to public/audio/battle_anims/PRSFX- Sing.wav diff --git a/public/audio/se/battle_anims/PRSFX- SinisterArrowRaid1.wav b/public/audio/battle_anims/PRSFX- SinisterArrowRaid1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- SinisterArrowRaid1.wav rename to public/audio/battle_anims/PRSFX- SinisterArrowRaid1.wav diff --git a/public/audio/se/battle_anims/PRSFX- SinisterArrowRaid2.wav b/public/audio/battle_anims/PRSFX- SinisterArrowRaid2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- SinisterArrowRaid2.wav rename to public/audio/battle_anims/PRSFX- SinisterArrowRaid2.wav diff --git a/public/audio/se/battle_anims/PRSFX- SinisterArrowRaid3.wav b/public/audio/battle_anims/PRSFX- SinisterArrowRaid3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- SinisterArrowRaid3.wav rename to public/audio/battle_anims/PRSFX- SinisterArrowRaid3.wav diff --git a/public/audio/se/battle_anims/PRSFX- SinisterArrowRaid4.wav b/public/audio/battle_anims/PRSFX- SinisterArrowRaid4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- SinisterArrowRaid4.wav rename to public/audio/battle_anims/PRSFX- SinisterArrowRaid4.wav diff --git a/public/audio/se/battle_anims/PRSFX- SinisterArrowRaid5.wav b/public/audio/battle_anims/PRSFX- SinisterArrowRaid5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- SinisterArrowRaid5.wav rename to public/audio/battle_anims/PRSFX- SinisterArrowRaid5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sketch.wav b/public/audio/battle_anims/PRSFX- Sketch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sketch.wav rename to public/audio/battle_anims/PRSFX- Sketch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Skill Swap.wav b/public/audio/battle_anims/PRSFX- Skill Swap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Skill Swap.wav rename to public/audio/battle_anims/PRSFX- Skill Swap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Skull Bash1.wav b/public/audio/battle_anims/PRSFX- Skull Bash1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Skull Bash1.wav rename to public/audio/battle_anims/PRSFX- Skull Bash1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Skull Bash2.wav b/public/audio/battle_anims/PRSFX- Skull Bash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Skull Bash2.wav rename to public/audio/battle_anims/PRSFX- Skull Bash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Attack1.wav b/public/audio/battle_anims/PRSFX- Sky Attack1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Attack1.wav rename to public/audio/battle_anims/PRSFX- Sky Attack1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Attack2.wav b/public/audio/battle_anims/PRSFX- Sky Attack2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Attack2.wav rename to public/audio/battle_anims/PRSFX- Sky Attack2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Attack3.wav b/public/audio/battle_anims/PRSFX- Sky Attack3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Attack3.wav rename to public/audio/battle_anims/PRSFX- Sky Attack3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Drop1.wav b/public/audio/battle_anims/PRSFX- Sky Drop1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Drop1.wav rename to public/audio/battle_anims/PRSFX- Sky Drop1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Drop2.wav b/public/audio/battle_anims/PRSFX- Sky Drop2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Drop2.wav rename to public/audio/battle_anims/PRSFX- Sky Drop2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Drop3.wav b/public/audio/battle_anims/PRSFX- Sky Drop3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Drop3.wav rename to public/audio/battle_anims/PRSFX- Sky Drop3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Uppercut1.wav b/public/audio/battle_anims/PRSFX- Sky Uppercut1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Uppercut1.wav rename to public/audio/battle_anims/PRSFX- Sky Uppercut1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sky Uppercut2.wav b/public/audio/battle_anims/PRSFX- Sky Uppercut2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sky Uppercut2.wav rename to public/audio/battle_anims/PRSFX- Sky Uppercut2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Slack Off.wav b/public/audio/battle_anims/PRSFX- Slack Off.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Slack Off.wav rename to public/audio/battle_anims/PRSFX- Slack Off.wav diff --git a/public/audio/se/battle_anims/PRSFX- Slam.wav b/public/audio/battle_anims/PRSFX- Slam.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Slam.wav rename to public/audio/battle_anims/PRSFX- Slam.wav diff --git a/public/audio/se/battle_anims/PRSFX- Slash.wav b/public/audio/battle_anims/PRSFX- Slash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Slash.wav rename to public/audio/battle_anims/PRSFX- Slash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sleep Powder.wav b/public/audio/battle_anims/PRSFX- Sleep Powder.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sleep Powder.wav rename to public/audio/battle_anims/PRSFX- Sleep Powder.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sleep Talk.wav b/public/audio/battle_anims/PRSFX- Sleep Talk.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sleep Talk.wav rename to public/audio/battle_anims/PRSFX- Sleep Talk.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sleep.wav b/public/audio/battle_anims/PRSFX- Sleep.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sleep.wav rename to public/audio/battle_anims/PRSFX- Sleep.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sludge Bomb1.wav b/public/audio/battle_anims/PRSFX- Sludge Bomb1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sludge Bomb1.wav rename to public/audio/battle_anims/PRSFX- Sludge Bomb1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sludge Bomb2.wav b/public/audio/battle_anims/PRSFX- Sludge Bomb2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sludge Bomb2.wav rename to public/audio/battle_anims/PRSFX- Sludge Bomb2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sludge Wave.wav b/public/audio/battle_anims/PRSFX- Sludge Wave.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sludge Wave.wav rename to public/audio/battle_anims/PRSFX- Sludge Wave.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sludge.wav b/public/audio/battle_anims/PRSFX- Sludge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sludge.wav rename to public/audio/battle_anims/PRSFX- Sludge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smack Down1.wav b/public/audio/battle_anims/PRSFX- Smack Down1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smack Down1.wav rename to public/audio/battle_anims/PRSFX- Smack Down1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smack Down2.wav b/public/audio/battle_anims/PRSFX- Smack Down2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smack Down2.wav rename to public/audio/battle_anims/PRSFX- Smack Down2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smack Down3.wav b/public/audio/battle_anims/PRSFX- Smack Down3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smack Down3.wav rename to public/audio/battle_anims/PRSFX- Smack Down3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smart Strike1.wav b/public/audio/battle_anims/PRSFX- Smart Strike1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smart Strike1.wav rename to public/audio/battle_anims/PRSFX- Smart Strike1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smart Strike2.wav b/public/audio/battle_anims/PRSFX- Smart Strike2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smart Strike2.wav rename to public/audio/battle_anims/PRSFX- Smart Strike2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smart Strike3.wav b/public/audio/battle_anims/PRSFX- Smart Strike3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smart Strike3.wav rename to public/audio/battle_anims/PRSFX- Smart Strike3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smart Strike4.wav b/public/audio/battle_anims/PRSFX- Smart Strike4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smart Strike4.wav rename to public/audio/battle_anims/PRSFX- Smart Strike4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smellingsalts.wav b/public/audio/battle_anims/PRSFX- Smellingsalts.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smellingsalts.wav rename to public/audio/battle_anims/PRSFX- Smellingsalts.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smog.wav b/public/audio/battle_anims/PRSFX- Smog.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smog.wav rename to public/audio/battle_anims/PRSFX- Smog.wav diff --git a/public/audio/se/battle_anims/PRSFX- Smokescreen.wav b/public/audio/battle_anims/PRSFX- Smokescreen.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Smokescreen.wav rename to public/audio/battle_anims/PRSFX- Smokescreen.wav diff --git a/public/audio/se/battle_anims/PRSFX- Snarl.wav b/public/audio/battle_anims/PRSFX- Snarl.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Snarl.wav rename to public/audio/battle_anims/PRSFX- Snarl.wav diff --git a/public/audio/se/battle_anims/PRSFX- Snatch.wav b/public/audio/battle_anims/PRSFX- Snatch.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Snatch.wav rename to public/audio/battle_anims/PRSFX- Snatch.wav diff --git a/public/audio/se/battle_anims/PRSFX- Snore.wav b/public/audio/battle_anims/PRSFX- Snore.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Snore.wav rename to public/audio/battle_anims/PRSFX- Snore.wav diff --git a/public/audio/se/battle_anims/PRSFX- Soak.wav b/public/audio/battle_anims/PRSFX- Soak.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Soak.wav rename to public/audio/battle_anims/PRSFX- Soak.wav diff --git a/public/audio/se/battle_anims/PRSFX- Softboiled1.wav b/public/audio/battle_anims/PRSFX- Softboiled1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Softboiled1.wav rename to public/audio/battle_anims/PRSFX- Softboiled1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Softboiled2.wav b/public/audio/battle_anims/PRSFX- Softboiled2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Softboiled2.wav rename to public/audio/battle_anims/PRSFX- Softboiled2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Softboiled3.wav b/public/audio/battle_anims/PRSFX- Softboiled3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Softboiled3.wav rename to public/audio/battle_anims/PRSFX- Softboiled3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Solar Beam1.wav b/public/audio/battle_anims/PRSFX- Solar Beam1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Solar Beam1.wav rename to public/audio/battle_anims/PRSFX- Solar Beam1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Solar Beam2.wav b/public/audio/battle_anims/PRSFX- Solar Beam2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Solar Beam2.wav rename to public/audio/battle_anims/PRSFX- Solar Beam2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sonic Boom1.wav b/public/audio/battle_anims/PRSFX- Sonic Boom1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sonic Boom1.wav rename to public/audio/battle_anims/PRSFX- Sonic Boom1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sonic Boom2.wav b/public/audio/battle_anims/PRSFX- Sonic Boom2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sonic Boom2.wav rename to public/audio/battle_anims/PRSFX- Sonic Boom2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spacial Rend.wav b/public/audio/battle_anims/PRSFX- Spacial Rend.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spacial Rend.wav rename to public/audio/battle_anims/PRSFX- Spacial Rend.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spark1.wav b/public/audio/battle_anims/PRSFX- Spark1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spark1.wav rename to public/audio/battle_anims/PRSFX- Spark1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spark2.wav b/public/audio/battle_anims/PRSFX- Spark2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spark2.wav rename to public/audio/battle_anims/PRSFX- Spark2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sparkling Aria1.wav b/public/audio/battle_anims/PRSFX- Sparkling Aria1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sparkling Aria1.wav rename to public/audio/battle_anims/PRSFX- Sparkling Aria1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sparkling Aria2.wav b/public/audio/battle_anims/PRSFX- Sparkling Aria2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sparkling Aria2.wav rename to public/audio/battle_anims/PRSFX- Sparkling Aria2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sparkling Aria3.wav b/public/audio/battle_anims/PRSFX- Sparkling Aria3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sparkling Aria3.wav rename to public/audio/battle_anims/PRSFX- Sparkling Aria3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spectral Thief1.wav b/public/audio/battle_anims/PRSFX- Spectral Thief1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spectral Thief1.wav rename to public/audio/battle_anims/PRSFX- Spectral Thief1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spectral Thief2.wav b/public/audio/battle_anims/PRSFX- Spectral Thief2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spectral Thief2.wav rename to public/audio/battle_anims/PRSFX- Spectral Thief2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spectral Thief3.wav b/public/audio/battle_anims/PRSFX- Spectral Thief3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spectral Thief3.wav rename to public/audio/battle_anims/PRSFX- Spectral Thief3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spectral Thief4.wav b/public/audio/battle_anims/PRSFX- Spectral Thief4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spectral Thief4.wav rename to public/audio/battle_anims/PRSFX- Spectral Thief4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Speed Swap.wav b/public/audio/battle_anims/PRSFX- Speed Swap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Speed Swap.wav rename to public/audio/battle_anims/PRSFX- Speed Swap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spider Web1.wav b/public/audio/battle_anims/PRSFX- Spider Web1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spider Web1.wav rename to public/audio/battle_anims/PRSFX- Spider Web1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spider Web2.wav b/public/audio/battle_anims/PRSFX- Spider Web2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spider Web2.wav rename to public/audio/battle_anims/PRSFX- Spider Web2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spike Cannon.wav b/public/audio/battle_anims/PRSFX- Spike Cannon.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spike Cannon.wav rename to public/audio/battle_anims/PRSFX- Spike Cannon.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spikes1.wav b/public/audio/battle_anims/PRSFX- Spikes1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spikes1.wav rename to public/audio/battle_anims/PRSFX- Spikes1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spikes2.wav b/public/audio/battle_anims/PRSFX- Spikes2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spikes2.wav rename to public/audio/battle_anims/PRSFX- Spikes2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spiky Shield1.wav b/public/audio/battle_anims/PRSFX- Spiky Shield1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spiky Shield1.wav rename to public/audio/battle_anims/PRSFX- Spiky Shield1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spiky Shield2.wav b/public/audio/battle_anims/PRSFX- Spiky Shield2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spiky Shield2.wav rename to public/audio/battle_anims/PRSFX- Spiky Shield2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spirit Shackle1.wav b/public/audio/battle_anims/PRSFX- Spirit Shackle1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spirit Shackle1.wav rename to public/audio/battle_anims/PRSFX- Spirit Shackle1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spirit Shackle2.wav b/public/audio/battle_anims/PRSFX- Spirit Shackle2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spirit Shackle2.wav rename to public/audio/battle_anims/PRSFX- Spirit Shackle2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spirit Shackle3.wav b/public/audio/battle_anims/PRSFX- Spirit Shackle3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spirit Shackle3.wav rename to public/audio/battle_anims/PRSFX- Spirit Shackle3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spirit Shackle4.wav b/public/audio/battle_anims/PRSFX- Spirit Shackle4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spirit Shackle4.wav rename to public/audio/battle_anims/PRSFX- Spirit Shackle4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spit Up.wav b/public/audio/battle_anims/PRSFX- Spit Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spit Up.wav rename to public/audio/battle_anims/PRSFX- Spit Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spite1.wav b/public/audio/battle_anims/PRSFX- Spite1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spite1.wav rename to public/audio/battle_anims/PRSFX- Spite1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spite2.wav b/public/audio/battle_anims/PRSFX- Spite2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spite2.wav rename to public/audio/battle_anims/PRSFX- Spite2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Splash.wav b/public/audio/battle_anims/PRSFX- Splash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Splash.wav rename to public/audio/battle_anims/PRSFX- Splash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spore.wav b/public/audio/battle_anims/PRSFX- Spore.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spore.wav rename to public/audio/battle_anims/PRSFX- Spore.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spotlight1.wav b/public/audio/battle_anims/PRSFX- Spotlight1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spotlight1.wav rename to public/audio/battle_anims/PRSFX- Spotlight1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spotlight2.wav b/public/audio/battle_anims/PRSFX- Spotlight2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spotlight2.wav rename to public/audio/battle_anims/PRSFX- Spotlight2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spotlight3.wav b/public/audio/battle_anims/PRSFX- Spotlight3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spotlight3.wav rename to public/audio/battle_anims/PRSFX- Spotlight3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spotlight4.wav b/public/audio/battle_anims/PRSFX- Spotlight4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spotlight4.wav rename to public/audio/battle_anims/PRSFX- Spotlight4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Spotlight5.wav b/public/audio/battle_anims/PRSFX- Spotlight5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Spotlight5.wav rename to public/audio/battle_anims/PRSFX- Spotlight5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stat Down.wav b/public/audio/battle_anims/PRSFX- Stat Down.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stat Down.wav rename to public/audio/battle_anims/PRSFX- Stat Down.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stat Up.wav b/public/audio/battle_anims/PRSFX- Stat Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stat Up.wav rename to public/audio/battle_anims/PRSFX- Stat Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stealth Rocks.wav b/public/audio/battle_anims/PRSFX- Stealth Rocks.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stealth Rocks.wav rename to public/audio/battle_anims/PRSFX- Stealth Rocks.wav diff --git a/public/audio/se/battle_anims/PRSFX- Steam Eruption1.wav b/public/audio/battle_anims/PRSFX- Steam Eruption1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Steam Eruption1.wav rename to public/audio/battle_anims/PRSFX- Steam Eruption1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Steam Eruption2.wav b/public/audio/battle_anims/PRSFX- Steam Eruption2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Steam Eruption2.wav rename to public/audio/battle_anims/PRSFX- Steam Eruption2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Steamroller1.wav b/public/audio/battle_anims/PRSFX- Steamroller1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Steamroller1.wav rename to public/audio/battle_anims/PRSFX- Steamroller1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Steamroller2.wav b/public/audio/battle_anims/PRSFX- Steamroller2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Steamroller2.wav rename to public/audio/battle_anims/PRSFX- Steamroller2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Steel Wing.wav b/public/audio/battle_anims/PRSFX- Steel Wing.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Steel Wing.wav rename to public/audio/battle_anims/PRSFX- Steel Wing.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sticky Web.wav b/public/audio/battle_anims/PRSFX- Sticky Web.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sticky Web.wav rename to public/audio/battle_anims/PRSFX- Sticky Web.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stockpile.wav b/public/audio/battle_anims/PRSFX- Stockpile.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stockpile.wav rename to public/audio/battle_anims/PRSFX- Stockpile.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stomp.wav b/public/audio/battle_anims/PRSFX- Stomp.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stomp.wav rename to public/audio/battle_anims/PRSFX- Stomp.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stomping Tantrum.wav b/public/audio/battle_anims/PRSFX- Stomping Tantrum.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stomping Tantrum.wav rename to public/audio/battle_anims/PRSFX- Stomping Tantrum.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stone Edge.wav b/public/audio/battle_anims/PRSFX- Stone Edge.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stone Edge.wav rename to public/audio/battle_anims/PRSFX- Stone Edge.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stored Power1.wav b/public/audio/battle_anims/PRSFX- Stored Power1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stored Power1.wav rename to public/audio/battle_anims/PRSFX- Stored Power1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stored Power2.wav b/public/audio/battle_anims/PRSFX- Stored Power2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stored Power2.wav rename to public/audio/battle_anims/PRSFX- Stored Power2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Storm Throw1.wav b/public/audio/battle_anims/PRSFX- Storm Throw1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Storm Throw1.wav rename to public/audio/battle_anims/PRSFX- Storm Throw1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Storm Throw2.wav b/public/audio/battle_anims/PRSFX- Storm Throw2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Storm Throw2.wav rename to public/audio/battle_anims/PRSFX- Storm Throw2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Strength Sap1.wav b/public/audio/battle_anims/PRSFX- Strength Sap1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Strength Sap1.wav rename to public/audio/battle_anims/PRSFX- Strength Sap1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Strength Sap2.wav b/public/audio/battle_anims/PRSFX- Strength Sap2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Strength Sap2.wav rename to public/audio/battle_anims/PRSFX- Strength Sap2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Strength Sap3.wav b/public/audio/battle_anims/PRSFX- Strength Sap3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Strength Sap3.wav rename to public/audio/battle_anims/PRSFX- Strength Sap3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Strength.wav b/public/audio/battle_anims/PRSFX- Strength.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Strength.wav rename to public/audio/battle_anims/PRSFX- Strength.wav diff --git a/public/audio/se/battle_anims/PRSFX- String Shot1.wav b/public/audio/battle_anims/PRSFX- String Shot1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- String Shot1.wav rename to public/audio/battle_anims/PRSFX- String Shot1.wav diff --git a/public/audio/se/battle_anims/PRSFX- String Shot2.wav b/public/audio/battle_anims/PRSFX- String Shot2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- String Shot2.wav rename to public/audio/battle_anims/PRSFX- String Shot2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Struggle Bug.wav b/public/audio/battle_anims/PRSFX- Struggle Bug.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Struggle Bug.wav rename to public/audio/battle_anims/PRSFX- Struggle Bug.wav diff --git a/public/audio/se/battle_anims/PRSFX- Struggle.wav b/public/audio/battle_anims/PRSFX- Struggle.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Struggle.wav rename to public/audio/battle_anims/PRSFX- Struggle.wav diff --git a/public/audio/se/battle_anims/PRSFX- Stun Spore.wav b/public/audio/battle_anims/PRSFX- Stun Spore.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Stun Spore.wav rename to public/audio/battle_anims/PRSFX- Stun Spore.wav diff --git a/public/audio/se/battle_anims/PRSFX- Submission.wav b/public/audio/battle_anims/PRSFX- Submission.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Submission.wav rename to public/audio/battle_anims/PRSFX- Submission.wav diff --git a/public/audio/se/battle_anims/PRSFX- Substitute1.wav b/public/audio/battle_anims/PRSFX- Substitute1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Substitute1.wav rename to public/audio/battle_anims/PRSFX- Substitute1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Substitute2.wav b/public/audio/battle_anims/PRSFX- Substitute2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Substitute2.wav rename to public/audio/battle_anims/PRSFX- Substitute2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Subzero Slammer1.wav b/public/audio/battle_anims/PRSFX- Subzero Slammer1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Subzero Slammer1.wav rename to public/audio/battle_anims/PRSFX- Subzero Slammer1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Subzero Slammer2.wav b/public/audio/battle_anims/PRSFX- Subzero Slammer2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Subzero Slammer2.wav rename to public/audio/battle_anims/PRSFX- Subzero Slammer2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Subzero Slammer3.wav b/public/audio/battle_anims/PRSFX- Subzero Slammer3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Subzero Slammer3.wav rename to public/audio/battle_anims/PRSFX- Subzero Slammer3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Subzero Slammer4.wav b/public/audio/battle_anims/PRSFX- Subzero Slammer4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Subzero Slammer4.wav rename to public/audio/battle_anims/PRSFX- Subzero Slammer4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sucker Punch1.wav b/public/audio/battle_anims/PRSFX- Sucker Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sucker Punch1.wav rename to public/audio/battle_anims/PRSFX- Sucker Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sucker Punch2.wav b/public/audio/battle_anims/PRSFX- Sucker Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sucker Punch2.wav rename to public/audio/battle_anims/PRSFX- Sucker Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sunny Day.wav b/public/audio/battle_anims/PRSFX- Sunny Day.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sunny Day.wav rename to public/audio/battle_anims/PRSFX- Sunny Day.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sunny.wav b/public/audio/battle_anims/PRSFX- Sunny.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sunny.wav rename to public/audio/battle_anims/PRSFX- Sunny.wav diff --git a/public/audio/se/battle_anims/PRSFX- Super Fang1.wav b/public/audio/battle_anims/PRSFX- Super Fang1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Super Fang1.wav rename to public/audio/battle_anims/PRSFX- Super Fang1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Super Fang2.wav b/public/audio/battle_anims/PRSFX- Super Fang2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Super Fang2.wav rename to public/audio/battle_anims/PRSFX- Super Fang2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Superpower1.wav b/public/audio/battle_anims/PRSFX- Superpower1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Superpower1.wav rename to public/audio/battle_anims/PRSFX- Superpower1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Superpower2.wav b/public/audio/battle_anims/PRSFX- Superpower2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Superpower2.wav rename to public/audio/battle_anims/PRSFX- Superpower2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Supersonic.wav b/public/audio/battle_anims/PRSFX- Supersonic.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Supersonic.wav rename to public/audio/battle_anims/PRSFX- Supersonic.wav diff --git a/public/audio/se/battle_anims/PRSFX- Surf.wav b/public/audio/battle_anims/PRSFX- Surf.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Surf.wav rename to public/audio/battle_anims/PRSFX- Surf.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swagger1.wav b/public/audio/battle_anims/PRSFX- Swagger1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swagger1.wav rename to public/audio/battle_anims/PRSFX- Swagger1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swagger2.wav b/public/audio/battle_anims/PRSFX- Swagger2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swagger2.wav rename to public/audio/battle_anims/PRSFX- Swagger2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swallow.wav b/public/audio/battle_anims/PRSFX- Swallow.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swallow.wav rename to public/audio/battle_anims/PRSFX- Swallow.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sweet Kiss1.wav b/public/audio/battle_anims/PRSFX- Sweet Kiss1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sweet Kiss1.wav rename to public/audio/battle_anims/PRSFX- Sweet Kiss1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sweet Kiss2.wav b/public/audio/battle_anims/PRSFX- Sweet Kiss2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sweet Kiss2.wav rename to public/audio/battle_anims/PRSFX- Sweet Kiss2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Sweet Scent.wav b/public/audio/battle_anims/PRSFX- Sweet Scent.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Sweet Scent.wav rename to public/audio/battle_anims/PRSFX- Sweet Scent.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swift1.wav b/public/audio/battle_anims/PRSFX- Swift1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swift1.wav rename to public/audio/battle_anims/PRSFX- Swift1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swift2.wav b/public/audio/battle_anims/PRSFX- Swift2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swift2.wav rename to public/audio/battle_anims/PRSFX- Swift2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Switcheroo.wav b/public/audio/battle_anims/PRSFX- Switcheroo.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Switcheroo.wav rename to public/audio/battle_anims/PRSFX- Switcheroo.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swords Dance1.wav b/public/audio/battle_anims/PRSFX- Swords Dance1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swords Dance1.wav rename to public/audio/battle_anims/PRSFX- Swords Dance1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Swords Dance2.wav b/public/audio/battle_anims/PRSFX- Swords Dance2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Swords Dance2.wav rename to public/audio/battle_anims/PRSFX- Swords Dance2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Synchronoise.wav b/public/audio/battle_anims/PRSFX- Synchronoise.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Synchronoise.wav rename to public/audio/battle_anims/PRSFX- Synchronoise.wav diff --git a/public/audio/se/battle_anims/PRSFX- Synthesis.wav b/public/audio/battle_anims/PRSFX- Synthesis.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Synthesis.wav rename to public/audio/battle_anims/PRSFX- Synthesis.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tackle.wav b/public/audio/battle_anims/PRSFX- Tackle.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tackle.wav rename to public/audio/battle_anims/PRSFX- Tackle.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tail Glow.wav b/public/audio/battle_anims/PRSFX- Tail Glow.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tail Glow.wav rename to public/audio/battle_anims/PRSFX- Tail Glow.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tail Slap.wav b/public/audio/battle_anims/PRSFX- Tail Slap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tail Slap.wav rename to public/audio/battle_anims/PRSFX- Tail Slap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tail Whip.wav b/public/audio/battle_anims/PRSFX- Tail Whip.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tail Whip.wav rename to public/audio/battle_anims/PRSFX- Tail Whip.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tailwind.wav b/public/audio/battle_anims/PRSFX- Tailwind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tailwind.wav rename to public/audio/battle_anims/PRSFX- Tailwind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Take Down1.wav b/public/audio/battle_anims/PRSFX- Take Down1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Take Down1.wav rename to public/audio/battle_anims/PRSFX- Take Down1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Take Down2.wav b/public/audio/battle_anims/PRSFX- Take Down2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Take Down2.wav rename to public/audio/battle_anims/PRSFX- Take Down2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Taunt1.wav b/public/audio/battle_anims/PRSFX- Taunt1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Taunt1.wav rename to public/audio/battle_anims/PRSFX- Taunt1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Taunt2.wav b/public/audio/battle_anims/PRSFX- Taunt2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Taunt2.wav rename to public/audio/battle_anims/PRSFX- Taunt2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Taunt3.wav b/public/audio/battle_anims/PRSFX- Taunt3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Taunt3.wav rename to public/audio/battle_anims/PRSFX- Taunt3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tearful Look1.wav b/public/audio/battle_anims/PRSFX- Tearful Look1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tearful Look1.wav rename to public/audio/battle_anims/PRSFX- Tearful Look1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tearful Look2.wav b/public/audio/battle_anims/PRSFX- Tearful Look2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tearful Look2.wav rename to public/audio/battle_anims/PRSFX- Tearful Look2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tearful Look3.wav b/public/audio/battle_anims/PRSFX- Tearful Look3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tearful Look3.wav rename to public/audio/battle_anims/PRSFX- Tearful Look3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Techno Blast 1.wav b/public/audio/battle_anims/PRSFX- Techno Blast 1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Techno Blast 1.wav rename to public/audio/battle_anims/PRSFX- Techno Blast 1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Techno Blast 2.wav b/public/audio/battle_anims/PRSFX- Techno Blast 2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Techno Blast 2.wav rename to public/audio/battle_anims/PRSFX- Techno Blast 2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Techno Blast 3.wav b/public/audio/battle_anims/PRSFX- Techno Blast 3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Techno Blast 3.wav rename to public/audio/battle_anims/PRSFX- Techno Blast 3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Teeter Dance.wav b/public/audio/battle_anims/PRSFX- Teeter Dance.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Teeter Dance.wav rename to public/audio/battle_anims/PRSFX- Teeter Dance.wav diff --git a/public/audio/se/battle_anims/PRSFX- Telekinesis.wav b/public/audio/battle_anims/PRSFX- Telekinesis.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Telekinesis.wav rename to public/audio/battle_anims/PRSFX- Telekinesis.wav diff --git a/public/audio/se/battle_anims/PRSFX- Teleport.wav b/public/audio/battle_anims/PRSFX- Teleport.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Teleport.wav rename to public/audio/battle_anims/PRSFX- Teleport.wav diff --git a/public/audio/se/battle_anims/PRSFX- Theif1.wav b/public/audio/battle_anims/PRSFX- Theif1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Theif1.wav rename to public/audio/battle_anims/PRSFX- Theif1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Theif2.wav b/public/audio/battle_anims/PRSFX- Theif2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Theif2.wav rename to public/audio/battle_anims/PRSFX- Theif2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thousand Arrows1.wav b/public/audio/battle_anims/PRSFX- Thousand Arrows1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thousand Arrows1.wav rename to public/audio/battle_anims/PRSFX- Thousand Arrows1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thousand Arrows2.wav b/public/audio/battle_anims/PRSFX- Thousand Arrows2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thousand Arrows2.wav rename to public/audio/battle_anims/PRSFX- Thousand Arrows2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thousand Waves1.wav b/public/audio/battle_anims/PRSFX- Thousand Waves1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thousand Waves1.wav rename to public/audio/battle_anims/PRSFX- Thousand Waves1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thousand Waves2.wav b/public/audio/battle_anims/PRSFX- Thousand Waves2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thousand Waves2.wav rename to public/audio/battle_anims/PRSFX- Thousand Waves2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thrash.wav b/public/audio/battle_anims/PRSFX- Thrash.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thrash.wav rename to public/audio/battle_anims/PRSFX- Thrash.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thrash2.wav b/public/audio/battle_anims/PRSFX- Thrash2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thrash2.wav rename to public/audio/battle_anims/PRSFX- Thrash2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Throat Chop1.wav b/public/audio/battle_anims/PRSFX- Throat Chop1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Throat Chop1.wav rename to public/audio/battle_anims/PRSFX- Throat Chop1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Throat Chop2.wav b/public/audio/battle_anims/PRSFX- Throat Chop2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Throat Chop2.wav rename to public/audio/battle_anims/PRSFX- Throat Chop2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Throat Chop3.wav b/public/audio/battle_anims/PRSFX- Throat Chop3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Throat Chop3.wav rename to public/audio/battle_anims/PRSFX- Throat Chop3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Throat Chop4.wav b/public/audio/battle_anims/PRSFX- Throat Chop4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Throat Chop4.wav rename to public/audio/battle_anims/PRSFX- Throat Chop4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Throat Chop5.wav b/public/audio/battle_anims/PRSFX- Throat Chop5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Throat Chop5.wav rename to public/audio/battle_anims/PRSFX- Throat Chop5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunder Fang.wav b/public/audio/battle_anims/PRSFX- Thunder Fang.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunder Fang.wav rename to public/audio/battle_anims/PRSFX- Thunder Fang.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunder Punch1.wav b/public/audio/battle_anims/PRSFX- Thunder Punch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunder Punch1.wav rename to public/audio/battle_anims/PRSFX- Thunder Punch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunder Punch2.wav b/public/audio/battle_anims/PRSFX- Thunder Punch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunder Punch2.wav rename to public/audio/battle_anims/PRSFX- Thunder Punch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunder Wave.wav b/public/audio/battle_anims/PRSFX- Thunder Wave.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunder Wave.wav rename to public/audio/battle_anims/PRSFX- Thunder Wave.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunder.wav b/public/audio/battle_anims/PRSFX- Thunder.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunder.wav rename to public/audio/battle_anims/PRSFX- Thunder.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunderbolt1.wav b/public/audio/battle_anims/PRSFX- Thunderbolt1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunderbolt1.wav rename to public/audio/battle_anims/PRSFX- Thunderbolt1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thunderbolt2.wav b/public/audio/battle_anims/PRSFX- Thunderbolt2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thunderbolt2.wav rename to public/audio/battle_anims/PRSFX- Thunderbolt2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Thundershock.wav b/public/audio/battle_anims/PRSFX- Thundershock.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Thundershock.wav rename to public/audio/battle_anims/PRSFX- Thundershock.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tickle.wav b/public/audio/battle_anims/PRSFX- Tickle.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tickle.wav rename to public/audio/battle_anims/PRSFX- Tickle.wav diff --git a/public/audio/se/battle_anims/PRSFX- Topsy Turvy.wav b/public/audio/battle_anims/PRSFX- Topsy Turvy.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Topsy Turvy.wav rename to public/audio/battle_anims/PRSFX- Topsy Turvy.wav diff --git a/public/audio/se/battle_anims/PRSFX- Torment1.wav b/public/audio/battle_anims/PRSFX- Torment1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Torment1.wav rename to public/audio/battle_anims/PRSFX- Torment1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Torment2.wav b/public/audio/battle_anims/PRSFX- Torment2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Torment2.wav rename to public/audio/battle_anims/PRSFX- Torment2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic Spikes1.wav b/public/audio/battle_anims/PRSFX- Toxic Spikes1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic Spikes1.wav rename to public/audio/battle_anims/PRSFX- Toxic Spikes1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic Spikes2.wav b/public/audio/battle_anims/PRSFX- Toxic Spikes2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic Spikes2.wav rename to public/audio/battle_anims/PRSFX- Toxic Spikes2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic Thread1.wav b/public/audio/battle_anims/PRSFX- Toxic Thread1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic Thread1.wav rename to public/audio/battle_anims/PRSFX- Toxic Thread1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic Thread2.wav b/public/audio/battle_anims/PRSFX- Toxic Thread2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic Thread2.wav rename to public/audio/battle_anims/PRSFX- Toxic Thread2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic Thread3.wav b/public/audio/battle_anims/PRSFX- Toxic Thread3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic Thread3.wav rename to public/audio/battle_anims/PRSFX- Toxic Thread3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic1.wav b/public/audio/battle_anims/PRSFX- Toxic1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic1.wav rename to public/audio/battle_anims/PRSFX- Toxic1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Toxic2.wav b/public/audio/battle_anims/PRSFX- Toxic2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Toxic2.wav rename to public/audio/battle_anims/PRSFX- Toxic2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trainer.wav b/public/audio/battle_anims/PRSFX- Trainer.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trainer.wav rename to public/audio/battle_anims/PRSFX- Trainer.wav diff --git a/public/audio/se/battle_anims/PRSFX- Transform.wav b/public/audio/battle_anims/PRSFX- Transform.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Transform.wav rename to public/audio/battle_anims/PRSFX- Transform.wav diff --git a/public/audio/se/battle_anims/PRSFX- Tri Attack.wav b/public/audio/battle_anims/PRSFX- Tri Attack.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Tri Attack.wav rename to public/audio/battle_anims/PRSFX- Tri Attack.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trick Room.wav b/public/audio/battle_anims/PRSFX- Trick Room.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trick Room.wav rename to public/audio/battle_anims/PRSFX- Trick Room.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trick or Treat.wav b/public/audio/battle_anims/PRSFX- Trick or Treat.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trick or Treat.wav rename to public/audio/battle_anims/PRSFX- Trick or Treat.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trick.wav b/public/audio/battle_anims/PRSFX- Trick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trick.wav rename to public/audio/battle_anims/PRSFX- Trick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Triple Kick.wav b/public/audio/battle_anims/PRSFX- Triple Kick.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Triple Kick.wav rename to public/audio/battle_anims/PRSFX- Triple Kick.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trop Kick1.wav b/public/audio/battle_anims/PRSFX- Trop Kick1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trop Kick1.wav rename to public/audio/battle_anims/PRSFX- Trop Kick1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trop Kick2.wav b/public/audio/battle_anims/PRSFX- Trop Kick2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trop Kick2.wav rename to public/audio/battle_anims/PRSFX- Trop Kick2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trop Kick3.wav b/public/audio/battle_anims/PRSFX- Trop Kick3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trop Kick3.wav rename to public/audio/battle_anims/PRSFX- Trop Kick3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trump Card1.wav b/public/audio/battle_anims/PRSFX- Trump Card1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trump Card1.wav rename to public/audio/battle_anims/PRSFX- Trump Card1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Trump Card2.wav b/public/audio/battle_anims/PRSFX- Trump Card2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Trump Card2.wav rename to public/audio/battle_anims/PRSFX- Trump Card2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Twineedle1.wav b/public/audio/battle_anims/PRSFX- Twineedle1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Twineedle1.wav rename to public/audio/battle_anims/PRSFX- Twineedle1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Twineedle2.wav b/public/audio/battle_anims/PRSFX- Twineedle2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Twineedle2.wav rename to public/audio/battle_anims/PRSFX- Twineedle2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Twinkle Tackle1.wav b/public/audio/battle_anims/PRSFX- Twinkle Tackle1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Twinkle Tackle1.wav rename to public/audio/battle_anims/PRSFX- Twinkle Tackle1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Twinkle Tackle2.wav b/public/audio/battle_anims/PRSFX- Twinkle Tackle2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Twinkle Tackle2.wav rename to public/audio/battle_anims/PRSFX- Twinkle Tackle2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Twinkle Tackle3.wav b/public/audio/battle_anims/PRSFX- Twinkle Tackle3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Twinkle Tackle3.wav rename to public/audio/battle_anims/PRSFX- Twinkle Tackle3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Twister.wav b/public/audio/battle_anims/PRSFX- Twister.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Twister.wav rename to public/audio/battle_anims/PRSFX- Twister.wav diff --git a/public/audio/se/battle_anims/PRSFX- U-Turn.wav b/public/audio/battle_anims/PRSFX- U-Turn.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- U-Turn.wav rename to public/audio/battle_anims/PRSFX- U-Turn.wav diff --git a/public/audio/se/battle_anims/PRSFX- U-Turn2.wav b/public/audio/battle_anims/PRSFX- U-Turn2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- U-Turn2.wav rename to public/audio/battle_anims/PRSFX- U-Turn2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Uproar1.wav b/public/audio/battle_anims/PRSFX- Uproar1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Uproar1.wav rename to public/audio/battle_anims/PRSFX- Uproar1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Uproar2.wav b/public/audio/battle_anims/PRSFX- Uproar2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Uproar2.wav rename to public/audio/battle_anims/PRSFX- Uproar2.wav diff --git a/public/audio/se/battle_anims/PRSFX- V-Create1.wav b/public/audio/battle_anims/PRSFX- V-Create1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- V-Create1.wav rename to public/audio/battle_anims/PRSFX- V-Create1.wav diff --git a/public/audio/se/battle_anims/PRSFX- V-Create2.wav b/public/audio/battle_anims/PRSFX- V-Create2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- V-Create2.wav rename to public/audio/battle_anims/PRSFX- V-Create2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Vacuum Wave1.wav b/public/audio/battle_anims/PRSFX- Vacuum Wave1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Vacuum Wave1.wav rename to public/audio/battle_anims/PRSFX- Vacuum Wave1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Vacuum Wave2.wav b/public/audio/battle_anims/PRSFX- Vacuum Wave2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Vacuum Wave2.wav rename to public/audio/battle_anims/PRSFX- Vacuum Wave2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Venom Drench.wav b/public/audio/battle_anims/PRSFX- Venom Drench.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Venom Drench.wav rename to public/audio/battle_anims/PRSFX- Venom Drench.wav diff --git a/public/audio/se/battle_anims/PRSFX- Venoshock1.wav b/public/audio/battle_anims/PRSFX- Venoshock1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Venoshock1.wav rename to public/audio/battle_anims/PRSFX- Venoshock1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Venoshock2.wav b/public/audio/battle_anims/PRSFX- Venoshock2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Venoshock2.wav rename to public/audio/battle_anims/PRSFX- Venoshock2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Vice Grip.wav b/public/audio/battle_anims/PRSFX- Vice Grip.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Vice Grip.wav rename to public/audio/battle_anims/PRSFX- Vice Grip.wav diff --git a/public/audio/se/battle_anims/PRSFX- Vine Whip.wav b/public/audio/battle_anims/PRSFX- Vine Whip.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Vine Whip.wav rename to public/audio/battle_anims/PRSFX- Vine Whip.wav diff --git a/public/audio/se/battle_anims/PRSFX- Vital Throw1.wav b/public/audio/battle_anims/PRSFX- Vital Throw1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Vital Throw1.wav rename to public/audio/battle_anims/PRSFX- Vital Throw1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Vital Throw2.wav b/public/audio/battle_anims/PRSFX- Vital Throw2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Vital Throw2.wav rename to public/audio/battle_anims/PRSFX- Vital Throw2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Volt Switch1.wav b/public/audio/battle_anims/PRSFX- Volt Switch1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Volt Switch1.wav rename to public/audio/battle_anims/PRSFX- Volt Switch1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Volt Switch2.wav b/public/audio/battle_anims/PRSFX- Volt Switch2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Volt Switch2.wav rename to public/audio/battle_anims/PRSFX- Volt Switch2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Volt Tackle1.wav b/public/audio/battle_anims/PRSFX- Volt Tackle1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Volt Tackle1.wav rename to public/audio/battle_anims/PRSFX- Volt Tackle1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Volt Tackle2.wav b/public/audio/battle_anims/PRSFX- Volt Tackle2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Volt Tackle2.wav rename to public/audio/battle_anims/PRSFX- Volt Tackle2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wake Up Slap.wav b/public/audio/battle_anims/PRSFX- Wake Up Slap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wake Up Slap.wav rename to public/audio/battle_anims/PRSFX- Wake Up Slap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Gun.wav b/public/audio/battle_anims/PRSFX- Water Gun.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Gun.wav rename to public/audio/battle_anims/PRSFX- Water Gun.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Pledge1.wav b/public/audio/battle_anims/PRSFX- Water Pledge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Pledge1.wav rename to public/audio/battle_anims/PRSFX- Water Pledge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Pledge2.wav b/public/audio/battle_anims/PRSFX- Water Pledge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Pledge2.wav rename to public/audio/battle_anims/PRSFX- Water Pledge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Pulse.wav b/public/audio/battle_anims/PRSFX- Water Pulse.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Pulse.wav rename to public/audio/battle_anims/PRSFX- Water Pulse.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Pulse2.wav b/public/audio/battle_anims/PRSFX- Water Pulse2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Pulse2.wav rename to public/audio/battle_anims/PRSFX- Water Pulse2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Shurkein.wav b/public/audio/battle_anims/PRSFX- Water Shurkein.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Shurkein.wav rename to public/audio/battle_anims/PRSFX- Water Shurkein.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Sport.wav b/public/audio/battle_anims/PRSFX- Water Sport.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Sport.wav rename to public/audio/battle_anims/PRSFX- Water Sport.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Spout1.wav b/public/audio/battle_anims/PRSFX- Water Spout1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Spout1.wav rename to public/audio/battle_anims/PRSFX- Water Spout1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Water Spout2.wav b/public/audio/battle_anims/PRSFX- Water Spout2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Water Spout2.wav rename to public/audio/battle_anims/PRSFX- Water Spout2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Waterfall1.wav b/public/audio/battle_anims/PRSFX- Waterfall1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Waterfall1.wav rename to public/audio/battle_anims/PRSFX- Waterfall1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Waterfall2.wav b/public/audio/battle_anims/PRSFX- Waterfall2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Waterfall2.wav rename to public/audio/battle_anims/PRSFX- Waterfall2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Weather Ball1.wav b/public/audio/battle_anims/PRSFX- Weather Ball1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Weather Ball1.wav rename to public/audio/battle_anims/PRSFX- Weather Ball1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Weather Ball2.wav b/public/audio/battle_anims/PRSFX- Weather Ball2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Weather Ball2.wav rename to public/audio/battle_anims/PRSFX- Weather Ball2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Weather Ball3.wav b/public/audio/battle_anims/PRSFX- Weather Ball3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Weather Ball3.wav rename to public/audio/battle_anims/PRSFX- Weather Ball3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Weather Ball4.wav b/public/audio/battle_anims/PRSFX- Weather Ball4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Weather Ball4.wav rename to public/audio/battle_anims/PRSFX- Weather Ball4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Weather Ball5.wav b/public/audio/battle_anims/PRSFX- Weather Ball5.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Weather Ball5.wav rename to public/audio/battle_anims/PRSFX- Weather Ball5.wav diff --git a/public/audio/se/battle_anims/PRSFX- Weather Ball6.wav b/public/audio/battle_anims/PRSFX- Weather Ball6.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Weather Ball6.wav rename to public/audio/battle_anims/PRSFX- Weather Ball6.wav diff --git a/public/audio/se/battle_anims/PRSFX- Whirlpool.wav b/public/audio/battle_anims/PRSFX- Whirlpool.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Whirlpool.wav rename to public/audio/battle_anims/PRSFX- Whirlpool.wav diff --git a/public/audio/se/battle_anims/PRSFX- Whirlpool2.wav b/public/audio/battle_anims/PRSFX- Whirlpool2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Whirlpool2.wav rename to public/audio/battle_anims/PRSFX- Whirlpool2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Whirlwind.wav b/public/audio/battle_anims/PRSFX- Whirlwind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Whirlwind.wav rename to public/audio/battle_anims/PRSFX- Whirlwind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wide Guard.wav b/public/audio/battle_anims/PRSFX- Wide Guard.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wide Guard.wav rename to public/audio/battle_anims/PRSFX- Wide Guard.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wild Charge1.wav b/public/audio/battle_anims/PRSFX- Wild Charge1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wild Charge1.wav rename to public/audio/battle_anims/PRSFX- Wild Charge1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wild Charge2.wav b/public/audio/battle_anims/PRSFX- Wild Charge2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wild Charge2.wav rename to public/audio/battle_anims/PRSFX- Wild Charge2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Will O Wisp1.wav b/public/audio/battle_anims/PRSFX- Will O Wisp1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Will O Wisp1.wav rename to public/audio/battle_anims/PRSFX- Will O Wisp1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Will O Wisp2.wav b/public/audio/battle_anims/PRSFX- Will O Wisp2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Will O Wisp2.wav rename to public/audio/battle_anims/PRSFX- Will O Wisp2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wind.wav b/public/audio/battle_anims/PRSFX- Wind.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wind.wav rename to public/audio/battle_anims/PRSFX- Wind.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wing Attack1.wav b/public/audio/battle_anims/PRSFX- Wing Attack1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wing Attack1.wav rename to public/audio/battle_anims/PRSFX- Wing Attack1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wing Attack2.wav b/public/audio/battle_anims/PRSFX- Wing Attack2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wing Attack2.wav rename to public/audio/battle_anims/PRSFX- Wing Attack2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wish.wav b/public/audio/battle_anims/PRSFX- Wish.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wish.wav rename to public/audio/battle_anims/PRSFX- Wish.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wish2.wav b/public/audio/battle_anims/PRSFX- Wish2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wish2.wav rename to public/audio/battle_anims/PRSFX- Wish2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Withdraw.wav b/public/audio/battle_anims/PRSFX- Withdraw.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Withdraw.wav rename to public/audio/battle_anims/PRSFX- Withdraw.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wonder Room.wav b/public/audio/battle_anims/PRSFX- Wonder Room.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wonder Room.wav rename to public/audio/battle_anims/PRSFX- Wonder Room.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wood Hammer.wav b/public/audio/battle_anims/PRSFX- Wood Hammer.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wood Hammer.wav rename to public/audio/battle_anims/PRSFX- Wood Hammer.wav diff --git a/public/audio/se/battle_anims/PRSFX- Work Up.wav b/public/audio/battle_anims/PRSFX- Work Up.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Work Up.wav rename to public/audio/battle_anims/PRSFX- Work Up.wav diff --git a/public/audio/se/battle_anims/PRSFX- Worry Seed1.wav b/public/audio/battle_anims/PRSFX- Worry Seed1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Worry Seed1.wav rename to public/audio/battle_anims/PRSFX- Worry Seed1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Worry Seed2.wav b/public/audio/battle_anims/PRSFX- Worry Seed2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Worry Seed2.wav rename to public/audio/battle_anims/PRSFX- Worry Seed2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wrap.wav b/public/audio/battle_anims/PRSFX- Wrap.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wrap.wav rename to public/audio/battle_anims/PRSFX- Wrap.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wring Out1.wav b/public/audio/battle_anims/PRSFX- Wring Out1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wring Out1.wav rename to public/audio/battle_anims/PRSFX- Wring Out1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Wring Out2.wav b/public/audio/battle_anims/PRSFX- Wring Out2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Wring Out2.wav rename to public/audio/battle_anims/PRSFX- Wring Out2.wav diff --git a/public/audio/se/battle_anims/PRSFX- X Scissor.wav b/public/audio/battle_anims/PRSFX- X Scissor.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- X Scissor.wav rename to public/audio/battle_anims/PRSFX- X Scissor.wav diff --git a/public/audio/se/battle_anims/PRSFX- Yawn.wav b/public/audio/battle_anims/PRSFX- Yawn.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Yawn.wav rename to public/audio/battle_anims/PRSFX- Yawn.wav diff --git a/public/audio/se/battle_anims/PRSFX- ZPower2.wav b/public/audio/battle_anims/PRSFX- ZPower2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- ZPower2.wav rename to public/audio/battle_anims/PRSFX- ZPower2.wav diff --git a/public/audio/se/battle_anims/PRSFX- ZPower3.wav b/public/audio/battle_anims/PRSFX- ZPower3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- ZPower3.wav rename to public/audio/battle_anims/PRSFX- ZPower3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zap Cannon1.wav b/public/audio/battle_anims/PRSFX- Zap Cannon1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zap Cannon1.wav rename to public/audio/battle_anims/PRSFX- Zap Cannon1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zap Cannon2.wav b/public/audio/battle_anims/PRSFX- Zap Cannon2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zap Cannon2.wav rename to public/audio/battle_anims/PRSFX- Zap Cannon2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zap Cannon3.wav b/public/audio/battle_anims/PRSFX- Zap Cannon3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zap Cannon3.wav rename to public/audio/battle_anims/PRSFX- Zap Cannon3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zen Headbutt1.wav b/public/audio/battle_anims/PRSFX- Zen Headbutt1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zen Headbutt1.wav rename to public/audio/battle_anims/PRSFX- Zen Headbutt1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zen Headbutt2.wav b/public/audio/battle_anims/PRSFX- Zen Headbutt2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zen Headbutt2.wav rename to public/audio/battle_anims/PRSFX- Zen Headbutt2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zing Zap1.wav b/public/audio/battle_anims/PRSFX- Zing Zap1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zing Zap1.wav rename to public/audio/battle_anims/PRSFX- Zing Zap1.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zing Zap2.wav b/public/audio/battle_anims/PRSFX- Zing Zap2.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zing Zap2.wav rename to public/audio/battle_anims/PRSFX- Zing Zap2.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zing Zap3.wav b/public/audio/battle_anims/PRSFX- Zing Zap3.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zing Zap3.wav rename to public/audio/battle_anims/PRSFX- Zing Zap3.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zing Zap4.wav b/public/audio/battle_anims/PRSFX- Zing Zap4.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zing Zap4.wav rename to public/audio/battle_anims/PRSFX- Zing Zap4.wav diff --git a/public/audio/se/battle_anims/PRSFX- Zpower1.wav b/public/audio/battle_anims/PRSFX- Zpower1.wav similarity index 100% rename from public/audio/se/battle_anims/PRSFX- Zpower1.wav rename to public/audio/battle_anims/PRSFX- Zpower1.wav diff --git a/public/audio/se/battle_anims/Paralyze1.m4a b/public/audio/battle_anims/Paralyze1.m4a similarity index 100% rename from public/audio/se/battle_anims/Paralyze1.m4a rename to public/audio/battle_anims/Paralyze1.m4a diff --git a/public/audio/se/battle_anims/Paralyze3.m4a b/public/audio/battle_anims/Paralyze3.m4a similarity index 100% rename from public/audio/se/battle_anims/Paralyze3.m4a rename to public/audio/battle_anims/Paralyze3.m4a diff --git a/public/audio/se/battle_anims/Poison.m4a b/public/audio/battle_anims/Poison.m4a similarity index 100% rename from public/audio/se/battle_anims/Poison.m4a rename to public/audio/battle_anims/Poison.m4a diff --git a/public/audio/se/battle_anims/Pollen.m4a b/public/audio/battle_anims/Pollen.m4a similarity index 100% rename from public/audio/se/battle_anims/Pollen.m4a rename to public/audio/battle_anims/Pollen.m4a diff --git a/public/audio/se/battle_anims/Present - Heal.mp3 b/public/audio/battle_anims/Present - Heal.mp3 similarity index 100% rename from public/audio/se/battle_anims/Present - Heal.mp3 rename to public/audio/battle_anims/Present - Heal.mp3 diff --git a/public/audio/se/battle_anims/Psych Up.mp3 b/public/audio/battle_anims/Psych Up.mp3 similarity index 100% rename from public/audio/se/battle_anims/Psych Up.mp3 rename to public/audio/battle_anims/Psych Up.mp3 diff --git a/public/audio/se/battle_anims/Psycho Cut.wav b/public/audio/battle_anims/Psycho Cut.wav similarity index 100% rename from public/audio/se/battle_anims/Psycho Cut.wav rename to public/audio/battle_anims/Psycho Cut.wav diff --git a/public/audio/se/battle_anims/Recovery.m4a b/public/audio/battle_anims/Recovery.m4a similarity index 100% rename from public/audio/se/battle_anims/Recovery.m4a rename to public/audio/battle_anims/Recovery.m4a diff --git a/public/audio/se/battle_anims/Refresh.mp3 b/public/audio/battle_anims/Refresh.mp3 similarity index 100% rename from public/audio/se/battle_anims/Refresh.mp3 rename to public/audio/battle_anims/Refresh.mp3 diff --git a/public/audio/se/battle_anims/RockFall1.wav b/public/audio/battle_anims/RockFall1.wav similarity index 100% rename from public/audio/se/battle_anims/RockFall1.wav rename to public/audio/battle_anims/RockFall1.wav diff --git a/public/audio/se/battle_anims/Saint1.m4a b/public/audio/battle_anims/Saint1.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint1.m4a rename to public/audio/battle_anims/Saint1.m4a diff --git a/public/audio/se/battle_anims/Saint3.m4a b/public/audio/battle_anims/Saint3.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint3.m4a rename to public/audio/battle_anims/Saint3.m4a diff --git a/public/audio/se/battle_anims/Saint4.m4a b/public/audio/battle_anims/Saint4.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint4.m4a rename to public/audio/battle_anims/Saint4.m4a diff --git a/public/audio/se/battle_anims/Saint6.m4a b/public/audio/battle_anims/Saint6.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint6.m4a rename to public/audio/battle_anims/Saint6.m4a diff --git a/public/audio/se/battle_anims/Saint7.m4a b/public/audio/battle_anims/Saint7.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint7.m4a rename to public/audio/battle_anims/Saint7.m4a diff --git a/public/audio/se/battle_anims/Saint8.m4a b/public/audio/battle_anims/Saint8.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint8.m4a rename to public/audio/battle_anims/Saint8.m4a diff --git a/public/audio/se/battle_anims/Saint9.m4a b/public/audio/battle_anims/Saint9.m4a similarity index 100% rename from public/audio/se/battle_anims/Saint9.m4a rename to public/audio/battle_anims/Saint9.m4a diff --git a/public/audio/se/battle_anims/Sand.m4a b/public/audio/battle_anims/Sand.m4a similarity index 100% rename from public/audio/se/battle_anims/Sand.m4a rename to public/audio/battle_anims/Sand.m4a diff --git a/public/audio/se/battle_anims/Scary Face.mp3 b/public/audio/battle_anims/Scary Face.mp3 similarity index 100% rename from public/audio/se/battle_anims/Scary Face.mp3 rename to public/audio/battle_anims/Scary Face.mp3 diff --git a/public/audio/se/battle_anims/Select.WAV b/public/audio/battle_anims/Select.WAV similarity index 100% rename from public/audio/se/battle_anims/Select.WAV rename to public/audio/battle_anims/Select.WAV diff --git a/public/audio/se/battle_anims/Shell Smash.mp3 b/public/audio/battle_anims/Shell Smash.mp3 similarity index 100% rename from public/audio/se/battle_anims/Shell Smash.mp3 rename to public/audio/battle_anims/Shell Smash.mp3 diff --git a/public/audio/se/battle_anims/Shiny sparkle.m4a b/public/audio/battle_anims/Shiny sparkle.m4a similarity index 100% rename from public/audio/se/battle_anims/Shiny sparkle.m4a rename to public/audio/battle_anims/Shiny sparkle.m4a diff --git a/public/audio/se/battle_anims/Sing.m4a b/public/audio/battle_anims/Sing.m4a similarity index 100% rename from public/audio/se/battle_anims/Sing.m4a rename to public/audio/battle_anims/Sing.m4a diff --git a/public/audio/se/battle_anims/Slam.mp3 b/public/audio/battle_anims/Slam.mp3 similarity index 100% rename from public/audio/se/battle_anims/Slam.mp3 rename to public/audio/battle_anims/Slam.mp3 diff --git a/public/audio/se/battle_anims/Slash.mp3 b/public/audio/battle_anims/Slash.mp3 similarity index 100% rename from public/audio/se/battle_anims/Slash.mp3 rename to public/audio/battle_anims/Slash.mp3 diff --git a/public/audio/se/battle_anims/Slash1.m4a b/public/audio/battle_anims/Slash1.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash1.m4a rename to public/audio/battle_anims/Slash1.m4a diff --git a/public/audio/se/battle_anims/Slash10.m4a b/public/audio/battle_anims/Slash10.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash10.m4a rename to public/audio/battle_anims/Slash10.m4a diff --git a/public/audio/se/battle_anims/Slash11.m4a b/public/audio/battle_anims/Slash11.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash11.m4a rename to public/audio/battle_anims/Slash11.m4a diff --git a/public/audio/se/battle_anims/Slash2.m4a b/public/audio/battle_anims/Slash2.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash2.m4a rename to public/audio/battle_anims/Slash2.m4a diff --git a/public/audio/se/battle_anims/Slash3.m4a b/public/audio/battle_anims/Slash3.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash3.m4a rename to public/audio/battle_anims/Slash3.m4a diff --git a/public/audio/se/battle_anims/Slash6.m4a b/public/audio/battle_anims/Slash6.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash6.m4a rename to public/audio/battle_anims/Slash6.m4a diff --git a/public/audio/se/battle_anims/Slash8.m4a b/public/audio/battle_anims/Slash8.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash8.m4a rename to public/audio/battle_anims/Slash8.m4a diff --git a/public/audio/se/battle_anims/Slash9.m4a b/public/audio/battle_anims/Slash9.m4a similarity index 100% rename from public/audio/se/battle_anims/Slash9.m4a rename to public/audio/battle_anims/Slash9.m4a diff --git a/public/audio/se/battle_anims/Sleep.m4a b/public/audio/battle_anims/Sleep.m4a similarity index 100% rename from public/audio/se/battle_anims/Sleep.m4a rename to public/audio/battle_anims/Sleep.m4a diff --git a/public/audio/se/battle_anims/Smokescreen.mp3 b/public/audio/battle_anims/Smokescreen.mp3 similarity index 100% rename from public/audio/se/battle_anims/Smokescreen.mp3 rename to public/audio/battle_anims/Smokescreen.mp3 diff --git a/public/audio/se/battle_anims/Snore.mp3 b/public/audio/battle_anims/Snore.mp3 similarity index 100% rename from public/audio/se/battle_anims/Snore.mp3 rename to public/audio/battle_anims/Snore.mp3 diff --git a/public/audio/se/battle_anims/Sound2.m4a b/public/audio/battle_anims/Sound2.m4a similarity index 100% rename from public/audio/se/battle_anims/Sound2.m4a rename to public/audio/battle_anims/Sound2.m4a diff --git a/public/audio/se/battle_anims/Stare.m4a b/public/audio/battle_anims/Stare.m4a similarity index 100% rename from public/audio/se/battle_anims/Stare.m4a rename to public/audio/battle_anims/Stare.m4a diff --git a/public/audio/se/battle_anims/Stone Axe 1.m4a b/public/audio/battle_anims/Stone Axe 1.m4a similarity index 100% rename from public/audio/se/battle_anims/Stone Axe 1.m4a rename to public/audio/battle_anims/Stone Axe 1.m4a diff --git a/public/audio/se/battle_anims/Stone Axe 2.wav b/public/audio/battle_anims/Stone Axe 2.wav similarity index 100% rename from public/audio/se/battle_anims/Stone Axe 2.wav rename to public/audio/battle_anims/Stone Axe 2.wav diff --git a/public/audio/se/battle_anims/Substitute.mp3 b/public/audio/battle_anims/Substitute.mp3 similarity index 100% rename from public/audio/se/battle_anims/Substitute.mp3 rename to public/audio/battle_anims/Substitute.mp3 diff --git a/public/audio/se/battle_anims/Super Fang.mp3 b/public/audio/battle_anims/Super Fang.mp3 similarity index 100% rename from public/audio/se/battle_anims/Super Fang.mp3 rename to public/audio/battle_anims/Super Fang.mp3 diff --git a/public/audio/se/battle_anims/Swagger.mp3 b/public/audio/battle_anims/Swagger.mp3 similarity index 100% rename from public/audio/se/battle_anims/Swagger.mp3 rename to public/audio/battle_anims/Swagger.mp3 diff --git a/public/audio/se/battle_anims/Sweet Scent.m4a b/public/audio/battle_anims/Sweet Scent.m4a similarity index 100% rename from public/audio/se/battle_anims/Sweet Scent.m4a rename to public/audio/battle_anims/Sweet Scent.m4a diff --git a/public/audio/se/battle_anims/Sword1.m4a b/public/audio/battle_anims/Sword1.m4a similarity index 100% rename from public/audio/se/battle_anims/Sword1.m4a rename to public/audio/battle_anims/Sword1.m4a diff --git a/public/audio/se/battle_anims/Sword2.m4a b/public/audio/battle_anims/Sword2.m4a similarity index 100% rename from public/audio/se/battle_anims/Sword2.m4a rename to public/audio/battle_anims/Sword2.m4a diff --git a/public/audio/se/battle_anims/Swords Dance.mp3 b/public/audio/battle_anims/Swords Dance.mp3 similarity index 100% rename from public/audio/se/battle_anims/Swords Dance.mp3 rename to public/audio/battle_anims/Swords Dance.mp3 diff --git a/public/audio/se/battle_anims/Take Down.mp3 b/public/audio/battle_anims/Take Down.mp3 similarity index 100% rename from public/audio/se/battle_anims/Take Down.mp3 rename to public/audio/battle_anims/Take Down.mp3 diff --git a/public/audio/se/battle_anims/Teleport.m4a b/public/audio/battle_anims/Teleport.m4a similarity index 100% rename from public/audio/se/battle_anims/Teleport.m4a rename to public/audio/battle_anims/Teleport.m4a diff --git a/public/audio/se/battle_anims/Thunder1.m4a b/public/audio/battle_anims/Thunder1.m4a similarity index 100% rename from public/audio/se/battle_anims/Thunder1.m4a rename to public/audio/battle_anims/Thunder1.m4a diff --git a/public/audio/se/battle_anims/Thunder3.m4a b/public/audio/battle_anims/Thunder3.m4a similarity index 100% rename from public/audio/se/battle_anims/Thunder3.m4a rename to public/audio/battle_anims/Thunder3.m4a diff --git a/public/audio/se/battle_anims/Thunder4.m4a b/public/audio/battle_anims/Thunder4.m4a similarity index 100% rename from public/audio/se/battle_anims/Thunder4.m4a rename to public/audio/battle_anims/Thunder4.m4a diff --git a/public/audio/se/battle_anims/Thunder9.m4a b/public/audio/battle_anims/Thunder9.m4a similarity index 100% rename from public/audio/se/battle_anims/Thunder9.m4a rename to public/audio/battle_anims/Thunder9.m4a diff --git a/public/audio/se/battle_anims/Trump Card.mp3 b/public/audio/battle_anims/Trump Card.mp3 similarity index 100% rename from public/audio/se/battle_anims/Trump Card.mp3 rename to public/audio/battle_anims/Trump Card.mp3 diff --git a/public/audio/se/battle_anims/Twine.m4a b/public/audio/battle_anims/Twine.m4a similarity index 100% rename from public/audio/se/battle_anims/Twine.m4a rename to public/audio/battle_anims/Twine.m4a diff --git a/public/audio/se/battle_anims/Up.m4a b/public/audio/battle_anims/Up.m4a similarity index 100% rename from public/audio/se/battle_anims/Up.m4a rename to public/audio/battle_anims/Up.m4a diff --git a/public/audio/se/battle_anims/Uproar.mp3 b/public/audio/battle_anims/Uproar.mp3 similarity index 100% rename from public/audio/se/battle_anims/Uproar.mp3 rename to public/audio/battle_anims/Uproar.mp3 diff --git a/public/audio/se/battle_anims/Vice Grip.mp3 b/public/audio/battle_anims/Vice Grip.mp3 similarity index 100% rename from public/audio/se/battle_anims/Vice Grip.mp3 rename to public/audio/battle_anims/Vice Grip.mp3 diff --git a/public/audio/se/battle_anims/Voltorb Flip Explosion.mp3 b/public/audio/battle_anims/Voltorb Flip Explosion.mp3 similarity index 100% rename from public/audio/se/battle_anims/Voltorb Flip Explosion.mp3 rename to public/audio/battle_anims/Voltorb Flip Explosion.mp3 diff --git a/public/audio/se/battle_anims/Voltorb Flip Mark.wav b/public/audio/battle_anims/Voltorb Flip Mark.wav similarity index 100% rename from public/audio/se/battle_anims/Voltorb Flip Mark.wav rename to public/audio/battle_anims/Voltorb Flip Mark.wav diff --git a/public/audio/se/battle_anims/Water1.m4a b/public/audio/battle_anims/Water1.m4a similarity index 100% rename from public/audio/se/battle_anims/Water1.m4a rename to public/audio/battle_anims/Water1.m4a diff --git a/public/audio/se/battle_anims/Water2.m4a b/public/audio/battle_anims/Water2.m4a similarity index 100% rename from public/audio/se/battle_anims/Water2.m4a rename to public/audio/battle_anims/Water2.m4a diff --git a/public/audio/se/battle_anims/Water3.m4a b/public/audio/battle_anims/Water3.m4a similarity index 100% rename from public/audio/se/battle_anims/Water3.m4a rename to public/audio/battle_anims/Water3.m4a diff --git a/public/audio/se/battle_anims/Water5.m4a b/public/audio/battle_anims/Water5.m4a similarity index 100% rename from public/audio/se/battle_anims/Water5.m4a rename to public/audio/battle_anims/Water5.m4a diff --git a/public/audio/se/battle_anims/Weatherball.mp3 b/public/audio/battle_anims/Weatherball.mp3 similarity index 100% rename from public/audio/se/battle_anims/Weatherball.mp3 rename to public/audio/battle_anims/Weatherball.mp3 diff --git a/public/audio/se/battle_anims/Whirlwind.mp3 b/public/audio/battle_anims/Whirlwind.mp3 similarity index 100% rename from public/audio/se/battle_anims/Whirlwind.mp3 rename to public/audio/battle_anims/Whirlwind.mp3 diff --git a/public/audio/se/battle_anims/Wind1.m4a b/public/audio/battle_anims/Wind1.m4a similarity index 100% rename from public/audio/se/battle_anims/Wind1.m4a rename to public/audio/battle_anims/Wind1.m4a diff --git a/public/audio/se/battle_anims/Wind5.m4a b/public/audio/battle_anims/Wind5.m4a similarity index 100% rename from public/audio/se/battle_anims/Wind5.m4a rename to public/audio/battle_anims/Wind5.m4a diff --git a/public/audio/se/battle_anims/Wind7.m4a b/public/audio/battle_anims/Wind7.m4a similarity index 100% rename from public/audio/se/battle_anims/Wind7.m4a rename to public/audio/battle_anims/Wind7.m4a diff --git a/public/audio/se/battle_anims/Wind8.m4a b/public/audio/battle_anims/Wind8.m4a similarity index 100% rename from public/audio/se/battle_anims/Wind8.m4a rename to public/audio/battle_anims/Wind8.m4a diff --git a/public/audio/se/battle_anims/Work Up.mp3 b/public/audio/battle_anims/Work Up.mp3 similarity index 100% rename from public/audio/se/battle_anims/Work Up.mp3 rename to public/audio/battle_anims/Work Up.mp3 diff --git a/public/audio/se/battle_anims/Wring Out.mp3 b/public/audio/battle_anims/Wring Out.mp3 similarity index 100% rename from public/audio/se/battle_anims/Wring Out.mp3 rename to public/audio/battle_anims/Wring Out.mp3 diff --git a/public/audio/se/battle_anims/Yawn.mp3 b/public/audio/battle_anims/Yawn.mp3 similarity index 100% rename from public/audio/se/battle_anims/Yawn.mp3 rename to public/audio/battle_anims/Yawn.mp3 diff --git a/public/audio/se/battle_anims/buzzer.wav b/public/audio/battle_anims/buzzer.wav similarity index 100% rename from public/audio/se/battle_anims/buzzer.wav rename to public/audio/battle_anims/buzzer.wav diff --git a/public/audio/se/battle_anims/decrease.m4a b/public/audio/battle_anims/decrease.m4a similarity index 100% rename from public/audio/se/battle_anims/decrease.m4a rename to public/audio/battle_anims/decrease.m4a diff --git a/public/audio/se/battle_anims/fog2.mp3 b/public/audio/battle_anims/fog2.mp3 similarity index 100% rename from public/audio/se/battle_anims/fog2.mp3 rename to public/audio/battle_anims/fog2.mp3 diff --git a/public/audio/se/battle_anims/gust.mp3 b/public/audio/battle_anims/gust.mp3 similarity index 100% rename from public/audio/se/battle_anims/gust.mp3 rename to public/audio/battle_anims/gust.mp3 diff --git a/public/audio/se/battle_anims/hit.wav b/public/audio/battle_anims/hit.wav similarity index 100% rename from public/audio/se/battle_anims/hit.wav rename to public/audio/battle_anims/hit.wav diff --git a/public/audio/se/battle_anims/increase.m4a b/public/audio/battle_anims/increase.m4a similarity index 100% rename from public/audio/se/battle_anims/increase.m4a rename to public/audio/battle_anims/increase.m4a diff --git a/public/audio/se/battle_anims/infatuated.mp3 b/public/audio/battle_anims/infatuated.mp3 similarity index 100% rename from public/audio/se/battle_anims/infatuated.mp3 rename to public/audio/battle_anims/infatuated.mp3 diff --git a/public/audio/se/battle_anims/metal.m4a b/public/audio/battle_anims/metal.m4a similarity index 100% rename from public/audio/se/battle_anims/metal.m4a rename to public/audio/battle_anims/metal.m4a diff --git a/public/audio/se/battle_anims/normaldamage.m4a b/public/audio/battle_anims/normaldamage.m4a similarity index 100% rename from public/audio/se/battle_anims/normaldamage.m4a rename to public/audio/battle_anims/normaldamage.m4a diff --git a/public/audio/se/battle_anims/punch5.wav b/public/audio/battle_anims/punch5.wav similarity index 100% rename from public/audio/se/battle_anims/punch5.wav rename to public/audio/battle_anims/punch5.wav diff --git a/public/audio/se/battle_anims/superdamage.m4a b/public/audio/battle_anims/superdamage.m4a similarity index 100% rename from public/audio/se/battle_anims/superdamage.m4a rename to public/audio/battle_anims/superdamage.m4a diff --git a/public/audio/se/battle_anims/throw.m4a b/public/audio/battle_anims/throw.m4a similarity index 100% rename from public/audio/se/battle_anims/throw.m4a rename to public/audio/battle_anims/throw.m4a diff --git a/public/audio/bgm/battle_aether_boss.mp3 b/public/audio/bgm/battle_aether_boss.mp3 new file mode 100644 index 00000000000..7b776976777 Binary files /dev/null and b/public/audio/bgm/battle_aether_boss.mp3 differ diff --git a/public/audio/bgm/battle_aether_grunt.mp3 b/public/audio/bgm/battle_aether_grunt.mp3 new file mode 100644 index 00000000000..ede518c8c3f Binary files /dev/null and b/public/audio/bgm/battle_aether_grunt.mp3 differ diff --git a/public/audio/bgm/battle_galactic_admin.mp3 b/public/audio/bgm/battle_galactic_admin.mp3 new file mode 100644 index 00000000000..69b6ea918dd Binary files /dev/null and b/public/audio/bgm/battle_galactic_admin.mp3 differ diff --git a/public/audio/bgm/battle_macro_boss.mp3 b/public/audio/bgm/battle_macro_boss.mp3 new file mode 100644 index 00000000000..b72d5238b4d Binary files /dev/null and b/public/audio/bgm/battle_macro_boss.mp3 differ diff --git a/public/audio/bgm/battle_macro_grunt.mp3 b/public/audio/bgm/battle_macro_grunt.mp3 new file mode 100644 index 00000000000..8a80bfb553b Binary files /dev/null and b/public/audio/bgm/battle_macro_grunt.mp3 differ diff --git a/public/audio/bgm/battle_oleana.mp3 b/public/audio/bgm/battle_oleana.mp3 new file mode 100644 index 00000000000..b75bdcb337e Binary files /dev/null and b/public/audio/bgm/battle_oleana.mp3 differ diff --git a/public/audio/bgm/battle_skull_admin.mp3 b/public/audio/bgm/battle_skull_admin.mp3 new file mode 100644 index 00000000000..a6ac5cf1bf7 Binary files /dev/null and b/public/audio/bgm/battle_skull_admin.mp3 differ diff --git a/public/audio/bgm/battle_skull_boss.mp3 b/public/audio/bgm/battle_skull_boss.mp3 new file mode 100644 index 00000000000..2fde7a5524a Binary files /dev/null and b/public/audio/bgm/battle_skull_boss.mp3 differ diff --git a/public/audio/bgm/battle_skull_grunt.mp3 b/public/audio/bgm/battle_skull_grunt.mp3 new file mode 100644 index 00000000000..b6f575fc2ad Binary files /dev/null and b/public/audio/bgm/battle_skull_grunt.mp3 differ diff --git a/public/audio/se/error.wav b/public/audio/ui/error.wav similarity index 100% rename from public/audio/se/error.wav rename to public/audio/ui/error.wav diff --git a/public/audio/se/menu_open.wav b/public/audio/ui/menu_open.wav similarity index 100% rename from public/audio/se/menu_open.wav rename to public/audio/ui/menu_open.wav diff --git a/public/audio/se/select.wav b/public/audio/ui/select.wav similarity index 100% rename from public/audio/se/select.wav rename to public/audio/ui/select.wav diff --git a/public/images/pokemon/469.png b/public/images/pokemon/469.png index 698f94fd61b..f9f9ea8af1a 100644 Binary files a/public/images/pokemon/469.png and b/public/images/pokemon/469.png differ diff --git a/public/images/pokemon/472.png b/public/images/pokemon/472.png index 56f3c91aa9b..cc13377bd53 100644 Binary files a/public/images/pokemon/472.png and b/public/images/pokemon/472.png differ diff --git a/public/images/pokemon/back/469.png b/public/images/pokemon/back/469.png index c9d40e7349a..f55bdd8f25f 100644 Binary files a/public/images/pokemon/back/469.png and b/public/images/pokemon/back/469.png differ diff --git a/public/images/pokemon/back/472.png b/public/images/pokemon/back/472.png index 223e43838d9..af5bfd64473 100644 Binary files a/public/images/pokemon/back/472.png and b/public/images/pokemon/back/472.png differ diff --git a/public/images/pokemon/exp/751.json b/public/images/pokemon/exp/751.json index 7ac34e0ac04..2e28048706d 100644 --- a/public/images/pokemon/exp/751.json +++ b/public/images/pokemon/exp/751.json @@ -4,71 +4,155 @@ "image": "751.png", "format": "RGBA8888", "size": { - "w": 146, - "h": 146 + "w": 169, + "h": 169 }, "scale": 1, "frames": [ { - "filename": "0005.png", + "filename": "0006.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 55 + "w": 35, + "h": 43 }, "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 32, - "h": 52 - }, - "frame": { "x": 0, "y": 0, - "w": 32, - "h": 52 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 32, - "h": 51 - }, - "frame": { - "x": 0, - "y": 52, - "w": 32, - "h": 51 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 55 - }, - "spriteSourceSize": { - "x": 0, - "y": 12, - "w": 32, + "w": 33, "h": 43 }, "frame": { "x": 0, - "y": 103, - "w": 32, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 43, + "w": 33, "h": 43 } }, @@ -77,104 +161,104 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 55 + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 32, - "h": 50 + "y": 0, + "w": 33, + "h": 43 }, "frame": { - "x": 32, - "y": 0, - "w": 32, - "h": 50 + "x": 0, + "y": 43, + "w": 33, + "h": 43 } }, { - "filename": "0006.png", + "filename": "0047.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 55 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 30, - "h": 51 - }, - "frame": { - "x": 32, - "y": 50, - "w": 30, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 55 + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 0, - "y": 10, - "w": 32, - "h": 45 - }, - "frame": { - "x": 32, - "y": 101, - "w": 32, - "h": 45 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 55 - }, - "spriteSourceSize": { - "x": 1, "y": 0, - "w": 31, - "h": 50 + "w": 33, + "h": 43 }, "frame": { - "x": 62, - "y": 50, - "w": 31, - "h": 50 + "x": 0, + "y": 43, + "w": 33, + "h": 43 } }, { - "filename": "0002.png", + "filename": "0048.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 55 + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 0, - "y": 9, - "w": 32, - "h": 46 + "y": 0, + "w": 33, + "h": 43 }, "frame": { - "x": 64, - "y": 100, - "w": 32, - "h": 46 + "x": 0, + "y": 43, + "w": 33, + "h": 43 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 43, + "w": 33, + "h": 43 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 0, + "y": 43, + "w": 33, + "h": 43 } }, { @@ -182,62 +266,377 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 55 + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 32, - "h": 49 + "y": 0, + "w": 33, + "h": 43 }, "frame": { - "x": 64, + "x": 33, "y": 0, - "w": 32, - "h": 49 + "w": 33, + "h": 43 } }, { - "filename": "0007.png", + "filename": "0011.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 55 + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 33, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 33, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 33, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 33, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 33, + "h": 43 + }, + "frame": { + "x": 33, + "y": 0, + "w": 33, + "h": 43 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 1, "y": 0, - "w": 31, - "h": 49 + "w": 32, + "h": 43 }, "frame": { - "x": 93, - "y": 49, - "w": 31, - "h": 49 + "x": 0, + "y": 86, + "w": 32, + "h": 43 } }, { - "filename": "0001.png", + "filename": "0005.png", "rotated": false, "trimmed": true, "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, "w": 32, - "h": 55 + "h": 43 + }, + "frame": { + "x": 0, + "y": 86, + "w": 32, + "h": 43 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 0, + "y": 86, + "w": 32, + "h": 43 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 0, + "y": 86, + "w": 32, + "h": 43 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 0, + "y": 86, + "w": 32, + "h": 43 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 0, + "y": 86, + "w": 32, + "h": 43 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 0, - "y": 7, - "w": 32, - "h": 48 + "y": 3, + "w": 34, + "h": 40 }, "frame": { - "x": 96, - "y": 98, - "w": 32, - "h": 48 + "x": 0, + "y": 129, + "w": 34, + "h": 40 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 34, + "h": 40 + }, + "frame": { + "x": 0, + "y": 129, + "w": 34, + "h": 40 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 34, + "h": 40 + }, + "frame": { + "x": 0, + "y": 129, + "w": 34, + "h": 40 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 34, + "h": 40 + }, + "frame": { + "x": 0, + "y": 129, + "w": 34, + "h": 40 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 34, + "h": 40 + }, + "frame": { + "x": 0, + "y": 129, + "w": 34, + "h": 40 + } + }, + { + "filename": "0111.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 34, + "h": 40 + }, + "frame": { + "x": 0, + "y": 129, + "w": 34, + "h": 40 } }, { @@ -245,20 +644,2393 @@ "rotated": false, "trimmed": true, "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, "w": 32, - "h": 55 + "h": 43 + }, + "frame": { + "x": 66, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 66, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 66, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 }, "spriteSourceSize": { "x": 0, - "y": 10, - "w": 32, - "h": 45 + "y": 2, + "w": 34, + "h": 41 }, "frame": { - "x": 96, + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0114.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0115.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 33, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, "y": 0, "w": 32, - "h": 45 + "h": 43 + }, + "frame": { + "x": 98, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 98, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 98, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 98, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0107.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 98, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0108.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 32, + "h": 43 + }, + "frame": { + "x": 98, + "y": 0, + "w": 32, + "h": 43 + } + }, + { + "filename": "0122.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 67, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0134.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 67, + "y": 43, + "w": 34, + "h": 41 + } + }, + { + "filename": "0123.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 130, + "y": 0, + "w": 34, + "h": 41 + } + }, + { + "filename": "0129.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 130, + "y": 0, + "w": 34, + "h": 41 + } + }, + { + "filename": "0135.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 130, + "y": 0, + "w": 34, + "h": 41 + } + }, + { + "filename": "0141.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 130, + "y": 0, + "w": 34, + "h": 41 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0099.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0100.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0112.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0113.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0116.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0117.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0118.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0124.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0130.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0136.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0142.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0143.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0144.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 31, + "h": 42 + }, + "frame": { + "x": 101, + "y": 43, + "w": 31, + "h": 42 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 132, + "y": 41, + "w": 31, + "h": 43 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 132, + "y": 41, + "w": 31, + "h": 43 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 132, + "y": 41, + "w": 31, + "h": 43 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 132, + "y": 41, + "w": 31, + "h": 43 + } + }, + { + "filename": "0101.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 132, + "y": 41, + "w": 31, + "h": 43 + } + }, + { + "filename": "0102.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 132, + "y": 41, + "w": 31, + "h": 43 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 32, + "y": 86, + "w": 31, + "h": 43 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 32, + "y": 86, + "w": 31, + "h": 43 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 32, + "y": 86, + "w": 31, + "h": 43 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 32, + "y": 86, + "w": 31, + "h": 43 + } + }, + { + "filename": "0103.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 32, + "y": 86, + "w": 31, + "h": 43 + } + }, + { + "filename": "0104.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 32, + "y": 86, + "w": 31, + "h": 43 + } + }, + { + "filename": "0128.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 63, + "y": 84, + "w": 34, + "h": 41 + } + }, + { + "filename": "0140.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 34, + "h": 41 + }, + "frame": { + "x": 63, + "y": 84, + "w": 34, + "h": 41 + } + }, + { + "filename": "0121.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 35, + "h": 39 + }, + "frame": { + "x": 97, + "y": 85, + "w": 35, + "h": 39 + } + }, + { + "filename": "0127.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 35, + "h": 39 + }, + "frame": { + "x": 97, + "y": 85, + "w": 35, + "h": 39 + } + }, + { + "filename": "0133.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 35, + "h": 39 + }, + "frame": { + "x": 97, + "y": 85, + "w": 35, + "h": 39 + } + }, + { + "filename": "0139.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 35, + "h": 39 + }, + "frame": { + "x": 97, + "y": 85, + "w": 35, + "h": 39 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 32, + "h": 42 + }, + "frame": { + "x": 132, + "y": 84, + "w": 32, + "h": 42 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 32, + "h": 42 + }, + "frame": { + "x": 132, + "y": 84, + "w": 32, + "h": 42 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 32, + "h": 42 + }, + "frame": { + "x": 132, + "y": 84, + "w": 32, + "h": 42 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 32, + "h": 42 + }, + "frame": { + "x": 132, + "y": 84, + "w": 32, + "h": 42 + } + }, + { + "filename": "0105.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 32, + "h": 42 + }, + "frame": { + "x": 132, + "y": 84, + "w": 32, + "h": 42 + } + }, + { + "filename": "0106.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 32, + "h": 42 + }, + "frame": { + "x": 132, + "y": 84, + "w": 32, + "h": 42 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 35, + "h": 38 + }, + "frame": { + "x": 34, + "y": 129, + "w": 35, + "h": 38 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 35, + "h": 38 + }, + "frame": { + "x": 34, + "y": 129, + "w": 35, + "h": 38 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 35, + "h": 38 + }, + "frame": { + "x": 34, + "y": 129, + "w": 35, + "h": 38 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 35, + "h": 38 + }, + "frame": { + "x": 34, + "y": 129, + "w": 35, + "h": 38 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 35, + "h": 38 + }, + "frame": { + "x": 34, + "y": 129, + "w": 35, + "h": 38 + } + }, + { + "filename": "0110.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 35, + "h": 38 + }, + "frame": { + "x": 34, + "y": 129, + "w": 35, + "h": 38 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 69, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 69, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0109.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 69, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0119.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 100, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0125.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 100, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0131.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 100, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0137.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 100, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0120.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 131, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0126.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 131, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0132.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 131, + "y": 126, + "w": 31, + "h": 43 + } + }, + { + "filename": "0138.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 35, + "h": 43 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 31, + "h": 43 + }, + "frame": { + "x": 131, + "y": 126, + "w": 31, + "h": 43 } } ] @@ -267,6 +3039,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cc1e42833991a58e9cbe6f8a40a3d179:832e53524cd611a274742603a96b9ff4:1d193c65e68b1611f35fce7f3295865c$" + "smartupdate": "$TexturePacker:SmartUpdate:4cce3abef08fd679bfca3bda14d2e7a8:fa6cfa01fadaa0ac727b8c3a4d1d49fc:1d193c65e68b1611f35fce7f3295865c$" } } diff --git a/public/images/pokemon/exp/751.png b/public/images/pokemon/exp/751.png index 2f331ba746a..b670acad126 100644 Binary files a/public/images/pokemon/exp/751.png and b/public/images/pokemon/exp/751.png differ diff --git a/public/images/pokemon/exp/back/970.json b/public/images/pokemon/exp/back/970.json index 9be45f39fd2..a516771c02b 100644 --- a/public/images/pokemon/exp/back/970.json +++ b/public/images/pokemon/exp/back/970.json @@ -1,419 +1,167 @@ -{ - "textures": [ - { - "image": "970.png", - "format": "RGBA8888", - "size": { - "w": 296, - "h": 296 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 59, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 60 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 59, - "h": 60 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 60 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 59, - "h": 62 - }, - "frame": { - "x": 118, - "y": 0, - "w": 59, - "h": 62 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 58, - "h": 63 - }, - "frame": { - "x": 177, - "y": 0, - "w": 58, - "h": 63 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 59, - "h": 66 - }, - "frame": { - "x": 235, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 60, - "h": 66 - }, - "frame": { - "x": 0, - "y": 60, - "w": 60, - "h": 66 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 59, - "h": 66 - }, - "frame": { - "x": 60, - "y": 62, - "w": 59, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 59, - "h": 67 - }, - "frame": { - "x": 119, - "y": 63, - "w": 59, - "h": 67 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 59, - "h": 67 - }, - "frame": { - "x": 178, - "y": 66, - "w": 59, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 59, - "h": 68 - }, - "frame": { - "x": 237, - "y": 66, - "w": 59, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 59, - "h": 68 - }, - "frame": { - "x": 0, - "y": 126, - "w": 59, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 60, - "h": 69 - }, - "frame": { - "x": 59, - "y": 128, - "w": 60, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 119, - "y": 133, - "w": 61, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 119, - "y": 133, - "w": 61, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 61, - "h": 69 - }, - "frame": { - "x": 180, - "y": 134, - "w": 61, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 0, - "y": 197, - "w": 61, - "h": 69 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 61, - "y": 202, - "w": 61, - "h": 69 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - }, - "frame": { - "x": 122, - "y": 203, - "w": 61, - "h": 71 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - }, - "frame": { - "x": 183, - "y": 203, - "w": 61, - "h": 71 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:826f0c54b74572cfb274b9973fbd50bf:a0d3e34e9b94dc843d98c54879e0c70e:97e320d73d4227f4b083688478fb20b2$" - } +{ "textures": [ + { + "image": "970.png", + "format": "RGBA8888", + "size": { "w": 294, "h": 294 }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 3, "w": 59, "h": 67 }, + "frame": { "x": 179, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 67, "w": 59, "h": 67 } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 57, "h": 65 }, + "frame": { "x": 230, "y": 134, "w": 57, "h": 65 } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 5, "w": 56, "h": 61 }, + "frame": { "x": 238, "y": 0, "w": 56, "h": 61 } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 6, "w": 57, "h": 60 }, + "frame": { "x": 114, "y": 198, "w": 57, "h": 60 } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 2, "y": 8, "w": 57, "h": 58 }, + "frame": { "x": 57, "y": 199, "w": 57, "h": 58 } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 58 }, + "frame": { "x": 171, "y": 198, "w": 58, "h": 58 } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 2, "y": 5, "w": 58, "h": 64 }, + "frame": { "x": 114, "y": 134, "w": 58, "h": 64 } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 64 }, + "frame": { "x": 172, "y": 134, "w": 58, "h": 64 } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 4, "w": 57, "h": 66 }, + "frame": { "x": 0, "y": 69, "w": 57, "h": 66 } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 0, "w": 60, "h": 69 }, + "frame": { "x": 0, "y": 0, "w": 60, "h": 69 } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 4, "w": 57, "h": 66 }, + "frame": { "x": 57, "y": 69, "w": 57, "h": 66 } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 0, "w": 60, "h": 69 }, + "frame": { "x": 60, "y": 0, "w": 60, "h": 69 } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 57, "h": 65 }, + "frame": { "x": 0, "y": 135, "w": 57, "h": 65 } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 4, "w": 57, "h": 64 }, + "frame": { "x": 57, "y": 135, "w": 57, "h": 64 } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 179, "y": 67, "w": 59, "h": 67 } + } + ] +} +], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64" + } } diff --git a/public/images/pokemon/exp/back/970.png b/public/images/pokemon/exp/back/970.png index bd6464a7bfa..533b680c117 100644 Binary files a/public/images/pokemon/exp/back/970.png and b/public/images/pokemon/exp/back/970.png differ diff --git a/public/images/pokemon/exp/back/shiny/745-midnight.png b/public/images/pokemon/exp/back/shiny/745-midnight.png index 94a9c328d01..a7d7e0497b5 100644 Binary files a/public/images/pokemon/exp/back/shiny/745-midnight.png and b/public/images/pokemon/exp/back/shiny/745-midnight.png differ diff --git a/public/images/pokemon/exp/back/shiny/970.json b/public/images/pokemon/exp/back/shiny/970.json index 9be45f39fd2..a516771c02b 100644 --- a/public/images/pokemon/exp/back/shiny/970.json +++ b/public/images/pokemon/exp/back/shiny/970.json @@ -1,419 +1,167 @@ -{ - "textures": [ - { - "image": "970.png", - "format": "RGBA8888", - "size": { - "w": 296, - "h": 296 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 59, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 60 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 59, - "h": 60 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 60 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 59, - "h": 62 - }, - "frame": { - "x": 118, - "y": 0, - "w": 59, - "h": 62 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 58, - "h": 63 - }, - "frame": { - "x": 177, - "y": 0, - "w": 58, - "h": 63 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 59, - "h": 66 - }, - "frame": { - "x": 235, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 60, - "h": 66 - }, - "frame": { - "x": 0, - "y": 60, - "w": 60, - "h": 66 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 59, - "h": 66 - }, - "frame": { - "x": 60, - "y": 62, - "w": 59, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 59, - "h": 67 - }, - "frame": { - "x": 119, - "y": 63, - "w": 59, - "h": 67 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 59, - "h": 67 - }, - "frame": { - "x": 178, - "y": 66, - "w": 59, - "h": 67 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 59, - "h": 68 - }, - "frame": { - "x": 237, - "y": 66, - "w": 59, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 59, - "h": 68 - }, - "frame": { - "x": 0, - "y": 126, - "w": 59, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 60, - "h": 69 - }, - "frame": { - "x": 59, - "y": 128, - "w": 60, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 119, - "y": 133, - "w": 61, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 119, - "y": 133, - "w": 61, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 61, - "h": 69 - }, - "frame": { - "x": 180, - "y": 134, - "w": 61, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 0, - "y": 197, - "w": 61, - "h": 69 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 69 - }, - "frame": { - "x": 61, - "y": 202, - "w": 61, - "h": 69 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - }, - "frame": { - "x": 122, - "y": 203, - "w": 61, - "h": 71 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 77 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 71 - }, - "frame": { - "x": 183, - "y": 203, - "w": 61, - "h": 71 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:826f0c54b74572cfb274b9973fbd50bf:a0d3e34e9b94dc843d98c54879e0c70e:97e320d73d4227f4b083688478fb20b2$" - } +{ "textures": [ + { + "image": "970.png", + "format": "RGBA8888", + "size": { "w": 294, "h": 294 }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 3, "w": 59, "h": 67 }, + "frame": { "x": 179, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 67, "w": 59, "h": 67 } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 57, "h": 65 }, + "frame": { "x": 230, "y": 134, "w": 57, "h": 65 } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 5, "w": 56, "h": 61 }, + "frame": { "x": 238, "y": 0, "w": 56, "h": 61 } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 6, "w": 57, "h": 60 }, + "frame": { "x": 114, "y": 198, "w": 57, "h": 60 } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 2, "y": 8, "w": 57, "h": 58 }, + "frame": { "x": 57, "y": 199, "w": 57, "h": 58 } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 58 }, + "frame": { "x": 171, "y": 198, "w": 58, "h": 58 } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 2, "y": 5, "w": 58, "h": 64 }, + "frame": { "x": 114, "y": 134, "w": 58, "h": 64 } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 1, "y": 4, "w": 58, "h": 64 }, + "frame": { "x": 172, "y": 134, "w": 58, "h": 64 } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 4, "w": 57, "h": 66 }, + "frame": { "x": 0, "y": 69, "w": 57, "h": 66 } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 0, "w": 60, "h": 69 }, + "frame": { "x": 0, "y": 0, "w": 60, "h": 69 } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 1, "y": 1, "w": 59, "h": 67 }, + "frame": { "x": 120, "y": 0, "w": 59, "h": 67 } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 4, "w": 57, "h": 66 }, + "frame": { "x": 57, "y": 69, "w": 57, "h": 66 } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 0, "w": 60, "h": 69 }, + "frame": { "x": 60, "y": 0, "w": 60, "h": 69 } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 57, "h": 65 }, + "frame": { "x": 0, "y": 135, "w": 57, "h": 65 } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 4, "w": 57, "h": 64 }, + "frame": { "x": 57, "y": 135, "w": 57, "h": 64 } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { "w": 61, "h": 77 }, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 67 }, + "frame": { "x": 179, "y": 67, "w": 59, "h": 67 } + } + ] +} +], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64" + } } diff --git a/public/images/pokemon/exp/back/shiny/970.png b/public/images/pokemon/exp/back/shiny/970.png index 1d092da94cd..03ed35af776 100644 Binary files a/public/images/pokemon/exp/back/shiny/970.png and b/public/images/pokemon/exp/back/shiny/970.png differ diff --git a/public/images/pokemon/exp/shiny/4077.png b/public/images/pokemon/exp/shiny/4077.png index f2f5891883d..ab414e058e1 100644 Binary files a/public/images/pokemon/exp/shiny/4077.png and b/public/images/pokemon/exp/shiny/4077.png differ diff --git a/public/images/pokemon/icons/variant/4/472_2.png b/public/images/pokemon/icons/variant/4/472_2.png index 80282fd1f75..29cb7014389 100644 Binary files a/public/images/pokemon/icons/variant/4/472_2.png and b/public/images/pokemon/icons/variant/4/472_2.png differ diff --git a/public/images/pokemon/variant/469.json b/public/images/pokemon/variant/469.json new file mode 100644 index 00000000000..afaaeab8796 --- /dev/null +++ b/public/images/pokemon/variant/469.json @@ -0,0 +1,38 @@ +{ + "1": { + "3a5a29": "8577e0", + "797982": "ba4369", + "f75a52": "5555ab", + "739c63": "dfbaff", + "733100": "322966", + "213a19": "534fab", + "4a4a52": "942b5a", + "ffffff": "c4f2ff", + "52844a": "c59eff", + "c5cee6": "91c2fa", + "7b7b84": "6143b3", + "797983": "6143b3", + "a5adc5": "6e8ce0", + "292931": "511d5e", + "b53119": "403a91", + "ff948c": "5c7db5" + }, + "2": { + "3a5a29": "965a2f", + "797982": "516d82", + "f75a52": "21b0a6", + "739c63": "ebcf7c", + "733100": "2e5785", + "213a19": "70331d", + "4a4a52": "2e4a52", + "ffffff": "c1dede", + "52844a": "e0a14f", + "c5cee6": "97c0c4", + "7b7b84": "4f6b80", + "797983": "4f6b80", + "a5adc5": "678ea6", + "292931": "1f3144", + "b53119": "2c8199", + "ff948c": "79d4ba" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/472.json b/public/images/pokemon/variant/472.json index a98fd1a0355..937ea1334de 100644 --- a/public/images/pokemon/variant/472.json +++ b/public/images/pokemon/variant/472.json @@ -1,44 +1,33 @@ { "1": { "5a63a5": "974d16", - "293163": "5c2a09", - "9c8cef": "d28b36", - "b5a5ff": "e9bb57", - "ffffff": "ffffff", - "737bc5": "b86f27", - "101010": "101010", - "730800": "143262", - "ad2131": "2a6197", "de3a6b": "4c83a9", - "43050d": "5c2a09", - "ad9400": "4b64ff", - "ffde00": "84b8ff", - "2a2a2a": "130e27", + "293163": "5c2a09", "424252": "2a2752", - "c55294": "5270c5", - "d8d8d8": "d8d8d8", + "ffde00": "84b8ff", + "b5a5ff": "e9bb57", "6b6b7b": "48487a", - "103f47": "103f47" + "737bc5": "b86f27", + "730800": "143262", + "9c8cef": "d28b36", + "ad2131": "2a6197", + "c55294": "5270c5", + "ad9400": "4b64ff", + "2a2a2a": "130e27" }, "2": { "5a63a5": "731e37", - "293163": "43050d", - "9c8cef": "b3404a", - "b5a5ff": "eb6a64", - "ffffff": "ffffff", - "737bc5": "952b41", - "101010": "101010", - "730800": "262138", - "ad2131": "453b57", "de3a6b": "594b6a", - "43050d": "43050d", - "ad9400": "16a9c0", - "ffde00": "6bffd4", - "2a2a2a": "1a554f", + "293163": "43050d", "424252": "57b6a6", - "c55294": "c55294", - "d8d8d8": "d8d8d8", + "ffde00": "6bffd4", + "b5a5ff": "eb6a64", "6b6b7b": "81e4c2", - "103f47": "103f47" + "737bc5": "952b41", + "730800": "262138", + "9c8cef": "b3404a", + "ad2131": "453b57", + "ad9400": "16a9c0", + "2a2a2a": "103f47" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/751.json b/public/images/pokemon/variant/751.json index 19dc7bedb56..f58b50b56a4 100644 --- a/public/images/pokemon/variant/751.json +++ b/public/images/pokemon/variant/751.json @@ -1,30 +1,33 @@ { "1": { - "8895ac": "ae504b", - "e8e8ea": "ffc8d1", + "5e9cbd": "cc7854", + "39628d": "a14835", + "516a7b": "812b3e", + "32455b": "4c152c", + "aed7ee": "f6e4c2", + "fcfcfd": "fffae3", + "cedf42": "673252", + "dee3f1": "ffc8d1", "9bad34": "4e1f42", "69670e": "3a112f", - "cedf42": "673252", - "fcfcfc": "fcfcfc", - "3c4459": "4c152c", - "aed7ee": "aed7ee", + "8895ac": "ae504b", + "8e99ad": "98433e", "79c4d4": "f3bd8a", - "101010": "101010", - "516a7b": "812b3e", - "5e9cbd": "cc7854" + "3a4055": "4c152c" }, "2": { - "8895ac": "ea9b43", - "e8e8ea": "f1dcc2", + "5e9cbd": "253155", + "39628d": "1c2246", + "516a7b": "ba5c2c", + "32455b": "7b3836", + "fcfcfd": "f0f0f2", + "cedf42": "72add9", + "dee3f1": "f1dcc2", "9bad34": "4980ac", "69670e": "263756", - "cedf42": "72add9", - "fcfcfc": "fcfcfc", - "3c4459": "73312f", - "aed7ee": "aed7ee", + "8895ac": "ea9b43", + "8e99ad": "cd8330", "79c4d4": "3b5373", - "101010": "101010", - "516a7b": "ba5c2c", - "5e9cbd": "253155" + "3a4055": "73312f" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 11578f2e084..87f80fd17c4 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -1711,8 +1711,8 @@ ], "469": [ 0, - 2, - 2 + 1, + 1 ], "470": [ 1, @@ -4312,6 +4312,11 @@ 1, 1 ], + "99-gigantamax": [ + 0, + 1, + 1 + ], "100": [ 0, 1, @@ -5704,7 +5709,7 @@ ], "469": [ 0, - 2, + 1, 1 ], "470": [ @@ -5720,7 +5725,7 @@ "472": [ 0, 1, - 2 + 1 ], "474": [ 0, @@ -9298,8 +9303,8 @@ ], "970": [ 0, - 2, - 2 + 1, + 1 ], "973": [ 1, @@ -9940,12 +9945,12 @@ ], "672": [ 0, - 2, + 1, 1 ], "673": [ 0, - 2, + 1, 1 ], "677": [ @@ -10806,7 +10811,7 @@ "962": [ 1, 1, - 2 + 1 ], "967": [ 0, @@ -11095,4 +11100,4 @@ 1 ] } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/back/469.json b/public/images/pokemon/variant/back/469.json index 21d89cec3d5..d07bfada1c8 100644 --- a/public/images/pokemon/variant/back/469.json +++ b/public/images/pokemon/variant/back/469.json @@ -1,19 +1,34 @@ { + "1": { + "797982": "ba4369", + "52844a": "c59eff", + "f75a52": "5555ab", + "47474f": "6143b3", + "a5adc5": "6e8ce0", + "b53119": "403a91", + "739c63": "dfbaff", + "4a4a52": "942b5a", + "213a19": "534fab", + "ffffff": "c4f2ff", + "733100": "322966", + "c5cee6": "91c2fa", + "3a5a29": "8577e0", + "7b7b84": "3b3687" + }, "2": { - "101010": "101010", "797982": "516d82", - "4a4a52": "2e4a52", - "b53119": "2c8199", + "52844a": "e0a14f", "f75a52": "21b0a6", + "47474f": "4f6b80", "a5adc5": "678ea6", + "b53119": "2c8199", + "739c63": "ebcf7c", + "4a4a52": "2e4a52", "213a19": "70331d", + "ffffff": "c1dede", + "733100": "2e5785", "c5cee6": "97c0c4", "3a5a29": "965a2f", - "ffffff": "c1dede", - "52844a": "e0a14f", - "739c63": "ebcf7c", - "733100": "2e5785", - "7b7b84": "4d687d", - "47474f": "4f6b80" + "7b7b84": "4d687d" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/472.json b/public/images/pokemon/variant/back/472.json index a47102ad603..eedf44dc6ec 100644 --- a/public/images/pokemon/variant/back/472.json +++ b/public/images/pokemon/variant/back/472.json @@ -1,15 +1,25 @@ { "1": { "5a63a5": "974d16", - "293163": "401b02", - "9c8cef": "d28b36", - "b5a5ff": "e9bb57", "737bc5": "b86f27", - "ffffff": "ffffff", - "101010": "101010", - "6b6b7b": "48487a", - "424252": "2a2752", + "ad2131": "2a6197", + "9c8cef": "d28b36", "730800": "143262", - "ad2131": "2a6197" + "293163": "401b02", + "424252": "2a2752", + "b5a5ff": "e9bb57", + "6b6b7b": "48487a" + }, + "2": { + "5a63a5": "731e37", + "737bc5": "952b41", + "ad2131": "594b6a", + "9c8cef": "b3404a", + "730800": "262138", + "293163": "43050d", + "424252": "57b6a6", + "b5a5ff": "eb6a64", + "0d0d0d": "1a554f", + "6b6b7b": "81e4c2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/99-gigantamax.json b/public/images/pokemon/variant/back/99-gigantamax.json new file mode 100644 index 00000000000..31fa87f0e8d --- /dev/null +++ b/public/images/pokemon/variant/back/99-gigantamax.json @@ -0,0 +1,32 @@ +{ + "1": { + "c56a5a": "6232a9", + "f6c58b": "9f60d5", + "832908": "3b1c69", + "ee8b4a": "8853bf", + "101010": "101010", + "735210": "534681", + "fdfdfd": "ffdbdb", + "e1d0db": "d5869b", + "ffe6b4": "c3d6ff", + "eebd8b": "9ba3d9", + "b47b5a": "7c72b6", + "b5a6b5": "b65782", + "9a859a": "872d65" + }, + "2": { + "c56a5a": "2d6f9e", + "f6c58b": "75e0e8", + "832908": "22447d", + "ee8b4a": "43adc4", + "101010": "101010", + "735210": "1e1743", + "fdfdfd": "b1f1cf", + "e1d0db": "73c1c2", + "ffe6b4": "464d89", + "eebd8b": "31296f", + "b47b5a": "231b4e", + "b5a6b5": "44778a", + "9a859a": "2f4c6b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/751.json b/public/images/pokemon/variant/exp/751.json index 70af2b6d7f4..fd1955824af 100644 --- a/public/images/pokemon/variant/exp/751.json +++ b/public/images/pokemon/variant/exp/751.json @@ -1,50 +1,33 @@ { "1": { - "85abc8": "ae504b", - "bdd9e5": "ffc8d1", - "acc38c": "a65f86", + "dee3f1": "ffc8d1", + "79c4d4": "f3bd8a", + "fcfcfd": "fffae3", + "39628d": "a14835", + "5e9cbd": "cc7854", + "32455b": "4c152c", + "8895ac": "ae504b", "9bad34": "4e1f42", - "c6dc93": "8a4d6d", - "cedf42": "673252", - "93a079": "6c3064", - "697d89": "8d4358", "69670e": "3a112f", - "8dd0e6": "f8b29c", - "101010": "101010", - "6893a5": "b0546e", - "8da0ac": "d37075", - "8397aa": "8397aa", - "66747a": "c75c5b", - "d3e1e8": "d3e1e8", - "81bbd1": "da826e", - "788a94": "9e4155", - "8ba8b8": "d37075", - "5d6773": "ae504b", - "15222d": "15222d", - "343c43": "812b3e" + "516a7b": "812b3e", + "aed7ee": "f6e4c2", + "cedf42": "673252", + "3a4055": "4c152c", + "8e99ad": "98433e" }, "2": { - "85abc8": "ecaa61", - "bdd9e5": "f1dcc2", - "acc38c": "7196b1", + "dee3f1": "f1dcc2", + "79c4d4": "3b5373", + "fcfcfd": "f0f0f2", + "39628d": "1c2246", + "5e9cbd": "253155", + "32455b": "7b3836", + "8895ac": "ea9b43", "9bad34": "4980ac", - "c6dc93": "90b8d4", - "cedf42": "72add9", - "93a079": "586d7a", - "697d89": "915952", "69670e": "263756", - "8dd0e6": "667386", - "101010": "101010", - "6893a5": "b76545", - "8da0ac": "ecaa61", - "8397aa": "8397aa", - "66747a": "66747a", - "d3e1e8": "d3e1e8", - "81bbd1": "55596f", - "788a94": "c77a4f", - "8ba8b8": "c77a4f", - "5d6773": "ea9b43", - "15222d": "15222d", - "343c43": "ba5c2c" + "516a7b": "ba5c2c", + "cedf42": "72add9", + "3a4055": "73312f", + "8e99ad": "cd8330" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/970.json b/public/images/pokemon/variant/exp/970.json new file mode 100644 index 00000000000..7e25970c4bc --- /dev/null +++ b/public/images/pokemon/variant/exp/970.json @@ -0,0 +1,36 @@ +{ + "1": { + "366956": "692915", + "ffff31": "dde4e6", + "5de0aa": "fbce5d", + "5a869c": "bd2646", + "2c369a": "435469", + "4d6076": "6b1933", + "3d464b": "44111b", + "000000": "ffffff", + "41968b": "c57833", + "e0548f": "758eb4", + "fd84ba": "bbe3ee", + "a02c75": "3f4a6f", + "3253d6": "577b81", + "242737": "171c28", + "262b6b": "323b51" + }, + "2": { + "366956": "6d171f", + "ffff31": "c0efff", + "5de0aa": "df543b", + "5a869c": "656b8b", + "2c369a": "e1a47a", + "4d6076": "433e53", + "3d464b": "2d293a", + "000000": "ffffff", + "41968b": "a51414", + "e0548f": "235c65", + "fd84ba": "3e8768", + "a02c75": "1b3842", + "3253d6": "ffedd1", + "242737": "352b2f", + "262b6b": "bb7154" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/672.json b/public/images/pokemon/variant/exp/back/672.json index 8ee91469917..7282ef5e693 100644 --- a/public/images/pokemon/variant/exp/back/672.json +++ b/public/images/pokemon/variant/exp/back/672.json @@ -1,4 +1,20 @@ { + "1": { + "3d3128": "69112a", + "000000": "000000", + "67615b": "9e2c3d", + "615140": "89431b", + "7e6d5a": "b3743e", + "554538": "642509", + "efeded": "f8e2b7", + "beb8b6": "e3a378", + "0e5d58": "8c6859", + "09a77c": "f8f0e2", + "0d8374": "d2af94", + "c16a3f": "321512", + "c6b379": "552d30", + "a8905c": "4b2525" + }, "2": { "3d3128": "161526", "000000": "000000", @@ -15,4 +31,4 @@ "c6b379": "9f5f9b", "a8905c": "854d87" } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/exp/back/672_2.json b/public/images/pokemon/variant/exp/back/672_2.json deleted file mode 100644 index 216c213bc12..00000000000 --- a/public/images/pokemon/variant/exp/back/672_2.json +++ /dev/null @@ -1,965 +0,0 @@ -{ - "textures": [ - { - "image": "672_2.png", - "format": "RGBA8888", - "size": { - "w": 282, - "h": 282 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 41, - "h": 42 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 126, - "w": 41, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 168, - "w": 41, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 0, - "y": 210, - "w": 41, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 82, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 123, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 164, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 205, - "y": 0, - "w": 41, - "h": 42 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 42, - "w": 41, - "h": 42 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 84, - "w": 41, - "h": 42 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 42 - }, - "frame": { - "x": 41, - "y": 126, - "w": 41, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 41, - "y": 168, - "w": 41, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 41, - "y": 209, - "w": 41, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 123, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 164, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 205, - "y": 42, - "w": 41, - "h": 41 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 83, - "w": 41, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 41, - "h": 41 - }, - "frame": { - "x": 82, - "y": 124, - "w": 41, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 40, - "h": 42 - }, - "frame": { - "x": 82, - "y": 165, - "w": 40, - "h": 42 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 40, - "h": 42 - }, - "frame": { - "x": 82, - "y": 207, - "w": 40, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 122, - "y": 165, - "w": 40, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 122, - "y": 206, - "w": 40, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 123, - "y": 83, - "w": 40, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 123, - "y": 124, - "w": 40, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 162, - "y": 165, - "w": 40, - "h": 41 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 162, - "y": 206, - "w": 40, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 40, - "h": 41 - }, - "frame": { - "x": 163, - "y": 83, - "w": 40, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 40 - }, - "frame": { - "x": 163, - "y": 124, - "w": 41, - "h": 40 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 41, - "h": 40 - }, - "frame": { - "x": 203, - "y": 83, - "w": 41, - "h": 40 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 202, - "y": 164, - "w": 40, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 204, - "y": 123, - "w": 40, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 242, - "y": 163, - "w": 40, - "h": 40 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 242, - "y": 203, - "w": 40, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 41, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 40, - "h": 40 - }, - "frame": { - "x": 202, - "y": 204, - "w": 40, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b36f1de558a8fa8ac8b56a9ba43a0dfd:5fe84a3f522e543bfbbfe0837355266b:2e4767b7cd134fc0ab1bb6e9eee82bc7$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/672_2.png b/public/images/pokemon/variant/exp/back/672_2.png deleted file mode 100644 index a51b8cba11f..00000000000 Binary files a/public/images/pokemon/variant/exp/back/672_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/673.json b/public/images/pokemon/variant/exp/back/673.json index be9d3af3965..7e5bc69976d 100644 --- a/public/images/pokemon/variant/exp/back/673.json +++ b/public/images/pokemon/variant/exp/back/673.json @@ -1,4 +1,20 @@ { + "1": { + "3d3128": "5a0e24", + "000000": "000000", + "554538": "471405", + "67615b": "8f2837", + "0d835a": "d2af94", + "0e5d58": "8c6352", + "74593a": "61240a", + "09a766": "f8f0e2", + "cabfbb": "e3a378", + "efeded": "f8e2b7", + "a8905c": "9e4e21", + "c6b379": "ce8648", + "ae492a": "321512", + "c16a3f": "552d30" + }, "2": { "3d3128": "121123", "000000": "000000", @@ -15,4 +31,4 @@ "ae492a": "612c6b", "c16a3f": "9f5f9b" } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/exp/back/673_2.json b/public/images/pokemon/variant/exp/back/673_2.json deleted file mode 100644 index b9c2b2d54e7..00000000000 --- a/public/images/pokemon/variant/exp/back/673_2.json +++ /dev/null @@ -1,965 +0,0 @@ -{ - "textures": [ - { - "image": "673_2.png", - "format": "RGBA8888", - "size": { - "w": 384, - "h": 384 - }, - "scale": 1, - "frames": [ - { - "filename": "0029.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 62, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 62, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 124, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 186, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 248, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 248, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 310, - "y": 0, - "w": 62, - "h": 65 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 0, - "y": 65, - "w": 62, - "h": 65 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 65 - }, - "frame": { - "x": 62, - "y": 65, - "w": 62, - "h": 65 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 65 - }, - "frame": { - "x": 124, - "y": 65, - "w": 61, - "h": 65 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 65 - }, - "frame": { - "x": 124, - "y": 65, - "w": 61, - "h": 65 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 65 - }, - "frame": { - "x": 185, - "y": 65, - "w": 60, - "h": 65 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 65 - }, - "frame": { - "x": 245, - "y": 65, - "w": 60, - "h": 65 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 65 - }, - "frame": { - "x": 305, - "y": 65, - "w": 60, - "h": 65 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 65 - }, - "frame": { - "x": 0, - "y": 130, - "w": 60, - "h": 65 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 60, - "h": 62 - }, - "frame": { - "x": 60, - "y": 130, - "w": 60, - "h": 62 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 130, - "w": 59, - "h": 65 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 130, - "w": 59, - "h": 65 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 130, - "w": 59, - "h": 65 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 120, - "y": 130, - "w": 59, - "h": 65 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 60, - "y": 192, - "w": 59, - "h": 65 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 60, - "y": 192, - "w": 59, - "h": 65 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 60, - "y": 192, - "w": 59, - "h": 65 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 60, - "y": 192, - "w": 59, - "h": 65 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 0, - "y": 195, - "w": 59, - "h": 65 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 59, - "h": 65 - }, - "frame": { - "x": 179, - "y": 130, - "w": 59, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 58, - "h": 64 - }, - "frame": { - "x": 238, - "y": 130, - "w": 58, - "h": 64 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 58, - "h": 64 - }, - "frame": { - "x": 238, - "y": 130, - "w": 58, - "h": 64 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 58, - "h": 64 - }, - "frame": { - "x": 238, - "y": 194, - "w": 58, - "h": 64 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 58, - "h": 64 - }, - "frame": { - "x": 59, - "y": 257, - "w": 58, - "h": 64 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 58, - "h": 64 - }, - "frame": { - "x": 0, - "y": 260, - "w": 58, - "h": 64 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 58, - "h": 64 - }, - "frame": { - "x": 117, - "y": 257, - "w": 58, - "h": 64 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 58, - "h": 62 - }, - "frame": { - "x": 119, - "y": 195, - "w": 58, - "h": 62 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 57, - "h": 64 - }, - "frame": { - "x": 175, - "y": 257, - "w": 57, - "h": 64 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 58, - "h": 62 - }, - "frame": { - "x": 177, - "y": 195, - "w": 58, - "h": 62 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 57, - "h": 63 - }, - "frame": { - "x": 232, - "y": 258, - "w": 57, - "h": 63 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 57, - "h": 63 - }, - "frame": { - "x": 289, - "y": 258, - "w": 57, - "h": 63 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 57, - "h": 63 - }, - "frame": { - "x": 296, - "y": 130, - "w": 57, - "h": 63 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 57, - "h": 63 - }, - "frame": { - "x": 296, - "y": 193, - "w": 57, - "h": 63 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 56, - "h": 63 - }, - "frame": { - "x": 58, - "y": 321, - "w": 56, - "h": 63 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 56, - "h": 63 - }, - "frame": { - "x": 114, - "y": 321, - "w": 56, - "h": 63 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 56, - "h": 62 - }, - "frame": { - "x": 170, - "y": 321, - "w": 56, - "h": 62 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 65 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 56, - "h": 62 - }, - "frame": { - "x": 226, - "y": 321, - "w": 56, - "h": 62 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:05149e465b79b92adcb764d8f903ce8d:523fbed3890bc743f1863e6db3150ddb:5d92dd5d09b0875a1d8f3606df775958$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/673_2.png b/public/images/pokemon/variant/exp/back/673_2.png deleted file mode 100644 index be4e73acce4..00000000000 Binary files a/public/images/pokemon/variant/exp/back/673_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/962.json b/public/images/pokemon/variant/exp/back/962.json index 860c4515df7..118a0f26768 100644 --- a/public/images/pokemon/variant/exp/back/962.json +++ b/public/images/pokemon/variant/exp/back/962.json @@ -28,5 +28,20 @@ "fffbff": "edf8e6", "7b827b": "6a856a", "a7aba7": "98a798" + }, + "2": { + "342930": "754156", + "0f0f0f": "0f0f0f", + "4a3942": "a5777f", + "937d85": "2f2655", + "b9aaaf": "453863", + "665b60": "211f45", + "efe3e1": "67548a", + "a7aba7": "ddac84", + "fffbff": "f7e5d0", + "e64c62": "aba7a8", + "993e49": "797877", + "501d25": "545151", + "7b827b": "a96c4b" } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/exp/back/962_3.json b/public/images/pokemon/variant/exp/back/962_3.json deleted file mode 100644 index 397453d3274..00000000000 --- a/public/images/pokemon/variant/exp/back/962_3.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "textures": [ - { - "image": "962_3.png", - "format": "RGBA8888", - "size": { - "w": 224, - "h": 224 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 82, - "h": 86 - }, - "frame": { - "x": 0, - "y": 0, - "w": 82, - "h": 86 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 87, - "h": 79 - }, - "frame": { - "x": 0, - "y": 86, - "w": 87, - "h": 79 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 74 - }, - "frame": { - "x": 82, - "y": 0, - "w": 92, - "h": 74 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 38, - "w": 91, - "h": 59 - }, - "frame": { - "x": 0, - "y": 165, - "w": 91, - "h": 59 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 1, - "y": 36, - "w": 91, - "h": 60 - }, - "frame": { - "x": 87, - "y": 74, - "w": 91, - "h": 60 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 41, - "w": 101, - "h": 41 - }, - "frame": { - "x": 91, - "y": 134, - "w": 101, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 101, - "h": 97 - }, - "spriteSourceSize": { - "x": 0, - "y": 40, - "w": 100, - "h": 38 - }, - "frame": { - "x": 91, - "y": 175, - "w": 100, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ee54d59ae73a6775b5d1d9b10f273445:828dff0b1dc45966e927a7a1419412f2:1e70eb3d02dd5c47565da4b5d26e2400$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/962_3.png b/public/images/pokemon/variant/exp/back/962_3.png deleted file mode 100644 index 9356040a0e9..00000000000 Binary files a/public/images/pokemon/variant/exp/back/962_3.png and /dev/null differ diff --git a/public/images/trainer/aether_grunt_f.json b/public/images/trainer/aether_grunt_f.json new file mode 100644 index 00000000000..c43bdae9b2e --- /dev/null +++ b/public/images/trainer/aether_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "aether_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 69, + "h": 69 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 23, + "y": 10, + "w": 35, + "h": 69 + }, + "frame": { + "x": 0, + "y": 0, + "w": 35, + "h": 69 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:0c9e77856d3b434e719021572bcb93de:f9c45dc5d67009b134dd1bbc5593f6ec:a694f8828aff21c718e5161e2fd63ade$" + } +} diff --git a/public/images/trainer/aether_grunt_f.png b/public/images/trainer/aether_grunt_f.png new file mode 100644 index 00000000000..b43c5e71a51 Binary files /dev/null and b/public/images/trainer/aether_grunt_f.png differ diff --git a/public/images/trainer/aether_grunt_m.json b/public/images/trainer/aether_grunt_m.json new file mode 100644 index 00000000000..eba00096f8d --- /dev/null +++ b/public/images/trainer/aether_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "aether_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 65, + "h": 65 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 14, + "w": 47, + "h": 65 + }, + "frame": { + "x": 0, + "y": 0, + "w": 47, + "h": 65 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:963887cf29549ad3c123b8055cb4d701:68004c4a6e04c93bd21c26a6f8921f0c:d2241fc11d0fc31b26ecbedae6da74f4$" + } +} diff --git a/public/images/trainer/aether_grunt_m.png b/public/images/trainer/aether_grunt_m.png new file mode 100644 index 00000000000..f4df26ef007 Binary files /dev/null and b/public/images/trainer/aether_grunt_m.png differ diff --git a/public/images/trainer/faba.json b/public/images/trainer/faba.json new file mode 100644 index 00000000000..0e9544e2529 --- /dev/null +++ b/public/images/trainer/faba.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "faba.png", + "format": "RGBA8888", + "size": { + "w": 74, + "h": 74 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 25, + "y": 5, + "w": 31, + "h": 74 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 74 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:47622708d99a504998950bd9c389a504:fe1c51be191dd9fafb5b6f309c08ae1a:8d64db18930325b8b513740c1d83ce4c$" + } +} diff --git a/public/images/trainer/faba.png b/public/images/trainer/faba.png new file mode 100644 index 00000000000..a7fa0fb4879 Binary files /dev/null and b/public/images/trainer/faba.png differ diff --git a/public/images/trainer/guzma.json b/public/images/trainer/guzma.json new file mode 100644 index 00000000000..c278d68be24 --- /dev/null +++ b/public/images/trainer/guzma.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "guzma.png", + "format": "RGBA8888", + "size": { + "w": 58, + "h": 58 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 21, + "y": 20, + "w": 37, + "h": 58 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 58 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:c3b08a562a2882d1ca8b5e031e245da9:72a8305e547f091d15abccd2b142e401:3b302c7f9eb6ea81b65bcaeead4a95a9$" + } +} diff --git a/public/images/trainer/guzma.png b/public/images/trainer/guzma.png new file mode 100644 index 00000000000..6afd6f3b34a Binary files /dev/null and b/public/images/trainer/guzma.png differ diff --git a/public/images/trainer/lusamine.json b/public/images/trainer/lusamine.json new file mode 100644 index 00000000000..55a711a21fb --- /dev/null +++ b/public/images/trainer/lusamine.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "lusamine.png", + "format": "RGBA8888", + "size": { + "w": 74, + "h": 74 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 22, + "y": 5, + "w": 36, + "h": 74 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 74 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:41da3a1299e3831be70016dc91e49313:2413ba06767fb10fdc6fde8cc736c51c:4012333084c529872232c8d052561dc1$" + } +} diff --git a/public/images/trainer/lusamine.png b/public/images/trainer/lusamine.png new file mode 100644 index 00000000000..8b835a2d0be Binary files /dev/null and b/public/images/trainer/lusamine.png differ diff --git a/public/images/trainer/macro_grunt_f.json b/public/images/trainer/macro_grunt_f.json new file mode 100644 index 00000000000..04b30ec4ca5 --- /dev/null +++ b/public/images/trainer/macro_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "macro_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 74, + "h": 74 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 24, + "y": 5, + "w": 31, + "h": 74 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 74 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:a015c43d80f8fd1932758e0e2cfcec61:59fc8205ea5ca04295831b4a2eb623ec:30df2ea8e9dac9e95f70534ec43d5ecd$" + } +} diff --git a/public/images/trainer/macro_grunt_f.png b/public/images/trainer/macro_grunt_f.png new file mode 100644 index 00000000000..892299d701e Binary files /dev/null and b/public/images/trainer/macro_grunt_f.png differ diff --git a/public/images/trainer/macro_grunt_m.json b/public/images/trainer/macro_grunt_m.json new file mode 100644 index 00000000000..5357fdb0767 --- /dev/null +++ b/public/images/trainer/macro_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "macro_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 75, + "h": 75 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 15, + "y": 4, + "w": 48, + "h": 75 + }, + "frame": { + "x": 0, + "y": 0, + "w": 48, + "h": 75 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:52fccff2a0675b4e10139ddb7067d4cf:10d254175d2d8a9111cce096ffb55fa3:d57016467aa07cafdfaf13e0ff643c1b$" + } +} diff --git a/public/images/trainer/macro_grunt_m.png b/public/images/trainer/macro_grunt_m.png new file mode 100644 index 00000000000..aa6b3607a87 Binary files /dev/null and b/public/images/trainer/macro_grunt_m.png differ diff --git a/public/images/trainer/oleana.json b/public/images/trainer/oleana.json new file mode 100644 index 00000000000..7219b640c38 --- /dev/null +++ b/public/images/trainer/oleana.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "oleana.png", + "format": "RGBA8888", + "size": { + "w": 79, + "h": 79 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 53, + "h": 79 + }, + "frame": { + "x": 0, + "y": 0, + "w": 53, + "h": 79 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:30987a671771127a38491a588c465964:38b28effcfd5c6cbc0f358912a775af3:82e2a1f8afed29be57f6c2473f4c5be2$" + } +} diff --git a/public/images/trainer/oleana.png b/public/images/trainer/oleana.png new file mode 100644 index 00000000000..3252c67ab8e Binary files /dev/null and b/public/images/trainer/oleana.png differ diff --git a/public/images/trainer/plumeria.json b/public/images/trainer/plumeria.json new file mode 100644 index 00000000000..936a8766750 --- /dev/null +++ b/public/images/trainer/plumeria.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "plumeria.png", + "format": "RGBA8888", + "size": { + "w": 72, + "h": 72 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 23, + "y": 7, + "w": 36, + "h": 72 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 72 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:5527e7b646932d429928b53f055e9d27:c0640510780d2974f9b74a7f8e6b29aa:7bfec029bae78c9d483f59c35b73afad$" + } +} diff --git a/public/images/trainer/plumeria.png b/public/images/trainer/plumeria.png new file mode 100644 index 00000000000..b7382f6afde Binary files /dev/null and b/public/images/trainer/plumeria.png differ diff --git a/public/images/trainer/rose.json b/public/images/trainer/rose.json new file mode 100644 index 00000000000..86869257b63 --- /dev/null +++ b/public/images/trainer/rose.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "rose.png", + "format": "RGBA8888", + "size": { + "w": 79, + "h": 79 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 80 + }, + "spriteSourceSize": { + "x": 16, + "y": 1, + "w": 52, + "h": 79 + }, + "frame": { + "x": 0, + "y": 0, + "w": 52, + "h": 79 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:2b4ccaff7255c7d72661eac13de83ff8:72ee3660cdf470bd67375d355307e19d:8d35b104fc841baa4443581e6cea979e$" + } +} diff --git a/public/images/trainer/rose.png b/public/images/trainer/rose.png new file mode 100644 index 00000000000..f90da7568d4 Binary files /dev/null and b/public/images/trainer/rose.png differ diff --git a/public/images/trainer/skull_grunt_f.json b/public/images/trainer/skull_grunt_f.json new file mode 100644 index 00000000000..182f9300ad5 --- /dev/null +++ b/public/images/trainer/skull_grunt_f.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "skull_grunt_f.png", + "format": "RGBA8888", + "size": { + "w": 74, + "h": 74 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 31, + "h": 74 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 31, + "h": 74 + }, + "frame": { + "x": 0, + "y": 0, + "w": 31, + "h": 74 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:71a1f5b1981674c6e81163ac8ea576c3:a5e612d58e5f0a1489e111212baea09d:dd369353af16e4c5eb6547e129dfac18$" + } +} diff --git a/public/images/trainer/skull_grunt_f.png b/public/images/trainer/skull_grunt_f.png new file mode 100644 index 00000000000..fe7834ba4a8 Binary files /dev/null and b/public/images/trainer/skull_grunt_f.png differ diff --git a/public/images/trainer/skull_grunt_m.json b/public/images/trainer/skull_grunt_m.json new file mode 100644 index 00000000000..7c728e9d3fc --- /dev/null +++ b/public/images/trainer/skull_grunt_m.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "skull_grunt_m.png", + "format": "RGBA8888", + "size": { + "w": 72, + "h": 72 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 51, + "h": 72 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 51, + "h": 72 + }, + "frame": { + "x": 0, + "y": 0, + "w": 51, + "h": 72 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:4deb2a68e4d168bb1a40cb5d190a7d1f:be3d7b29f4b544ba51cf907691fef51d:df57ca2c9bf5f80d930306e15a851d4d$" + } +} diff --git a/public/images/trainer/skull_grunt_m.png b/public/images/trainer/skull_grunt_m.png new file mode 100644 index 00000000000..f2b8acba984 Binary files /dev/null and b/public/images/trainer/skull_grunt_m.png differ diff --git a/src/account.ts b/src/account.ts index 6682e3e0b7c..c6d2f85489a 100644 --- a/src/account.ts +++ b/src/account.ts @@ -6,6 +6,7 @@ export interface UserInfo { lastSessionSlot: integer; discordId: string; googleId: string; + hasAdminRole: boolean; } export let loggedInUser: UserInfo | null = null; @@ -13,13 +14,13 @@ export let loggedInUser: UserInfo | null = null; export const clientSessionId = Utils.randomString(32); export function initLoggedInUser(): void { - loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: ""}; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false }; } export function updateUserInfo(): Promise<[boolean, integer]> { return new Promise<[boolean, integer]>(resolve => { if (bypassLogin) { - loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "" }; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false}; let lastSessionSlot = -1; for (let s = 0; s < 5; s++) { if (localStorage.getItem(`sessionData${s ? s : ""}_${loggedInUser.username}`)) { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index a033c8a3cb3..2a920864850 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -124,7 +124,9 @@ export default class BattleScene extends SceneBase { public lastSavePlayTime: integer | null = null; public masterVolume: number = 0.5; public bgmVolume: number = 1; + public fieldVolume: number = 1; public seVolume: number = 1; + public uiVolume: number = 1; public gameSpeed: integer = 1; public damageNumbersMode: integer = 0; public reroll: boolean = false; @@ -842,14 +844,13 @@ export default class BattleScene extends SceneBase { if (Overrides.OPP_SPECIES_OVERRIDE) { species = getPokemonSpecies(Overrides.OPP_SPECIES_OVERRIDE); } - const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource); + if (Overrides.OPP_LEVEL_OVERRIDE !== 0) { - pokemon.level = Overrides.OPP_LEVEL_OVERRIDE; + level = Overrides.OPP_LEVEL_OVERRIDE; } - if (Overrides.OPP_GENDER_OVERRIDE !== null) { - pokemon.gender = Overrides.OPP_GENDER_OVERRIDE; - } + const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource); + overrideModifiers(this, false); overrideHeldItems(this, pokemon, false); if (boss && !dataSource) { @@ -1748,8 +1749,26 @@ export default class BattleScene extends SceneBase { updateSoundVolume(): void { if (this.sound) { - for (const sound of this.sound.getAllPlaying()) { - (sound as AnySound).setVolume(this.masterVolume * (this.bgmCache.has(sound.key) ? this.bgmVolume : this.seVolume)); + for (const sound of this.sound.getAllPlaying() as AnySound[]) { + if (this.bgmCache.has(sound.key)) { + sound.setVolume(this.masterVolume * this.bgmVolume); + } else { + const soundDetails = sound.key.split("/"); + switch (soundDetails[0]) { + + case "battle_anims": + case "cry": + if (soundDetails[1].startsWith("PRSFX- ")) { + sound.setVolume(this.masterVolume*this.fieldVolume*0.5); + } else { + sound.setVolume(this.masterVolume*this.fieldVolume); + } + break; + case "se": + case "ui": + sound.setVolume(this.masterVolume*this.seVolume); + } + } } } } @@ -1768,25 +1787,42 @@ export default class BattleScene extends SceneBase { } playSound(sound: string | AnySound, config?: object): AnySound { - if (config) { - if (config.hasOwnProperty("volume")) { - config["volume"] *= this.masterVolume * this.seVolume; - } else { + const key = typeof sound === "string" ? sound : sound.key; + config = config ?? {}; + try { + const keyDetails = key.split("/"); + switch (keyDetails[0]) { + case "level_up_fanfare": + case "item_fanfare": + case "minor_fanfare": + case "heal": + case "evolution": + case "evolution_fanfare": + // These sounds are loaded in as BGM, but played as sound effects + // When these sounds are updated in updateVolume(), they are treated as BGM however because they are placed in the BGM Cache through being called by playSoundWithoutBGM() + config["volume"] = this.masterVolume * this.bgmVolume; + break; + case "battle_anims": + case "cry": + config["volume"] = this.masterVolume * this.fieldVolume; + //PRSFX sound files are unusually loud + if (keyDetails[1].startsWith("PRSFX- ")) { + config["volume"] *= 0.5; + } + break; + case "ui": + //As of, right now this applies to the "select", "menu_open", "error" sound effects + config["volume"] = this.masterVolume * this.uiVolume; + break; + case "se": config["volume"] = this.masterVolume * this.seVolume; + break; } - } else { - config = { volume: this.masterVolume * this.seVolume }; - } - // PRSFX sounds are mixed too loud - if ((typeof sound === "string" ? sound : sound.key).startsWith("PRSFX- ")) { - config["volume"] *= 0.5; - } - if (typeof sound === "string") { - this.sound.play(sound, config); - return this.sound.get(sound) as AnySound; - } else { - sound.play(config); - return sound; + this.sound.play(key, config); + return this.sound.get(key) as AnySound; + } catch { + console.log(`${key} not found`); + return sound as AnySound; } } @@ -1967,6 +2003,18 @@ export default class BattleScene extends SceneBase { return 12.974; case "battle_flare_grunt": //XY Team Flare Battle return 4.228; + case "battle_aether_grunt": // SM Aether Foundation Battle + return 16.00; + case "battle_skull_grunt": // SM Team Skull Battle + return 20.87; + case "battle_macro_grunt": // SWSH Trainer Battle + return 11.56; + case "battle_galactic_admin": //BDSP Team Galactic Admin Battle + return 11.997; + case "battle_skull_admin": //SM Team Skull Admin Battle + return 15.463; + case "battle_oleana": //SWSH Oleana Battle + return 14.110; case "battle_rocket_boss": //USUM Giovanni Battle return 9.115; case "battle_aqua_magma_boss": //ORAS Archie & Maxie Battle @@ -1977,6 +2025,12 @@ export default class BattleScene extends SceneBase { return 25.624; case "battle_flare_boss": //XY Lysandre Battle return 8.085; + case "battle_aether_boss": //SM Lusamine Battle + return 11.33; + case "battle_skull_boss": //SM Guzma Battle + return 13.13; + case "battle_macro_boss": //SWSH Rose Battle + return 11.42; } return 0; diff --git a/src/battle.ts b/src/battle.ts index 6eef4ce6c49..87a2ac66ad9 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -504,27 +504,27 @@ export const classicFixedBattles: FixedBattleConfigs = { [25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), [35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)), + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)), [55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), [62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)), + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)), [64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)), + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)), [66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ] ], true)), + .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], true)), [95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), [112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)), + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)), [114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ] ], true, 1)), + .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], true, 1)), [115]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])), + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE ])), [145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), [165]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2 ])), + .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, TrainerType.LUSAMINE_2, TrainerType.GUZMA_2, TrainerType.ROSE_2 ])), [182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])), [184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) diff --git a/src/data/ability.ts b/src/data/ability.ts index 8b7c3a1b04d..d947bcddd99 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -8,7 +8,7 @@ import { Weather, WeatherType } from "./weather"; import { BattlerTag, GroundedTag, GulpMissileTag, SemiInvulnerableTag } from "./battler-tags"; import { StatusEffect, getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; import { Gender } from "./gender"; -import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, ChargeAttr, SacrificialAttr, SacrificialAttrOnHit } from "./move"; +import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, ChargeAttr, SacrificialAttr, SacrificialAttrOnHit, NeutralDamageAgainstFlyingTypeMultiplierAttr } from "./move"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { Stat, getStatName } from "./pokemon-stat"; import { BerryModifier, PokemonHeldItemModifier } from "../modifier/modifier"; @@ -349,7 +349,7 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { if ([ MoveTarget.BOTH_SIDES, MoveTarget.ENEMY_SIDE, MoveTarget.USER_SIDE ].includes(move.moveTarget)) { return false; } - if (attacker !== pokemon && move.type === this.immuneType) { + if (attacker !== pokemon && attacker.getMoveType(move) === this.immuneType) { (args[0] as Utils.NumberHolder).value = 0; return true; } @@ -372,7 +372,8 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { * Example: Levitate */ applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (move.category !== MoveCategory.STATUS) { + // this is a hacky way to fix the Levitate/Thousand Arrows interaction, but it works for now... + if (move.category !== MoveCategory.STATUS && !move.hasAttr(NeutralDamageAgainstFlyingTypeMultiplierAttr)) { return super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } return false; @@ -392,6 +393,7 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), Utils.toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + cancelled.value = true; // Suppresses "No Effect" message } return true; } @@ -415,7 +417,7 @@ class TypeImmunityStatChangeAbAttr extends TypeImmunityAbAttr { const ret = super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (ret) { - cancelled.value = true; + cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.levels)); } @@ -440,7 +442,7 @@ class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr { const ret = super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (ret) { - cancelled.value = true; + cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { pokemon.addTag(this.tagType, this.turnCount, undefined, pokemon.id); } @@ -456,8 +458,8 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { } applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (move instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.type, attacker) < 2) { - cancelled.value = true; + if (move instanceof AttackMove && pokemon.getAttackTypeEffectiveness(pokemon.getMoveType(move), attacker) < 2) { + cancelled.value = true; // Suppresses "No Effect" message (args[0] as Utils.NumberHolder).value = 0; return true; } @@ -764,7 +766,7 @@ export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr { if (simulated) { return true; } - const type = move.type; + const type = attacker.getMoveType(move); const pokemonTypes = pokemon.getTypes(true); if (pokemonTypes.length !== 1 || pokemonTypes[0] !== type) { pokemon.summonData.types = [ type ]; @@ -1212,7 +1214,7 @@ export class FieldMultiplyBattleStatAbAttr extends AbAttr { } -export class MoveTypeChangeAttr extends PreAttackAbAttr { +export class MoveTypeChangeAbAttr extends PreAttackAbAttr { constructor( private newType: Type, private powerMultiplier: number, @@ -1221,11 +1223,14 @@ export class MoveTypeChangeAttr extends PreAttackAbAttr { super(true); } + // TODO: Decouple this into two attributes (type change / power boost) applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): boolean { if (this.condition && this.condition(pokemon, defender, move)) { - move.type = this.newType; if (args[0] && args[0] instanceof Utils.NumberHolder) { - args[0].value *= this.powerMultiplier; + args[0].value = this.newType; + } + if (args[1] && args[1] instanceof Utils.NumberHolder) { + args[1].value *= this.powerMultiplier; } return true; } @@ -1257,22 +1262,12 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { attr instanceof CopyMoveAttr ) ) { - // TODO remove this copy when phase order is changed so that damage, type, category, etc. - // TODO are all calculated prior to playing the move animation. - const moveCopy = new Move(move.id, move.type, move.category, move.moveTarget, move.power, move.accuracy, move.pp, move.chance, move.priority, move.generation); - moveCopy.attrs = move.attrs; + const moveType = pokemon.getMoveType(move); - // Moves like Weather Ball ignore effects of abilities like Normalize and Refrigerate - if (move.findAttr(attr => attr instanceof VariableMoveTypeAttr)) { - applyMoveAttrs(VariableMoveTypeAttr, pokemon, null, moveCopy); - } else { - applyPreAttackAbAttrs(MoveTypeChangeAttr, pokemon, null, moveCopy); - } - - if (pokemon.getTypes().some((t) => t !== moveCopy.type)) { + if (pokemon.getTypes().some((t) => t !== moveType)) { if (!simulated) { - this.moveType = moveCopy.type; - pokemon.summonData.types = [moveCopy.type]; + this.moveType = moveType; + pokemon.summonData.types = [moveType]; pokemon.updateInfo(); } @@ -2352,7 +2347,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { pokemon.summonData.moveset = target.getMoveset().map(m => new PokemonMove(m!.moveId, m!.ppUsed, m!.ppUp)); // TODO: are those bangs correct? pokemon.summonData.types = target.getTypes(); - pokemon.scene.playSound("PRSFX- Transform"); + pokemon.scene.playSound("battle_anims/PRSFX- Transform"); pokemon.loadAssets(false).then(() => pokemon.playAnim()); @@ -2978,16 +2973,20 @@ function getAnticipationCondition(): AbAttrCondition { return (pokemon: Pokemon) => { for (const opponent of pokemon.getOpponents()) { for (const move of opponent.moveset) { - // move is super effective - if (move!.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move!.getMove().type, opponent, true) >= 2) { // TODO: is this bang correct? + // ignore null/undefined moves + if (!move) { + continue; + } + // the move's base type (not accounting for variable type changes) is super effective + if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent, true) >= 2) { return true; } // move is a OHKO - if (move?.getMove().hasAttr(OneHitKOAttr)) { + if (move.getMove().hasAttr(OneHitKOAttr)) { return true; } // edge case for hidden power, type is computed - if (move?.getMove().id === Moves.HIDDEN_POWER) { + if (move.getMove().id === Moves.HIDDEN_POWER) { const iv_val = Math.floor(((opponent.ivs[Stat.HP] & 1) +(opponent.ivs[Stat.ATK] & 1) * 2 +(opponent.ivs[Stat.DEF] & 1) * 4 @@ -5019,7 +5018,7 @@ export function initAbilities() { .conditionalAttr(pokemon => pokemon.status ? pokemon.status.effect === StatusEffect.PARALYSIS : false, BattleStatMultiplierAbAttr, BattleStat.SPD, 2) .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), BattleStatMultiplierAbAttr, BattleStat.SPD, 1.5), new Ability(Abilities.NORMALIZE, 4) - .attr(MoveTypeChangeAttr, Type.NORMAL, 1.2, (user, target, move) => { + .attr(MoveTypeChangeAbAttr, Type.NORMAL, 1.2, (user, target, move) => { return ![Moves.HIDDEN_POWER, Moves.WEATHER_BALL, Moves.NATURAL_GIFT, Moves.JUDGMENT, Moves.TECHNO_BLAST].includes(move.id); }), new Ability(Abilities.SNIPER, 4) @@ -5260,7 +5259,7 @@ export function initAbilities() { new Ability(Abilities.STRONG_JAW, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.BITING_MOVE), 1.5), new Ability(Abilities.REFRIGERATE, 6) - .attr(MoveTypeChangeAttr, Type.ICE, 1.2, (user, target, move) => move.type === Type.NORMAL), + .attr(MoveTypeChangeAbAttr, Type.ICE, 1.2, (user, target, move) => move.type === Type.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), new Ability(Abilities.SWEET_VEIL, 6) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.SLEEP) .attr(UserFieldBattlerTagImmunityAbAttr, BattlerTagType.DROWSY) @@ -5283,11 +5282,11 @@ export function initAbilities() { new Ability(Abilities.TOUGH_CLAWS, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 1.3), new Ability(Abilities.PIXILATE, 6) - .attr(MoveTypeChangeAttr, Type.FAIRY, 1.2, (user, target, move) => move.type === Type.NORMAL), + .attr(MoveTypeChangeAbAttr, Type.FAIRY, 1.2, (user, target, move) => move.type === Type.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), new Ability(Abilities.GOOEY, 6) .attr(PostDefendStatChangeAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), BattleStat.SPD, -1, false), new Ability(Abilities.AERILATE, 6) - .attr(MoveTypeChangeAttr, Type.FLYING, 1.2, (user, target, move) => move.type === Type.NORMAL), + .attr(MoveTypeChangeAbAttr, Type.FLYING, 1.2, (user, target, move) => move.type === Type.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), new Ability(Abilities.PARENTAL_BOND, 6) .attr(AddSecondStrikeAbAttr, 0.25), new Ability(Abilities.DARK_AURA, 6) @@ -5359,11 +5358,11 @@ export function initAbilities() { new Ability(Abilities.LONG_REACH, 7) .attr(IgnoreContactAbAttr), new Ability(Abilities.LIQUID_VOICE, 7) - .attr(MoveTypeChangeAttr, Type.WATER, 1, (user, target, move) => move.hasFlag(MoveFlags.SOUND_BASED)), + .attr(MoveTypeChangeAbAttr, Type.WATER, 1, (user, target, move) => move.hasFlag(MoveFlags.SOUND_BASED)), new Ability(Abilities.TRIAGE, 7) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.hasFlag(MoveFlags.TRIAGE_MOVE), 3), new Ability(Abilities.GALVANIZE, 7) - .attr(MoveTypeChangeAttr, Type.ELECTRIC, 1.2, (user, target, move) => move.type === Type.NORMAL), + .attr(MoveTypeChangeAbAttr, Type.ELECTRIC, 1.2, (user, target, move) => move.type === Type.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), new Ability(Abilities.SURGE_SURFER, 7) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), BattleStatMultiplierAbAttr, BattleStat.SPD, 2), new Ability(Abilities.SCHOOLING, 7) diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index c86f3db5085..a2f6e41f4ae 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -325,11 +325,11 @@ class AnimTimedSoundEvent extends AnimTimedEvent { const soundConfig = { rate: (this.pitch * 0.01), volume: (this.volume * 0.01) }; if (this.resourceName) { try { - scene.playSound(this.resourceName, soundConfig); + scene.playSound(`battle_anims/${this.resourceName}`, soundConfig); } catch (err) { console.error(err); } - return Math.ceil((scene.sound.get(this.resourceName).totalDuration * 1000) / 33.33); + return Math.ceil((scene.sound.get(`battle_anims/${this.resourceName}`).totalDuration * 1000) / 33.33); } else { return Math.ceil((battleAnim.user!.cry(soundConfig).totalDuration * 1000) / 33.33); // TODO: is the bang behind user correct? } diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index b875877f99e..0a02defe052 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -49,7 +49,8 @@ export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[] const costSpecies = Object.keys(speciesStarters) .map(s => parseInt(s) as Species) .filter(s => speciesStarters[s] === cost); - const starterSpecies = getPokemonSpecies(getPokemonSpecies(Utils.randSeedItem(costSpecies)).getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER)); + const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies)); + const starterSpecies = getPokemonSpecies(randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER)); starters.push(getDailyRunStarter(scene, starterSpecies, startingLevel)); } }, 0, seed); diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 3e48d81ed12..3ef6d30643c 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -753,6 +753,98 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { ] } ], + [TrainerType.AETHER_GRUNT]: [ + { + encounter: [ + "dialogue:aether_grunt.encounter.1", + "dialogue:aether_grunt.encounter.2", + "dialogue:aether_grunt.encounter.3", + "dialogue:aether_grunt.encounter.4", + "dialogue:aether_grunt.encounter.5", + ], + victory: [ + "dialogue:aether_grunt.victory.1", + "dialogue:aether_grunt.victory.2", + "dialogue:aether_grunt.victory.3", + "dialogue:aether_grunt.victory.4", + "dialogue:aether_grunt.victory.5", + ] + } + ], + [TrainerType.FABA]: [ + { + encounter: [ + "dialogue:faba.encounter.1", + "dialogue:faba.encounter.2", + "dialogue:faba.encounter.3", + ], + victory: [ + "dialogue:faba.victory.1", + "dialogue:faba.victory.2", + "dialogue:faba.victory.3", + ] + } + ], + [TrainerType.SKULL_GRUNT]: [ + { + encounter: [ + "dialogue:skull_grunt.encounter.1", + "dialogue:skull_grunt.encounter.2", + "dialogue:skull_grunt.encounter.3", + "dialogue:skull_grunt.encounter.4", + "dialogue:skull_grunt.encounter.5", + ], + victory: [ + "dialogue:skull_grunt.victory.1", + "dialogue:skull_grunt.victory.2", + "dialogue:skull_grunt.victory.3", + "dialogue:skull_grunt.victory.4", + "dialogue:skull_grunt.victory.5", + ] + } + ], + [TrainerType.PLUMERIA]: [ + { + encounter: [ + "dialogue:plumeria.encounter.1", + "dialogue:plumeria.encounter.2", + "dialogue:plumeria.encounter.3", + ], + victory: [ + "dialogue:plumeria.victory.1", + "dialogue:plumeria.victory.2", + "dialogue:plumeria.victory.3", + ] + } + ], + [TrainerType.MACRO_GRUNT]: [ + { + encounter: [ + "dialogue:macro_grunt.encounter.1", + "dialogue:macro_grunt.encounter.2", + "dialogue:macro_grunt.encounter.3", + ], + victory: [ + "dialogue:macro_grunt.victory.1", + "dialogue:macro_grunt.victory.2", + "dialogue:macro_grunt.victory.3", + ] + } + ], + [TrainerType.OLEANA]: [ + { + encounter: [ + "dialogue:oleana.encounter.1", + "dialogue:oleana.encounter.2", + "dialogue:oleana.encounter.3", + ], + victory: [ + "dialogue:oleana.victory.1", + "dialogue:oleana.victory.2", + "dialogue:oleana.victory.3", + ] + } + ], [TrainerType.ROCKET_BOSS_GIOVANNI_1]: [ { encounter: [ @@ -909,6 +1001,84 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { ] } ], + [TrainerType.LUSAMINE]: [ + { + encounter: [ + "dialogue:aether_boss_lusamine_1.encounter.1" + ], + victory: [ + "dialogue:aether_boss_lusamine_1.victory.1" + ], + defeat: [ + "dialogue:aether_boss_lusamine_1.defeat.1" + ] + } + ], + [TrainerType.LUSAMINE_2]: [ + { + encounter: [ + "dialogue:aether_boss_lusamine_2.encounter.1" + ], + victory: [ + "dialogue:aether_boss_lusamine_2.victory.1" + ], + defeat: [ + "dialogue:aether_boss_lusamine_2.defeat.1" + ] + } + ], + [TrainerType.GUZMA]: [ + { + encounter: [ + "dialogue:skull_boss_guzma_1.encounter.1" + ], + victory: [ + "dialogue:skull_boss_guzma_1.victory.1" + ], + defeat: [ + "dialogue:skull_boss_guzma_1.defeat.1" + ] + } + ], + [TrainerType.GUZMA_2]: [ + { + encounter: [ + "dialogue:skull_boss_guzma_2.encounter.1" + ], + victory: [ + "dialogue:skull_boss_guzma_2.victory.1" + ], + defeat: [ + "dialogue:skull_boss_guzma_2.defeat.1" + ] + } + ], + [TrainerType.ROSE]: [ + { + encounter: [ + "dialogue:macro_boss_rose_1.encounter.1" + ], + victory: [ + "dialogue:macro_boss_rose_1.victory.1" + ], + defeat: [ + "dialogue:macro_boss_rose_1.defeat.1" + ] + } + ], + [TrainerType.ROSE_2]: [ + { + encounter: [ + "dialogue:macro_boss_rose_2.encounter.1" + ], + victory: [ + "dialogue:macro_boss_rose_2.victory.1" + ], + defeat: [ + "dialogue:macro_boss_rose_2.defeat.1" + ] + } + ], [TrainerType.BROCK]: { encounter: [ "dialogue:brock.encounter.1", diff --git a/src/data/move.ts b/src/data/move.ts index 4075da6105f..64fb33077b7 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -9,7 +9,7 @@ import { Constructor } from "#app/utils"; import * as Utils from "../utils"; import { WeatherType } from "./weather"; import { ArenaTagSide, ArenaTrapTag, WeakenMoveTypeTag } from "./arena-tag"; -import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability"; +import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAbAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability"; import { allAbilities } from "./ability"; import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier, PokemonMoveAccuracyBoosterModifier, AttackTypeBoosterModifier, PokemonMultiHitModifier } from "../modifier/modifier"; import { BattlerIndex, BattleType } from "../battle"; @@ -113,9 +113,8 @@ type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; export default class Move implements Localizable { public id: Moves; public name: string; - public type: Type; - public defaultType: Type; - public category: MoveCategory; + private _type: Type; + private _category: MoveCategory; public moveTarget: MoveTarget; public power: integer; public accuracy: integer; @@ -133,9 +132,8 @@ export default class Move implements Localizable { this.id = id; this.nameAppend = ""; - this.type = type; - this.defaultType = type; - this.category = category; + this._type = type; + this._category = category; this.moveTarget = defaultMoveTarget; this.power = power; this.accuracy = accuracy; @@ -158,6 +156,13 @@ export default class Move implements Localizable { this.localize(); } + get type() { + return this._type; + } + get category() { + return this._category; + } + localize(): void { const i18nKey = Moves[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; @@ -596,11 +601,13 @@ export default class Move implements Localizable { return true; } } + break; case MoveFlags.IGNORE_PROTECT: if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) && this.checkFlag(MoveFlags.MAKES_CONTACT, user, target)) { return true; } + break; } return !!(this.flags & flag); @@ -733,7 +740,7 @@ export default class Move implements Localizable { const power = new Utils.NumberHolder(this.power); const typeChangeMovePowerMultiplier = new Utils.NumberHolder(1); - applyPreAttackAbAttrs(MoveTypeChangeAttr, source, target, this, simulated, typeChangeMovePowerMultiplier); + applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, null, typeChangeMovePowerMultiplier); const sourceTeraType = source.getTeraType(); if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === this.type && power.value < 60 && this.priority <= 0 && !this.hasAttr(MultiHitAttr) && !source.scene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { @@ -1083,15 +1090,12 @@ export class PreMoveMessageAttr extends MoveAttr { } } -export class StatusMoveTypeImmunityAttr extends MoveAttr { - public immuneType: Type; - - constructor(immuneType: Type) { - super(false); - - this.immuneType = immuneType; - } -} +/** + * Attribute for Status moves that take attack type effectiveness + * into consideration (i.e. {@linkcode https://bulbapedia.bulbagarden.net/wiki/Thunder_Wave_(move) | Thunder Wave}) + * @extends MoveAttr + */ +export class RespectAttackTypeImmunityAttr extends MoveAttr { } export class IgnoreOpponentStatChangesAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -1851,19 +1855,11 @@ export class MultiHitAttr extends MoveAttr { * @returns True */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - let hitTimes: integer; + const hitType = new Utils.NumberHolder(this.multiHitType); + applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType); + this.multiHitType = hitType.value; - if (target.getAttackMoveEffectiveness(user, new PokemonMove(move.id)) === 0) { - // If there is a type immunity, the attack will stop no matter what - hitTimes = 1; - } else { - const hitType = new Utils.IntegerHolder(this.multiHitType); - applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType); - this.multiHitType = hitType.value; - hitTimes = this.getHitCount(user, target); - } - - (args[0] as Utils.IntegerHolder).value = hitTimes; + (args[0] as Utils.NumberHolder).value = this.getHitCount(user, target); return true; } @@ -3762,7 +3758,7 @@ export class VariableMoveCategoryAttr extends MoveAttr { export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.IntegerHolder); + const category = (args[0] as Utils.NumberHolder); if (user.getBattleStat(Stat.ATK, target, move) > user.getBattleStat(Stat.SPATK, target, move)) { category.value = MoveCategory.PHYSICAL; @@ -3775,7 +3771,7 @@ export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { export class TeraBlastCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.IntegerHolder); + const category = (args[0] as Utils.NumberHolder); if (user.isTerastallized() && user.getBattleStat(Stat.ATK, target, move) > user.getBattleStat(Stat.SPATK, target, move)) { category.value = MoveCategory.PHYSICAL; @@ -3791,18 +3787,21 @@ export class TeraBlastCategoryAttr extends VariableMoveCategoryAttr { * @extends VariablePowerAttr */ export class TeraBlastPowerAttr extends VariablePowerAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { /** - * @param user {@linkcode Pokemon} Pokemon using the move - * @param target {@linkcode Pokemon} N/A - * @param move {@linkcode Move} {@linkcode Move.TERA_BLAST} - * @param {any[]} args N/A - * @returns true or false + * Sets Tera Blast's power to 100 if the user is terastallized with + * the Stellar tera type. + * @param user {@linkcode Pokemon} the Pokemon using this move + * @param target n/a + * @param move {@linkcode Move} the Move with this attribute (i.e. Tera Blast) + * @param args + * - [0] {@linkcode Utils.NumberHolder} the applied move's power, factoring in + * previously applied power modifiers. + * @returns */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0] as Utils.NumberHolder; - if (user.isTerastallized() && move.type === Type.STELLAR) { - //200 instead of 100 to reflect lack of stellar being 2x dmg on any type - power.value = 200; + if (user.isTerastallized() && user.getTeraType() === Type.STELLAR) { + power.value = 100; return true; } @@ -3862,10 +3861,15 @@ export class VariableMoveTypeAttr extends MoveAttr { export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.ARCEUS) || [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.SILVALLY)) { const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies?.formIndex!; // TODO: is this bang correct? - move.type = Type[Type[form]]; + moveType.value = Type[Type[form]]; return true; } @@ -3875,24 +3879,29 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.GENESECT)) { const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Shock Drive - move.type = Type.ELECTRIC; + moveType.value = Type.ELECTRIC; break; case 2: // Burn Drive - move.type = Type.FIRE; + moveType.value = Type.FIRE; break; case 3: // Chill Drive - move.type = Type.ICE; + moveType.value = Type.ICE; break; case 4: // Douse Drive - move.type = Type.WATER; + moveType.value = Type.WATER; break; default: - move.type = Type.NORMAL; + moveType.value = Type.NORMAL; break; } return true; @@ -3904,15 +3913,20 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { export class AuraWheelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)) { const form = user.species.speciesId === Species.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Hangry Mode - move.type = Type.DARK; + moveType.value = Type.DARK; break; default: // Full Belly Mode - move.type = Type.ELECTRIC; + moveType.value = Type.ELECTRIC; break; } return true; @@ -3924,18 +3938,23 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr { export class RagingBullTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.PALDEA_TAUROS)) { const form = user.species.speciesId === Species.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Blaze breed - move.type = Type.FIRE; + moveType.value = Type.FIRE; break; case 2: // Aqua breed - move.type = Type.WATER; + moveType.value = Type.WATER; break; default: - move.type = Type.FIGHTING; + moveType.value = Type.FIGHTING; break; } return true; @@ -3947,25 +3966,30 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr { export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.OGERPON)) { const form = user.species.speciesId === Species.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { case 1: // Wellspring Mask case 5: // Wellspring Mask Tera - move.type = Type.WATER; + moveType.value = Type.WATER; break; case 2: // Hearthflame Mask case 6: // Hearthflame Mask Tera - move.type = Type.FIRE; + moveType.value = Type.FIRE; break; case 3: // Cornerstone Mask case 7: // Cornerstone Mask Tera - move.type = Type.ROCK; + moveType.value = Type.ROCK; break; case 4: // Teal Mask Tera default: - move.type = Type.GRASS; + moveType.value = Type.GRASS; break; } return true; @@ -3977,22 +4001,27 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { export class WeatherBallTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { switch (user.scene.arena.weather?.weatherType) { case WeatherType.SUNNY: case WeatherType.HARSH_SUN: - move.type = Type.FIRE; + moveType.value = Type.FIRE; break; case WeatherType.RAIN: case WeatherType.HEAVY_RAIN: - move.type = Type.WATER; + moveType.value = Type.WATER; break; case WeatherType.SANDSTORM: - move.type = Type.ROCK; + moveType.value = Type.ROCK; break; case WeatherType.HAIL: case WeatherType.SNOW: - move.type = Type.ICE; + moveType.value = Type.ICE; break; default: return false; @@ -4015,10 +4044,15 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { * @param user {@linkcode Pokemon} using this move * @param target N/A * @param move N/A - * @param args [0] {@linkcode Utils.IntegerHolder} The move's type to be modified + * @param args [0] {@linkcode Utils.NumberHolder} The move's type to be modified * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if (!user.isGrounded()) { return false; } @@ -4026,16 +4060,16 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { const currentTerrain = user.scene.arena.getTerrainType(); switch (currentTerrain) { case TerrainType.MISTY: - move.type = Type.FAIRY; + moveType.value = Type.FAIRY; break; case TerrainType.ELECTRIC: - move.type = Type.ELECTRIC; + moveType.value = Type.ELECTRIC; break; case TerrainType.GRASSY: - move.type = Type.GRASS; + moveType.value = Type.GRASS; break; case TerrainType.PSYCHIC: - move.type = Type.PSYCHIC; + moveType.value = Type.PSYCHIC; break; default: return false; @@ -4044,8 +4078,17 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { } } +/** + * Changes type based on the user's IVs + * @extends VariableMoveTypeAttr + */ export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + const iv_val = Math.floor(((user.ivs[Stat.HP] & 1) +(user.ivs[Stat.ATK] & 1) * 2 +(user.ivs[Stat.DEF] & 1) * 4 @@ -4053,7 +4096,7 @@ export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { +(user.ivs[Stat.SPATK] & 1) * 16 +(user.ivs[Stat.SPDEF] & 1) * 32) * 15/63); - move.type = [ + moveType.value = [ Type.FIGHTING, Type.FLYING, Type.POISON, Type.GROUND, Type.ROCK, Type.BUG, Type.GHOST, Type.STEEL, Type.FIRE, Type.WATER, Type.GRASS, Type.ELECTRIC, @@ -4068,16 +4111,21 @@ export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { * @extends VariableMoveTypeAttr */ export class TeraBlastTypeAttr extends VariableMoveTypeAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { /** - * @param user {@linkcode Pokemon} the user's type is checked + * @param user {@linkcode Pokemon} the user of the move * @param target {@linkcode Pokemon} N/A - * @param move {@linkcode Move} {@linkcode Move.TeraBlastTypeAttr} - * @param {any[]} args N/A - * @returns true or false + * @param move {@linkcode Move} the move with this attribute + * @param args `[0]` the move's type to be modified + * @returns `true` if the move's type was modified; `false` otherwise */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + if (user.isTerastallized()) { - move.type = user.getTeraType(); //changes move type to tera type + moveType.value = user.getTeraType(); // changes move type to tera type return true; } @@ -4087,14 +4135,18 @@ export class TeraBlastTypeAttr extends VariableMoveTypeAttr { export class MatchUserTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } const userTypes = user.getTypes(true); if (userTypes.includes(Type.STELLAR)) { // will not change to stellar type const nonTeraTypes = user.getTypes(); - move.type = nonTeraTypes[0]; + moveType.value = nonTeraTypes[0]; return true; } else if (userTypes.length > 0) { - move.type = userTypes[0]; + moveType.value = userTypes[0]; return true; } else { return false; @@ -4113,8 +4165,8 @@ export class NeutralDamageAgainstFlyingTypeMultiplierAttr extends VariableMoveTy apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!target.getTag(BattlerTagType.IGNORE_FLYING)) { const multiplier = args[0] as Utils.NumberHolder; - //When a flying type is hit, the first hit is always 1x multiplier. Levitating pokemon are instantly affected by typing - if (target.isOfType(Type.FLYING) || target.hasAbility(Abilities.LEVITATE)) { + //When a flying type is hit, the first hit is always 1x multiplier. + if (target.isOfType(Type.FLYING)) { multiplier.value = 1; } return true; @@ -6505,7 +6557,7 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new StatusMove(Moves.THUNDER_WAVE, Type.ELECTRIC, 90, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .attr(StatusMoveTypeImmunityAttr, Type.GROUND), + .attr(RespectAttackTypeImmunityAttr), new AttackMove(Moves.THUNDER, Type.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(ThunderAccuracyAttr) @@ -8352,8 +8404,8 @@ export function initMoves() { .partial() .ignoresVirtual(), /* End Unused */ - new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 100, 2, 7) - .attr(StatChangeAttr, BattleStat.EVA, 1, true), + new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, 100, 2, 7) //LGPE Implementation + .attr(CritOnlyAttr), new AttackMove(Moves.SPLISHY_SPLASH, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -8525,7 +8577,8 @@ export function initMoves() { new AttackMove(Moves.BODY_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(DefAtkAttr), new StatusMove(Moves.DECORATE, Type.FAIRY, -1, 15, -1, 0, 8) - .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2), + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2) + .ignoresProtect(), new AttackMove(Moves.DRUM_BEATING, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatChangeAttr, BattleStat.SPD, -1) .makesContact(false), @@ -8639,7 +8692,6 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.BURN), new StatusMove(Moves.JUNGLE_HEALING, Type.GRASS, -1, 10, -1, 0, 8) .attr(HealAttr, 0.25, true, false) - .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP) .attr(HealStatusEffectAttr, false, StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP) .target(MoveTarget.USER_AND_ALLIES), new AttackMove(Moves.WICKED_BLOW, Type.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) @@ -8743,8 +8795,7 @@ export function initMoves() { .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), new StatusMove(Moves.LUNAR_BLESSING, Type.PSYCHIC, -1, 5, -1, 0, 8) - .attr(HealAttr, 0.25) - .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP) + .attr(HealAttr, 0.25, true, false) .attr(HealStatusEffectAttr, false, StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP) .target(MoveTarget.USER_AND_ALLIES) .triageMove(), diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index f26451b802b..59ff4ed86ce 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -95,7 +95,7 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb duration: bouncePower * baseBounceDuration, ease: "Cubic.easeIn", onComplete: () => { - scene.playSound("pb_bounce_1", { volume: bouncePower }); + scene.playSound("se/pb_bounce_1", { volume: bouncePower }); bouncePower = bouncePower > 0.01 ? bouncePower * 0.5 : 0; diff --git a/src/data/pokemon-evolutions.ts b/src/data/pokemon-evolutions.ts index 0c91263f1f3..315e75e53e1 100644 --- a/src/data/pokemon-evolutions.ts +++ b/src/data/pokemon-evolutions.ts @@ -1582,7 +1582,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) ], [Species.PICHU]: [ - new SpeciesEvolution(Species.PIKACHU, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT) + new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), + new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT), ], [Species.CLEFFA]: [ new SpeciesEvolution(Species.CLEFAIRY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 9e8c7053334..93bd57ae32c 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -18800,6 +18800,85 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 44, Moves.THUNDER ], [ 48, Moves.PIKA_PAPOW ], ], + 8: [ + [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.GROWL ], + [ 1, Moves.THUNDER_SHOCK ], + [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.SWEET_KISS ], + [ 1, Moves.CHARM ], + [ 1, Moves.NASTY_PLOT ], + [ 1, Moves.PLAY_NICE ], + [ 1, Moves.NUZZLE ], + [ 4, Moves.THUNDER_WAVE ], + [ 8, Moves.DOUBLE_TEAM ], + [ 12, Moves.ELECTRO_BALL ], + [ 16, Moves.FEINT ], + [ 20, Moves.ZIPPY_ZAP ], //Custom + [ 24, Moves.AGILITY ], + [ 28, Moves.IRON_TAIL ], + [ 32, Moves.DISCHARGE ], + [ 34, Moves.FLOATY_FALL ], //Custom + [ 36, Moves.THUNDERBOLT ], + [ 40, Moves.LIGHT_SCREEN ], + [ 42, Moves.SPLISHY_SPLASH ], //Custom + [ 44, Moves.THUNDER ], + [ 48, Moves.PIKA_PAPOW ], + ], + }, + [Species.EEVEE]: { //Custom + 1: [ + [ 1, Moves.TACKLE ], + [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.GROWL ], + [ 1, Moves.HELPING_HAND ], + [ 1, Moves.COVET ], + [ 5, Moves.SAND_ATTACK ], + [ 10, Moves.QUICK_ATTACK ], + [ 15, Moves.BABY_DOLL_EYES ], + [ 18, Moves.BOUNCY_BUBBLE ], //Custom + [ 18, Moves.SIZZLY_SLIDE ], //Custom + [ 18, Moves.BUZZY_BUZZ ], //Custom + [ 20, Moves.SWIFT ], + [ 25, Moves.BITE ], + [ 30, Moves.COPYCAT ], + [ 33, Moves.BADDY_BAD ], //Custom + [ 33, Moves.GLITZY_GLOW ], //Custom + [ 35, Moves.BATON_PASS ], + [ 40, Moves.VEEVEE_VOLLEY ], //Custom, replaces Take Down + [ 43, Moves.FREEZY_FROST ], //Custom + [ 43, Moves.SAPPY_SEED ], //Custom + [ 45, Moves.CHARM ], + [ 50, Moves.DOUBLE_EDGE ], + [ 53, Moves.SPARKLY_SWIRL ], //Custom + [ 55, Moves.LAST_RESORT ], + ], + 2: [ + [ 1, Moves.TACKLE ], + [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.GROWL ], + [ 1, Moves.HELPING_HAND ], + [ 1, Moves.COVET ], + [ 5, Moves.SAND_ATTACK ], + [ 10, Moves.QUICK_ATTACK ], + [ 15, Moves.BABY_DOLL_EYES ], + [ 18, Moves.BOUNCY_BUBBLE ], //Custom + [ 18, Moves.SIZZLY_SLIDE ], //Custom + [ 18, Moves.BUZZY_BUZZ ], //Custom + [ 20, Moves.SWIFT ], + [ 25, Moves.BITE ], + [ 30, Moves.COPYCAT ], + [ 33, Moves.BADDY_BAD ], //Custom + [ 33, Moves.GLITZY_GLOW ], //Custom + [ 35, Moves.BATON_PASS ], + [ 40, Moves.VEEVEE_VOLLEY ], //Custom, replaces Take Down + [ 43, Moves.FREEZY_FROST ], //Custom + [ 43, Moves.SAPPY_SEED ], //Custom + [ 45, Moves.CHARM ], + [ 50, Moves.DOUBLE_EDGE ], + [ 53, Moves.SPARKLY_SWIRL ], //Custom + [ 55, Moves.LAST_RESORT ], + ], }, [Species.DEOXYS]: { 1: [ diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a9958c200ed..832f7112748 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1,24 +1,21 @@ - +import { Localizable } from "#app/interfaces/locales"; +import { Abilities } from "#enums/abilities"; +import { PartyMemberStrength } from "#enums/party-member-strength"; +import { Species } from "#enums/species"; +import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; +import i18next from "i18next"; import BattleScene, { AnySound } from "../battle-scene"; -import { Variant, variantColorCache } from "./variant"; -import { variantData } from "./variant"; +import { GameMode } from "../game-mode"; +import { StarterMoveset } from "../system/game-data"; +import * as Utils from "../utils"; +import { uncatchableSpecies } from "./biomes"; +import { speciesEggMoves } from "./egg-moves"; import { GrowthRate } from "./exp"; import { EvolutionLevel, SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from "./pokemon-evolutions"; import { Type } from "./type"; import { LevelMoves, pokemonFormLevelMoves, pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves } from "./pokemon-level-moves"; -import { uncatchableSpecies } from "./biomes"; -import * as Utils from "../utils"; -import { StarterMoveset } from "../system/game-data"; -import { speciesEggMoves } from "./egg-moves"; -import { GameMode } from "../game-mode"; -import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities"; -import { VariantSet } from "./variant"; -import i18next from "i18next"; -import { Localizable } from "#app/interfaces/locales"; import { Stat } from "./pokemon-stat"; -import { Abilities } from "#enums/abilities"; -import { PartyMemberStrength } from "#enums/party-member-strength"; -import { Species } from "#enums/species"; +import { Variant, VariantSet, variantColorCache, variantData } from "./variant"; export enum Region { NORMAL, @@ -28,7 +25,15 @@ export enum Region { PALDEA } -export function getPokemonSpecies(species: Species | Species[]): PokemonSpecies { +/** + * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode Species} enum given + * @param species The species to fetch + * @returns The associated {@linkcode PokemonSpecies} object + */ +export function getPokemonSpecies(species: Species | Species[] | undefined): PokemonSpecies { + if (!species) { + throw new Error("`species` must not be undefined in `getPokemonSpecies()`"); + } // If a special pool (named trainers) is used here it CAN happen that they have a array as species (which means choose one of those two). So we catch that with this code block if (Array.isArray(species)) { // Pick a random species from the list @@ -301,7 +306,7 @@ export abstract class PokemonSpeciesForm { let variantDataIndex: integer | string = this.speciesId; const species = getPokemonSpecies(this.speciesId); if (species.forms.length > 0 && formIndex !== undefined) { - formkey = species.forms[formIndex]?.formSpriteKey; + formkey = species.forms[formIndex]?.getFormSpriteKey(formIndex); if (formkey) { variantDataIndex = `${this.speciesId}-${formkey}`; } @@ -455,7 +460,7 @@ export abstract class PokemonSpeciesForm { return new Promise(resolve => { const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant); scene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant)); - scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`); + scene.load.audio(`cry/${this.getCryKey(formIndex)}`, `audio/cry/${this.getCryKey(formIndex)}.m4a`); scene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot @@ -511,7 +516,7 @@ export abstract class PokemonSpeciesForm { if (cry?.pendingRemove) { cry = null; } - cry = scene.playSound(cry || cryKey, soundConfig); + cry = scene.playSound(`cry/${(cry ?? cryKey)}`, soundConfig); if (ignorePlay) { cry.stop(); } @@ -648,8 +653,8 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.getSpeciesForLevel(level, allowEvolving, false, (isBoss ? PartyMemberStrength.WEAKER : PartyMemberStrength.AVERAGE) + (gameMode?.isEndless ? 1 : 0)); } - getTrainerSpeciesForLevel(level: integer, allowEvolving: boolean = false, strength: PartyMemberStrength): Species { - return this.getSpeciesForLevel(level, allowEvolving, true, strength); + getTrainerSpeciesForLevel(level: integer, allowEvolving: boolean = false, strength: PartyMemberStrength, currentWave: number = 0): Species { + return this.getSpeciesForLevel(level, allowEvolving, true, strength, currentWave); } private getStrengthLevelDiff(strength: PartyMemberStrength): integer { @@ -669,7 +674,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali } } - getSpeciesForLevel(level: integer, allowEvolving: boolean = false, forTrainer: boolean = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER): Species { + getSpeciesForLevel(level: integer, allowEvolving: boolean = false, forTrainer: boolean = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER, currentWave: number = 0): Species { const prevolutionLevels = this.getPrevolutionLevels(); if (prevolutionLevels.length) { @@ -730,6 +735,11 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali evolutionChance = Math.min(0.65 * easeInFunc(Math.min(Math.max(level - evolutionLevel, 0), preferredMinLevel) / preferredMinLevel) + 0.35 * easeOutFunc(Math.min(Math.max(level - evolutionLevel, 0), preferredMinLevel * 2.5) / (preferredMinLevel * 2.5)), 1); } } + /* (Most) Trainers shouldn't be using unevolved Pokemon by the third gym leader / wave 80. Exceptions to this include Breeders, whose large teams are balanced by the use of weaker pokemon */ + if (currentWave >= 80 && forTrainer && strength > PartyMemberStrength.WEAKER) { + evolutionChance = 1; + noEvolutionChance = 0; + } if (evolutionChance > 0) { if (isRegionalEvolution) { @@ -754,7 +764,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali for (const weight of evolutionPool.keys()) { if (randValue < weight) { - return getPokemonSpecies(evolutionPool.get(weight)!).getSpeciesForLevel(level, true, forTrainer, strength); // TODO: is the bang correct? + return getPokemonSpecies(evolutionPool.get(weight)).getSpeciesForLevel(level, true, forTrainer, strength, currentWave); } } @@ -913,7 +923,7 @@ export function initSpecies() { new PokemonSpecies(Species.VENUSAUR, 1, false, false, false, "Seed Pokémon", Type.GRASS, Type.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, new PokemonForm("Normal", "", Type.GRASS, Type.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.GRASS, Type.POISON, 2.4, 155.5, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.POISON, 24, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 625, 100, 90, 120, 110, 130, 75, 45, 50, 263, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.POISON, 24, 100, Abilities.CHLOROPHYLL, Abilities.CHLOROPHYLL, Abilities.CHLOROPHYLL, 625, 120, 82, 98, 130, 115, 80, 45, 50, 263, true), ), new PokemonSpecies(Species.CHARMANDER, 1, false, false, false, "Lizard Pokémon", Type.FIRE, null, 0.6, 8.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CHARMELEON, 1, false, false, false, "Flame Pokémon", Type.FIRE, null, 1.1, 19, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -921,20 +931,20 @@ export function initSpecies() { new PokemonForm("Normal", "", Type.FIRE, Type.FLYING, 1.7, 90.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, Type.FIRE, Type.DRAGON, 1.7, 110.5, Abilities.TOUGH_CLAWS, Abilities.NONE, Abilities.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, Type.FIRE, Type.FLYING, 1.7, 100.5, Abilities.DROUGHT, Abilities.NONE, Abilities.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, Type.FLYING, 28, 90.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 634, 98, 100, 96, 135, 110, 95, 45, 50, 267), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, Type.FLYING, 28, 90.5, Abilities.SOLAR_POWER, Abilities.SOLAR_POWER, Abilities.SOLAR_POWER, 634, 118, 84, 93, 139, 110, 100, 45, 50, 267), ), new PokemonSpecies(Species.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", Type.WATER, null, 0.5, 9, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.WARTORTLE, 1, false, false, false, "Turtle Pokémon", Type.WATER, null, 1, 22.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", Type.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.WATER, null, 1.6, 101.1, Abilities.MEGA_LAUNCHER, Abilities.NONE, Abilities.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 25, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 630, 100, 95, 130, 105, 125, 75, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.STEEL, 25, 85.5, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, 630, 119, 83, 130, 115, 115, 68, 45, 50, 265), ), new PokemonSpecies(Species.CATERPIE, 1, false, false, false, "Worm Pokémon", Type.BUG, null, 0.3, 2.9, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.METAPOD, 1, false, false, false, "Cocoon Pokémon", Type.BUG, null, 0.7, 9.9, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", Type.BUG, Type.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, new PokemonForm("Normal", "", Type.BUG, Type.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.BUG, Type.FLYING, 17, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 495, 75, 50, 75, 120, 100, 75, 45, 50, 198, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.BUG, Type.FLYING, 17, 32, Abilities.TINTED_LENS, Abilities.TINTED_LENS, Abilities.TINTED_LENS, 495, 85, 35, 80, 120, 90, 85, 45, 50, 198, true), ), new PokemonSpecies(Species.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", Type.BUG, Type.POISON, 0.3, 3.2, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KAKUNA, 1, false, false, false, "Cocoon Pokémon", Type.BUG, Type.POISON, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), @@ -963,7 +973,7 @@ export function initSpecies() { new PokemonForm("Cute Cosplay", "cute-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom new PokemonForm("Smart Cosplay", "smart-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom new PokemonForm("Tough Cosplay", "tough-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, null, 21, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 420, 45, 60, 65, 100, 75, 75, 190, 50, 112), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, null, 21, 6, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112), //+100 BST from Partner Form ), new PokemonSpecies(Species.RAICHU, 1, false, false, false, "Mouse Pokémon", Type.ELECTRIC, null, 0.8, 30, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.SANDSHREW, 1, false, false, false, "Mouse Pokémon", Type.GROUND, null, 0.6, 12, Abilities.SAND_VEIL, Abilities.NONE, Abilities.SAND_RUSH, 300, 50, 75, 85, 20, 30, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), @@ -993,7 +1003,7 @@ export function initSpecies() { new PokemonSpecies(Species.DUGTRIO, 1, false, false, false, "Mole Pokémon", Type.GROUND, null, 0.7, 33.3, Abilities.SAND_VEIL, Abilities.ARENA_TRAP, Abilities.SAND_FORCE, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.MEOWTH, 1, false, false, false, "Scratch Cat Pokémon", Type.NORMAL, null, 0.4, 4.2, Abilities.PICKUP, Abilities.TECHNICIAN, Abilities.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.NORMAL, null, 0.4, 4.2, Abilities.PICKUP, Abilities.TECHNICIAN, Abilities.UNNERVE, 290, 40, 45, 35, 40, 40, 90, 255, 50, 58, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 33, 4.2, Abilities.PICKUP, Abilities.TECHNICIAN, Abilities.UNNERVE, 390, 50, 85, 60, 70, 50, 75, 255, 50, 58), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 33, 4.2, Abilities.TECHNICIAN, Abilities.TECHNICIAN, Abilities.TECHNICIAN, 540, 115, 110, 65, 65, 70, 115, 255, 50, 58), //+100 BST from Persian ), new PokemonSpecies(Species.PERSIAN, 1, false, false, false, "Classy Cat Pokémon", Type.NORMAL, null, 1, 32, Abilities.LIMBER, Abilities.TECHNICIAN, Abilities.UNNERVE, 440, 65, 70, 60, 65, 65, 115, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.PSYDUCK, 1, false, false, false, "Duck Pokémon", Type.WATER, null, 0.8, 19.6, Abilities.DAMP, Abilities.CLOUD_NINE, Abilities.SWIFT_SWIM, 320, 50, 52, 48, 65, 50, 55, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), @@ -1015,7 +1025,7 @@ export function initSpecies() { new PokemonSpecies(Species.MACHOKE, 1, false, false, false, "Superpower Pokémon", Type.FIGHTING, null, 1.5, 70.5, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 405, 80, 100, 70, 50, 60, 45, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), new PokemonSpecies(Species.MACHAMP, 1, false, false, false, "Superpower Pokémon", Type.FIGHTING, null, 1.6, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false, true, new PokemonForm("Normal", "", Type.FIGHTING, null, 1.6, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIGHTING, null, 25, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 605, 113, 170, 90, 70, 95, 67, 45, 50, 253), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIGHTING, null, 25, 130, Abilities.GUTS, Abilities.GUTS, Abilities.GUTS, 605, 115, 170, 95, 65, 95, 65, 45, 50, 253), ), new PokemonSpecies(Species.BELLSPROUT, 1, false, false, false, "Flower Pokémon", Type.GRASS, Type.POISON, 0.7, 4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", Type.GRASS, Type.POISON, 1, 6.4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), @@ -1048,7 +1058,7 @@ export function initSpecies() { new PokemonSpecies(Species.GENGAR, 1, false, false, false, "Shadow Pokémon", Type.GHOST, Type.POISON, 1.5, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Normal", "", Type.GHOST, Type.POISON, 1.5, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, false, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.GHOST, Type.POISON, 1.4, 40.5, Abilities.SHADOW_TAG, Abilities.NONE, Abilities.NONE, 600, 60, 65, 80, 170, 95, 130, 45, 50, 250), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GHOST, Type.POISON, 20, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 600, 75, 95, 85, 160, 95, 90, 45, 50, 250), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GHOST, Type.POISON, 20, 40.5, Abilities.CURSED_BODY, Abilities.CURSED_BODY, Abilities.CURSED_BODY, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250), ), new PokemonSpecies(Species.ONIX, 1, false, false, false, "Rock Snake Pokémon", Type.ROCK, Type.GROUND, 8.8, 210, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.WEAK_ARMOR, 385, 35, 45, 160, 30, 45, 70, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DROWZEE, 1, false, false, false, "Hypnosis Pokémon", Type.PSYCHIC, null, 1, 32.4, Abilities.INSOMNIA, Abilities.FOREWARN, Abilities.INNER_FOCUS, 328, 60, 48, 45, 43, 90, 42, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), @@ -1056,7 +1066,7 @@ export function initSpecies() { new PokemonSpecies(Species.KRABBY, 1, false, false, false, "River Crab Pokémon", Type.WATER, null, 0.4, 6.5, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KINGLER, 1, false, false, false, "Pincer Pokémon", Type.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 19, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 575, 70, 165, 145, 60, 70, 65, 60, 50, 166), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 19, 60, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 575, 90, 155, 140, 50, 80, 70, 60, 50, 166), ), new PokemonSpecies(Species.VOLTORB, 1, false, false, false, "Ball Pokémon", Type.ELECTRIC, null, 0.5, 10.4, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.ELECTRODE, 1, false, false, false, "Ball Pokémon", Type.ELECTRIC, null, 1.2, 66.6, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), @@ -1100,13 +1110,13 @@ export function initSpecies() { ), new PokemonSpecies(Species.LAPRAS, 1, false, false, false, "Transport Pokémon", Type.WATER, Type.ICE, 2.5, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, GrowthRate.SLOW, 50, false, true, new PokemonForm("Normal", "", Type.WATER, Type.ICE, 2.5, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.ICE, 24, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 635, 160, 95, 110, 95, 125, 50, 45, 50, 187), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.ICE, 24, 220, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, 635, 170, 85, 95, 115, 110, 60, 45, 50, 187), ), new PokemonSpecies(Species.DITTO, 1, false, false, false, "Transform Pokémon", Type.NORMAL, null, 0.3, 4, Abilities.LIMBER, Abilities.NONE, Abilities.IMPOSTER, 288, 48, 48, 48, 48, 48, 48, 35, 50, 101, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.EEVEE, 1, false, false, false, "Evolution Pokémon", Type.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, GrowthRate.MEDIUM_FAST, 87.5, false, true, new PokemonForm("Normal", "", Type.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, false, null, true), new PokemonForm("Partner", "partner", Type.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 435, 65, 75, 70, 65, 85, 75, 45, 50, 65, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 18, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 425, 70, 75, 80, 60, 95, 45, 45, 50, 65), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 18, 6.5, Abilities.PROTEAN, Abilities.PROTEAN, Abilities.PROTEAN, 535, 105, 95, 70, 95, 85, 85, 45, 50, 65), //+100 BST from Partner Form ), new PokemonSpecies(Species.VAPOREON, 1, false, false, false, "Bubble Jet Pokémon", Type.WATER, null, 1, 29, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.HYDRATION, 525, 130, 65, 60, 110, 95, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), new PokemonSpecies(Species.JOLTEON, 1, false, false, false, "Lightning Pokémon", Type.ELECTRIC, null, 0.8, 24.5, Abilities.VOLT_ABSORB, Abilities.NONE, Abilities.QUICK_FEET, 525, 65, 65, 60, 110, 95, 130, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), @@ -1122,7 +1132,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.SNORLAX, 1, false, false, false, "Sleeping Pokémon", Type.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 35, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 640, 200, 130, 85, 75, 130, 20, 25, 50, 189), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, Type.GRASS, 35, 460, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 640, 200, 135, 85, 80, 125, 15, 25, 50, 189), ), new PokemonSpecies(Species.ARTICUNO, 1, true, false, false, "Freeze Pokémon", Type.ICE, Type.FLYING, 1.7, 55.4, Abilities.PRESSURE, Abilities.NONE, Abilities.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ZAPDOS, 1, true, false, false, "Electric Pokémon", Type.ELECTRIC, Type.FLYING, 1.6, 52.6, Abilities.PRESSURE, Abilities.NONE, Abilities.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), @@ -1762,7 +1772,7 @@ export function initSpecies() { new PokemonSpecies(Species.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", Type.POISON, null, 0.6, 31, Abilities.STENCH, Abilities.STICKY_HOLD, Abilities.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", Type.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.POISON, null, 21, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 574, 100, 125, 102, 80, 102, 65, 60, 50, 166), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.POISON, Type.STEEL, 21, 107.3, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, 574, 135, 125, 102, 57, 102, 53, 60, 50, 166), ), new PokemonSpecies(Species.ZORUA, 5, false, false, false, "Tricky Fox Pokémon", Type.DARK, null, 0.7, 12.5, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 330, 40, 65, 40, 80, 40, 65, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.ZOROARK, 5, false, false, false, "Illusion Fox Pokémon", Type.DARK, null, 1.6, 81.1, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 510, 60, 105, 60, 120, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -2236,25 +2246,25 @@ export function initSpecies() { new PokemonSpecies(Species.MELTAN, 7, false, false, true, "Hex Nut Pokémon", Type.STEEL, null, 0.2, 8, Abilities.MAGNET_PULL, Abilities.NONE, Abilities.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", Type.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, null, 25, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 700, 170, 165, 165, 95, 75, 30, 3, 0, 300), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, null, 25, 800, Abilities.IRON_FIST, Abilities.IRON_FIST, Abilities.IRON_FIST, 700, 175, 165, 155, 85, 75, 45, 3, 0, 300), ), new PokemonSpecies(Species.GROOKEY, 8, false, false, false, "Chimp Pokémon", Type.GRASS, null, 0.3, 5, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.THWACKEY, 8, false, false, false, "Beat Pokémon", Type.GRASS, null, 0.7, 14, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RILLABOOM, 8, false, false, false, "Drummer Pokémon", Type.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, null, 28, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 630, 125, 150, 115, 75, 90, 75, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, null, 28, 90, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, 630, 125, 150, 115, 65, 95, 80, 45, 50, 265), ), new PokemonSpecies(Species.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", Type.FIRE, null, 0.3, 4.5, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RABOOT, 8, false, false, false, "Rabbit Pokémon", Type.FIRE, null, 0.6, 9, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CINDERACE, 8, false, false, false, "Striker Pokémon", Type.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, null, 27, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 630, 100, 145, 90, 75, 90, 130, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, null, 27, 33, Abilities.LIBERO, Abilities.LIBERO, Abilities.LIBERO, 630, 90, 151, 85, 85, 85, 134, 45, 50, 265), ), new PokemonSpecies(Species.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", Type.WATER, null, 0.3, 4, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", Type.WATER, null, 0.7, 11.5, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.INTELEON, 8, false, false, false, "Secret Agent Pokémon", Type.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 40, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 630, 90, 100, 90, 150, 90, 110, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 40, 45.2, Abilities.SNIPER, Abilities.SNIPER, Abilities.SNIPER, 630, 90, 90, 85, 150, 85, 130, 45, 50, 265), ), new PokemonSpecies(Species.SKWOVET, 8, false, false, false, "Cheeky Pokémon", Type.NORMAL, null, 0.3, 2.5, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GREEDENT, 8, false, false, false, "Greedy Pokémon", Type.NORMAL, null, 0.6, 6, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), @@ -2262,13 +2272,13 @@ export function initSpecies() { new PokemonSpecies(Species.CORVISQUIRE, 8, false, false, false, "Raven Pokémon", Type.FLYING, null, 0.8, 16, Abilities.KEEN_EYE, Abilities.UNNERVE, Abilities.BIG_PECKS, 365, 68, 67, 55, 43, 55, 77, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.CORVIKNIGHT, 8, false, false, false, "Raven Pokémon", Type.FLYING, Type.STEEL, 2.2, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Normal", "", Type.FLYING, Type.STEEL, 2.2, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FLYING, Type.STEEL, 14, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 595, 125, 100, 135, 60, 95, 80, 45, 50, 248), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FLYING, Type.STEEL, 14, 75, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, 595, 128, 102, 140, 53, 95, 77, 45, 50, 248), ), new PokemonSpecies(Species.BLIPBUG, 8, false, false, false, "Larva Pokémon", Type.BUG, null, 0.4, 8, Abilities.SWARM, Abilities.COMPOUND_EYES, Abilities.TELEPATHY, 180, 25, 20, 20, 25, 45, 45, 255, 50, 36, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DOTTLER, 8, false, false, false, "Radome Pokémon", Type.BUG, Type.PSYCHIC, 0.4, 19.5, Abilities.SWARM, Abilities.COMPOUND_EYES, Abilities.TELEPATHY, 335, 50, 35, 80, 50, 90, 30, 120, 50, 117, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.ORBEETLE, 8, false, false, false, "Seven Spot Pokémon", Type.BUG, Type.PSYCHIC, 0.4, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.BUG, Type.PSYCHIC, 0.4, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.BUG, Type.PSYCHIC, 14, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 605, 75, 50, 140, 90, 150, 100, 45, 50, 253), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.BUG, Type.PSYCHIC, 14, 40.8, Abilities.TRACE, Abilities.TRACE, Abilities.TRACE, 605, 90, 45, 130, 110, 140, 90, 45, 50, 253), ), new PokemonSpecies(Species.NICKIT, 8, false, false, false, "Fox Pokémon", Type.DARK, null, 0.6, 8.9, Abilities.RUN_AWAY, Abilities.UNBURDEN, Abilities.STAKEOUT, 245, 40, 28, 28, 47, 52, 50, 255, 50, 49, GrowthRate.FAST, 50, false), new PokemonSpecies(Species.THIEVUL, 8, false, false, false, "Fox Pokémon", Type.DARK, null, 1.2, 19.9, Abilities.RUN_AWAY, Abilities.UNBURDEN, Abilities.STAKEOUT, 455, 70, 58, 58, 87, 92, 90, 127, 50, 159, GrowthRate.FAST, 50, false), @@ -2279,7 +2289,7 @@ export function initSpecies() { new PokemonSpecies(Species.CHEWTLE, 8, false, false, false, "Snapping Pokémon", Type.WATER, null, 0.3, 8.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 284, 50, 64, 50, 38, 38, 44, 255, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DREDNAW, 8, false, false, false, "Bite Pokémon", Type.WATER, Type.ROCK, 1, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.WATER, Type.ROCK, 1, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.ROCK, 24, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 585, 115, 150, 110, 55, 85, 70, 75, 50, 170), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.ROCK, 24, 115.5, Abilities.STRONG_JAW, Abilities.STRONG_JAW, Abilities.STRONG_JAW, 585, 115, 145, 115, 43, 83, 84, 75, 50, 170), ), new PokemonSpecies(Species.YAMPER, 8, false, false, false, "Puppy Pokémon", Type.ELECTRIC, null, 0.3, 13.5, Abilities.BALL_FETCH, Abilities.NONE, Abilities.RATTLED, 270, 59, 45, 50, 40, 50, 26, 255, 50, 54, GrowthRate.FAST, 50, false), new PokemonSpecies(Species.BOLTUND, 8, false, false, false, "Dog Pokémon", Type.ELECTRIC, null, 1, 34, Abilities.STRONG_JAW, Abilities.NONE, Abilities.COMPETITIVE, 490, 69, 90, 60, 90, 60, 121, 45, 50, 172, GrowthRate.FAST, 50, false), @@ -2287,21 +2297,21 @@ export function initSpecies() { new PokemonSpecies(Species.CARKOL, 8, false, false, false, "Coal Pokémon", Type.ROCK, Type.FIRE, 1.1, 78, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 410, 80, 60, 90, 60, 70, 50, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.COALOSSAL, 8, false, false, false, "Coal Pokémon", Type.ROCK, Type.FIRE, 2.8, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Normal", "", Type.ROCK, Type.FIRE, 2.8, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ROCK, Type.FIRE, 42, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 610, 140, 95, 150, 95, 105, 25, 45, 50, 255), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ROCK, Type.FIRE, 42, 310.5, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, 610, 140, 95, 130, 95, 110, 40, 45, 50, 255), ), new PokemonSpecies(Species.APPLIN, 8, false, false, false, "Apple Core Pokémon", Type.GRASS, Type.DRAGON, 0.2, 0.5, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.BULLETPROOF, 260, 40, 40, 80, 40, 40, 20, 255, 50, 52, GrowthRate.ERRATIC, 50, false), new PokemonSpecies(Species.FLAPPLE, 8, false, false, false, "Apple Wing Pokémon", Type.GRASS, Type.DRAGON, 0.3, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, new PokemonForm("Normal", "", Type.GRASS, Type.DRAGON, 0.3, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.DRAGON, 24, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 585, 90, 140, 90, 120, 75, 70, 45, 50, 170), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.DRAGON, 24, 1, Abilities.HUSTLE, Abilities.HUSTLE, Abilities.HUSTLE, 585, 90, 130, 100, 85, 80, 100, 45, 50, 170), ), new PokemonSpecies(Species.APPLETUN, 8, false, false, false, "Apple Nectar Pokémon", Type.GRASS, Type.DRAGON, 0.4, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, new PokemonForm("Normal", "", Type.GRASS, Type.DRAGON, 0.4, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.DRAGON, 24, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 585, 140, 95, 95, 135, 95, 25, 45, 50, 170), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.DRAGON, 24, 13, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 585, 130, 75, 115, 125, 115, 25, 45, 50, 170), ), new PokemonSpecies(Species.SILICOBRA, 8, false, false, false, "Sand Snake Pokémon", Type.GROUND, null, 2.2, 7.6, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 315, 52, 57, 75, 35, 50, 46, 255, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.SANDACONDA, 8, false, false, false, "Sand Snake Pokémon", Type.GROUND, null, 3.8, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.GROUND, null, 3.8, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GROUND, null, 22, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 610, 90, 135, 150, 75, 80, 80, 120, 50, 179), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GROUND, null, 22, 65.5, Abilities.SAND_SPIT, Abilities.SAND_SPIT, Abilities.SAND_SPIT, 610, 117, 137, 140, 55, 80, 81, 120, 50, 179), ), new PokemonSpecies(Species.CRAMORANT, 8, false, false, false, "Gulp Pokémon", Type.FLYING, Type.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, new PokemonForm("Normal", "", Type.FLYING, Type.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, false, null, true), @@ -2314,12 +2324,12 @@ export function initSpecies() { new PokemonSpecies(Species.TOXTRICITY, 8, false, false, false, "Punk Pokémon", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Amped Form", "amped", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), new PokemonForm("Low-Key Form", "lowkey", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, Type.POISON, 24, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 602, 95, 118, 80, 144, 80, 85, 45, 50, 176), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, Type.POISON, 24, 40, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, 602, 114, 98, 82, 144, 82, 82, 45, 50, 176), ), new PokemonSpecies(Species.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", Type.FIRE, Type.BUG, 0.7, 1, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.CENTISKORCH, 8, false, false, false, "Radiator Pokémon", Type.FIRE, Type.BUG, 3, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.FIRE, Type.BUG, 3, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, Type.BUG, 75, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 625, 125, 145, 75, 105, 105, 70, 75, 50, 184), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, Type.BUG, 75, 120, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, 625, 140, 145, 75, 90, 100, 75, 75, 50, 184), ), new PokemonSpecies(Species.CLOBBOPUS, 8, false, false, false, "Tantrum Pokémon", Type.FIGHTING, null, 0.6, 4, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 310, 50, 68, 60, 50, 50, 32, 180, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", Type.FIGHTING, null, 1.6, 39, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), @@ -2335,13 +2345,13 @@ export function initSpecies() { new PokemonSpecies(Species.HATTREM, 8, false, false, false, "Serene Pokémon", Type.PSYCHIC, null, 0.6, 4.8, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), new PokemonSpecies(Species.HATTERENE, 8, false, false, false, "Silent Pokémon", Type.PSYCHIC, Type.FAIRY, 2.1, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, GrowthRate.SLOW, 0, false, true, new PokemonForm("Normal", "", Type.PSYCHIC, Type.FAIRY, 2.1, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.PSYCHIC, Type.FAIRY, 26, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 610, 70, 105, 110, 160, 125, 40, 45, 50, 255), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.PSYCHIC, Type.FAIRY, 26, 5.1, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, 610, 97, 90, 105, 146, 122, 50, 45, 50, 255), ), new PokemonSpecies(Species.IMPIDIMP, 8, false, false, false, "Wily Pokémon", Type.DARK, Type.FAIRY, 0.4, 5.5, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 265, 45, 45, 30, 55, 40, 50, 255, 50, 53, GrowthRate.MEDIUM_FAST, 100, false), new PokemonSpecies(Species.MORGREM, 8, false, false, false, "Devious Pokémon", Type.DARK, Type.FAIRY, 0.8, 12.5, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 370, 65, 60, 45, 75, 55, 70, 120, 50, 130, GrowthRate.MEDIUM_FAST, 100, false), new PokemonSpecies(Species.GRIMMSNARL, 8, false, false, false, "Bulk Up Pokémon", Type.DARK, Type.FAIRY, 1.5, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, GrowthRate.MEDIUM_FAST, 100, false, true, new PokemonForm("Normal", "", Type.DARK, Type.FAIRY, 1.5, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.DARK, Type.FAIRY, 32, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 610, 120, 155, 75, 110, 85, 65, 45, 50, 255), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.DARK, Type.FAIRY, 32, 61, Abilities.PRANKSTER, Abilities.PRANKSTER, Abilities.PRANKSTER, 610, 135, 138, 77, 110, 85, 65, 45, 50, 255), ), new PokemonSpecies(Species.OBSTAGOON, 8, false, false, false, "Blocking Pokémon", Type.DARK, Type.NORMAL, 1.6, 46, Abilities.RECKLESS, Abilities.GUTS, Abilities.DEFIANT, 520, 93, 90, 101, 60, 81, 95, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.PERRSERKER, 8, false, false, false, "Viking Pokémon", Type.STEEL, null, 0.8, 28, Abilities.BATTLE_ARMOR, Abilities.TOUGH_CLAWS, Abilities.STEELY_SPIRIT, 440, 70, 110, 100, 50, 60, 50, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), @@ -2360,7 +2370,7 @@ export function initSpecies() { new PokemonForm("Ruby Swirl", "ruby-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 595, 85, 70, 85, 140, 150, 65, 100, 50, 173), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 0.5, Abilities.MISTY_SURGE, Abilities.MISTY_SURGE, Abilities.MISTY_SURGE, 595, 135, 60, 75, 130, 131, 64, 100, 50, 173), ), new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", Type.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", Type.ELECTRIC, null, 0.3, 1, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), @@ -2382,7 +2392,7 @@ export function initSpecies() { new PokemonSpecies(Species.CUFANT, 8, false, false, false, "Copperderm Pokémon", Type.STEEL, null, 1.2, 100, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", Type.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, null, 23, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 600, 150, 160, 80, 90, 80, 40, 90, 50, 175), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, Type.GROUND, 23, 650, Abilities.MOLD_BREAKER, Abilities.MOLD_BREAKER, Abilities.MOLD_BREAKER, 600, 167, 155, 89, 80, 89, 20, 90, 50, 175), ), new PokemonSpecies(Species.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", Type.ELECTRIC, Type.DRAGON, 1.8, 190, Abilities.VOLT_ABSORB, Abilities.HUSTLE, Abilities.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", Type.ELECTRIC, Type.ICE, 2.3, 150, Abilities.VOLT_ABSORB, Abilities.STATIC, Abilities.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), @@ -2390,7 +2400,7 @@ export function initSpecies() { new PokemonSpecies(Species.ARCTOVISH, 8, false, false, false, "Fossil Pokémon", Type.WATER, Type.ICE, 2, 175, Abilities.WATER_ABSORB, Abilities.ICE_BODY, Abilities.SLUSH_RUSH, 505, 90, 90, 100, 80, 90, 55, 45, 50, 177, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.DURALUDON, 8, false, false, false, "Alloy Pokémon", Type.STEEL, Type.DRAGON, 1.8, 40, Abilities.LIGHT_METAL, Abilities.HEAVY_METAL, Abilities.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.STEEL, Type.DRAGON, 1.8, 40, Abilities.LIGHT_METAL, Abilities.HEAVY_METAL, Abilities.STALWART, 535, 70, 95, 115, 120, 50, 85, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, Type.DRAGON, 43, 40, Abilities.LIGHT_METAL, Abilities.HEAVY_METAL, Abilities.STALWART, 635, 90, 110, 145, 140, 60, 90, 45, 50, 187), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, Type.DRAGON, 43, 40, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, 635, 100, 105, 119, 166, 57, 88, 45, 50, 187), ), new PokemonSpecies(Species.DREEPY, 8, false, false, false, "Lingering Pokémon", Type.DRAGON, Type.GHOST, 0.5, 2, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 270, 28, 60, 30, 40, 30, 82, 45, 50, 54, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.DRAKLOAK, 8, false, false, false, "Caretaker Pokémon", Type.DRAGON, Type.GHOST, 1.4, 11, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 410, 68, 80, 50, 60, 50, 102, 45, 50, 144, GrowthRate.SLOW, 50, false), @@ -2411,8 +2421,8 @@ export function initSpecies() { new PokemonSpecies(Species.URSHIFU, 8, true, false, false, "Wushu Pokémon", Type.FIGHTING, Type.DARK, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true, new PokemonForm("Single Strike Style", "single-strike", Type.FIGHTING, Type.DARK, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, "", true), new PokemonForm("Rapid Strike Style", "rapid-strike", Type.FIGHTING, Type.WATER, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, null, true), - new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, Type.FIGHTING, Type.DARK, 29, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 160, 120, 75, 70, 100, 3, 50, 275), - new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, Type.FIGHTING, Type.WATER, 26, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 160, 120, 75, 70, 100, 3, 50, 275), + new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, Type.FIGHTING, Type.DARK, 29, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 150, 115, 73, 70, 117, 3, 50, 275), + new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, Type.FIGHTING, Type.WATER, 26, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 150, 115, 73, 70, 117, 3, 50, 275), ), new PokemonSpecies(Species.ZARUDE, 8, false, false, true, "Rogue Monkey Pokémon", Type.DARK, Type.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonForm("Normal", "", Type.DARK, Type.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), @@ -3622,7 +3632,7 @@ export const starterPassiveAbilities = { [Species.YAMASK]: Abilities.PURIFYING_SALT, [Species.TIRTOUGA]: Abilities.WATER_ABSORB, [Species.ARCHEN]: Abilities.MULTISCALE, - [Species.TRUBBISH]: Abilities.TOXIC_DEBRIS, + [Species.TRUBBISH]: Abilities.NEUTRALIZING_GAS, [Species.ZORUA]: Abilities.DARK_AURA, [Species.MINCCINO]: Abilities.FUR_COAT, [Species.GOTHITA]: Abilities.UNNERVE, @@ -3783,7 +3793,7 @@ export const starterPassiveAbilities = { [Species.SINISTEA]: Abilities.SHADOW_SHIELD, [Species.HATENNA]: Abilities.FAIRY_AURA, [Species.IMPIDIMP]: Abilities.FUR_COAT, - [Species.MILCERY]: Abilities.MISTY_SURGE, + [Species.MILCERY]: Abilities.REGENERATOR, [Species.FALINKS]: Abilities.PARENTAL_BOND, [Species.PINCURCHIN]: Abilities.ELECTROMORPHOSIS, [Species.SNOM]: Abilities.SNOW_WARNING, diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 5f47ce42a62..d48e384d30e 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -1,1865 +1,2037 @@ -import BattleScene, {startingWave} from "../battle-scene"; -import {ModifierTypeFunc, modifierTypes} from "../modifier/modifier-type"; -import {EnemyPokemon} from "../field/pokemon"; -import * as Utils from "../utils"; -import {PokeballType} from "./pokeball"; -import {pokemonEvolutions, pokemonPrevolutions} from "./pokemon-evolutions"; -import PokemonSpecies, {getPokemonSpecies, PokemonSpeciesFilter} from "./pokemon-species"; -import {tmSpecies} from "./tms"; -import {Type} from "./type"; -import {doubleBattleDialogue} from "./dialogue"; -import {PersistentModifier} from "../modifier/modifier"; -import {TrainerVariant} from "../field/trainer"; -import {getIsInitialized, initI18n} from "#app/plugins/i18n"; -import i18next from "i18next"; -import {Moves} from "#enums/moves"; -import {PartyMemberStrength} from "#enums/party-member-strength"; -import {Species} from "#enums/species"; -import {TrainerType} from "#enums/trainer-type"; - -export enum TrainerPoolTier { - COMMON, - UNCOMMON, - RARE, - SUPER_RARE, - ULTRA_RARE -} - -export interface TrainerTierPools { - [key: integer]: Species[] -} - -export enum TrainerSlot { - NONE, - TRAINER, - TRAINER_PARTNER -} - -export class TrainerPartyTemplate { - public size: integer; - public strength: PartyMemberStrength; - public sameSpecies: boolean; - public balanced: boolean; - - constructor(size: integer, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { - this.size = size; - this.strength = strength; - this.sameSpecies = !!sameSpecies; - this.balanced = !!balanced; - } - - getStrength(index: integer): PartyMemberStrength { - return this.strength; - } - - isSameSpecies(index: integer): boolean { - return this.sameSpecies; - } - - isBalanced(index: integer): boolean { - return this.balanced; - } -} - -export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { - public templates: TrainerPartyTemplate[]; - - constructor(...templates: TrainerPartyTemplate[]) { - super(templates.reduce((total: integer, template: TrainerPartyTemplate) => { - total += template.size; - return total; - }, 0), PartyMemberStrength.AVERAGE); - this.templates = templates; - } - - getStrength(index: integer): PartyMemberStrength { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.getStrength(index - t); - } - t += template.size; - } - - return super.getStrength(index); - } - - isSameSpecies(index: integer): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isSameSpecies(index - t); - } - t += template.size; - } - - return super.isSameSpecies(index); - } - - isBalanced(index: integer): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isBalanced(index - t); - } - t += template.size; - } - - return super.isBalanced(index); - } -} - -export const trainerPartyTemplates = { - ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), - TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true)), - TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true)), - TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), - THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), - THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), - THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), - THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), - FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), - FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), - FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), - FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), - FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), - FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), - FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), - FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), - SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), - SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), - SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), - SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), - - GYM_LEADER_1: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - GYM_LEADER_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - GYM_LEADER_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - GYM_LEADER_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - GYM_LEADER_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - - ELITE_FOUR: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - - CHAMPION: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), new TrainerPartyTemplate(5, PartyMemberStrength.STRONG, false, true)), - - RIVAL: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - RIVAL_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), - RIVAL_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), - RIVAL_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), - RIVAL_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - RIVAL_6: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)) -}; - -type PartyTemplateFunc = (scene: BattleScene) => TrainerPartyTemplate; -type PartyMemberFunc = (scene: BattleScene, level: integer, strength: PartyMemberStrength) => EnemyPokemon; -type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; - -export interface PartyMemberFuncs { - [key: integer]: PartyMemberFunc -} - -export class TrainerConfig { - public trainerType: TrainerType; - public trainerTypeDouble: TrainerType; - public name: string; - public nameFemale: string; - public nameDouble: string; - public title: string; - public titleDouble: string; - public hasGenders: boolean = false; - public hasDouble: boolean = false; - public hasCharSprite: boolean = false; - public doubleOnly: boolean = false; - public moneyMultiplier: number = 1; - public isBoss: boolean = false; - public hasStaticParty: boolean = false; - public useSameSeedForAllMembers: boolean = false; - public mixedBattleBgm: string; - public battleBgm: string; - public encounterBgm: string; - public femaleEncounterBgm: string; - public doubleEncounterBgm: string; - public victoryBgm: string; - public genModifiersFunc: GenModifiersFunc; - public modifierRewardFuncs: ModifierTypeFunc[] = []; - public partyTemplates: TrainerPartyTemplate[]; - public partyTemplateFunc: PartyTemplateFunc; - public partyMemberFuncs: PartyMemberFuncs = {}; - public speciesPools: TrainerTierPools; - public speciesFilter: PokemonSpeciesFilter; - public specialtyTypes: Type[] = []; - public hasVoucher: boolean = false; - - public encounterMessages: string[] = []; - public victoryMessages: string[] = []; - public defeatMessages: string[] = []; - - public femaleEncounterMessages: string[]; - public femaleVictoryMessages: string[]; - public femaleDefeatMessages: string[]; - - public doubleEncounterMessages: string[]; - public doubleVictoryMessages: string[]; - public doubleDefeatMessages: string[]; - - constructor(trainerType: TrainerType, allowLegendaries?: boolean) { - this.trainerType = trainerType; - this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); - this.battleBgm = "battle_trainer"; - this.mixedBattleBgm = "battle_trainer"; - this.victoryBgm = "victory_trainer"; - this.partyTemplates = [trainerPartyTemplates.TWO_AVG]; - this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden(); - } - - getKey(): string { - return TrainerType[this.getDerivedType()].toString().toLowerCase(); - } - - getSpriteKey(female?: boolean, isDouble: boolean = false): string { - let ret = this.getKey(); - if (this.hasGenders) { - ret += `_${female ? "f" : "m"}`; - } - // If a special double trainer class was set, set it as the sprite key - if (this.trainerTypeDouble && female && isDouble) { - // Get the derived type for the double trainer since the sprite key is based on the derived type - ret = TrainerType[this.getDerivedType(this.trainerTypeDouble)].toString().toLowerCase(); - } - return ret; - } - - setName(name: string): TrainerConfig { - if (name === "Finn") { - // Give the rival a localized name - // First check if i18n is initialized - if (!getIsInitialized()) { - initI18n(); - } - // This is only the male name, because the female name is handled in a different function (setHasGenders) - if (name === "Finn") { - name = i18next.t("trainerNames:rival"); - } - } - this.name = name; - return this; - } - - /** - * Sets if a boss trainer will have a voucher or not. - * @param hasVoucher - If the boss trainer will have a voucher. - */ - setHasVoucher(hasVoucher: boolean): void { - this.hasVoucher = hasVoucher; - } - - setTitle(title: string): TrainerConfig { - // First check if i18n is initialized - if (!getIsInitialized()) { - initI18n(); - } - - // Make the title lowercase and replace spaces with underscores - title = title.toLowerCase().replace(/\s/g, "_"); - - // Get the title from the i18n file - this.title = i18next.t(`titles:${title}`); - - - return this; - } - - - /** - * Returns the derived trainer type for a given trainer type. - * @param trainerTypeToDeriveFrom - The trainer type to derive from. (If null, the this.trainerType property will be used.) - * @returns {TrainerType} - The derived trainer type. - */ - getDerivedType(trainerTypeToDeriveFrom: TrainerType | null = null): TrainerType { - let trainerType = trainerTypeToDeriveFrom ? trainerTypeToDeriveFrom : this.trainerType; - switch (trainerType) { - case TrainerType.RIVAL_2: - case TrainerType.RIVAL_3: - case TrainerType.RIVAL_4: - case TrainerType.RIVAL_5: - case TrainerType.RIVAL_6: - trainerType = TrainerType.RIVAL; - break; - case TrainerType.LANCE_CHAMPION: - trainerType = TrainerType.LANCE; - break; - case TrainerType.LARRY_ELITE: - trainerType = TrainerType.LARRY; - break; - case TrainerType.ROCKET_BOSS_GIOVANNI_1: - case TrainerType.ROCKET_BOSS_GIOVANNI_2: - trainerType = TrainerType.GIOVANNI; - break; - case TrainerType.MAXIE_2: - trainerType = TrainerType.MAXIE; - break; - case TrainerType.ARCHIE_2: - trainerType = TrainerType.ARCHIE; - break; - case TrainerType.CYRUS_2: - trainerType = TrainerType.CYRUS; - break; - case TrainerType.GHETSIS_2: - trainerType = TrainerType.GHETSIS; - break; - case TrainerType.LYSANDRE_2: - trainerType = TrainerType.LYSANDRE; - break; - case TrainerType.MARNIE_ELITE: - trainerType = TrainerType.MARNIE; - break; - case TrainerType.NESSA_ELITE: - trainerType = TrainerType.NESSA; - break; - case TrainerType.BEA_ELITE: - trainerType = TrainerType.BEA; - break; - case TrainerType.ALLISTER_ELITE: - trainerType = TrainerType.ALLISTER; - break; - case TrainerType.RAIHAN_ELITE: - trainerType = TrainerType.RAIHAN; - break; - } - - return trainerType; - } - - /** - * Sets the configuration for trainers with genders, including the female name and encounter background music (BGM). - * @param {string} [nameFemale] - The name of the female trainer. If 'Ivy', a localized name will be assigned. - * @param {TrainerType | string} [femaleEncounterBgm] - The encounter BGM for the female trainer, which can be a TrainerType or a string. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - **/ - setHasGenders(nameFemale?: string, femaleEncounterBgm?: TrainerType | string): TrainerConfig { - // If the female name is 'Ivy' (the rival), assign a localized name. - if (nameFemale === "Ivy") { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - // Initialize the i18n system if it is not already initialized. - initI18n(); - } - // Set the localized name for the female rival. - this.nameFemale = i18next.t("trainerNames:rival_female"); - } else { - // Otherwise, assign the provided female name. - this.nameFemale = nameFemale!; // TODO: is this bang correct? - } - - // Indicate that this trainer configuration includes genders. - this.hasGenders = true; - - // If a female encounter BGM is provided. - if (femaleEncounterBgm) { - // If the BGM is a TrainerType (number), convert it to a string, replace underscores with spaces, and convert to lowercase. - // Otherwise, assign the provided string as the BGM. - this.femaleEncounterBgm = typeof femaleEncounterBgm === "number" - ? TrainerType[femaleEncounterBgm].toString().replace(/_/g, " ").toLowerCase() - : femaleEncounterBgm; - } - - // Return the updated TrainerConfig instance. - return this; - } - - /** - * Sets the configuration for trainers with double battles, including the name of the double trainer and the encounter BGM. - * @param nameDouble - The name of the double trainer (e.g., "Ace Duo" for Trainer Class Doubles or "red_blue_double" for NAMED trainer doubles). - * @param doubleEncounterBgm - The encounter BGM for the double trainer, which can be a TrainerType or a string. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - */ - setHasDouble(nameDouble: string, doubleEncounterBgm?: TrainerType | string): TrainerConfig { - this.hasDouble = true; - this.nameDouble = nameDouble; - if (doubleEncounterBgm) { - this.doubleEncounterBgm = typeof doubleEncounterBgm === "number" ? TrainerType[doubleEncounterBgm].toString().replace(/\_/g, " ").toLowerCase() : doubleEncounterBgm; - } - return this; - } - - /** - * Sets the trainer type for double battles. - * @param trainerTypeDouble - The TrainerType of the partner in a double battle. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - */ - setDoubleTrainerType(trainerTypeDouble: TrainerType): TrainerConfig { - this.trainerTypeDouble = trainerTypeDouble; - this.setDoubleMessages(this.nameDouble); - return this; - } - - /** - * Sets the encounter and victory messages for double trainers. - * @param nameDouble - The name of the pair (e.g. "red_blue_double"). - */ - setDoubleMessages(nameDouble: string) { - // Check if there is double battle dialogue for this trainer - if (doubleBattleDialogue[nameDouble]) { - // Set encounter and victory messages for double trainers - this.doubleEncounterMessages = doubleBattleDialogue[nameDouble].encounter; - this.doubleVictoryMessages = doubleBattleDialogue[nameDouble].victory; - this.doubleDefeatMessages = doubleBattleDialogue[nameDouble].defeat; - } - } - - /** - * Sets the title for double trainers - * @param titleDouble - the key for the title in the i18n file. (e.g., "champion_double"). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - */ - setDoubleTitle(titleDouble: string): TrainerConfig { - // First check if i18n is initialized - if (!getIsInitialized()) { - initI18n(); - } - - // Make the title lowercase and replace spaces with underscores - titleDouble = titleDouble.toLowerCase().replace(/\s/g, "_"); - - // Get the title from the i18n file - this.titleDouble = i18next.t(`titles:${titleDouble}`); - - return this; - } - - setHasCharSprite(): TrainerConfig { - this.hasCharSprite = true; - return this; - } - - setDoubleOnly(): TrainerConfig { - this.doubleOnly = true; - return this; - } - - setMoneyMultiplier(moneyMultiplier: number): TrainerConfig { - this.moneyMultiplier = moneyMultiplier; - return this; - } - - setBoss(): TrainerConfig { - this.isBoss = true; - return this; - } - - setStaticParty(): TrainerConfig { - this.hasStaticParty = true; - return this; - } - - setUseSameSeedForAllMembers(): TrainerConfig { - this.useSameSeedForAllMembers = true; - return this; - } - - setMixedBattleBgm(mixedBattleBgm: string): TrainerConfig { - this.mixedBattleBgm = mixedBattleBgm; - return this; - } - - setBattleBgm(battleBgm: string): TrainerConfig { - this.battleBgm = battleBgm; - return this; - } - - setEncounterBgm(encounterBgm: TrainerType | string): TrainerConfig { - this.encounterBgm = typeof encounterBgm === "number" ? TrainerType[encounterBgm].toString().toLowerCase() : encounterBgm; - return this; - } - - setVictoryBgm(victoryBgm: string): TrainerConfig { - this.victoryBgm = victoryBgm; - return this; - } - - setPartyTemplates(...partyTemplates: TrainerPartyTemplate[]): TrainerConfig { - this.partyTemplates = partyTemplates; - return this; - } - - setPartyTemplateFunc(partyTemplateFunc: PartyTemplateFunc): TrainerConfig { - this.partyTemplateFunc = partyTemplateFunc; - return this; - } - - setPartyMemberFunc(slotIndex: integer, partyMemberFunc: PartyMemberFunc): TrainerConfig { - this.partyMemberFuncs[slotIndex] = partyMemberFunc; - return this; - } - - setSpeciesPools(speciesPools: TrainerTierPools | Species[]): TrainerConfig { - this.speciesPools = (Array.isArray(speciesPools) ? {[TrainerPoolTier.COMMON]: speciesPools} : speciesPools) as unknown as TrainerTierPools; - return this; - } - - setSpeciesFilter(speciesFilter: PokemonSpeciesFilter, allowLegendaries?: boolean): TrainerConfig { - const baseFilter = this.speciesFilter; - this.speciesFilter = allowLegendaries ? speciesFilter : species => speciesFilter(species) && baseFilter(species); - return this; - } - - setSpecialtyTypes(...specialtyTypes: Type[]): TrainerConfig { - this.specialtyTypes = specialtyTypes; - return this; - } - - setGenModifiersFunc(genModifiersFunc: GenModifiersFunc): TrainerConfig { - this.genModifiersFunc = genModifiersFunc; - return this; - } - - setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { - this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => { - const modifierTypeFunc = func(); - const modifierType = modifierTypeFunc(); - modifierType.withIdFromFunc(modifierTypeFunc); - return modifierType; - }); - return this; - } - - /** - * Returns the pool of species for an evil team admin - * @param team - The evil team the admin belongs to. - * @returns {TrainerTierPools} - */ - speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { - team = team.toLowerCase(); - switch (team) { - case "rocket": { - return { - [TrainerPoolTier.COMMON]: [Species.RATTATA, Species.KOFFING, Species.EKANS, Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], - [TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], - [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR] - }; - } - case "magma": { - return { - [TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR], - [TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR], - [TrainerPoolTier.RARE]: [Species.TURTONATOR, Species.CHARCADET] - }; - } - case "aqua": { - return { - [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.CORPHISH, Species.ZIGZAGOON, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], - [TrainerPoolTier.UNCOMMON]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], - [TrainerPoolTier.RARE]: [Species.DONDOZO] - }; - } - case "galactic": { - return { - [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], - [TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], - [TrainerPoolTier.RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] - }; - } - case "plasma": { - return { - [TrainerPoolTier.COMMON]: [Species.SCRAFTY, Species.LILLIPUP, Species.PURRLOIN, Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], - [TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], - [TrainerPoolTier.RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] - }; - } - case "flare": { - return { - [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], - [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], - [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON] - }; - } - } - - console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); - return []; - } - - /** - * Initializes the trainer configuration for an evil team admin. - * @param title - The title of the evil team admin. - * @param poolName - The evil team the admin belongs to. - * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - * **/ - initForEvilTeamAdmin(title: string, poolName: string, signatureSpecies: (Species | Species[])[],): TrainerConfig { - if (!getIsInitialized()) { - initI18n(); - } - this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); - - // Set the species pools for the evil team admin. - this.speciesPools = this.speciesPoolPerEvilTeamAdmin(poolName); - - signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - this.setHasVoucher(false); - this.setTitle(title); - this.setMoneyMultiplier(1.5); - this.setBoss(); - this.setStaticParty(); - this.setBattleBgm("battle_plasma_boss"); - this.setVictoryBgm("victory_team_plasma"); - - return this; - } - - /** - * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. - * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. - * @param {Type[]} specialtyTypes - The specialty types for the evil team Leader. - * @param boolean whether or not this is the rematch fight - * @returns {TrainerConfig} - The updated TrainerConfig instance. - * **/ - initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], rematch: boolean = false, ...specialtyTypes: Type[]): TrainerConfig { - if (!getIsInitialized()) { - initI18n(); - } - if (rematch) { - this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); - } else { - this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); - } - signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); - } - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - this.setTitle(title); - this.setMoneyMultiplier(2.5); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_plasma_boss"); - this.setVictoryBgm("victory_team_plasma"); - - return this; - } - - /** - * Initializes the trainer configuration for a Gym Leader. - * @param {Species | Species[]} signatureSpecies - The signature species for the Gym Leader. - * @param {Type[]} specialtyTypes - The specialty types for the Gym Leader. - * @param isMale - Whether the Gym Leader is Male or Not (for localization of the title). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - * **/ - initForGymLeader(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - initI18n(); - } - - // Set the function to generate the Gym Leader's party template. - this.setPartyTemplateFunc(getGymLeaderPartyTemplate); - - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - // If specialty types are provided, set species filter and specialty types. - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); - } - - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - - // Set the title to "gym_leader". (this is the key in the i18n file) - this.setTitle("gym_leader"); - if (!isMale) { - this.setTitle("gym_leader_female"); - } - - // Configure various properties for the Gym Leader. - this.setMoneyMultiplier(2.5); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_unova_gym"); - this.setVictoryBgm("victory_gym"); - this.setGenModifiersFunc(party => { - const waveIndex = party[0].scene.currentBattle.waveIndex; - return getRandomTeraModifiers(party, waveIndex >= 100 ? 1 : 0, specialtyTypes.length ? specialtyTypes : undefined); - }); - - return this; - } - - /** - * Initializes the trainer configuration for an Elite Four member. - * @param {Species | Species[]} signatureSpecies - The signature species for the Elite Four member. - * @param {Type[]} specialtyTypes - The specialty types for the Elite Four member. - * @param isMale - Whether the Elite Four Member is Male or Female (for localization of the title). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - **/ - initForEliteFour(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - initI18n(); - } - - // Set the party templates for the Elite Four. - this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); - - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - // Set species filter and specialty types if provided, otherwise filter by base total. - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.some(t => p.isOfType(t)) && p.baseTotal >= 450); - this.setSpecialtyTypes(...specialtyTypes); - } else { - this.setSpeciesFilter(p => p.baseTotal >= 450); - } - - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - - // Set the title to "elite_four". (this is the key in the i18n file) - this.setTitle("elite_four"); - if (!isMale) { - this.setTitle("elite_four_female"); - } - - // Configure various properties for the Elite Four member. - this.setMoneyMultiplier(3.25); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_unova_elite"); - this.setVictoryBgm("victory_gym"); - this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : undefined)); - - return this; - } - - /** - * Initializes the trainer configuration for a Champion. - * @param {Species | Species[]} signatureSpecies - The signature species for the Champion. - * @param isMale - Whether the Champion is Male or Female (for localization of the title). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - **/ - initForChampion(signatureSpecies: (Species | Species[])[], isMale: boolean): TrainerConfig { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - initI18n(); - } - - // Set the party templates for the Champion. - this.setPartyTemplates(trainerPartyTemplates.CHAMPION); - - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - // Set species filter to only include species with a base total of 470 or higher. - this.setSpeciesFilter(p => p.baseTotal >= 470); - - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - - // Set the title to "champion". (this is the key in the i18n file) - this.setTitle("champion"); - if (!isMale) { - this.setTitle("champion_female"); - } - - - // Configure various properties for the Champion. - this.setMoneyMultiplier(10); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_champion_alder"); - this.setVictoryBgm("victory_champion"); - this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 3)); - - return this; - } - - /** - * Retrieves the title for the trainer based on the provided trainer slot and variant. - * @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE. - * @param {TrainerVariant} variant - The variant of the trainer to determine the specific title. - * @returns {string} - The title of the trainer. - **/ - getTitle(trainerSlot: TrainerSlot = TrainerSlot.NONE, variant: TrainerVariant): string { - const ret = this.name; - - // Check if the variant is double and the name for double exists - if (!trainerSlot && variant === TrainerVariant.DOUBLE && this.nameDouble) { - return this.nameDouble; - } - - // Female variant - if (this.hasGenders) { - // If the name is already set - if (this.nameFemale) { - // Check if the variant is either female or this is for the partner in a double battle - if (variant === TrainerVariant.FEMALE || (variant === TrainerVariant.DOUBLE && trainerSlot === TrainerSlot.TRAINER_PARTNER)) { - return this.nameFemale; - } - } else - // Check if !variant is true, if so return the name, else return the name with _female appended - if (variant) { - if (!getIsInitialized()) { - initI18n(); - } - // Check if the female version exists in the i18n file - if (i18next.exists(`trainerClasses:${this.name.toLowerCase()}`)) { - // If it does, return - return ret + "_female"; - } else { - // If it doesn't, we do not do anything and go to the normal return - // This is to prevent the game from displaying an error if a female version of the trainer does not exist in the localization - } - } - } - - return ret; - } - - loadAssets(scene: BattleScene, variant: TrainerVariant): Promise { - return new Promise(resolve => { - const isDouble = variant === TrainerVariant.DOUBLE; - const trainerKey = this.getSpriteKey(variant === TrainerVariant.FEMALE, false); - const partnerTrainerKey = this.getSpriteKey(true, true); - scene.loadAtlas(trainerKey, "trainer"); - if (isDouble) { - scene.loadAtlas(partnerTrainerKey, "trainer"); - } - scene.load.once(Phaser.Loader.Events.COMPLETE, () => { - const originalWarn = console.warn; - // Ignore warnings for missing frames, because there will be a lot - console.warn = () => { - }; - const frameNames = scene.anims.generateFrameNames(trainerKey, { - zeroPad: 4, - suffix: ".png", - start: 1, - end: 128 - }); - const partnerFrameNames = isDouble - ? scene.anims.generateFrameNames(partnerTrainerKey, { - zeroPad: 4, - suffix: ".png", - start: 1, - end: 128 - }) - : ""; - console.warn = originalWarn; - if (!(scene.anims.exists(trainerKey))) { - scene.anims.create({ - key: trainerKey, - frames: frameNames, - frameRate: 24, - repeat: -1 - }); - } - if (isDouble && !(scene.anims.exists(partnerTrainerKey))) { - scene.anims.create({ - key: partnerTrainerKey, - frames: partnerFrameNames, - frameRate: 24, - repeat: -1 - }); - } - resolve(); - }); - if (!scene.load.isLoading()) { - scene.load.start(); - } - }); - } -} - -let t = 0; - -interface TrainerConfigs { - [key: integer]: TrainerConfig -} - -/** - * The function to get variable strength grunts - * @param scene the singleton scene being passed in - * @returns the correct TrainerPartyTemplate - */ -function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { - const waveIndex = scene.currentBattle?.waveIndex; - if (waveIndex < 40) { - return trainerPartyTemplates.TWO_AVG; - } else if (waveIndex < 63) { - return trainerPartyTemplates.THREE_AVG; - } else if (waveIndex < 65) { - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - } else if (waveIndex < 112) { - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - } else { - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger - } -} - -function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) { - return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; -} - -function getGymLeaderPartyTemplate(scene: BattleScene) { - return getWavePartyTemplate(scene, trainerPartyTemplates.GYM_LEADER_1, trainerPartyTemplates.GYM_LEADER_2, trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5); -} - -function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution: boolean = false, postProcess?: (enemyPokemon: EnemyPokemon) => void): PartyMemberFunc { - return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { - let species = Utils.randSeedItem(speciesPool); - if (!ignoreEvolution) { - species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength); - } - return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess); - }; -} - -function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilter, trainerSlot: TrainerSlot = TrainerSlot.TRAINER, allowLegendaries?: boolean, postProcess?: (EnemyPokemon: EnemyPokemon) => void): PartyMemberFunc { - const originalSpeciesFilter = speciesFilter; - speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species); - return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { - const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength)), level, trainerSlot, undefined, undefined, postProcess); - return ret; - }; -} - -function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: Type[]): PersistentModifier[] { - const ret: PersistentModifier[] = []; - const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i); - for (let t = 0; t < Math.min(count, party.length); t++) { - const randomIndex = Utils.randSeedItem(partyMemberIndexes); - partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); - ret.push(modifierTypes.TERA_SHARD().generateType([], [Utils.randSeedItem(types ? types : party[randomIndex].getTypes())])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? - } - return ret; -} - -type SignatureSpecies = { - [key in string]: (Species | Species[])[]; -}; - -/* - * The signature species for each Gym Leader, Elite Four member, and Champion. - * The key is the trainer type, and the value is an array of Species or Species arrays. - * This is in a separate const so it can be accessed from other places and not just the trainerConfigs - */ -export const signatureSpecies: SignatureSpecies = { - BROCK: [Species.GEODUDE, Species.ONIX], - MISTY: [Species.STARYU, Species.PSYDUCK], - LT_SURGE: [Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ], - ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], - JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT], - SABRINA: [Species.ABRA, Species.MR_MIME, Species.ESPEON], - BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGMAR], - GIOVANNI: [Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F], - FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.DODUO], - BUGSY: [Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR], - WHITNEY: [Species.GIRAFARIG, Species.MILTANK], - MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE], - CHUCK: [Species.POLIWRATH, Species.MANKEY], - JASMINE: [Species.MAGNEMITE, Species.STEELIX], - PRYCE: [Species.SEEL, Species.SWINUB], - CLAIR: [Species.DRATINI, Species.HORSEA, Species.GYARADOS], - ROXANNE: [Species.GEODUDE, Species.NOSEPASS], - BRAWLY: [Species.MACHOP, Species.MAKUHITA], - WATTSON: [Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE], - FLANNERY: [Species.SLUGMA, Species.TORKOAL, Species.NUMEL], - NORMAN: [Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN], - WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], - TATE: [Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE], - LIZA: [Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR], - JUAN: [Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH], - ROARK: [Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE], - GARDENIA: [Species.ROSELIA, Species.TANGELA, Species.TURTWIG], - MAYLENE: [Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR], - CRASHER_WAKE: [Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP], - FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB], - BYRON: [Species.SHIELDON, Species.BRONZOR, Species.AGGRON], - CANDICE: [Species.SNEASEL, Species.SNOVER, Species.SNORUNT], - VOLKNER: [Species.SHINX, Species.CHINCHOU, Species.ROTOM], - CILAN: [Species.PANSAGE, Species.COTTONEE, Species.PETILIL], - CHILI: [Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR], - CRESS: [Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE], - CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PATRAT], - LENORA: [Species.KANGASKHAN, Species.DEERLING, Species.AUDINO], - ROXIE: [Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI], - BURGH: [Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST], - ELESA: [Species.EMOLGA, Species.BLITZLE, Species.JOLTIK], - CLAY: [Species.DRILBUR, Species.SANDILE, Species.GOLETT], - SKYLA: [Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET], - BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO], - DRAYDEN: [Species.DRUDDIGON, Species.AXEW, Species.DEINO], - MARLON: [Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA], - VIOLA: [Species.SURSKIT, Species.SCATTERBUG], - GRANT: [Species.AMAURA, Species.TYRUNT], - KORRINA: [Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO], - RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT], - CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA], - VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME], - OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.SLOWKING], - WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL], - MILO: [Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET], - NESSA: [Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD], - KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL], - BEA: [Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS], - ALLISTER: [Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY], - OPAL: [Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING], - BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR], - GORDIE: [Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE], - MELONY: [Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME], - PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY], - MARNIE: [Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO], - RAIHAN: [Species.DURALUDON, Species.TURTONATOR, Species.GOOMY], - KATY: [Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS], - BRASSIUS: [Species.SMOLIV, Species.SHROOMISH, Species.ODDISH], - IONO: [Species.TADBULB, Species.WATTREL, Species.VOLTORB], - KOFU: [Species.VELUZA, Species.WIGLETT, Species.WINGULL], - LARRY: [Species.STARLY, Species.DUNSPARCE, Species.KOMALA], - RYME: [Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], - TULIP: [Species.GIRAFARIG, Species.FLITTLE, Species.RALTS], - GRUSHA: [Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO], - LORELEI: [Species.JYNX, [Species.SLOWBRO, Species.GALAR_SLOWBRO], Species.LAPRAS, [Species.ALOLA_SANDSLASH, Species.CLOYSTER]], - BRUNO: [Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [Species.ALOLA_GOLEM, Species.GOLEM]], - AGATHA: [Species.GENGAR, [Species.ARBOK, Species.WEEZING], Species.CROBAT, Species.ALOLA_MAROWAK], - LANCE: [Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR], - WILL: [Species.XATU, Species.JYNX, [Species.SLOWBRO, Species.SLOWKING], Species.EXEGGUTOR], - KOGA: [[Species.WEEZING, Species.MUK], [Species.VENOMOTH, Species.ARIADOS], Species.CROBAT, Species.TENTACRUEL], - KAREN: [Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE], - SIDNEY: [[Species.SHIFTRY, Species.CACTURNE], [Species.SHARPEDO, Species.CRAWDAUNT], Species.ABSOL, Species.MIGHTYENA], - PHOEBE: [Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [Species.MISMAGIUS, Species.DRIFBLIM]], - GLACIA: [Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW], - DRAKE: [Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA], - AARON: [[Species.SCIZOR, Species.KLEAVOR], Species.HERACROSS, [Species.VESPIQUEN, Species.YANMEGA], Species.DRAPION], - BERTHA: [Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR], - FLINT: [[Species.FLAREON, Species.RAPIDASH], Species.MAGMORTAR, [Species.STEELIX, Species.LOPUNNY], Species.INFERNAPE], - LUCIAN: [Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [Species.ALAKAZAM, Species.ESPEON]], - SHAUNTAL: [Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT], - MARSHAL: [Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK], - GRIMSLEY: [Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE], - CAITLIN: [Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS], - MALVA: [Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME], - SIEBOLD: [Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE], - WIKSTROM: [Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH], - DRASNA: [Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN], - HALA: [Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [Species.POLIWRATH, Species.ANNIHILAPE]], - MOLAYNE: [Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO], - OLIVIA: [Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC], - ACEROLA: [[Species.BANETTE, Species.DRIFBLIM], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND], - KAHILI: [[Species.BRAVIARY, Species.MANDIBUZZ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON], - MARNIE_ELITE: [Species.MORPEKO, Species.LIEPARD, [Species.TOXICROAK, Species.SCRAFTY], Species.GRIMMSNARL], - NESSA_ELITE: [Species.GOLISOPOD, [Species.PELIPPER, Species.QUAGSIRE], Species.TOXAPEX, Species.DREDNAW], - BEA_ELITE: [Species.HAWLUCHA, [Species.GRAPPLOCT, Species.SIRFETCHD], Species.FALINKS, Species.MACHAMP], - ALLISTER_ELITE: [Species.DUSKNOIR, [Species.POLTEAGEIST, Species.RUNERIGUS], Species.CURSOLA, Species.GENGAR], - RAIHAN_ELITE: [Species.GOODRA, [Species.TORKOAL, Species.TURTONATOR], Species.FLYGON, Species.ARCHALUDON], - RIKA: [Species.WHISCASH, [Species.DONPHAN, Species.DUGTRIO], Species.CAMERUPT, Species.CLODSIRE], - POPPY: [Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON], - LARRY_ELITE: [Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS], - HASSEL: [Species.NOIVERN, [Species.FLAPPLE, Species.APPLETUN], Species.DRAGALGE, Species.BAXCALIBUR], - CRISPIN: [Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN], - AMARYS: [Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS], - LACEY: [Species.EXCADRILL, Species.PRIMARINA, [Species.ALCREMIE, Species.GRANBULL], Species.WHIMSICOTT], - DRAYTON: [Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE], - BLUE: [[Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE], Species.HO_OH, [Species.RHYPERIOR, Species.MAGNEZONE]], // Alakazam lead, Mega Pidgeot - RED: [Species.LUGIA, Species.SNORLAX, [Species.ESPEON, Species.UMBREON, Species.SYLVEON]], // GMax Pikachu lead, Mega gen 1 starter - LANCE_CHAMPION: [Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR], // Aerodactyl lead, Mega Latias/Latios - STEVEN: [Species.AGGRON, [Species.ARMALDO, Species.CRADILY], Species.DIALGA], // Skarmory lead, Mega Metagross - WALLACE: [Species.MILOTIC, Species.PALKIA, Species.LUDICOLO], // Pelipper lead, Mega Swampert - CYNTHIA: [Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS], // Spiritomb lead, Mega Garchomp - ALDER: [Species.VOLCARONA, Species.ZEKROM, [Species.ACCELGOR, Species.ESCAVALIER], Species.KELDEO], // Bouffalant/Braviary lead - IRIS: [Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS], // Druddigon lead, Gmax Lapras - DIANTHA: [Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA], // Gourgeist lead, Mega Gardevoir - HAU: [[Species.SOLGALEO, Species.LUNALA], Species.NOIVERN, [Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA], [Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE]], // Alola Raichu lead - LEON: [Species.DRAGAPULT, [Species.ZACIAN, Species.ZAMAZENTA], Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard - GEETA: [Species.MIRAIDON, [Species.ESPATHRA, Species.VELUZA], [Species.AVALUGG, Species.HISUI_AVALUGG], Species.KINGAMBIT], // Glimmora lead - NEMONA: [Species.KORAIDON, Species.PAWMOT, [Species.DUDUNSPARCE, Species.ORTHWORM], [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL]], // Lycanroc lead - KIERAN: [[Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE], // Poliwrath/Politoed lead -}; - -export const trainerConfigs: TrainerConfigs = { - [TrainerType.UNKNOWN]: new TrainerConfig(0).setHasGenders(), - [TrainerType.ACE_TRAINER]: new TrainerConfig(++t).setHasGenders("Ace Trainer Female").setHasDouble("Ace Duo").setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), - [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) - .setSpeciesPools([Species.SMEARGLE]), - [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders("Backpacker Female").setHasDouble("Backpackers").setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER) - .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO], - [TrainerPoolTier.UNCOMMON]: [Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, Species.SKIDDO, Species.MUDBRAY], - [TrainerPoolTier.RARE]: [Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, Species.IMPIDIMP], - [TrainerPoolTier.SUPER_RARE]: [Species.GALAR_DARUMAKA, Species.TEDDIURSA] - }), - [TrainerType.BAKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.35).setSpeciesFilter(s => s.isOfType(Type.GRASS) || s.isOfType(Type.FIRE)), - [TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), - [TrainerType.BIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON)), - [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.FIGHTING) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR], - [TrainerPoolTier.UNCOMMON]: [Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, Species.STUFFUL, Species.CRABRAWLER], - [TrainerPoolTier.RARE]: [Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, Species.PASSIMIAN, Species.CLOBBOPUS], - [TrainerPoolTier.SUPER_RARE]: [Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O], - [TrainerPoolTier.ULTRA_RARE]: [Species.KUBFU] - }), - [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble("Breeders") - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) - .setSpeciesFilter(s => s.baseTotal < 450), - [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble("Colleagues").setEncounterBgm(TrainerType.CLERK) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO], - [TrainerPoolTier.UNCOMMON]: [Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO], - [TrainerPoolTier.RARE]: [Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE] - }), - [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders("Cyclist Female").setHasDouble("Cyclists").setEncounterBgm(TrainerType.CYCLIST) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND], - [TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL], - [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA], - [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY] - }), - [TrainerType.DANCER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CYCLIST) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW], - [TrainerPoolTier.UNCOMMON]: [Species.SPINDA, Species.SWABLU, Species.MARACTUS,], - [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], - [TrainerPoolTier.SUPER_RARE]: [Species.POPPLIO] - }), - [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), - [TrainerType.DOCTOR]: new TrainerConfig(++t).setHasGenders("Nurse", "lass").setHasDouble("Medical Team").setMoneyMultiplier(3).setEncounterBgm(TrainerType.CLERK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), - [TrainerType.FIREBREATHER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(Type.FIRE)), - [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA], - [TrainerPoolTier.UNCOMMON]: [Species.POLIWAG, Species.SHELLDER, Species.KRABBY, Species.HORSEA, Species.CARVANHA, Species.BARBOACH, Species.CORPHISH, Species.FINNEON, Species.TYMPOLE, Species.BASCULIN, Species.FRILLISH, Species.INKAY], - [TrainerPoolTier.RARE]: [Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA], - [TrainerPoolTier.SUPER_RARE]: [Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO] - }), - [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), - [TrainerType.HARLEQUIN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PSYCHIC).setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), - [TrainerType.HIKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.BACKPACKER) - .setPartyTemplates(trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.ONE_STRONG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SANDSHREW, Species.DIGLETT, Species.GEODUDE, Species.MACHOP, Species.ARON, Species.ROGGENROLA, Species.DRILBUR, Species.NACLI], - [TrainerPoolTier.UNCOMMON]: [Species.ZUBAT, Species.RHYHORN, Species.ONIX, Species.CUBONE, Species.WOOBAT, Species.SWINUB, Species.NOSEPASS, Species.HIPPOPOTAS, Species.DWEBBLE, Species.KLAWF, Species.TOEDSCOOL], - [TrainerPoolTier.RARE]: [Species.TORKOAL, Species.TRAPINCH, Species.BARBOACH, Species.GOLETT, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.GALAR_STUNFISK, Species.PALDEA_WOOPER], - [TrainerPoolTier.SUPER_RARE]: [Species.MAGBY, Species.LARVITAR] - }), - [TrainerType.HOOLIGANS]: new TrainerConfig(++t).setDoubleOnly().setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON) || s.isOfType(Type.DARK)), - [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.JANITOR]: new TrainerConfig(++t).setMoneyMultiplier(1.1).setEncounterBgm(TrainerType.CLERK), - [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), - [TrainerType.MUSICIAN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), - [TrainerType.HEX_MANIAC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PSYCHIC) - .setPartyTemplates(trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_AVG_ONE_STRONG, trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_STRONG) - .setSpeciesFilter(s => s.isOfType(Type.GHOST)), - [TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm("lass"), - [TrainerType.OFFICER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CLERK) - .setPartyTemplates(trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP, Species.YAMPER, Species.FIDOUGH], - [TrainerPoolTier.UNCOMMON]: [Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF], - [TrainerPoolTier.RARE]: [Species.JOLTEON, Species.RIOLU], - [TrainerPoolTier.SUPER_RARE]: [], - [TrainerPoolTier.ULTRA_RARE]: [Species.ENTEI, Species.SUICUNE, Species.RAIKOU] - }), - [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), - [TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), - [TrainerType.POKEFAN]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("PokéFan").setHasGenders("PokéFan Female").setHasDouble("PokéFan Family").setEncounterBgm(TrainerType.POKEFAN) - .setPartyTemplates(trainerPartyTemplates.SIX_WEAKER, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME), - [TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Preschooler Female", "lass").setHasDouble("Preschoolers") - .setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV], - [TrainerPoolTier.UNCOMMON]: [Species.EEVEE, Species.CLEFFA, Species.IGGLYBUFF, Species.SWINUB, Species.WOOPER, Species.DRIFLOON, Species.DEDENNE, Species.STUFFUL], - [TrainerPoolTier.RARE]: [Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS], - [TrainerPoolTier.SUPER_RARE]: [Species.DARUMAKA, Species.TINKATINK], - }), - [TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders("Psychic Female").setHasDouble("Psychics").setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA], - [TrainerPoolTier.UNCOMMON]: [Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, Species.INKAY, Species.ORANGURU], - [TrainerPoolTier.RARE]: [Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC], - [TrainerPoolTier.SUPER_RARE]: [Species.BELDUM, Species.ESPEON, Species.STANTLER], - }), - [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("Pokémon Ranger").setEncounterBgm(TrainerType.BACKPACKER).setHasGenders("Pokémon Ranger Female").setHasDouble("Pokémon Rangers") - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER], - [TrainerPoolTier.UNCOMMON]: [Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL], - [TrainerPoolTier.RARE]: [Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, Species.PALDEA_TAUROS, Species.TINKATINK, Species.CYCLIZAR, Species.FLAMIGO], - [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], - }), - [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName("Gentleman").setHasGenders("Madame").setHasDouble("Rich Couple"), - [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName("Rich Boy").setHasGenders("Lady").setHasDouble("Rich Kids").setEncounterBgm(TrainerType.RICH), - [TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)), - [TrainerType.SAILOR]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setSpeciesFilter(s => s.isOfType(Type.WATER) || s.isOfType(Type.FIGHTING)), - [TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders("Scientist Female").setHasDouble("Scientists").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING], - [TrainerPoolTier.UNCOMMON]: [Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE], - [TrainerPoolTier.RARE]: [Species.ABRA, Species.DITTO, Species.PORYGON, Species.ELEKID, Species.SOLOSIS, Species.GALAR_WEEZING], - [TrainerPoolTier.SUPER_RARE]: [Species.OMANYTE, Species.KABUTO, Species.AERODACTYL, Species.LILEEP, Species.ANORITH, Species.CRANIDOS, Species.SHIELDON, Species.TIRTOUGA, Species.ARCHEN, Species.ARCTOVISH, Species.ARCTOZOLT, Species.DRACOVISH, Species.DRACOZOLT], - [TrainerPoolTier.ULTRA_RARE]: [Species.ROTOM, Species.MELTAN] - }), - [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName("Worker").setHasGenders("Worker Female").setHasDouble("Workers").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), - [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("School Kid Female", "lass").setHasDouble("School Kids") - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING], - [TrainerPoolTier.UNCOMMON]: [Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE], - [TrainerPoolTier.RARE]: [Species.TANGELA, Species.EEVEE, Species.YANMA], - [TrainerPoolTier.SUPER_RARE]: [Species.TADBULB] - }), - [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), - [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE], TrainerSlot.TRAINER_PARTNER)) - .setEncounterBgm(TrainerType.TWINS), - [TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders("Veteran Female").setHasDouble("Veteran Duo").setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)), - [TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders("Waitress").setHasDouble("Restaurant Staff").setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO], - [TrainerPoolTier.UNCOMMON]: [Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE], - [TrainerPoolTier.RARE]: [Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST] - }), - [TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders("Worker Female").setHasDouble("Workers").setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)), - [TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Lass", "lass").setHasDouble("Beginners").setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) - .setSpeciesPools( - [Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP] - ), - [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH], - [TrainerPoolTier.UNCOMMON]: [Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], - [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], - [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR] - }), - [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.HOUNDOOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [Species.ARBOK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.CROBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.WEEZING]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], - [TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR], - [TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR], - [TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET] - }), - [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL], - [TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], - [TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], - [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO] - }), - [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY], - [TrainerPoolTier.UNCOMMON]: [Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], - [TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], - [TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] - }), - - [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH], - [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], - [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], - [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] - }), - [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.SWOOBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - - [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK], - [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], - [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], - [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON] - }), - [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"], true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"], false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"], true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.ERIKA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ERIKA"], false, Type.GRASS).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.JANINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JANINE"], false, Type.POISON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.SABRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SABRINA"], false, Type.PSYCHIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.BLAINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BLAINE"], true, Type.FIRE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.GIOVANNI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GIOVANNI"], true, Type.DARK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.FALKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FALKNER"], true, Type.FLYING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.BUGSY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BUGSY"], true, Type.BUG).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.WHITNEY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WHITNEY"], false, Type.NORMAL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.MORTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MORTY"], true, Type.GHOST).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.CHUCK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHUCK"], true, Type.FIGHTING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.JASMINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JASMINE"], false, Type.STEEL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.PRYCE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PRYCE"], true, Type.ICE).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.CLAIR]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAIR"], false, Type.DRAGON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.ROXANNE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXANNE"], false, Type.ROCK).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.BRAWLY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRAWLY"], true, Type.FIGHTING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.WATTSON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WATTSON"], true, Type.ELECTRIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.FLANNERY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FLANNERY"], false, Type.FIRE).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.NORMAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["NORMAN"], true, Type.NORMAL).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.WINONA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WINONA"], false, Type.FLYING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.TATE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TATE"], true, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("tate_liza_double").setDoubleTrainerType(TrainerType.LIZA).setDoubleTitle("gym_leader_double"), - [TrainerType.LIZA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LIZA"], false, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("liza_tate_double").setDoubleTrainerType(TrainerType.TATE).setDoubleTitle("gym_leader_double"), - [TrainerType.JUAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JUAN"], true, Type.WATER).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.ROARK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROARK"], true, Type.ROCK).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.GARDENIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GARDENIA"], false, Type.GRASS).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.MAYLENE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MAYLENE"], false, Type.FIGHTING).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.CRASHER_WAKE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRASHER_WAKE"], true, Type.WATER).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.FANTINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FANTINA"], false, Type.GHOST).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.BYRON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BYRON"], true, Type.STEEL).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.CANDICE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CANDICE"], false, Type.ICE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.VOLKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VOLKNER"], true, Type.ELECTRIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.CILAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CILAN"], true, Type.GRASS).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CHILI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHILI"], true, Type.FIRE).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CRESS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRESS"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CHEREN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHEREN"], true, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.LENORA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LENORA"], false, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.ROXIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXIE"], false, Type.POISON).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.BURGH]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BURGH"], true, Type.BUG).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.ELESA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ELESA"], false, Type.ELECTRIC).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CLAY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAY"], true, Type.GROUND).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.SKYLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SKYLA"], false, Type.FLYING).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.BRYCEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRYCEN"], true, Type.ICE).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.DRAYDEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["DRAYDEN"], true, Type.DRAGON).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.MARLON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MARLON"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.VIOLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VIOLA"], false, Type.BUG).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.GRANT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRANT"], true, Type.ROCK).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.KORRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KORRINA"], false, Type.FIGHTING).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.RAMOS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RAMOS"], true, Type.GRASS).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.CLEMONT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLEMONT"], true, Type.ELECTRIC).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.VALERIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VALERIE"], false, Type.FAIRY).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.OLYMPIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OLYMPIA"], false, Type.PSYCHIC).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.WULFRIC]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WULFRIC"], true, Type.ICE).setMixedBattleBgm("battle_kalos_gym"), - [TrainerType.MILO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MILO"], true, Type.GRASS).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.NESSA]: new TrainerConfig(++t).setName("Nessa").initForGymLeader(signatureSpecies["NESSA"], false, Type.WATER).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.KABU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KABU"], true, Type.FIRE).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.BEA]: new TrainerConfig(++t).setName("Bea").initForGymLeader(signatureSpecies["BEA"], false, Type.FIGHTING).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.ALLISTER]: new TrainerConfig(++t).setName("Allister").initForGymLeader(signatureSpecies["ALLISTER"], true, Type.GHOST).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.OPAL]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OPAL"], false, Type.FAIRY).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.BEDE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BEDE"], true, Type.FAIRY).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.GORDIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GORDIE"], true, Type.ROCK).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.MELONY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MELONY"], false, Type.ICE).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.PIERS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PIERS"], true, Type.DARK).setHasDouble("piers_marnie_double").setDoubleTrainerType(TrainerType.MARNIE).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"), - [TrainerType.MARNIE]: new TrainerConfig(++t).setName("Marnie").initForGymLeader(signatureSpecies["MARNIE"], false, Type.DARK).setHasDouble("marnie_piers_double").setDoubleTrainerType(TrainerType.PIERS).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"), - [TrainerType.RAIHAN]: new TrainerConfig(++t).setName("Raihan").initForGymLeader(signatureSpecies["RAIHAN"], true, Type.DRAGON).setMixedBattleBgm("battle_galar_gym"), - [TrainerType.KATY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KATY"], false, Type.BUG).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRASSIUS"], true, Type.GRASS).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["IONO"], false, Type.ELECTRIC).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KOFU"], true, Type.WATER).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader(signatureSpecies["LARRY"], true, Type.NORMAL).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RYME"], false, Type.GHOST).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TULIP"], false, Type.PSYCHIC).setMixedBattleBgm("battle_paldea_gym"), - [TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRUSHA"], true, Type.ICE).setMixedBattleBgm("battle_paldea_gym"), - - [TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour(signatureSpecies["LORELEI"], false, Type.ICE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AGATHA"], false, Type.GHOST).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour(signatureSpecies["LANCE"], true, Type.DRAGON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WILL"], true, Type.PSYCHIC).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KOGA"], true, Type.POISON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAREN"], false, Type.DARK).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.SIDNEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIDNEY"], true, Type.DARK).setMixedBattleBgm("battle_hoenn_elite"), - [TrainerType.PHOEBE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["PHOEBE"], false, Type.GHOST).setMixedBattleBgm("battle_hoenn_elite"), - [TrainerType.GLACIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GLACIA"], false, Type.ICE).setMixedBattleBgm("battle_hoenn_elite"), - [TrainerType.DRAKE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAKE"], true, Type.DRAGON).setMixedBattleBgm("battle_hoenn_elite"), - [TrainerType.AARON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AARON"], true, Type.BUG).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"], false, Type.GROUND).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"], true, Type.FIRE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true, Type.PSYCHIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.SHAUNTAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SHAUNTAL"], false, Type.GHOST).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.MARSHAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MARSHAL"], true, Type.FIGHTING).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.GRIMSLEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GRIMSLEY"], true, Type.DARK).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.CAITLIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CAITLIN"], false, Type.PSYCHIC).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.MALVA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MALVA"], false, Type.FIRE).setMixedBattleBgm("battle_kalos_elite"), - [TrainerType.SIEBOLD]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIEBOLD"], true, Type.WATER).setMixedBattleBgm("battle_kalos_elite"), - [TrainerType.WIKSTROM]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WIKSTROM"], true, Type.STEEL).setMixedBattleBgm("battle_kalos_elite"), - [TrainerType.DRASNA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRASNA"], false, Type.DRAGON).setMixedBattleBgm("battle_kalos_elite"), - [TrainerType.HALA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HALA"], true, Type.FIGHTING).setMixedBattleBgm("battle_alola_elite"), - [TrainerType.MOLAYNE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MOLAYNE"], true, Type.STEEL).setMixedBattleBgm("battle_alola_elite"), - [TrainerType.OLIVIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["OLIVIA"], false, Type.ROCK).setMixedBattleBgm("battle_alola_elite"), - [TrainerType.ACEROLA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["ACEROLA"], false, Type.GHOST).setMixedBattleBgm("battle_alola_elite"), - [TrainerType.KAHILI]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAHILI"], false, Type.FLYING).setMixedBattleBgm("battle_alola_elite"), - [TrainerType.MARNIE_ELITE]: new TrainerConfig(++t).setName("Marnie").initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, Type.DARK).setMixedBattleBgm("battle_galar_elite"), - [TrainerType.NESSA_ELITE]: new TrainerConfig(++t).setName("Nessa").initForEliteFour(signatureSpecies["NESSA_ELITE"], false, Type.WATER).setMixedBattleBgm("battle_galar_elite"), - [TrainerType.BEA_ELITE]: new TrainerConfig(++t).setName("Bea").initForEliteFour(signatureSpecies["BEA_ELITE"], false, Type.FIGHTING).setMixedBattleBgm("battle_galar_elite"), - [TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t).setName("Allister").initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, Type.GHOST).setMixedBattleBgm("battle_galar_elite"), - [TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t).setName("Raihan").initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, Type.DRAGON).setMixedBattleBgm("battle_galar_elite"), - [TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["RIKA"], false, Type.GROUND).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["POPPY"], false, Type.STEEL).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour(signatureSpecies["LARRY_ELITE"], true, Type.NORMAL, Type.FLYING).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HASSEL"], true, Type.DRAGON).setMixedBattleBgm("battle_paldea_elite"), - [TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CRISPIN"], true, Type.FIRE).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AMARYS"], false, Type.STEEL).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.LACEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LACEY"], false, Type.FAIRY).setMixedBattleBgm("battle_bb_elite"), - [TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"], true, Type.DRAGON).setMixedBattleBgm("battle_bb_elite"), - - [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion(signatureSpecies["BLUE"], true).setBattleBgm("battle_kanto_champion").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.RED]: new TrainerConfig(++t).initForChampion(signatureSpecies["RED"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { - p.formIndex = 8; - p.generateAndPopulateMoveset(); - p.generateName(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(signatureSpecies["LANCE_CHAMPION"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { - p.abilityIndex = 1; // Drizzle - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.SWAMPERT], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - })), - [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(signatureSpecies["CYNTHIA"], false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(signatureSpecies["ALDER"], true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })), - [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(signatureSpecies["IRIS"], false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"], false).setMixedBattleBgm("battle_kalos_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"], true).setMixedBattleBgm("battle_alola_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })), - [TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"], true).setMixedBattleBgm("battle_galar_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { - p.formIndex = 3; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"], false).setMixedBattleBgm("battle_champion_geeta") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })), - [TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"], false).setMixedBattleBgm("battle_champion_nemona") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { - p.formIndex = 0; // Midday form - p.generateAndPopulateMoveset(); - })), - [TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"], true).setMixedBattleBgm("battle_champion_kieran") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })), - - [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) - .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)), - [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) - .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), - [TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540), - [TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? - }), - [TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, - p => p.setBoss(true, 2))) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 3); - p.pokeball = PokeballType.MASTER_BALL; - p.shiny = true; - p.variant = 1; - })) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; //TODO: is the bang correct? - }), - [TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, - p => { - p.setBoss(true, 3); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true, - p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { - p.setBoss(); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - p.shiny = true; - p.variant = 1; - p.formIndex = 1; - p.generateName(); - })) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? - }), - - [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PERSIAN, Species.ALOLA_PERSIAN])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NIDOKING, Species.NIDOQUEEN])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RHYPERIOR])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DUGTRIO, Species.ALOLA_DUGTRIO])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAROWAK, Species.ALOLA_MAROWAK])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.TYRANITAR, Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HIPPOWDON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXCADRILL])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.GLISCOR])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.WEEZING, Species.GALAR_WEEZING])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGMORTAR, Species.TORKOAL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FLYGON])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SOLROCK, Species.TYPHLOSION], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TORKOAL, Species.NINETALES], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // DROUGHT - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SHIFTRY, Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 0; // Chlorophyll - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GREAT_TUSK])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GROUDON], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LINOONE])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.PELIPPER])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.ALOLA_MUK])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.WAILORD])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KINGDRA, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.POLITOED, Species.PELIPPER], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Drizzle - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BEARTIC, Species.ARMALDO], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Swift Swim - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HUNTAIL, Species.GOREBYSS], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 0; // Swift Swim - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYOGRE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", []).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GYARADOS, Species.BASCULEGION])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HONCHKROW, Species.HISUI_BRAVIARY])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.CROBAT, Species.OVERQWIL])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })), - [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ELECTRODE, Species.HISUI_ELECTRODE])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE, Species.ROARING_MOON])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DARKRAI], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", []).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS, Species.RUNERIGUS])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BOUFFALANT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SEISMITOAD, Species.CARRACOSTA])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EELEKTROSS, Species.GALVANTULA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.VOLCARONA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })), - [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SLITHER_WING, Species.IRON_MOTH], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.DURANT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DARMANITAN, Species.GALAR_DARMANITAN])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KINGAMBIT])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HYDREIGON, Species.IRON_JUGULIS], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYUREM], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", []).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIENSHAO])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HONCHKROW, Species.TALONFLAME])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PYROAR])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MILOTIC])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HELIOLISK])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GYARADOS], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SCREAM_TAIL, Species.FLUTTER_MANE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GHOLDENGO, Species.AEGISLASH])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PYROAR])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA, Species.HISUI_GOODRA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GYARADOS], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.YVELTAL], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), -}; +import BattleScene, {startingWave} from "../battle-scene"; +import {ModifierTypeFunc, modifierTypes} from "../modifier/modifier-type"; +import {EnemyPokemon} from "../field/pokemon"; +import * as Utils from "../utils"; +import {PokeballType} from "./pokeball"; +import {pokemonEvolutions, pokemonPrevolutions} from "./pokemon-evolutions"; +import PokemonSpecies, {getPokemonSpecies, PokemonSpeciesFilter} from "./pokemon-species"; +import {tmSpecies} from "./tms"; +import {Type} from "./type"; +import {doubleBattleDialogue} from "./dialogue"; +import {PersistentModifier} from "../modifier/modifier"; +import {TrainerVariant} from "../field/trainer"; +import {getIsInitialized, initI18n} from "#app/plugins/i18n"; +import i18next from "i18next"; +import {Moves} from "#enums/moves"; +import {PartyMemberStrength} from "#enums/party-member-strength"; +import {Species} from "#enums/species"; +import {TrainerType} from "#enums/trainer-type"; +import {Gender} from "./gender"; + +export enum TrainerPoolTier { + COMMON, + UNCOMMON, + RARE, + SUPER_RARE, + ULTRA_RARE +} + +export interface TrainerTierPools { + [key: integer]: Species[] +} + +export enum TrainerSlot { + NONE, + TRAINER, + TRAINER_PARTNER +} + +export class TrainerPartyTemplate { + public size: integer; + public strength: PartyMemberStrength; + public sameSpecies: boolean; + public balanced: boolean; + + constructor(size: integer, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { + this.size = size; + this.strength = strength; + this.sameSpecies = !!sameSpecies; + this.balanced = !!balanced; + } + + getStrength(index: integer): PartyMemberStrength { + return this.strength; + } + + isSameSpecies(index: integer): boolean { + return this.sameSpecies; + } + + isBalanced(index: integer): boolean { + return this.balanced; + } +} + +export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { + public templates: TrainerPartyTemplate[]; + + constructor(...templates: TrainerPartyTemplate[]) { + super(templates.reduce((total: integer, template: TrainerPartyTemplate) => { + total += template.size; + return total; + }, 0), PartyMemberStrength.AVERAGE); + this.templates = templates; + } + + getStrength(index: integer): PartyMemberStrength { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.getStrength(index - t); + } + t += template.size; + } + + return super.getStrength(index); + } + + isSameSpecies(index: integer): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isSameSpecies(index - t); + } + t += template.size; + } + + return super.isSameSpecies(index); + } + + isBalanced(index: integer): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isBalanced(index - t); + } + t += template.size; + } + + return super.isBalanced(index); + } +} + +export const trainerPartyTemplates = { + ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), + TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true)), + TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true)), + TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), + THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), + THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), + THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), + THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), + FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), + FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), + FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), + FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), + FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), + FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), + FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), + FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), + SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), + SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), + SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), + SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), + + GYM_LEADER_1: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + GYM_LEADER_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + GYM_LEADER_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + GYM_LEADER_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + GYM_LEADER_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + + ELITE_FOUR: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + + CHAMPION: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), new TrainerPartyTemplate(5, PartyMemberStrength.STRONG, false, true)), + + RIVAL: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + RIVAL_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), + RIVAL_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), + RIVAL_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), + RIVAL_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + RIVAL_6: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)) +}; + +type PartyTemplateFunc = (scene: BattleScene) => TrainerPartyTemplate; +type PartyMemberFunc = (scene: BattleScene, level: integer, strength: PartyMemberStrength) => EnemyPokemon; +type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; + +export interface PartyMemberFuncs { + [key: integer]: PartyMemberFunc +} + +export class TrainerConfig { + public trainerType: TrainerType; + public trainerTypeDouble: TrainerType; + public name: string; + public nameFemale: string; + public nameDouble: string; + public title: string; + public titleDouble: string; + public hasGenders: boolean = false; + public hasDouble: boolean = false; + public hasCharSprite: boolean = false; + public doubleOnly: boolean = false; + public moneyMultiplier: number = 1; + public isBoss: boolean = false; + public hasStaticParty: boolean = false; + public useSameSeedForAllMembers: boolean = false; + public mixedBattleBgm: string; + public battleBgm: string; + public encounterBgm: string; + public femaleEncounterBgm: string; + public doubleEncounterBgm: string; + public victoryBgm: string; + public genModifiersFunc: GenModifiersFunc; + public modifierRewardFuncs: ModifierTypeFunc[] = []; + public partyTemplates: TrainerPartyTemplate[]; + public partyTemplateFunc: PartyTemplateFunc; + public partyMemberFuncs: PartyMemberFuncs = {}; + public speciesPools: TrainerTierPools; + public speciesFilter: PokemonSpeciesFilter; + public specialtyTypes: Type[] = []; + public hasVoucher: boolean = false; + + public encounterMessages: string[] = []; + public victoryMessages: string[] = []; + public defeatMessages: string[] = []; + + public femaleEncounterMessages: string[]; + public femaleVictoryMessages: string[]; + public femaleDefeatMessages: string[]; + + public doubleEncounterMessages: string[]; + public doubleVictoryMessages: string[]; + public doubleDefeatMessages: string[]; + + constructor(trainerType: TrainerType, allowLegendaries?: boolean) { + this.trainerType = trainerType; + this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); + this.battleBgm = "battle_trainer"; + this.mixedBattleBgm = "battle_trainer"; + this.victoryBgm = "victory_trainer"; + this.partyTemplates = [trainerPartyTemplates.TWO_AVG]; + this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden(); + } + + getKey(): string { + return TrainerType[this.getDerivedType()].toString().toLowerCase(); + } + + getSpriteKey(female?: boolean, isDouble: boolean = false): string { + let ret = this.getKey(); + if (this.hasGenders) { + ret += `_${female ? "f" : "m"}`; + } + // If a special double trainer class was set, set it as the sprite key + if (this.trainerTypeDouble && female && isDouble) { + // Get the derived type for the double trainer since the sprite key is based on the derived type + ret = TrainerType[this.getDerivedType(this.trainerTypeDouble)].toString().toLowerCase(); + } + return ret; + } + + setName(name: string): TrainerConfig { + if (name === "Finn") { + // Give the rival a localized name + // First check if i18n is initialized + if (!getIsInitialized()) { + initI18n(); + } + // This is only the male name, because the female name is handled in a different function (setHasGenders) + if (name === "Finn") { + name = i18next.t("trainerNames:rival"); + } + } + this.name = name; + return this; + } + + /** + * Sets if a boss trainer will have a voucher or not. + * @param hasVoucher - If the boss trainer will have a voucher. + */ + setHasVoucher(hasVoucher: boolean): void { + this.hasVoucher = hasVoucher; + } + + setTitle(title: string): TrainerConfig { + // First check if i18n is initialized + if (!getIsInitialized()) { + initI18n(); + } + + // Make the title lowercase and replace spaces with underscores + title = title.toLowerCase().replace(/\s/g, "_"); + + // Get the title from the i18n file + this.title = i18next.t(`titles:${title}`); + + + return this; + } + + + /** + * Returns the derived trainer type for a given trainer type. + * @param trainerTypeToDeriveFrom - The trainer type to derive from. (If null, the this.trainerType property will be used.) + * @returns {TrainerType} - The derived trainer type. + */ + getDerivedType(trainerTypeToDeriveFrom: TrainerType | null = null): TrainerType { + let trainerType = trainerTypeToDeriveFrom ? trainerTypeToDeriveFrom : this.trainerType; + switch (trainerType) { + case TrainerType.RIVAL_2: + case TrainerType.RIVAL_3: + case TrainerType.RIVAL_4: + case TrainerType.RIVAL_5: + case TrainerType.RIVAL_6: + trainerType = TrainerType.RIVAL; + break; + case TrainerType.LANCE_CHAMPION: + trainerType = TrainerType.LANCE; + break; + case TrainerType.LARRY_ELITE: + trainerType = TrainerType.LARRY; + break; + case TrainerType.ROCKET_BOSS_GIOVANNI_1: + case TrainerType.ROCKET_BOSS_GIOVANNI_2: + trainerType = TrainerType.GIOVANNI; + break; + case TrainerType.MAXIE_2: + trainerType = TrainerType.MAXIE; + break; + case TrainerType.ARCHIE_2: + trainerType = TrainerType.ARCHIE; + break; + case TrainerType.CYRUS_2: + trainerType = TrainerType.CYRUS; + break; + case TrainerType.GHETSIS_2: + trainerType = TrainerType.GHETSIS; + break; + case TrainerType.LYSANDRE_2: + trainerType = TrainerType.LYSANDRE; + break; + case TrainerType.LUSAMINE_2: + trainerType = TrainerType.LUSAMINE; + break; + case TrainerType.GUZMA_2: + trainerType = TrainerType.GUZMA; + break; + case TrainerType.ROSE_2: + trainerType = TrainerType.ROSE; + break; + case TrainerType.MARNIE_ELITE: + trainerType = TrainerType.MARNIE; + break; + case TrainerType.NESSA_ELITE: + trainerType = TrainerType.NESSA; + break; + case TrainerType.BEA_ELITE: + trainerType = TrainerType.BEA; + break; + case TrainerType.ALLISTER_ELITE: + trainerType = TrainerType.ALLISTER; + break; + case TrainerType.RAIHAN_ELITE: + trainerType = TrainerType.RAIHAN; + break; + } + + return trainerType; + } + + /** + * Sets the configuration for trainers with genders, including the female name and encounter background music (BGM). + * @param {string} [nameFemale] - The name of the female trainer. If 'Ivy', a localized name will be assigned. + * @param {TrainerType | string} [femaleEncounterBgm] - The encounter BGM for the female trainer, which can be a TrainerType or a string. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + **/ + setHasGenders(nameFemale?: string, femaleEncounterBgm?: TrainerType | string): TrainerConfig { + // If the female name is 'Ivy' (the rival), assign a localized name. + if (nameFemale === "Ivy") { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + // Initialize the i18n system if it is not already initialized. + initI18n(); + } + // Set the localized name for the female rival. + this.nameFemale = i18next.t("trainerNames:rival_female"); + } else { + // Otherwise, assign the provided female name. + this.nameFemale = nameFemale!; // TODO: is this bang correct? + } + + // Indicate that this trainer configuration includes genders. + this.hasGenders = true; + + // If a female encounter BGM is provided. + if (femaleEncounterBgm) { + // If the BGM is a TrainerType (number), convert it to a string, replace underscores with spaces, and convert to lowercase. + // Otherwise, assign the provided string as the BGM. + this.femaleEncounterBgm = typeof femaleEncounterBgm === "number" + ? TrainerType[femaleEncounterBgm].toString().replace(/_/g, " ").toLowerCase() + : femaleEncounterBgm; + } + + // Return the updated TrainerConfig instance. + return this; + } + + /** + * Sets the configuration for trainers with double battles, including the name of the double trainer and the encounter BGM. + * @param nameDouble - The name of the double trainer (e.g., "Ace Duo" for Trainer Class Doubles or "red_blue_double" for NAMED trainer doubles). + * @param doubleEncounterBgm - The encounter BGM for the double trainer, which can be a TrainerType or a string. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + */ + setHasDouble(nameDouble: string, doubleEncounterBgm?: TrainerType | string): TrainerConfig { + this.hasDouble = true; + this.nameDouble = nameDouble; + if (doubleEncounterBgm) { + this.doubleEncounterBgm = typeof doubleEncounterBgm === "number" ? TrainerType[doubleEncounterBgm].toString().replace(/\_/g, " ").toLowerCase() : doubleEncounterBgm; + } + return this; + } + + /** + * Sets the trainer type for double battles. + * @param trainerTypeDouble - The TrainerType of the partner in a double battle. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + */ + setDoubleTrainerType(trainerTypeDouble: TrainerType): TrainerConfig { + this.trainerTypeDouble = trainerTypeDouble; + this.setDoubleMessages(this.nameDouble); + return this; + } + + /** + * Sets the encounter and victory messages for double trainers. + * @param nameDouble - The name of the pair (e.g. "red_blue_double"). + */ + setDoubleMessages(nameDouble: string) { + // Check if there is double battle dialogue for this trainer + if (doubleBattleDialogue[nameDouble]) { + // Set encounter and victory messages for double trainers + this.doubleEncounterMessages = doubleBattleDialogue[nameDouble].encounter; + this.doubleVictoryMessages = doubleBattleDialogue[nameDouble].victory; + this.doubleDefeatMessages = doubleBattleDialogue[nameDouble].defeat; + } + } + + /** + * Sets the title for double trainers + * @param titleDouble - the key for the title in the i18n file. (e.g., "champion_double"). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + */ + setDoubleTitle(titleDouble: string): TrainerConfig { + // First check if i18n is initialized + if (!getIsInitialized()) { + initI18n(); + } + + // Make the title lowercase and replace spaces with underscores + titleDouble = titleDouble.toLowerCase().replace(/\s/g, "_"); + + // Get the title from the i18n file + this.titleDouble = i18next.t(`titles:${titleDouble}`); + + return this; + } + + setHasCharSprite(): TrainerConfig { + this.hasCharSprite = true; + return this; + } + + setDoubleOnly(): TrainerConfig { + this.doubleOnly = true; + return this; + } + + setMoneyMultiplier(moneyMultiplier: number): TrainerConfig { + this.moneyMultiplier = moneyMultiplier; + return this; + } + + setBoss(): TrainerConfig { + this.isBoss = true; + return this; + } + + setStaticParty(): TrainerConfig { + this.hasStaticParty = true; + return this; + } + + setUseSameSeedForAllMembers(): TrainerConfig { + this.useSameSeedForAllMembers = true; + return this; + } + + setMixedBattleBgm(mixedBattleBgm: string): TrainerConfig { + this.mixedBattleBgm = mixedBattleBgm; + return this; + } + + setBattleBgm(battleBgm: string): TrainerConfig { + this.battleBgm = battleBgm; + return this; + } + + setEncounterBgm(encounterBgm: TrainerType | string): TrainerConfig { + this.encounterBgm = typeof encounterBgm === "number" ? TrainerType[encounterBgm].toString().toLowerCase() : encounterBgm; + return this; + } + + setVictoryBgm(victoryBgm: string): TrainerConfig { + this.victoryBgm = victoryBgm; + return this; + } + + setPartyTemplates(...partyTemplates: TrainerPartyTemplate[]): TrainerConfig { + this.partyTemplates = partyTemplates; + return this; + } + + setPartyTemplateFunc(partyTemplateFunc: PartyTemplateFunc): TrainerConfig { + this.partyTemplateFunc = partyTemplateFunc; + return this; + } + + setPartyMemberFunc(slotIndex: integer, partyMemberFunc: PartyMemberFunc): TrainerConfig { + this.partyMemberFuncs[slotIndex] = partyMemberFunc; + return this; + } + + setSpeciesPools(speciesPools: TrainerTierPools | Species[]): TrainerConfig { + this.speciesPools = (Array.isArray(speciesPools) ? {[TrainerPoolTier.COMMON]: speciesPools} : speciesPools) as unknown as TrainerTierPools; + return this; + } + + setSpeciesFilter(speciesFilter: PokemonSpeciesFilter, allowLegendaries?: boolean): TrainerConfig { + const baseFilter = this.speciesFilter; + this.speciesFilter = allowLegendaries ? speciesFilter : species => speciesFilter(species) && baseFilter(species); + return this; + } + + setSpecialtyTypes(...specialtyTypes: Type[]): TrainerConfig { + this.specialtyTypes = specialtyTypes; + return this; + } + + setGenModifiersFunc(genModifiersFunc: GenModifiersFunc): TrainerConfig { + this.genModifiersFunc = genModifiersFunc; + return this; + } + + setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { + this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => { + const modifierTypeFunc = func(); + const modifierType = modifierTypeFunc(); + modifierType.withIdFromFunc(modifierTypeFunc); + return modifierType; + }); + return this; + } + + /** + * Returns the pool of species for an evil team admin + * @param team - The evil team the admin belongs to. + * @returns {TrainerTierPools} + */ + speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { + team = team.toLowerCase(); + switch (team) { + case "rocket": { + return { + [TrainerPoolTier.COMMON]: [Species.RATTATA, Species.KOFFING, Species.EKANS, Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], + [TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], + [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR] + }; + } + case "magma": { + return { + [TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR], + [TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR], + [TrainerPoolTier.RARE]: [Species.CAPSAKID, Species.CHARCADET] + }; + } + case "aqua": { + return { + [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.CORPHISH, Species.ZIGZAGOON, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], + [TrainerPoolTier.UNCOMMON]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], + [TrainerPoolTier.RARE]: [Species.DONDOZO] + }; + } + case "galactic": { + return { + [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], + [TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], + [TrainerPoolTier.RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] + }; + } + case "plasma": { + return { + [TrainerPoolTier.COMMON]: [Species.SCRAFTY, Species.LILLIPUP, Species.PURRLOIN, Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], + [TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], + [TrainerPoolTier.RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] + }; + } + case "flare": { + return { + [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], + [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], + [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON] + }; + } + case "aether": { + return { + [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU], + [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWKING, Species.MEDITITE, Species.BELDUM, Species.ORANGURU, Species.HATTERENE, Species.INKAY, Species.RALTS], + [TrainerPoolTier.RARE]: [Species.ARMAROUGE, Species.GIRAFARIG, Species.PORYGON] + }; + } + case "skull": { + return { + [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.LURANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING], + [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWBRO, Species.SKORUPI, Species.PALDEA_WOOPER, Species.NIDORAN_F, Species.CROAGUNK, Species.MANDIBUZZ], + [TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.HISUI_SNEASEL] + }; + } + case "macro": { + return { + [TrainerPoolTier.COMMON]: [ Species.HATTERENE, Species.MILOTIC, Species.TSAREENA, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS], + [TrainerPoolTier.UNCOMMON]: [Species.MANDIBUZZ, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.SINISTEA, Species.APPLIN], + [TrainerPoolTier.RARE]: [Species.TINKATINK, Species.HISUI_LILLIGANT] + }; + } + } + + console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); + return []; + } + + /** + * Initializes the trainer configuration for an evil team admin. + * @param title - The title of the evil team admin. + * @param poolName - The evil team the admin belongs to. + * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForEvilTeamAdmin(title: string, poolName: string, signatureSpecies: (Species | Species[])[],): TrainerConfig { + if (!getIsInitialized()) { + initI18n(); + } + this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); + + // Set the species pools for the evil team admin. + this.speciesPools = this.speciesPoolPerEvilTeamAdmin(poolName); + + signatureSpecies.forEach((speciesPool, s) => { + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + this.setHasVoucher(false); + this.setTitle(title); + this.setMoneyMultiplier(1.5); + this.setBoss(); + this.setStaticParty(); + this.setBattleBgm("battle_plasma_boss"); + this.setVictoryBgm("victory_team_plasma"); + + return this; + } + + /** + * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. + * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. + * @param {Type[]} specialtyTypes - The specialty types for the evil team Leader. + * @param boolean whether or not this is the rematch fight + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], rematch: boolean = false, ...specialtyTypes: Type[]): TrainerConfig { + if (!getIsInitialized()) { + initI18n(); + } + if (rematch) { + this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); + } else { + this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); + } + signatureSpecies.forEach((speciesPool, s) => { + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); + this.setSpecialtyTypes(...specialtyTypes); + } + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + this.setTitle(title); + this.setMoneyMultiplier(2.5); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_plasma_boss"); + this.setVictoryBgm("victory_team_plasma"); + + return this; + } + + /** + * Initializes the trainer configuration for a Gym Leader. + * @param {Species | Species[]} signatureSpecies - The signature species for the Gym Leader. + * @param {Type[]} specialtyTypes - The specialty types for the Gym Leader. + * @param isMale - Whether the Gym Leader is Male or Not (for localization of the title). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForGymLeader(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + + // Set the function to generate the Gym Leader's party template. + this.setPartyTemplateFunc(getGymLeaderPartyTemplate); + + // Set up party members with their corresponding species. + signatureSpecies.forEach((speciesPool, s) => { + // Ensure speciesPool is an array. + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + // Set a function to get a random party member from the species pool. + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + // If specialty types are provided, set species filter and specialty types. + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); + this.setSpecialtyTypes(...specialtyTypes); + } + + // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + + // Set the title to "gym_leader". (this is the key in the i18n file) + this.setTitle("gym_leader"); + if (!isMale) { + this.setTitle("gym_leader_female"); + } + + // Configure various properties for the Gym Leader. + this.setMoneyMultiplier(2.5); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_unova_gym"); + this.setVictoryBgm("victory_gym"); + this.setGenModifiersFunc(party => { + const waveIndex = party[0].scene.currentBattle.waveIndex; + return getRandomTeraModifiers(party, waveIndex >= 100 ? 1 : 0, specialtyTypes.length ? specialtyTypes : undefined); + }); + + return this; + } + + /** + * Initializes the trainer configuration for an Elite Four member. + * @param {Species | Species[]} signatureSpecies - The signature species for the Elite Four member. + * @param {Type[]} specialtyTypes - The specialty types for the Elite Four member. + * @param isMale - Whether the Elite Four Member is Male or Female (for localization of the title). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + **/ + initForEliteFour(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + + // Set the party templates for the Elite Four. + this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); + + // Set up party members with their corresponding species. + signatureSpecies.forEach((speciesPool, s) => { + // Ensure speciesPool is an array. + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + // Set a function to get a random party member from the species pool. + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + // Set species filter and specialty types if provided, otherwise filter by base total. + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.some(t => p.isOfType(t)) && p.baseTotal >= 450); + this.setSpecialtyTypes(...specialtyTypes); + } else { + this.setSpeciesFilter(p => p.baseTotal >= 450); + } + + // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + + // Set the title to "elite_four". (this is the key in the i18n file) + this.setTitle("elite_four"); + if (!isMale) { + this.setTitle("elite_four_female"); + } + + // Configure various properties for the Elite Four member. + this.setMoneyMultiplier(3.25); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_unova_elite"); + this.setVictoryBgm("victory_gym"); + this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : undefined)); + + return this; + } + + /** + * Initializes the trainer configuration for a Champion. + * @param {Species | Species[]} signatureSpecies - The signature species for the Champion. + * @param isMale - Whether the Champion is Male or Female (for localization of the title). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + **/ + initForChampion(signatureSpecies: (Species | Species[])[], isMale: boolean): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + + // Set the party templates for the Champion. + this.setPartyTemplates(trainerPartyTemplates.CHAMPION); + + // Set up party members with their corresponding species. + signatureSpecies.forEach((speciesPool, s) => { + // Ensure speciesPool is an array. + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + // Set a function to get a random party member from the species pool. + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + // Set species filter to only include species with a base total of 470 or higher. + this.setSpeciesFilter(p => p.baseTotal >= 470); + + // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + + // Set the title to "champion". (this is the key in the i18n file) + this.setTitle("champion"); + if (!isMale) { + this.setTitle("champion_female"); + } + + + // Configure various properties for the Champion. + this.setMoneyMultiplier(10); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_champion_alder"); + this.setVictoryBgm("victory_champion"); + this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 3)); + + return this; + } + + /** + * Retrieves the title for the trainer based on the provided trainer slot and variant. + * @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE. + * @param {TrainerVariant} variant - The variant of the trainer to determine the specific title. + * @returns {string} - The title of the trainer. + **/ + getTitle(trainerSlot: TrainerSlot = TrainerSlot.NONE, variant: TrainerVariant): string { + const ret = this.name; + + // Check if the variant is double and the name for double exists + if (!trainerSlot && variant === TrainerVariant.DOUBLE && this.nameDouble) { + return this.nameDouble; + } + + // Female variant + if (this.hasGenders) { + // If the name is already set + if (this.nameFemale) { + // Check if the variant is either female or this is for the partner in a double battle + if (variant === TrainerVariant.FEMALE || (variant === TrainerVariant.DOUBLE && trainerSlot === TrainerSlot.TRAINER_PARTNER)) { + return this.nameFemale; + } + } else + // Check if !variant is true, if so return the name, else return the name with _female appended + if (variant) { + if (!getIsInitialized()) { + initI18n(); + } + // Check if the female version exists in the i18n file + if (i18next.exists(`trainerClasses:${this.name.toLowerCase()}`)) { + // If it does, return + return ret + "_female"; + } else { + // If it doesn't, we do not do anything and go to the normal return + // This is to prevent the game from displaying an error if a female version of the trainer does not exist in the localization + } + } + } + + return ret; + } + + loadAssets(scene: BattleScene, variant: TrainerVariant): Promise { + return new Promise(resolve => { + const isDouble = variant === TrainerVariant.DOUBLE; + const trainerKey = this.getSpriteKey(variant === TrainerVariant.FEMALE, false); + const partnerTrainerKey = this.getSpriteKey(true, true); + scene.loadAtlas(trainerKey, "trainer"); + if (isDouble) { + scene.loadAtlas(partnerTrainerKey, "trainer"); + } + scene.load.once(Phaser.Loader.Events.COMPLETE, () => { + const originalWarn = console.warn; + // Ignore warnings for missing frames, because there will be a lot + console.warn = () => { + }; + const frameNames = scene.anims.generateFrameNames(trainerKey, { + zeroPad: 4, + suffix: ".png", + start: 1, + end: 128 + }); + const partnerFrameNames = isDouble + ? scene.anims.generateFrameNames(partnerTrainerKey, { + zeroPad: 4, + suffix: ".png", + start: 1, + end: 128 + }) + : ""; + console.warn = originalWarn; + if (!(scene.anims.exists(trainerKey))) { + scene.anims.create({ + key: trainerKey, + frames: frameNames, + frameRate: 24, + repeat: -1 + }); + } + if (isDouble && !(scene.anims.exists(partnerTrainerKey))) { + scene.anims.create({ + key: partnerTrainerKey, + frames: partnerFrameNames, + frameRate: 24, + repeat: -1 + }); + } + resolve(); + }); + if (!scene.load.isLoading()) { + scene.load.start(); + } + }); + } +} + +let t = 0; + +interface TrainerConfigs { + [key: integer]: TrainerConfig +} + +/** + * The function to get variable strength grunts + * @param scene the singleton scene being passed in + * @returns the correct TrainerPartyTemplate + */ +function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { + const waveIndex = scene.currentBattle?.waveIndex; + if (waveIndex < 40) { + return trainerPartyTemplates.TWO_AVG; + } else if (waveIndex < 63) { + return trainerPartyTemplates.THREE_AVG; + } else if (waveIndex < 65) { + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + } else if (waveIndex < 112) { + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + } else { + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger + } +} + +function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) { + return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; +} + +function getGymLeaderPartyTemplate(scene: BattleScene) { + return getWavePartyTemplate(scene, trainerPartyTemplates.GYM_LEADER_1, trainerPartyTemplates.GYM_LEADER_2, trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5); +} + +function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution: boolean = false, postProcess?: (enemyPokemon: EnemyPokemon) => void): PartyMemberFunc { + return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { + let species = Utils.randSeedItem(speciesPool); + if (!ignoreEvolution) { + species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex); + } + return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess); + }; +} + +function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilter, trainerSlot: TrainerSlot = TrainerSlot.TRAINER, allowLegendaries?: boolean, postProcess?: (EnemyPokemon: EnemyPokemon) => void): PartyMemberFunc { + const originalSpeciesFilter = speciesFilter; + speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species); + return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { + const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex)), level, trainerSlot, undefined, undefined, postProcess); + return ret; + }; +} + +function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: Type[]): PersistentModifier[] { + const ret: PersistentModifier[] = []; + const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i); + for (let t = 0; t < Math.min(count, party.length); t++) { + const randomIndex = Utils.randSeedItem(partyMemberIndexes); + partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); + ret.push(modifierTypes.TERA_SHARD().generateType([], [Utils.randSeedItem(types ? types : party[randomIndex].getTypes())])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? + } + return ret; +} + +type SignatureSpecies = { + [key in string]: (Species | Species[])[]; +}; + +/* + * The signature species for each Gym Leader, Elite Four member, and Champion. + * The key is the trainer type, and the value is an array of Species or Species arrays. + * This is in a separate const so it can be accessed from other places and not just the trainerConfigs + */ +export const signatureSpecies: SignatureSpecies = { + BROCK: [Species.GEODUDE, Species.ONIX], + MISTY: [Species.STARYU, Species.PSYDUCK], + LT_SURGE: [Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ], + ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], + JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT], + SABRINA: [Species.ABRA, Species.MR_MIME, Species.ESPEON], + BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGMAR], + GIOVANNI: [Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F], + FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.DODUO], + BUGSY: [Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR], + WHITNEY: [Species.GIRAFARIG, Species.MILTANK], + MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE], + CHUCK: [Species.POLIWRATH, Species.MANKEY], + JASMINE: [Species.MAGNEMITE, Species.STEELIX], + PRYCE: [Species.SEEL, Species.SWINUB], + CLAIR: [Species.DRATINI, Species.HORSEA, Species.GYARADOS], + ROXANNE: [Species.GEODUDE, Species.NOSEPASS], + BRAWLY: [Species.MACHOP, Species.MAKUHITA], + WATTSON: [Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE], + FLANNERY: [Species.SLUGMA, Species.TORKOAL, Species.NUMEL], + NORMAN: [Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN], + WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], + TATE: [Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE], + LIZA: [Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR], + JUAN: [Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH], + ROARK: [Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE], + GARDENIA: [Species.ROSELIA, Species.TANGELA, Species.TURTWIG], + MAYLENE: [Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR], + CRASHER_WAKE: [Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP], + FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB], + BYRON: [Species.SHIELDON, Species.BRONZOR, Species.AGGRON], + CANDICE: [Species.SNEASEL, Species.SNOVER, Species.SNORUNT], + VOLKNER: [Species.SHINX, Species.CHINCHOU, Species.ROTOM], + CILAN: [Species.PANSAGE, Species.COTTONEE, Species.PETILIL], + CHILI: [Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR], + CRESS: [Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE], + CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PATRAT], + LENORA: [Species.KANGASKHAN, Species.DEERLING, Species.AUDINO], + ROXIE: [Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI], + BURGH: [Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST], + ELESA: [Species.EMOLGA, Species.BLITZLE, Species.JOLTIK], + CLAY: [Species.DRILBUR, Species.SANDILE, Species.GOLETT], + SKYLA: [Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET], + BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO], + DRAYDEN: [Species.DRUDDIGON, Species.AXEW, Species.DEINO], + MARLON: [Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA], + VIOLA: [Species.SURSKIT, Species.SCATTERBUG], + GRANT: [Species.AMAURA, Species.TYRUNT], + KORRINA: [Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO], + RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT], + CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA], + VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME], + OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.SLOWKING], + WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL], + MILO: [Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET], + NESSA: [Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD], + KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL], + BEA: [Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS], + ALLISTER: [Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY], + OPAL: [Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING], + BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR], + GORDIE: [Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE], + MELONY: [Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME], + PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY], + MARNIE: [Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO], + RAIHAN: [Species.DURALUDON, Species.TURTONATOR, Species.GOOMY], + KATY: [Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS], + BRASSIUS: [Species.SMOLIV, Species.SHROOMISH, Species.ODDISH], + IONO: [Species.TADBULB, Species.WATTREL, Species.VOLTORB], + KOFU: [Species.VELUZA, Species.WIGLETT, Species.WINGULL], + LARRY: [Species.STARLY, Species.DUNSPARCE, Species.KOMALA], + RYME: [Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], + TULIP: [Species.GIRAFARIG, Species.FLITTLE, Species.RALTS], + GRUSHA: [Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO], + LORELEI: [Species.JYNX, [Species.SLOWBRO, Species.GALAR_SLOWBRO], Species.LAPRAS, [Species.ALOLA_SANDSLASH, Species.CLOYSTER]], + BRUNO: [Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [Species.ALOLA_GOLEM, Species.GOLEM]], + AGATHA: [Species.GENGAR, [Species.ARBOK, Species.WEEZING], Species.CROBAT, Species.ALOLA_MAROWAK], + LANCE: [Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR], + WILL: [Species.XATU, Species.JYNX, [Species.SLOWBRO, Species.SLOWKING], Species.EXEGGUTOR], + KOGA: [[Species.WEEZING, Species.MUK], [Species.VENOMOTH, Species.ARIADOS], Species.CROBAT, Species.TENTACRUEL], + KAREN: [Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE], + SIDNEY: [[Species.SHIFTRY, Species.CACTURNE], [Species.SHARPEDO, Species.CRAWDAUNT], Species.ABSOL, Species.MIGHTYENA], + PHOEBE: [Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [Species.MISMAGIUS, Species.DRIFBLIM]], + GLACIA: [Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW], + DRAKE: [Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA], + AARON: [[Species.SCIZOR, Species.KLEAVOR], Species.HERACROSS, [Species.VESPIQUEN, Species.YANMEGA], Species.DRAPION], + BERTHA: [Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR], + FLINT: [[Species.FLAREON, Species.RAPIDASH], Species.MAGMORTAR, [Species.STEELIX, Species.LOPUNNY], Species.INFERNAPE], + LUCIAN: [Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [Species.ALAKAZAM, Species.ESPEON]], + SHAUNTAL: [Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT], + MARSHAL: [Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK], + GRIMSLEY: [Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE], + CAITLIN: [Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS], + MALVA: [Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME], + SIEBOLD: [Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE], + WIKSTROM: [Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH], + DRASNA: [Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN], + HALA: [Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [Species.POLIWRATH, Species.ANNIHILAPE]], + MOLAYNE: [Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO], + OLIVIA: [Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC], + ACEROLA: [[Species.BANETTE, Species.DRIFBLIM], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND], + KAHILI: [[Species.BRAVIARY, Species.MANDIBUZZ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON], + MARNIE_ELITE: [Species.MORPEKO, Species.LIEPARD, [Species.TOXICROAK, Species.SCRAFTY], Species.GRIMMSNARL], + NESSA_ELITE: [Species.GOLISOPOD, [Species.PELIPPER, Species.QUAGSIRE], Species.TOXAPEX, Species.DREDNAW], + BEA_ELITE: [Species.HAWLUCHA, [Species.GRAPPLOCT, Species.SIRFETCHD], Species.FALINKS, Species.MACHAMP], + ALLISTER_ELITE: [Species.DUSKNOIR, [Species.POLTEAGEIST, Species.RUNERIGUS], Species.CURSOLA, Species.GENGAR], + RAIHAN_ELITE: [Species.GOODRA, [Species.TORKOAL, Species.TURTONATOR], Species.FLYGON, Species.ARCHALUDON], + RIKA: [Species.WHISCASH, [Species.DONPHAN, Species.DUGTRIO], Species.CAMERUPT, Species.CLODSIRE], + POPPY: [Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON], + LARRY_ELITE: [Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS], + HASSEL: [Species.NOIVERN, [Species.FLAPPLE, Species.APPLETUN], Species.DRAGALGE, Species.BAXCALIBUR], + CRISPIN: [Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN], + AMARYS: [Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS], + LACEY: [Species.EXCADRILL, Species.PRIMARINA, [Species.ALCREMIE, Species.GRANBULL], Species.WHIMSICOTT], + DRAYTON: [Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE], + BLUE: [[Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE], Species.HO_OH, [Species.RHYPERIOR, Species.MAGNEZONE]], // Alakazam lead, Mega Pidgeot + RED: [Species.LUGIA, Species.SNORLAX, [Species.ESPEON, Species.UMBREON, Species.SYLVEON]], // GMax Pikachu lead, Mega gen 1 starter + LANCE_CHAMPION: [Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR], // Aerodactyl lead, Mega Latias/Latios + STEVEN: [Species.AGGRON, [Species.ARMALDO, Species.CRADILY], Species.DIALGA], // Skarmory lead, Mega Metagross + WALLACE: [Species.MILOTIC, Species.PALKIA, Species.LUDICOLO], // Pelipper lead, Mega Swampert + CYNTHIA: [Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS], // Spiritomb lead, Mega Garchomp + ALDER: [Species.VOLCARONA, Species.ZEKROM, [Species.ACCELGOR, Species.ESCAVALIER], Species.KELDEO], // Bouffalant/Braviary lead + IRIS: [Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS], // Druddigon lead, Gmax Lapras + DIANTHA: [Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA], // Gourgeist lead, Mega Gardevoir + HAU: [[Species.SOLGALEO, Species.LUNALA], Species.NOIVERN, [Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA], [Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE]], // Alola Raichu lead + LEON: [Species.DRAGAPULT, [Species.ZACIAN, Species.ZAMAZENTA], Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard + GEETA: [Species.MIRAIDON, [Species.ESPATHRA, Species.VELUZA], [Species.AVALUGG, Species.HISUI_AVALUGG], Species.KINGAMBIT], // Glimmora lead + NEMONA: [Species.KORAIDON, Species.PAWMOT, [Species.DUDUNSPARCE, Species.ORTHWORM], [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL]], // Lycanroc lead + KIERAN: [[Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE], // Poliwrath/Politoed lead +}; + +export const trainerConfigs: TrainerConfigs = { + [TrainerType.UNKNOWN]: new TrainerConfig(0).setHasGenders(), + [TrainerType.ACE_TRAINER]: new TrainerConfig(++t).setHasGenders("Ace Trainer Female").setHasDouble("Ace Duo").setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), + [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) + .setSpeciesPools([Species.SMEARGLE]), + [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders("Backpacker Female").setHasDouble("Backpackers").setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER) + .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO], + [TrainerPoolTier.UNCOMMON]: [Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, Species.SKIDDO, Species.MUDBRAY], + [TrainerPoolTier.RARE]: [Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, Species.IMPIDIMP], + [TrainerPoolTier.SUPER_RARE]: [Species.GALAR_DARUMAKA, Species.TEDDIURSA] + }), + [TrainerType.BAKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.35).setSpeciesFilter(s => s.isOfType(Type.GRASS) || s.isOfType(Type.FIRE)), + [TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), + [TrainerType.BIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON)), + [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.FIGHTING) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR], + [TrainerPoolTier.UNCOMMON]: [Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, Species.STUFFUL, Species.CRABRAWLER], + [TrainerPoolTier.RARE]: [Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, Species.PASSIMIAN, Species.CLOBBOPUS], + [TrainerPoolTier.SUPER_RARE]: [Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O], + [TrainerPoolTier.ULTRA_RARE]: [Species.KUBFU] + }), + [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble("Breeders") + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) + .setSpeciesFilter(s => s.baseTotal < 450), + [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble("Colleagues").setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO], + [TrainerPoolTier.UNCOMMON]: [Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO], + [TrainerPoolTier.RARE]: [Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE] + }), + [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders("Cyclist Female").setHasDouble("Cyclists").setEncounterBgm(TrainerType.CYCLIST) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND], + [TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL], + [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA], + [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY] + }), + [TrainerType.DANCER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CYCLIST) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW], + [TrainerPoolTier.UNCOMMON]: [Species.SPINDA, Species.SWABLU, Species.MARACTUS,], + [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], + [TrainerPoolTier.SUPER_RARE]: [Species.POPPLIO] + }), + [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), + [TrainerType.DOCTOR]: new TrainerConfig(++t).setHasGenders("Nurse", "lass").setHasDouble("Medical Team").setMoneyMultiplier(3).setEncounterBgm(TrainerType.CLERK) + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), + [TrainerType.FIREBREATHER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK) + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(Type.FIRE)), + [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA], + [TrainerPoolTier.UNCOMMON]: [Species.POLIWAG, Species.SHELLDER, Species.KRABBY, Species.HORSEA, Species.CARVANHA, Species.BARBOACH, Species.CORPHISH, Species.FINNEON, Species.TYMPOLE, Species.BASCULIN, Species.FRILLISH, Species.INKAY], + [TrainerPoolTier.RARE]: [Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA], + [TrainerPoolTier.SUPER_RARE]: [Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO] + }), + [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), + [TrainerType.HARLEQUIN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PSYCHIC).setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), + [TrainerType.HIKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.BACKPACKER) + .setPartyTemplates(trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.ONE_STRONG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.SANDSHREW, Species.DIGLETT, Species.GEODUDE, Species.MACHOP, Species.ARON, Species.ROGGENROLA, Species.DRILBUR, Species.NACLI], + [TrainerPoolTier.UNCOMMON]: [Species.ZUBAT, Species.RHYHORN, Species.ONIX, Species.CUBONE, Species.WOOBAT, Species.SWINUB, Species.NOSEPASS, Species.HIPPOPOTAS, Species.DWEBBLE, Species.KLAWF, Species.TOEDSCOOL], + [TrainerPoolTier.RARE]: [Species.TORKOAL, Species.TRAPINCH, Species.BARBOACH, Species.GOLETT, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.GALAR_STUNFISK, Species.PALDEA_WOOPER], + [TrainerPoolTier.SUPER_RARE]: [Species.MAGBY, Species.LARVITAR] + }), + [TrainerType.HOOLIGANS]: new TrainerConfig(++t).setDoubleOnly().setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON) || s.isOfType(Type.DARK)), + [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.JANITOR]: new TrainerConfig(++t).setMoneyMultiplier(1.1).setEncounterBgm(TrainerType.CLERK), + [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), + [TrainerType.MUSICIAN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), + [TrainerType.HEX_MANIAC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PSYCHIC) + .setPartyTemplates(trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_AVG_ONE_STRONG, trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_STRONG) + .setSpeciesFilter(s => s.isOfType(Type.GHOST)), + [TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm("lass"), + [TrainerType.OFFICER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates(trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP, Species.YAMPER, Species.FIDOUGH], + [TrainerPoolTier.UNCOMMON]: [Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF], + [TrainerPoolTier.RARE]: [Species.JOLTEON, Species.RIOLU], + [TrainerPoolTier.SUPER_RARE]: [], + [TrainerPoolTier.ULTRA_RARE]: [Species.ENTEI, Species.SUICUNE, Species.RAIKOU] + }), + [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), + [TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), + [TrainerType.POKEFAN]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("PokéFan").setHasGenders("PokéFan Female").setHasDouble("PokéFan Family").setEncounterBgm(TrainerType.POKEFAN) + .setPartyTemplates(trainerPartyTemplates.SIX_WEAKER, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME), + [TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Preschooler Female", "lass").setHasDouble("Preschoolers") + .setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV], + [TrainerPoolTier.UNCOMMON]: [Species.EEVEE, Species.CLEFFA, Species.IGGLYBUFF, Species.SWINUB, Species.WOOPER, Species.DRIFLOON, Species.DEDENNE, Species.STUFFUL], + [TrainerPoolTier.RARE]: [Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS], + [TrainerPoolTier.SUPER_RARE]: [Species.DARUMAKA, Species.TINKATINK], + }), + [TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders("Psychic Female").setHasDouble("Psychics").setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA], + [TrainerPoolTier.UNCOMMON]: [Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, Species.INKAY, Species.ORANGURU], + [TrainerPoolTier.RARE]: [Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC], + [TrainerPoolTier.SUPER_RARE]: [Species.BELDUM, Species.ESPEON, Species.STANTLER], + }), + [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("Pokémon Ranger").setEncounterBgm(TrainerType.BACKPACKER).setHasGenders("Pokémon Ranger Female").setHasDouble("Pokémon Rangers") + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER], + [TrainerPoolTier.UNCOMMON]: [Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL], + [TrainerPoolTier.RARE]: [Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, Species.PALDEA_TAUROS, Species.TINKATINK, Species.CYCLIZAR, Species.FLAMIGO], + [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], + }), + [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName("Gentleman").setHasGenders("Madame").setHasDouble("Rich Couple"), + [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName("Rich Boy").setHasGenders("Lady").setHasDouble("Rich Kids").setEncounterBgm(TrainerType.RICH), + [TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)), + [TrainerType.SAILOR]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setSpeciesFilter(s => s.isOfType(Type.WATER) || s.isOfType(Type.FIGHTING)), + [TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders("Scientist Female").setHasDouble("Scientists").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING], + [TrainerPoolTier.UNCOMMON]: [Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE], + [TrainerPoolTier.RARE]: [Species.ABRA, Species.DITTO, Species.PORYGON, Species.ELEKID, Species.SOLOSIS, Species.GALAR_WEEZING], + [TrainerPoolTier.SUPER_RARE]: [Species.OMANYTE, Species.KABUTO, Species.AERODACTYL, Species.LILEEP, Species.ANORITH, Species.CRANIDOS, Species.SHIELDON, Species.TIRTOUGA, Species.ARCHEN, Species.ARCTOVISH, Species.ARCTOZOLT, Species.DRACOVISH, Species.DRACOZOLT], + [TrainerPoolTier.ULTRA_RARE]: [Species.ROTOM, Species.MELTAN] + }), + [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName("Worker").setHasGenders("Worker Female").setHasDouble("Workers").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), + [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("School Kid Female", "lass").setHasDouble("School Kids") + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING], + [TrainerPoolTier.UNCOMMON]: [Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE], + [TrainerPoolTier.RARE]: [Species.TANGELA, Species.EEVEE, Species.YANMA], + [TrainerPoolTier.SUPER_RARE]: [Species.TADBULB] + }), + [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), + [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE], TrainerSlot.TRAINER_PARTNER)) + .setEncounterBgm(TrainerType.TWINS), + [TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders("Veteran Female").setHasDouble("Veteran Duo").setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)), + [TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders("Waitress").setHasDouble("Restaurant Staff").setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO], + [TrainerPoolTier.UNCOMMON]: [Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE], + [TrainerPoolTier.RARE]: [Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST] + }), + [TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders("Worker Female").setHasDouble("Workers").setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)), + [TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Lass", "lass").setHasDouble("Beginners").setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) + .setSpeciesPools( + [Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP] + ), + [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH], + [TrainerPoolTier.UNCOMMON]: [Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], + [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], + [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR] + }), + [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.HOUNDOOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [Species.ARBOK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.CROBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.WEEZING]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], + [TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR], + [TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR], + [TrainerPoolTier.SUPER_RARE]: [Species.CAPSAKID, Species.CHARCADET] + }), + [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL], + [TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], + [TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], + [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO] + }), + [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY], + [TrainerPoolTier.UNCOMMON]: [Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], + [TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], + [TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] + }), + [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH], + [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], + [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], + [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] + }), + [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.SWOOBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK], + [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], + [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], + [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON] + }), + [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.BOUNSWEET, Species.LILLIPUP, Species.ALOLA_MAROWAK], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ALOLA_EXEGGUTOR, Species.CRABRAWLER, Species.CUTIEFLY, Species.ALOLA_RAICHU, Species.ORICORIO, Species.MUDBRAY], + [TrainerPoolTier.RARE]: [ Species.ORANGURU, Species.PASSIMIAN, Species.GALAR_CORSOLA, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.TURTONATOR, Species.DRAMPA], + [TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON] + }), + [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH], + [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.ALOLA_MAROWAK, Species.PANCHAM, Species.DROWZEE, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY], + [TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.GASTLY, Species.WISHIWASHI], + [TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER] + }), + [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [Species.SALAZZLE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED], + [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU], + [TrainerPoolTier.RARE]: [Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA], + [TrainerPoolTier.SUPER_RARE]: [Species.DURALUDON, Species.DREEPY] + }), + [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + + [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"], true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"], false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"], true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.ERIKA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ERIKA"], false, Type.GRASS).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.JANINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JANINE"], false, Type.POISON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.SABRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SABRINA"], false, Type.PSYCHIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.BLAINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BLAINE"], true, Type.FIRE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.GIOVANNI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GIOVANNI"], true, Type.DARK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.FALKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FALKNER"], true, Type.FLYING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.BUGSY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BUGSY"], true, Type.BUG).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.WHITNEY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WHITNEY"], false, Type.NORMAL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.MORTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MORTY"], true, Type.GHOST).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.CHUCK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHUCK"], true, Type.FIGHTING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.JASMINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JASMINE"], false, Type.STEEL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.PRYCE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PRYCE"], true, Type.ICE).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.CLAIR]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAIR"], false, Type.DRAGON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.ROXANNE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXANNE"], false, Type.ROCK).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.BRAWLY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRAWLY"], true, Type.FIGHTING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.WATTSON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WATTSON"], true, Type.ELECTRIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.FLANNERY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FLANNERY"], false, Type.FIRE).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.NORMAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["NORMAN"], true, Type.NORMAL).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.WINONA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WINONA"], false, Type.FLYING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.TATE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TATE"], true, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("tate_liza_double").setDoubleTrainerType(TrainerType.LIZA).setDoubleTitle("gym_leader_double"), + [TrainerType.LIZA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LIZA"], false, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("liza_tate_double").setDoubleTrainerType(TrainerType.TATE).setDoubleTitle("gym_leader_double"), + [TrainerType.JUAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JUAN"], true, Type.WATER).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.ROARK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROARK"], true, Type.ROCK).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.GARDENIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GARDENIA"], false, Type.GRASS).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.MAYLENE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MAYLENE"], false, Type.FIGHTING).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.CRASHER_WAKE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRASHER_WAKE"], true, Type.WATER).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.FANTINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FANTINA"], false, Type.GHOST).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.BYRON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BYRON"], true, Type.STEEL).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.CANDICE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CANDICE"], false, Type.ICE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.VOLKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VOLKNER"], true, Type.ELECTRIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.CILAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CILAN"], true, Type.GRASS).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CHILI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHILI"], true, Type.FIRE).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CRESS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRESS"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CHEREN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHEREN"], true, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.LENORA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LENORA"], false, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.ROXIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXIE"], false, Type.POISON).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.BURGH]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BURGH"], true, Type.BUG).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.ELESA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ELESA"], false, Type.ELECTRIC).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CLAY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAY"], true, Type.GROUND).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.SKYLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SKYLA"], false, Type.FLYING).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.BRYCEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRYCEN"], true, Type.ICE).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.DRAYDEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["DRAYDEN"], true, Type.DRAGON).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.MARLON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MARLON"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.VIOLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VIOLA"], false, Type.BUG).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.GRANT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRANT"], true, Type.ROCK).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.KORRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KORRINA"], false, Type.FIGHTING).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.RAMOS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RAMOS"], true, Type.GRASS).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.CLEMONT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLEMONT"], true, Type.ELECTRIC).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.VALERIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VALERIE"], false, Type.FAIRY).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.OLYMPIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OLYMPIA"], false, Type.PSYCHIC).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.WULFRIC]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WULFRIC"], true, Type.ICE).setMixedBattleBgm("battle_kalos_gym"), + [TrainerType.MILO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MILO"], true, Type.GRASS).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.NESSA]: new TrainerConfig(++t).setName("Nessa").initForGymLeader(signatureSpecies["NESSA"], false, Type.WATER).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.KABU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KABU"], true, Type.FIRE).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.BEA]: new TrainerConfig(++t).setName("Bea").initForGymLeader(signatureSpecies["BEA"], false, Type.FIGHTING).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.ALLISTER]: new TrainerConfig(++t).setName("Allister").initForGymLeader(signatureSpecies["ALLISTER"], true, Type.GHOST).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.OPAL]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OPAL"], false, Type.FAIRY).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.BEDE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BEDE"], true, Type.FAIRY).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.GORDIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GORDIE"], true, Type.ROCK).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.MELONY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MELONY"], false, Type.ICE).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.PIERS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PIERS"], true, Type.DARK).setHasDouble("piers_marnie_double").setDoubleTrainerType(TrainerType.MARNIE).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"), + [TrainerType.MARNIE]: new TrainerConfig(++t).setName("Marnie").initForGymLeader(signatureSpecies["MARNIE"], false, Type.DARK).setHasDouble("marnie_piers_double").setDoubleTrainerType(TrainerType.PIERS).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"), + [TrainerType.RAIHAN]: new TrainerConfig(++t).setName("Raihan").initForGymLeader(signatureSpecies["RAIHAN"], true, Type.DRAGON).setMixedBattleBgm("battle_galar_gym"), + [TrainerType.KATY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KATY"], false, Type.BUG).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRASSIUS"], true, Type.GRASS).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["IONO"], false, Type.ELECTRIC).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KOFU"], true, Type.WATER).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader(signatureSpecies["LARRY"], true, Type.NORMAL).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RYME"], false, Type.GHOST).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TULIP"], false, Type.PSYCHIC).setMixedBattleBgm("battle_paldea_gym"), + [TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRUSHA"], true, Type.ICE).setMixedBattleBgm("battle_paldea_gym"), + + [TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour(signatureSpecies["LORELEI"], false, Type.ICE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AGATHA"], false, Type.GHOST).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour(signatureSpecies["LANCE"], true, Type.DRAGON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WILL"], true, Type.PSYCHIC).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KOGA"], true, Type.POISON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAREN"], false, Type.DARK).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.SIDNEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIDNEY"], true, Type.DARK).setMixedBattleBgm("battle_hoenn_elite"), + [TrainerType.PHOEBE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["PHOEBE"], false, Type.GHOST).setMixedBattleBgm("battle_hoenn_elite"), + [TrainerType.GLACIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GLACIA"], false, Type.ICE).setMixedBattleBgm("battle_hoenn_elite"), + [TrainerType.DRAKE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAKE"], true, Type.DRAGON).setMixedBattleBgm("battle_hoenn_elite"), + [TrainerType.AARON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AARON"], true, Type.BUG).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"], false, Type.GROUND).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"], true, Type.FIRE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true, Type.PSYCHIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.SHAUNTAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SHAUNTAL"], false, Type.GHOST).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.MARSHAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MARSHAL"], true, Type.FIGHTING).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.GRIMSLEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GRIMSLEY"], true, Type.DARK).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.CAITLIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CAITLIN"], false, Type.PSYCHIC).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.MALVA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MALVA"], false, Type.FIRE).setMixedBattleBgm("battle_kalos_elite"), + [TrainerType.SIEBOLD]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIEBOLD"], true, Type.WATER).setMixedBattleBgm("battle_kalos_elite"), + [TrainerType.WIKSTROM]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WIKSTROM"], true, Type.STEEL).setMixedBattleBgm("battle_kalos_elite"), + [TrainerType.DRASNA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRASNA"], false, Type.DRAGON).setMixedBattleBgm("battle_kalos_elite"), + [TrainerType.HALA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HALA"], true, Type.FIGHTING).setMixedBattleBgm("battle_alola_elite"), + [TrainerType.MOLAYNE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MOLAYNE"], true, Type.STEEL).setMixedBattleBgm("battle_alola_elite"), + [TrainerType.OLIVIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["OLIVIA"], false, Type.ROCK).setMixedBattleBgm("battle_alola_elite"), + [TrainerType.ACEROLA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["ACEROLA"], false, Type.GHOST).setMixedBattleBgm("battle_alola_elite"), + [TrainerType.KAHILI]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAHILI"], false, Type.FLYING).setMixedBattleBgm("battle_alola_elite"), + [TrainerType.MARNIE_ELITE]: new TrainerConfig(++t).setName("Marnie").initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, Type.DARK).setMixedBattleBgm("battle_galar_elite"), + [TrainerType.NESSA_ELITE]: new TrainerConfig(++t).setName("Nessa").initForEliteFour(signatureSpecies["NESSA_ELITE"], false, Type.WATER).setMixedBattleBgm("battle_galar_elite"), + [TrainerType.BEA_ELITE]: new TrainerConfig(++t).setName("Bea").initForEliteFour(signatureSpecies["BEA_ELITE"], false, Type.FIGHTING).setMixedBattleBgm("battle_galar_elite"), + [TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t).setName("Allister").initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, Type.GHOST).setMixedBattleBgm("battle_galar_elite"), + [TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t).setName("Raihan").initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, Type.DRAGON).setMixedBattleBgm("battle_galar_elite"), + [TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["RIKA"], false, Type.GROUND).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["POPPY"], false, Type.STEEL).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour(signatureSpecies["LARRY_ELITE"], true, Type.NORMAL, Type.FLYING).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HASSEL"], true, Type.DRAGON).setMixedBattleBgm("battle_paldea_elite"), + [TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CRISPIN"], true, Type.FIRE).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AMARYS"], false, Type.STEEL).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.LACEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LACEY"], false, Type.FAIRY).setMixedBattleBgm("battle_bb_elite"), + [TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"], true, Type.DRAGON).setMixedBattleBgm("battle_bb_elite"), + + [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion(signatureSpecies["BLUE"], true).setBattleBgm("battle_kanto_champion").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.RED]: new TrainerConfig(++t).initForChampion(signatureSpecies["RED"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { + p.formIndex = 8; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(signatureSpecies["LANCE_CHAMPION"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Drizzle + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.SWAMPERT], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + })), + [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(signatureSpecies["CYNTHIA"], false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(signatureSpecies["ALDER"], true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })), + [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(signatureSpecies["IRIS"], false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"], false).setMixedBattleBgm("battle_kalos_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"], true).setMixedBattleBgm("battle_alola_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })), + [TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"], true).setMixedBattleBgm("battle_galar_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { + p.formIndex = 3; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"], false).setMixedBattleBgm("battle_champion_geeta") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })), + [TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"], false).setMixedBattleBgm("battle_champion_nemona") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + p.formIndex = 0; // Midday form + p.generateAndPopulateMoveset(); + })), + [TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"], true).setMixedBattleBgm("battle_champion_kieran") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })), + + [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) + .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)), + [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) + .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), + [TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540), + [TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540) + .setGenModifiersFunc(party => { + const starter = party[0]; + return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? + }), + [TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, + p => p.setBoss(true, 2))) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.pokeball = PokeballType.MASTER_BALL; + p.shiny = true; + p.variant = 1; + })) + .setGenModifiersFunc(party => { + const starter = party[0]; + return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; //TODO: is the bang correct? + }), + [TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, + p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true, + p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + p.setBoss(); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + p.shiny = true; + p.variant = 1; + p.formIndex = 1; + p.generateName(); + })) + .setGenModifiersFunc(party => { + const starter = party[0]; + return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? + }), + + [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PERSIAN, Species.ALOLA_PERSIAN])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NIDOKING, Species.NIDOQUEEN])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RHYPERIOR])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DUGTRIO, Species.ALOLA_DUGTRIO])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAROWAK, Species.ALOLA_MAROWAK])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.TYRANITAR, Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HIPPOWDON])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXCADRILL])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.GLISCOR])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.WEEZING, Species.GALAR_WEEZING])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGMORTAR, Species.TORKOAL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FLYGON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SOLROCK, Species.TYPHLOSION], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TORKOAL, Species.NINETALES], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // DROUGHT + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SHIFTRY, Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Chlorophyll + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GREAT_TUSK])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GROUDON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LINOONE])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.PELIPPER])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.ALOLA_MUK])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.WAILORD])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.EMPOLEON, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.POLITOED, Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Drizzle + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BEARTIC, Species.ARMALDO], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Swift Swim + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.OVERQWIL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Swift Swim + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYOGRE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", []).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ELECTRODE, Species.HISUI_ELECTRODE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE, Species.ROARING_MOON])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DARKRAI], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", []).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS, Species.RUNERIGUS])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BOUFFALANT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SEISMITOAD, Species.CARRACOSTA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EELEKTROSS, Species.GALVANTULA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.VOLCARONA])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + p.formIndex = Utils.randSeedInt(5); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.formIndex = 1; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.SLITHER_WING ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYUREM], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", []).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIENSHAO ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.TALONFLAME ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CLAWITZER, Species.DRAGALGE ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOLISK, Species.MALAMAR ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SCREAM_TAIL, Species.FLUTTER_MANE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.IRON_MOTH ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.YVELTAL], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.LUSAMINE]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", []).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LILLIGANT, Species.HISUI_LILLIGANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BEWEAR ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })), + [TrainerType.LUSAMINE_2]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", [], true).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PHEROMOSA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.STAKATAKA, Species.CELESTEELA, Species.GUZZLORD ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NECROZMA ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })), + [TrainerType.GUZMA_2]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", [], true).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; //Anticipation + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 2; //Sharpness, Adaptability + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.FERROTHORN, Species.ESCAVALIER ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PERRSERKER, Species.KLINKLANG ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; //Strong Jaw, Hustle + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })), +}; diff --git a/src/enums/trainer-type.ts b/src/enums/trainer-type.ts index 1d4d9579ee3..835a2c9d039 100644 --- a/src/enums/trainer-type.ts +++ b/src/enums/trainer-type.ts @@ -72,6 +72,12 @@ export enum TrainerType { FLARE_GRUNT, BRYONY, XEROSIC, + AETHER_GRUNT, + FABA, + SKULL_GRUNT, + PLUMERIA, + MACRO_GRUNT, + OLEANA, ROCKET_BOSS_GIOVANNI_1, ROCKET_BOSS_GIOVANNI_2, MAXIE, @@ -84,6 +90,12 @@ export enum TrainerType { GHETSIS_2, LYSANDRE, LYSANDRE_2, + LUSAMINE, + LUSAMINE_2, + GUZMA, + GUZMA_2, + ROSE, + ROSE_2, BROCK = 200, MISTY, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 5aea69bb726..8a3a6b280cb 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3,7 +3,7 @@ import BattleScene, { AnySound } from "../battle-scene"; import { Variant, VariantSet, variantColorCache } from "#app/data/variant"; import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "../ui/battle-info"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, StatusMoveTypeImmunityAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, NeutralDamageAgainstFlyingTypeMultiplierAttr, OneHitKOAccuracyAttr } from "../data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr } from "../data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; import { Constructor } from "#app/utils"; import * as Utils from "../utils"; @@ -22,7 +22,7 @@ import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoo import { WeatherType } from "../data/weather"; import { TempBattleStat } from "../data/temp-battle-stat"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "../data/arena-tag"; -import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AddSecondStrikeAbAttr, IgnoreOpponentEvasionAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr } from "../data/ability"; +import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AddSecondStrikeAbAttr, IgnoreOpponentEvasionAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr } from "../data/ability"; import PokemonData from "../system/pokemon-data"; import { BattlerIndex } from "../battle"; import { Mode } from "../ui/ui"; @@ -1208,60 +1208,83 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Calculates the effectiveness of a move against the Pokémon. - * - * @param source - The Pokémon using the move. - * @param move - The move being used. - * @returns The type damage multiplier or 1 if it's a status move + * Calculates the type of a move when used by this Pokemon after + * type-changing move and ability attributes have applied. + * @param move {@linkcode Move} The move being used. + * @param simulated If `true`, prevents showing abilities applied in this calculation. + * @returns the {@linkcode Type} of the move after attributes are applied */ - getMoveEffectiveness(source: Pokemon, move: PokemonMove): TypeDamageMultiplier { - if (move.getMove().category === MoveCategory.STATUS) { - return 1; - } + getMoveType(move: Move, simulated: boolean = true): Type { + const moveTypeHolder = new Utils.NumberHolder(move.type); - return this.getAttackMoveEffectiveness(source, move, !this.battleData?.abilityRevealed); + applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); + applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); + + return moveTypeHolder.value as Type; } + + /** - * Calculates the effectiveness of an attack move against the Pokémon. + * Calculates the effectiveness of a move against the Pokémon. * - * @param source - The attacking Pokémon. - * @param pokemonMove - The move being used by the attacking Pokémon. - * @param ignoreAbility - Whether to check for abilities that might affect type effectiveness or immunity. + * @param source {@linkcode Pokemon} The attacking Pokémon. + * @param move {@linkcode Move} The move being used by the attacking Pokémon. + * @param ignoreAbility Whether to ignore abilities that might affect type effectiveness or immunity (defaults to `false`). + * @param simulated Whether to apply abilities via simulated calls (defaults to `true`) + * @param cancelled {@linkcode Utils.BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. + * Currently only used by {@linkcode Pokemon.apply} to determine whether a "No effect" message should be shown. * @returns The type damage multiplier, indicating the effectiveness of the move */ - getAttackMoveEffectiveness(source: Pokemon, pokemonMove: PokemonMove, ignoreAbility: boolean = false): TypeDamageMultiplier { - const move = pokemonMove.getMove(); - const typeless = move.hasAttr(TypelessAttr); - const typeMultiplier = new Utils.NumberHolder(this.getAttackTypeEffectiveness(move, source)); - const cancelled = new Utils.BooleanHolder(false); - applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); - if (!typeless && !ignoreAbility) { - applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelled, true, typeMultiplier); + getMoveEffectiveness(source: Pokemon, move: Move, ignoreAbility: boolean = false, simulated: boolean = true, cancelled?: Utils.BooleanHolder): TypeDamageMultiplier { + if (move.hasAttr(TypelessAttr)) { + return 1; } - if (!cancelled.value && !ignoreAbility) { - applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelled, true, typeMultiplier); + const moveType = source.getMoveType(move); + + const typeMultiplier = new Utils.NumberHolder((move.category !== MoveCategory.STATUS || move.hasAttr(RespectAttackTypeImmunityAttr)) + ? this.getAttackTypeEffectiveness(moveType, source, false, simulated) + : 1); + + applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); + if (this.getTypes().find(t => move.isTypeImmune(source, this, t))) { + typeMultiplier.value = 0; } - return (!cancelled.value ? Number(typeMultiplier.value) : 0) as TypeDamageMultiplier; + const cancelledHolder = cancelled ?? new Utils.BooleanHolder(false); + if (!ignoreAbility) { + applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); + + if (!cancelledHolder.value) { + applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier); + } + + if (!cancelledHolder.value) { + const defendingSidePlayField = this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField(); + defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelledHolder)); + } + } + + const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType); + for (const tag of immuneTags) { + if (move && !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType)) { + typeMultiplier.value = 0; + break; + } + } + + return (!cancelledHolder.value ? typeMultiplier.value : 0) as TypeDamageMultiplier; } /** * Calculates the type effectiveness multiplier for an attack type - * @param moveOrType The move being used, or a type if the move is unknown - * @param source the Pokemon using the move + * @param moveType {@linkcode Type} the type of the move being used + * @param source {@linkcode Pokemon} the Pokemon using the move * @param ignoreStrongWinds whether or not this ignores strong winds (anticipation, forewarn, stealth rocks) * @param simulated tag to only apply the strong winds effect message when the move is used * @returns a multiplier for the type effectiveness */ - getAttackTypeEffectiveness(moveOrType: Move | Type, source?: Pokemon, ignoreStrongWinds: boolean = false, simulated: boolean = true): TypeDamageMultiplier { - const move = (moveOrType instanceof Move) - ? moveOrType - : undefined; - const moveType = (moveOrType instanceof Move) - ? move!.type // TODO: is this bang correct? - : moveOrType; - + getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false, simulated: boolean = true): TypeDamageMultiplier { if (moveType === Type.STELLAR) { return this.isTerastallized() ? 2 : 1; } @@ -1281,7 +1304,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (source) { const ignoreImmunity = new Utils.BooleanHolder(false); if (source.isActive(true) && source.hasAbilityWithAttr(IgnoreTypeImmunityAbAttr)) { - applyAbAttrs(IgnoreTypeImmunityAbAttr, source, ignoreImmunity, false, moveType, defType); + applyAbAttrs(IgnoreTypeImmunityAbAttr, source, ignoreImmunity, simulated, moveType, defType); } if (ignoreImmunity.value) { return 1; @@ -1303,15 +1326,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.scene.queueMessage(i18next.t("weather:strongWindsEffectMessage")); } } - - const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType); - for (const tag of immuneTags) { - if (move && !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType)) { - multiplier = 0; - break; - } - } - return multiplier as TypeDamageMultiplier; } @@ -1959,29 +1973,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let result: HitResult; const damage = new Utils.NumberHolder(0); const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const defendingSidePlayField = this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField(); - const variableCategory = new Utils.IntegerHolder(move.category); + const variableCategory = new Utils.NumberHolder(move.category); applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, variableCategory); const moveCategory = variableCategory.value as MoveCategory; - applyMoveAttrs(VariableMoveTypeAttr, source, this, move); - const types = this.getTypes(true, true); + /** The move's type after type-changing effects are applied */ + const moveType = source.getMoveType(move); + /** If `value` is `true`, cancels the move and suppresses "No Effect" messages */ const cancelled = new Utils.BooleanHolder(false); - const power = move.calculateBattlePower(source, this); - const typeless = move.hasAttr(TypelessAttr); - const typeMultiplier = new Utils.NumberHolder(!typeless && (moveCategory !== MoveCategory.STATUS || move.getAttrs(StatusMoveTypeImmunityAttr).find(attr => types.includes(attr.immuneType))) - ? this.getAttackTypeEffectiveness(move, source, false, false) - : 1); - applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); - if (typeless) { - typeMultiplier.value = 1; - } - if (types.find(t => move.isTypeImmune(source, this, t))) { - typeMultiplier.value = 0; - } + /** + * The effectiveness of the move being used. Along with type matchups, this + * accounts for changes in effectiveness from the move's attributes and the + * abilities of both the source and this Pokemon. + */ + const typeMultiplier = this.getMoveEffectiveness(source, move, false, false, cancelled); switch (moveCategory) { case MoveCategory.PHYSICAL: @@ -1989,27 +1997,44 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const isPhysical = moveCategory === MoveCategory.PHYSICAL; const sourceTeraType = source.getTeraType(); - if (!typeless) { - applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelled, false, typeMultiplier); - applyMoveAttrs(NeutralDamageAgainstFlyingTypeMultiplierAttr, source, this, move, typeMultiplier); - } - if (!cancelled.value) { - applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelled, false, typeMultiplier); - defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelled, false, typeMultiplier)); - } + const power = move.calculateBattlePower(source, this); if (cancelled.value) { + // Cancelled moves fail silently source.stopMultiHit(this); - result = HitResult.NO_EFFECT; + return HitResult.NO_EFFECT; } else { - const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === move.type) as TypeBoostTag; + const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === moveType) as TypeBoostTag; if (typeBoost?.oneUse) { source.removeTag(typeBoost.tagType); } - const arenaAttackTypeMultiplier = new Utils.NumberHolder(this.scene.arena.getAttackTypeMultiplier(move.type, source.isGrounded())); + /** Combined damage multiplier from field effects such as weather, terrain, etc. */ + const arenaAttackTypeMultiplier = new Utils.NumberHolder(this.scene.arena.getAttackTypeMultiplier(moveType, source.isGrounded())); applyMoveAttrs(IgnoreWeatherTypeDebuffAttr, source, this, move, arenaAttackTypeMultiplier); + /** + * Whether or not this Pokemon is immune to the incoming move. + * Note that this isn't fully resolved in `getMoveEffectiveness` because + * of possible type-suppressing field effects (e.g. Desolate Land's effect on Water-type attacks). + */ + const isTypeImmune = (typeMultiplier * arenaAttackTypeMultiplier.value) === 0; + if (isTypeImmune) { + // Moves with no effect that were not cancelled queue a "no effect" message before failing + source.stopMultiHit(this); + result = (move.id === Moves.SHEER_COLD) + ? HitResult.IMMUNE + : HitResult.NO_EFFECT; + + if (result === HitResult.IMMUNE) { + this.scene.queueMessage(i18next.t("battle:hitResultImmune", { pokemonName: this.name })); + } else { + this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); + } + + return result; + } + const glaiveRushModifier = new Utils.IntegerHolder(1); if (this.getTag(BattlerTagType.RECEIVE_DOUBLE_DAMAGE)) { glaiveRushModifier.value = 2; @@ -2059,13 +2084,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!isCritical) { this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, move.category, this.scene.currentBattle.double, screenMultiplier); } - const isTypeImmune = (typeMultiplier.value * arenaAttackTypeMultiplier.value) === 0; const sourceTypes = source.getTypes(); - const matchesSourceType = sourceTypes[0] === move.type || (sourceTypes.length > 1 && sourceTypes[1] === move.type); + const matchesSourceType = sourceTypes[0] === moveType || (sourceTypes.length > 1 && sourceTypes[1] === moveType); const stabMultiplier = new Utils.NumberHolder(1); if (sourceTeraType === Type.UNKNOWN && matchesSourceType) { stabMultiplier.value += 0.5; - } else if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === move.type) { + } else if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === moveType) { stabMultiplier.value += 0.5; } @@ -2075,8 +2099,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stabMultiplier.value = Math.min(stabMultiplier.value + 0.5, 2.25); } - const targetCount = getMoveTargets(source, move.id).targets.length; - const targetMultiplier = targetCount > 1 ? 0.75 : 1; // 25% damage debuff on multi-target hits (even if it's immune) + // 25% damage debuff on moves hitting more than one non-fainted target (regardless of immunities) + const { targets, multiple } = getMoveTargets(source, move.id); + const targetMultiplier = (multiple && targets.length > 1) ? 0.75 : 1; applyMoveAttrs(VariableAtkAttr, source, this, move, sourceAtk); applyMoveAttrs(VariableDefAttr, source, this, move, targetDef); @@ -2094,7 +2119,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const randomMultiplier = ((this.scene.randBattleSeedInt(16) + 85) / 100); damage.value = Utils.toDmgValue((((levelMultiplier * power * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value - * typeMultiplier.value + * typeMultiplier * arenaAttackTypeMultiplier.value * screenMultiplier.value * twoStrikeMultiplier.value @@ -2128,7 +2153,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } - if (this.scene.arena.terrain?.terrainType === TerrainType.MISTY && this.isGrounded() && move.type === Type.DRAGON) { + if (this.scene.arena.terrain?.terrainType === TerrainType.MISTY && this.isGrounded() && moveType === Type.DRAGON) { damage.value = Utils.toDmgValue(damage.value / 2); } @@ -2142,22 +2167,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { result = result!; // telling TS compiler that result is defined! if (!result) { - if (!typeMultiplier.value) { - result = move.id === Moves.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT; + const isOneHitKo = new Utils.BooleanHolder(false); + applyMoveAttrs(OneHitKOAttr, source, this, move, isOneHitKo); + if (isOneHitKo.value) { + result = HitResult.ONE_HIT_KO; + isCritical = false; + damage.value = this.hp; + } else if (typeMultiplier >= 2) { + result = HitResult.SUPER_EFFECTIVE; + } else if (typeMultiplier >= 1) { + result = HitResult.EFFECTIVE; } else { - const isOneHitKo = new Utils.BooleanHolder(false); - applyMoveAttrs(OneHitKOAttr, source, this, move, isOneHitKo); - if (isOneHitKo.value) { - result = HitResult.ONE_HIT_KO; - isCritical = false; - damage.value = this.hp; - } else if (typeMultiplier.value >= 2) { - result = HitResult.SUPER_EFFECTIVE; - } else if (typeMultiplier.value >= 1) { - result = HitResult.EFFECTIVE; - } else { - result = HitResult.NOT_VERY_EFFECTIVE; - } + result = HitResult.NOT_VERY_EFFECTIVE; } } @@ -2224,15 +2245,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { case HitResult.NOT_VERY_EFFECTIVE: this.scene.queueMessage(i18next.t("battle:hitResultNotVeryEffective")); break; - case HitResult.NO_EFFECT: - this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); - break; - case HitResult.IMMUNE: - this.scene.queueMessage(i18next.t("battle:hitResultImmune", { pokemonName: this.name })); - break; case HitResult.ONE_HIT_KO: this.scene.queueMessage(i18next.t("battle:hitResultOneHitKO")); break; + case HitResult.IMMUNE: + case HitResult.NO_EFFECT: + console.error("Unhandled move immunity!"); + break; } } @@ -2244,23 +2263,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (damage) { - const attacker = this.scene.getPokemonById(source.id)!; // TODO: is this bang correct? - destinyTag?.lapse(attacker, BattlerTagLapseType.CUSTOM); + destinyTag?.lapse(source, BattlerTagLapseType.CUSTOM); } } break; case MoveCategory.STATUS: - if (!typeless) { - applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelled, false, typeMultiplier); - } - if (!cancelled.value) { - applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelled, false, typeMultiplier); - defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelled, false, typeMultiplier)); - } - if (!typeMultiplier.value) { + if (!cancelled.value && typeMultiplier === 0) { this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); } - result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS; + result = (typeMultiplier === 0) ? HitResult.NO_EFFECT : HitResult.STATUS; break; } @@ -2572,7 +2583,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.fusionFaintCry(callback); } - const key = this.getSpeciesForm().getCryKey(this.formIndex); + const key = `cry/${this.getSpeciesForm().getCryKey(this.formIndex)}`; //eslint-disable-next-line @typescript-eslint/no-unused-vars let i = 0; let rate = 0.85; @@ -2630,7 +2641,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } private fusionFaintCry(callback: Function): void { - const key = this.getSpeciesForm().getCryKey(this.formIndex); + const key = `cry/${this.getSpeciesForm().getCryKey(this.formIndex)}`; let i = 0; let rate = 0.85; const cry = this.scene.playSound(key, { rate: rate }) as AnySound; @@ -2638,7 +2649,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const tintSprite = this.getTintSprite(); let duration = cry.totalDuration * 1000; - let fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), { rate: rate }) as AnySound; + const fusionCryKey = `cry/${this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex)}`; + let fusionCry = this.scene.playSound(fusionCryKey, { rate: rate }) as AnySound; fusionCry.stop(); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); @@ -2682,7 +2694,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (i === transitionIndex) { SoundFade.fadeOut(this.scene, cry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2))); - fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate })); + fusionCry = this.scene.playSound(fusionCryKey, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate })); SoundFade.fadeIn(this.scene, fusionCry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), this.scene.masterVolume * this.scene.seVolume, 0); } rate *= 0.99; @@ -2997,7 +3009,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sparkle(): void { if (this.shinySparkle) { this.shinySparkle.play(`sparkle${this.variant ? `_${this.variant + 1}` : ""}`); - this.scene.playSound("sparkle"); + this.scene.playSound("se/sparkle"); } } @@ -3746,6 +3758,18 @@ export class EnemyPokemon extends Pokemon { this.status = new Status(Overrides.OPP_STATUS_OVERRIDE); } + if (Overrides.OPP_GENDER_OVERRIDE) { + this.gender = Overrides.OPP_GENDER_OVERRIDE; + } + + const speciesId = this.species.speciesId; + + if (speciesId in Overrides.OPP_FORM_OVERRIDES + && Overrides.OPP_FORM_OVERRIDES[speciesId] + && this.species.forms[Overrides.OPP_FORM_OVERRIDES[speciesId]]) { + this.formIndex = Overrides.OPP_FORM_OVERRIDES[speciesId] ?? 0; + } + if (!dataSource) { this.generateAndPopulateMoveset(); @@ -3917,7 +3941,7 @@ export class EnemyPokemon extends Pokemon { * Attack moves are given extra multipliers to their base benefit score based on * the move's type effectiveness against the target and whether the move is a STAB move. */ - const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove); + const effectiveness = target.getMoveEffectiveness(this, move, !target.battleData?.abilityRevealed); if (target.isPlayer() !== this.isPlayer()) { targetScore *= effectiveness; if (this.isOfType(move.type)) { diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 68ebabbbe23..02827d0d69d 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -359,12 +359,12 @@ export default class Trainer extends Phaser.GameObjects.Container { let species = useNewSpeciesPool ? getPokemonSpecies(newSpeciesPool[Math.floor(Math.random() * newSpeciesPool.length)]) : template.isSameSpecies(index) && index > offset - ? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset))) + ? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset), this.scene.currentBattle.waveIndex)) : this.genNewPartyMemberSpecies(level, strength); // If the species is from newSpeciesPool, we need to adjust it based on the level and strength if (newSpeciesPool) { - species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength)); + species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength, this.scene.currentBattle.waveIndex)); } ret = this.scene.addEnemyPokemon(species, level, !this.isDouble() || !(index % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); @@ -393,7 +393,7 @@ export default class Trainer extends Phaser.GameObjects.Container { species = this.scene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); } - let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength)); + let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); let retry = false; console.log(ret.getName()); @@ -412,7 +412,7 @@ export default class Trainer extends Phaser.GameObjects.Container { console.log("Attempting reroll of species evolution to fit specialty type..."); let evoAttempt = 0; while (retry && evoAttempt++ < 10) { - ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength)); + ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); console.log(ret.name); if (this.config.specialtyTypes.find(t => ret.isOfType(t))) { retry = false; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index ae5149d28f6..f4aa12c56c6 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -282,8 +282,9 @@ export class LoadingScene extends SceneBase { this.loadAtlas("xbox", "inputs"); this.loadAtlas("keyboard", "inputs"); - this.loadSe("select"); - this.loadSe("menu_open"); + this.loadSe("select", "ui"); + this.loadSe("menu_open", "ui"); + this.loadSe("error", "ui"); this.loadSe("hit"); this.loadSe("hit_strong"); this.loadSe("hit_weak"); @@ -303,7 +304,6 @@ export class LoadingScene extends SceneBase { this.loadSe("upgrade"); this.loadSe("buy"); this.loadSe("achv"); - this.loadSe("error"); this.loadSe("pb_rel"); this.loadSe("pb_throw"); diff --git a/src/locales/ca_ES/config.ts b/src/locales/ca_ES/config.ts index 427dea40eda..4229b20a583 100644 --- a/src/locales/ca_ES/config.ts +++ b/src/locales/ca_ES/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const caEsConfig = { ability, diff --git a/src/locales/ca_ES/run-history-ui-handler.json b/src/locales/ca_ES/run-history.json similarity index 100% rename from src/locales/ca_ES/run-history-ui-handler.json rename to src/locales/ca_ES/run-history.json diff --git a/src/locales/de/battle.json b/src/locales/de/battle.json index 9e97a4d5b17..762b5848439 100644 --- a/src/locales/de/battle.json +++ b/src/locales/de/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}} hat {{moveName}} nicht erlernt.", "learnMoveForgetQuestion": "Welche Attacke soll vergessen werden?", "learnMoveForgetSuccess": "{{pokemonName}} hat {{moveName}} vergessen.", - "countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}schwupp!", + "countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}schwupp!", "learnMoveAnd": "Und…", "levelCapUp": "Die Levelbeschränkung wurde auf {{levelCap}} erhöht!", "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", diff --git a/src/locales/de/bgm-name.json b/src/locales/de/bgm-name.json index d5f64a93338..1eab276a70a 100644 --- a/src/locales/de/bgm-name.json +++ b/src/locales/de/bgm-name.json @@ -45,6 +45,7 @@ "battle_legendary_lake_trio": "ORAS Vs. Seen-Trio", "battle_legendary_sinnoh": "ORAS Vs. Legendäres Sinnoh Pokémon", "battle_legendary_dia_pal": "ORAS Vs. Dialga & Palkia", + "battle_legendary_origin_forme": "PLA Vs. Urform Dialga & Palkia", "battle_legendary_giratina": "ORAS Vs. Giratina", "battle_legendary_arceus": "HGSS Vs. Arceus", "battle_legendary_unova": "SW Vs. Legendäres Einall Pokémon", @@ -59,6 +60,7 @@ "battle_legendary_zac_zam": "SWSH Vs. Zacian & Zamazenta", "battle_legendary_glas_spec": "SWSH Vs. Polaross & Phantoross", "battle_legendary_calyrex": "SWSH Vs. Coronospa", + "battle_legendary_riders": "SWSH Vs. Schimmelreiter & Rappenreiter Coronospa", "battle_legendary_birds_galar": "SWSH Vs. Legendäre Galar-Vögel", "battle_legendary_ruinous": "KAPU Vs. Schätze des Unheils", "battle_legendary_kor_mir": "KAPU Die Tiefen von Zone Null", @@ -78,11 +80,21 @@ "battle_galactic_grunt": "BDSP Vs. Team Galaktik Rüpel", "battle_plasma_grunt": "SW Vs. Team Plasma Rüpel", "battle_flare_grunt": "XY Vs. Team Flare Rüpel", + "battle_aether_grunt": "SM Vs. Æther Foundation", + "battle_skull_grunt": "SM Vs. Team Skull Rüpel", + "battle_macro_grunt": "SWSH Vs. Trainer", + "battle_galactic_admin": "BDSP Vs. Team Galactic Commander", + "battle_skull_admin": "SM Vs. Team Skull Vorstand", + "battle_oleana": "SWSH Vs. Oleana", "battle_rocket_boss": "USUM Vs. Giovanni", "battle_aqua_magma_boss": "ORAS Vs. Team Aqua & Magma Boss", "battle_galactic_boss": "BDSP Vs. Zyrus", "battle_plasma_boss": "S2W2 Vs. G-Cis", "battle_flare_boss": "XY Vs. Flordelis", + "battle_aether_boss": "SM Vs. Samantha", + "battle_skull_boss": "SM Vs. Bromley", + "battle_macro_boss": "SWSH Vs. Rose", + "abyss": "PMD Erkundungsteam Himmel Dunkelkrater", "badlands": "PMD Erkundungsteam Himmel Kargtal", "beach": "PMD Erkundungsteam Himmel Feuchtklippe", @@ -135,4 +147,4 @@ "heal": "SW Pokémon-Heilung", "menu": "PMD Erkundungsteam Himmel Willkommen in der Welt der Pokémon!", "title": "PMD Erkundungsteam Himmel Top-Menü-Thema" -} \ No newline at end of file +} diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 988468ef476..28c3332a55f 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const deConfig = { ability, diff --git a/src/locales/de/dialogue-female.json b/src/locales/de/dialogue-female.json index e71e03453a7..2f80fc09eba 100644 --- a/src/locales/de/dialogue-female.json +++ b/src/locales/de/dialogue-female.json @@ -355,6 +355,30 @@ "1": "Ich werde für das nächste Rennen tunen." } }, + "firebreather": { + "encounter": { + "1": "Meine Flammen werden dich verschlingen!", + "2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!", + "3": "Komm näher und sieh dir meine Flammen an!" + }, + "victory": { + "1": "Verbrannt bis zur Asche...", + "2": "Yow! Das ist heiß!", + "3": "Auuu! Ich habe mir die Nasenspitze verbrannt!" + } + }, + "sailor": { + "encounter": { + "1": "Matrose, du gehst über Bord, wenn du verlierst!", + "2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!", + "3": "Ahoj! Bist du seekrank?" + }, + "victory": { + "1": "Argh! Von einem Kind besiegt!", + "2": "Dein Geist hat mich versenkt!", + "3": "Ich glaube, ich bin der der seekrank ist..." + } + }, "archer": { "encounter": { "1": "Bevor du weitergehst, lass uns sehen, wie du dich gegen uns, Team Rocket, schlägst!", @@ -417,7 +441,7 @@ }, "courtney": { "encounter": { - "1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...", + "1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!", "2": "... Nun dann... Auslöschen...", "3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..." }, @@ -446,7 +470,7 @@ "3": "Was machst du hier? Bist du uns gefolgt?" }, "victory": { - "1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!", + "1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!", "2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...", "3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!" } @@ -535,30 +559,6 @@ "3": "Wunderbar! Bemerkenswert! Deine Fähigkeiten und dein Mut sind lobenswert." } }, - "firebreather": { - "encounter": { - "1": "Meine Flammen werden dich verschlingen!", - "2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!", - "3": "Komm näher und sieh dir meine Flammen an!" - }, - "victory": { - "1": "Verbrannt bis zur Asche...", - "2": "Yow! Das ist heiß!", - "3": "Auuu! Ich habe mir die Nasenspitze verbrannt!" - } - }, - "sailor": { - "encounter": { - "1": "Matrose, du gehst über Bord, wenn du verlierst!", - "2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!", - "3": "Ahoj! Bist du seekrank?" - }, - "victory": { - "1": "Argh! Von einem Kind besiegt!", - "2": "Dein Geist hat mich versenkt!", - "3": "Ich glaube, ich bin der der seekrank ist..." - } - }, "rocket_grunt": { "encounter": { "1": "Jetzt gibt es Ärger!…\n$und es kommt noch härter!\n$Wir wollen über die Erde regieren…\n$und naja du kennst den Rest…!", @@ -655,6 +655,86 @@ "5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen." } }, + "aether_grunt": { + "encounter": { + "1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!", + "2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!", + "3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!", + "4": "Ich zeige dir die Macht des Æther-Paradies", + "5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!" + }, + "victory": { + "1": "Hmph! Du scheinst ziemlich geschickt zu sein.", + "2": "Was hat das zu bedeuten? Was hat das zu bedeuten!", + "3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!", + "4": "Hmm... Es scheint, als hätte ich verloren.", + "5": "Ich hätte das Blitzdings benutzen sollen..." + } + }, + "faba": { + "encounter": { + "1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!", + "2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?", + "3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich." + }, + "victory": { + "1": "Aiyee!", + "2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...", + "3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann." + } + }, + "skull_grunt": { + "encounter": { + "1": "Wir sind nicht böse, wir sind einfach nur nicht nett!", + "2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!", + "3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!", + "4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?", + "5": "Yo, platz hier nich’ rein, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪" + }, + "victory": { + "1": "Wie jetzt? Schon vorbei?", + "2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...", + "3": "Wir brauchen deine schwachen Pokémon eh nicht!", + "4": "Was? Deine Stärke spür ich bis in die Knochen...", + "5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?" + } + }, + "plumeria": { + "encounter": { + "1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.", + "2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...", + "3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann." + }, + "victory": { + "1": "Du bist ziemlich stark. Das muss ich zugeben.", + "2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...", + "3": "Ich denke, ich muss diese Niederlage einfach hinnehmen." + } + }, + "macro_grunt": { + "encounter": { + "1": "Achtung hier ist Endstation für dich!", + "2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.", + "3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?" + }, + "victory": { + "1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.", + "2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...", + "3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine." + } + }, + "oleana": { + "encounter": { + "1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!", + "2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.", + "3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!" + }, + "victory": { + "1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.", + "2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...", + "3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!" @@ -787,6 +867,72 @@ "1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." + }, + "victory": { + "1": "Wie kann eine Person nur so grausam sein?!" + }, + "defeat": { + "1": "Und jetzt, mein süßes Biest, komm zu Mama!" + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!" + }, + "victory": { + "1": "Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!" + }, + "victory": { + "1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen." + }, + "defeat": { + "1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!" + }, + "victory": { + "1": "Bromley!!! Was ist falsch mit dir?!" + }, + "defeat": { + "1": "Ihr seid wirklich selten dämlich." + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!" + }, + "victory": { + "1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!" + }, + "defeat": { + "1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere." + }, + "victory": { + "1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf." + }, + "defeat": { + "1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten." + } + }, "brock": { "encounter": { "1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!", @@ -2455,7 +2601,7 @@ "1": "@c{smile}Hey, du auch hier?\n@c{smile_eclosed}Immernoch ungeschlagen, hmm…?\n$@c{serious_mopen_fists}Ich weiß es sieht so aus, als wäre ich dir hierher gefolgt, aber das ist so nicht ganz richtig.\n$@c{serious_smile_fists}Ehrlicherweise kann ich es, seit du mich damals besiegt hast, garnicht erwarten erneut gegen dich zu kämpfen.\n$Ich habe selbst hart traniert. Ich werde dir diesesmal also ein würdigerer Gegner sein!.\n$@c{serious_mopen_fists}Halt dich nicht zurück, genauso wie beim letzten Mal!\nLos gehts!" }, "victory": { - "1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf und genieße das Event!" + "1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf!" } }, "rival_2_female": { @@ -2463,7 +2609,7 @@ "1": "@c{smile_wave}Oh, wie schön dich hier zu trefen. Sieht so aus als wärst du noch ungeschlagen. @c{angry_mopen}Hmm… Nicht schlecht!\n$@c{angry_mopen}Ich weiß was du denkst, und nein, ich habe dich nicht verfolgt. @c{smile_eclosed}Ich bin einfach in der Gegend gewesen.\n$@c{smile_ehalf}Ich freu mich für dich, aber ich muss dich wissen lassen, dass es auch Ok ist ab und zu mal zu verlieren.\n$@c{smile}Wir lernen oft mehr aus unseren Fehlern, als aus unseren Erfolgen.\n$@c{angry_mopen}Auf jeden Fall habe ich für unseren Rückkampf hart traniert. Also zeig mir was du drauf hast!" }, "victory": { - "1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark und genieße das Event!" + "1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark!" }, "defeat": { "1": "Es ist Ok manchmal zu verlieren…" @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}Ich… Ich denke ich habe meine Aufgabe erfüllt.\n$@c{smile_eclosed}Versprich mir… Nachdem du die Welt geheilt hast… Komm bitte sicher nach Hause. \n$@c{smile_ehalf}…Danke." } } -} \ No newline at end of file +} diff --git a/src/locales/de/dialogue-male.json b/src/locales/de/dialogue-male.json index 0f8e0122c8c..2f80fc09eba 100644 --- a/src/locales/de/dialogue-male.json +++ b/src/locales/de/dialogue-male.json @@ -355,6 +355,30 @@ "1": "Ich werde für das nächste Rennen tunen." } }, + "firebreather": { + "encounter": { + "1": "Meine Flammen werden dich verschlingen!", + "2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!", + "3": "Komm näher und sieh dir meine Flammen an!" + }, + "victory": { + "1": "Verbrannt bis zur Asche...", + "2": "Yow! Das ist heiß!", + "3": "Auuu! Ich habe mir die Nasenspitze verbrannt!" + } + }, + "sailor": { + "encounter": { + "1": "Matrose, du gehst über Bord, wenn du verlierst!", + "2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!", + "3": "Ahoj! Bist du seekrank?" + }, + "victory": { + "1": "Argh! Von einem Kind besiegt!", + "2": "Dein Geist hat mich versenkt!", + "3": "Ich glaube, ich bin der der seekrank ist..." + } + }, "archer": { "encounter": { "1": "Bevor du weitergehst, lass uns sehen, wie du dich gegen uns, Team Rocket, schlägst!", @@ -417,7 +441,7 @@ }, "courtney": { "encounter": { - "1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...", + "1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!", "2": "... Nun dann... Auslöschen...", "3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..." }, @@ -446,7 +470,7 @@ "3": "Was machst du hier? Bist du uns gefolgt?" }, "victory": { - "1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!", + "1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!", "2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...", "3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!" } @@ -535,30 +559,6 @@ "3": "Wunderbar! Bemerkenswert! Deine Fähigkeiten und dein Mut sind lobenswert." } }, - "firebreather": { - "encounter": { - "1": "Meine Flammen werden dich verschlingen!", - "2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!", - "3": "Komm näher und sieh dir meine Flammen an!" - }, - "victory": { - "1": "Verbrannt bis zur Asche...", - "2": "Yow! Das ist heiß!", - "3": "Auuu! Ich habe mir die Nasenspitze verbrannt!" - } - }, - "sailor": { - "encounter": { - "1": "Matrose, du gehst über Bord, wenn du verlierst!", - "2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!", - "3": "Ahoj! Bist du seekrank?" - }, - "victory": { - "1": "Argh! Von einem Kind besiegt!", - "2": "Dein Geist hat mich versenkt!", - "3": "Ich glaube, ich bin der der seekrank ist..." - } - }, "rocket_grunt": { "encounter": { "1": "Jetzt gibt es Ärger!…\n$und es kommt noch härter!\n$Wir wollen über die Erde regieren…\n$und naja du kennst den Rest…!", @@ -655,6 +655,86 @@ "5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen." } }, + "aether_grunt": { + "encounter": { + "1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!", + "2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!", + "3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!", + "4": "Ich zeige dir die Macht des Æther-Paradies", + "5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!" + }, + "victory": { + "1": "Hmph! Du scheinst ziemlich geschickt zu sein.", + "2": "Was hat das zu bedeuten? Was hat das zu bedeuten!", + "3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!", + "4": "Hmm... Es scheint, als hätte ich verloren.", + "5": "Ich hätte das Blitzdings benutzen sollen..." + } + }, + "faba": { + "encounter": { + "1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!", + "2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?", + "3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich." + }, + "victory": { + "1": "Aiyee!", + "2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...", + "3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann." + } + }, + "skull_grunt": { + "encounter": { + "1": "Wir sind nicht böse, wir sind einfach nur nicht nett!", + "2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!", + "3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!", + "4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?", + "5": "Yo, platz hier nich’ rein, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪" + }, + "victory": { + "1": "Wie jetzt? Schon vorbei?", + "2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...", + "3": "Wir brauchen deine schwachen Pokémon eh nicht!", + "4": "Was? Deine Stärke spür ich bis in die Knochen...", + "5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?" + } + }, + "plumeria": { + "encounter": { + "1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.", + "2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...", + "3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann." + }, + "victory": { + "1": "Du bist ziemlich stark. Das muss ich zugeben.", + "2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...", + "3": "Ich denke, ich muss diese Niederlage einfach hinnehmen." + } + }, + "macro_grunt": { + "encounter": { + "1": "Achtung hier ist Endstation für dich!", + "2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.", + "3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?" + }, + "victory": { + "1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.", + "2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...", + "3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine." + } + }, + "oleana": { + "encounter": { + "1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!", + "2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.", + "3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!" + }, + "victory": { + "1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.", + "2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...", + "3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!" @@ -787,6 +867,72 @@ "1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." + }, + "victory": { + "1": "Wie kann eine Person nur so grausam sein?!" + }, + "defeat": { + "1": "Und jetzt, mein süßes Biest, komm zu Mama!" + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!" + }, + "victory": { + "1": "Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!" + }, + "victory": { + "1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen." + }, + "defeat": { + "1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!" + }, + "victory": { + "1": "Bromley!!! Was ist falsch mit dir?!" + }, + "defeat": { + "1": "Ihr seid wirklich selten dämlich." + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!" + }, + "victory": { + "1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!" + }, + "defeat": { + "1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere." + }, + "victory": { + "1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf." + }, + "defeat": { + "1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten." + } + }, "brock": { "encounter": { "1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!", @@ -2439,7 +2585,7 @@ "1": "@c{smile}Hey, ich habe dich gesucht! Ich weiß, dass du es nicht erwarten konntest loszugehen,\n$aber hättest ja wenigstens Tschüss sagen können...\n$@c{smile_eclosed}Du verfolgst also wirklich deinen Traum?\nIch kann es kaum glauben.\n$@c{serious_smile_fists}Da wir schon einmal hier sind, wie wäre es mit einem Kampf?\nImmerhin muss ich doch sicherstellen, dass du bereit bist.\n$@c{serious_mopen_fists}Halte dich nicht zurück, zeig mir alles was du hast!" }, "victory": { - "1": "@c{shock}Wow…Du hast mich komplett überrumpelt.\nBist du wirklich ein Anfänger?\n$@c{smile}Vielleicht war es einfach etwas Glück, aber…\nWer weiß, vielleicht schaffst du es irgendwann\n$ja wirklich ganz groß raus zu kommen.\n$Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Die sehen wirklich cool aus.\n$@c{serious_smile_fists}Viel Glück da draußen!\n$@c{smile}Oh-und genieße das Event!" + "1": "@c{shock}Wow…Du hast mich komplett überrumpelt.\nBist du wirklich ein Anfänger?\n$@c{smile}Vielleicht war es einfach etwas Glück, aber…\nWer weiß, vielleicht schaffst du es irgendwann\n$ja wirklich ganz groß raus zu kommen.\n$Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Die sehen wirklich cool aus.\n$@c{serious_smile_fists}Viel Glück da draußen!" } }, "rival_female": { @@ -2447,7 +2593,7 @@ "1": "@c{smile_wave}Da bist du! Ich habe schon überall nach dir gesucht!\n@c{angry_mopen}Hast du etwas vergessen\n$deiner besten Freundin Tschüss zu sagen?\n$@c{smile_ehalf}Du folgst deinem Traum, oder?\nDas ist wirklich heute…\n$@c{smile}Naja, ich vergeben dir, dass du mich vergessen hast, aber nur unter einer Bedingung. @c{smile_wave_wink}Du musst gegen mich kämpfen!\n$@c{angry_mopen}Gib alles! Wir wollen doch nicht, dass dein Abenteuer endet bevor es begonnen hat, richtig?" }, "victory": { - "1": "@c{shock}Du hast gerade erst angefangen und bist schon so stark?!@d{96} @c{angry}Du hast sowas von betrogen, oder?\n$@c{smile_wave_wink}Ich mach nur Spaß!@d{64} @c{smile_eclosed}Ich habe ehrlich verloren… Ich habe das Gefühl, dass du es dort draußen weit bringen wirst.\n$@c{smile}Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Ich hoffe sie sind hilfreich!\n$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!\n$@c{smile}Oh-und genieße das Event!" + "1": "@c{shock}Du hast gerade erst angefangen und bist schon so stark?!@d{96} @c{angry}Du hast sowas von betrogen, oder?\n$@c{smile_wave_wink}Ich mach nur Spaß!@d{64} @c{smile_eclosed}Ich habe ehrlich verloren… Ich habe das Gefühl, dass du es dort draußen weit bringen wirst.\n$@c{smile}Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Ich hoffe sie sind hilfreich!\n$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!" } }, "rival_2": { @@ -2455,7 +2601,7 @@ "1": "@c{smile}Hey, du auch hier?\n@c{smile_eclosed}Immernoch ungeschlagen, hmm…?\n$@c{serious_mopen_fists}Ich weiß es sieht so aus, als wäre ich dir hierher gefolgt, aber das ist so nicht ganz richtig.\n$@c{serious_smile_fists}Ehrlicherweise kann ich es, seit du mich damals besiegt hast, garnicht erwarten erneut gegen dich zu kämpfen.\n$Ich habe selbst hart traniert. Ich werde dir diesesmal also ein würdigerer Gegner sein!.\n$@c{serious_mopen_fists}Halt dich nicht zurück, genauso wie beim letzten Mal!\nLos gehts!" }, "victory": { - "1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf und genieße das Event!" + "1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf!" } }, "rival_2_female": { @@ -2463,7 +2609,7 @@ "1": "@c{smile_wave}Oh, wie schön dich hier zu trefen. Sieht so aus als wärst du noch ungeschlagen. @c{angry_mopen}Hmm… Nicht schlecht!\n$@c{angry_mopen}Ich weiß was du denkst, und nein, ich habe dich nicht verfolgt. @c{smile_eclosed}Ich bin einfach in der Gegend gewesen.\n$@c{smile_ehalf}Ich freu mich für dich, aber ich muss dich wissen lassen, dass es auch Ok ist ab und zu mal zu verlieren.\n$@c{smile}Wir lernen oft mehr aus unseren Fehlern, als aus unseren Erfolgen.\n$@c{angry_mopen}Auf jeden Fall habe ich für unseren Rückkampf hart traniert. Also zeig mir was du drauf hast!" }, "victory": { - "1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark und genieße das Event!" + "1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark!" }, "defeat": { "1": "Es ist Ok manchmal zu verlieren…" @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}Ich… Ich denke ich habe meine Aufgabe erfüllt.\n$@c{smile_eclosed}Versprich mir… Nachdem du die Welt geheilt hast… Komm bitte sicher nach Hause. \n$@c{smile_ehalf}…Danke." } } -} \ No newline at end of file +} diff --git a/src/locales/de/dialogue-misc-female.json b/src/locales/de/dialogue-misc-female.json index a28a5524b4f..1529831d7c5 100644 --- a/src/locales/de/dialogue-misc-female.json +++ b/src/locales/de/dialogue-misc-female.json @@ -1,4 +1,6 @@ { "ending": "@c{smile}Oh? Du hast gewonnen?@d{96} @c{smile_eclosed}Ich schätze, das hätte ich wissen sollen.\n$Aber, du bist jetzt zurück.\n$@c{smile}Es ist vorbei.@d{64} Du hast die Schleife beendet.\n$@c{serious_smile_fists}Du hast auch deinen Traum erfüllt, nicht wahr?\nDu hast nicht einmal verloren.\n$@c{neutral}Ich bin der Einzige, der sich daran erinnern wird, was du getan hast.@d{96}\n$Ich schätze, das ist in Ordnung, oder?\n$@c{serious_smile_fists}Deine Legende wird immer in unseren Herzen weiterleben.\n$@c{smile_eclosed}Wie auch immer, ich habe genug von diesem Ort, oder nicht? Lass uns nach Hause gehen.\n$@c{serious_smile_fists}Vielleicht können wir, wenn wir zurück sind, noch einen Kampf haben?\n$Wenn du dazu bereit bist.", - "ending_female": "@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?!\n$@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast.\n$@c{smile_eclosed}Natürlich… ich hatte immer dieses Gefühl.\n$@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet.\n$@c{smile_ehalf}Du hast auch deinen Traum erfüllt, nicht wahr?\n$Du hast nicht einmal verloren.\n$Ich werde die Einzige sein, die sich daran erinnert, was du getan hast.\n$@c{angry_mopen}Ich werde versuchen, es nicht zu vergessen!\n$@c{smile_wave_wink}Nur ein Scherz!@d{64} @c{smile}Ich würde es nie vergessen.@d{32}\n$Deine Legende wird in unseren Herzen weiterleben.\n$@c{smile_wave}Wie auch immer,@d{64} es wird spät…@d{96} denke ich?\nEs ist schwer zu sagen an diesem Ort.\n$Lass uns nach Hause gehen. \n$@c{smile_wave_wink}Vielleicht können wir morgen noch einen Kampf haben, der alten Zeiten willen?" -} \ No newline at end of file + "ending_female": "@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?!\n$@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast.\n$@c{smile_eclosed}Natürlich… ich hatte immer dieses Gefühl.\n$@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet.\n$@c{smile_ehalf}Du hast auch deinen Traum erfüllt, nicht wahr?\n$Du hast nicht einmal verloren.\n$Ich werde die Einzige sein, die sich daran erinnert, was du getan hast.\n$@c{angry_mopen}Ich werde versuchen, es nicht zu vergessen!\n$@c{smile_wave_wink}Nur ein Scherz!@d{64} @c{smile}Ich würde es nie vergessen.@d{32}\n$Deine Legende wird in unseren Herzen weiterleben.\n$@c{smile_wave}Wie auch immer,@d{64} es wird spät…@d{96} denke ich?\nEs ist schwer zu sagen an diesem Ort.\n$Lass uns nach Hause gehen. \n$@c{smile_wave_wink}Vielleicht können wir morgen noch einen Kampf haben, der alten Zeiten willen?", + "ending_endless": "Glückwunsch! Du hast das aktuelle Ende erreicht!\nWir arbeiten an mehr Spielinhalten.", + "ending_name": "Entwickler" +} diff --git a/src/locales/de/dialogue-misc-male.json b/src/locales/de/dialogue-misc-male.json index a28a5524b4f..1529831d7c5 100644 --- a/src/locales/de/dialogue-misc-male.json +++ b/src/locales/de/dialogue-misc-male.json @@ -1,4 +1,6 @@ { "ending": "@c{smile}Oh? Du hast gewonnen?@d{96} @c{smile_eclosed}Ich schätze, das hätte ich wissen sollen.\n$Aber, du bist jetzt zurück.\n$@c{smile}Es ist vorbei.@d{64} Du hast die Schleife beendet.\n$@c{serious_smile_fists}Du hast auch deinen Traum erfüllt, nicht wahr?\nDu hast nicht einmal verloren.\n$@c{neutral}Ich bin der Einzige, der sich daran erinnern wird, was du getan hast.@d{96}\n$Ich schätze, das ist in Ordnung, oder?\n$@c{serious_smile_fists}Deine Legende wird immer in unseren Herzen weiterleben.\n$@c{smile_eclosed}Wie auch immer, ich habe genug von diesem Ort, oder nicht? Lass uns nach Hause gehen.\n$@c{serious_smile_fists}Vielleicht können wir, wenn wir zurück sind, noch einen Kampf haben?\n$Wenn du dazu bereit bist.", - "ending_female": "@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?!\n$@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast.\n$@c{smile_eclosed}Natürlich… ich hatte immer dieses Gefühl.\n$@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet.\n$@c{smile_ehalf}Du hast auch deinen Traum erfüllt, nicht wahr?\n$Du hast nicht einmal verloren.\n$Ich werde die Einzige sein, die sich daran erinnert, was du getan hast.\n$@c{angry_mopen}Ich werde versuchen, es nicht zu vergessen!\n$@c{smile_wave_wink}Nur ein Scherz!@d{64} @c{smile}Ich würde es nie vergessen.@d{32}\n$Deine Legende wird in unseren Herzen weiterleben.\n$@c{smile_wave}Wie auch immer,@d{64} es wird spät…@d{96} denke ich?\nEs ist schwer zu sagen an diesem Ort.\n$Lass uns nach Hause gehen. \n$@c{smile_wave_wink}Vielleicht können wir morgen noch einen Kampf haben, der alten Zeiten willen?" -} \ No newline at end of file + "ending_female": "@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?!\n$@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast.\n$@c{smile_eclosed}Natürlich… ich hatte immer dieses Gefühl.\n$@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet.\n$@c{smile_ehalf}Du hast auch deinen Traum erfüllt, nicht wahr?\n$Du hast nicht einmal verloren.\n$Ich werde die Einzige sein, die sich daran erinnert, was du getan hast.\n$@c{angry_mopen}Ich werde versuchen, es nicht zu vergessen!\n$@c{smile_wave_wink}Nur ein Scherz!@d{64} @c{smile}Ich würde es nie vergessen.@d{32}\n$Deine Legende wird in unseren Herzen weiterleben.\n$@c{smile_wave}Wie auch immer,@d{64} es wird spät…@d{96} denke ich?\nEs ist schwer zu sagen an diesem Ort.\n$Lass uns nach Hause gehen. \n$@c{smile_wave_wink}Vielleicht können wir morgen noch einen Kampf haben, der alten Zeiten willen?", + "ending_endless": "Glückwunsch! Du hast das aktuelle Ende erreicht!\nWir arbeiten an mehr Spielinhalten.", + "ending_name": "Entwickler" +} diff --git a/src/locales/de/move.json b/src/locales/de/move.json index 3cf7c747826..3c81ccfd7df 100644 --- a/src/locales/de/move.json +++ b/src/locales/de/move.json @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "Britzelturbo", - "effect": "Ein stürmischer Blitz-Angriff mit hoher Erstschlag- und Volltrefferquote." + "effect": "Ein stürmischer Blitz-Angriff mit garantierter Erstschlag- und Volltrefferquote.\n" }, "splishySplash": { "name": "Plätschersurfer", @@ -3807,4 +3807,4 @@ "name": "Giftkettung", "effect": "Der Anwender umwickelt das Ziel mit einer Kette aus Toxinen, die in dessen Körper eindringen und ihm schaden. Das Ziel wird eventuell schwer vergiftet." } -} \ No newline at end of file +} diff --git a/src/locales/de/pokemon-form.json b/src/locales/de/pokemon-form.json index de2e80154fe..d621e3165fa 100644 --- a/src/locales/de/pokemon-form.json +++ b/src/locales/de/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "Inkarnationsform", "keldeoOrdinary": "Standardform", "meloettaAria": "Gesangsform", + "meloettaPirouette": "Tanzform", "froakieBattleBond": "Ash-Form", "scatterbugMeadow": "Blumenmeermuster", "scatterbugIcySnow": "Frostmuster", diff --git a/src/locales/de/pokemon-summary.json b/src/locales/de/pokemon-summary.json index deb4a69f248..1790c6878b9 100644 --- a/src/locales/de/pokemon-summary.json +++ b/src/locales/de/pokemon-summary.json @@ -13,5 +13,32 @@ "metFragment": { "normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.", "apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten." + }, + "natureFragment": { + "Hardy": "{{nature}}", + "Lonely": "{{nature}}", + "Brave": "{{nature}}", + "Adamant": "{{nature}}", + "Naughty": "{{nature}}", + "Bold": "{{nature}}", + "Docile": "{{nature}}", + "Relaxed": "{{nature}}", + "Impish": "{{nature}}", + "Lax": "{{nature}}", + "Timid": "{{nature}}", + "Hasty": "{{nature}}", + "Serious": "{{nature}}", + "Jolly": "{{nature}}", + "Naive": "{{nature}}", + "Modest": "{{nature}}", + "Mild": "{{nature}}", + "Quiet": "{{nature}}", + "Bashful": "{{nature}}", + "Rash": "{{nature}}", + "Calm": "{{nature}}", + "Gentle": "{{nature}}", + "Sassy": "{{nature}}", + "Careful": "{{nature}}", + "Quirky": "{{nature}}" } -} \ No newline at end of file +} diff --git a/src/locales/de/run-history-ui-handler.json b/src/locales/de/run-history.json similarity index 93% rename from src/locales/de/run-history-ui-handler.json rename to src/locales/de/run-history.json index 43342c61908..77c8fcb6170 100644 --- a/src/locales/de/run-history-ui-handler.json +++ b/src/locales/de/run-history.json @@ -25,13 +25,14 @@ "challengeMonoGen9": "Gen IX", "playerItems": "Spielergegenstände", "personalBest": "Persönlicher Bestwert!", - "SPDshortened": "Geschw.", + "SPDshortened": "Init.", "runInfo": "Durchlauf Informationen", "money": "Geld", "runLength": "Durchlauf Dauer", "viewHeldItems": "Getragene Items", - "hallofFameTextM": "Willkommen in der Ruhmeshalle", + "hallofFameTextM": "Willkommen in der Ruhmeshalle!", "hallofFameTextF": "Willkommen in der Ruhmeshalle", "viewHallOfFame": "Ruhmeshalle ansehen!", "viewEndingSplash": "Endgrafik anzeigen!" -} \ No newline at end of file +} + diff --git a/src/locales/de/settings.json b/src/locales/de/settings.json index 1b25f5972ee..d72a026cf5a 100644 --- a/src/locales/de/settings.json +++ b/src/locales/de/settings.json @@ -61,7 +61,9 @@ "typeHints": "Typhinweise", "masterVolume": "Gesamtlautstärke", "bgmVolume": "Hintergrundmusik", + "fieldVolume": "Rufe & Attacken", "seVolume": "Spezialeffekte", + "uiVolume": "Benutzeroberfläche", "musicPreference": "Musik Präferenz", "mixed": "Gemischt", "gamepadPleasePlug": "Bitte einen Controller anschließen oder eine Taste drücken.", @@ -96,5 +98,10 @@ "gamepadSupport": "Controllerunterstützung", "showBgmBar": "Musiknamen anzeigen", "moveTouchControls": "Bewegung Touch Steuerung", - "shopOverlayOpacity": "Shop Overlay Deckkraft" + "shopOverlayOpacity": "Shop Overlay Deckkraft", + "shopCursorTarget": "Shop-Cursor Ziel", + "items": "Items", + "reroll": "Neu rollen", + "shop": "Shop", + "checkTeam": "Team überprüfen" } diff --git a/src/locales/de/trainer-classes.json b/src/locales/de/trainer-classes.json index 96382dcc3db..45826fcd310 100644 --- a/src/locales/de/trainer-classes.json +++ b/src/locales/de/trainer-classes.json @@ -117,5 +117,14 @@ "plasma_grunts": "Rüpel von Team Plasma", "flare_grunt": "Rüpel von Team Flare", "flare_grunt_female": "Rüpel von Team Flare", - "flare_grunts": "Rüpel von Team Flare" -} \ No newline at end of file + "flare_grunts": "Rüpel von Team Flare", + "aether_grunt": "Æther Foundation Personal", + "aether_grunt_female": "Æther Foundation Personal", + "aether_grunts": "Æther Foundation Personal", + "skull_grunt": "Rüpel von Team Skull", + "skull_grunt_female": "Rüpel von Team Skull", + "skull_grunts": "Rüpel von Team Skull", + "macro_grunt": "Angestellter von Macro Cosmos", + "macro_grunt_female": "Angestellte von Macro Cosmos", + "macro_grunts": "Angestellte von Macro Cosmos" +} diff --git a/src/locales/de/trainer-names.json b/src/locales/de/trainer-names.json index 013613fd399..ffbb772234c 100644 --- a/src/locales/de/trainer-names.json +++ b/src/locales/de/trainer-names.json @@ -139,12 +139,18 @@ "rood": "Rubius", "xerosic": "Xeros", "bryony": "Begonia", + "faba": "Fabian", + "plumeria": "Fran", + "oleana": "Olivia", "maxie": "Marc", "archie": "Adrian", "cyrus": "Zyrus", "ghetsis": "G-Cis", "lysandre": "Flordelis", + "lusamine": "Samantha", + "guzma": "Bromley", + "rose": "Rose", "blue_red_double": "Blau & Rot", "red_blue_double": "Rot & Blau", @@ -156,4 +162,4 @@ "iris_alder_double": "Lilia & Lauro", "piers_marnie_double": "Nezz & Mary", "marnie_piers_double": "Mary & Nezz" -} \ No newline at end of file +} diff --git a/src/locales/de/trainer-titles.json b/src/locales/de/trainer-titles.json index 25618c1b8f6..21a4b2fa7b6 100644 --- a/src/locales/de/trainer-titles.json +++ b/src/locales/de/trainer-titles.json @@ -16,6 +16,9 @@ "galactic_boss": "Galaktik-Boss", "plasma_boss": "Weiser von Team Plasma", "flare_boss": "Flare-Boss", + "aether_boss": "Æther-Präsidentin", + "skull_boss": "Skull-Boss", + "macro_boss": "Geschäftsführer von Macro Cosmos", "rocket_admin": "Team Rocket Vorstand", "rocket_admin_female": "Team Rocket Vorstand", "magma_admin": "Team Magma Vorstand", @@ -27,5 +30,9 @@ "plasma_sage": "Weiser von Team Plasma", "plasma_admin": "Team Plasma Vorstand", "flare_admin": "Team Flare Vorstand", - "flare_admin_female": "Team Flare Vorstand" -} \ No newline at end of file + "flare_admin_female": "Team Flare Vorstand", + "aether_admin": "Æther-Regionalleiter", + "skull_admin": "Team Skull Vorstand", + "macro_admin": "Vizepräsidentin von Macro Cosmos" + +} diff --git a/src/locales/en/battle.json b/src/locales/en/battle.json index e5ca8f77bb1..662678e7673 100644 --- a/src/locales/en/battle.json +++ b/src/locales/en/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", "learnMoveForgetQuestion": "Which move should be forgotten?", "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!", + "countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}Poof!", "learnMoveAnd": "And…", "levelCapUp": "The level cap\nhas increased to {{levelCap}}!", "moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", diff --git a/src/locales/en/bgm-name.json b/src/locales/en/bgm-name.json index d35b9f2b917..8838942c8a6 100644 --- a/src/locales/en/bgm-name.json +++ b/src/locales/en/bgm-name.json @@ -80,11 +80,21 @@ "battle_galactic_grunt": "BDSP Team Galactic Battle", "battle_plasma_grunt": "BW Team Plasma Battle", "battle_flare_grunt": "XY Team Flare Battle", + "battle_aether_grunt": "SM Aether Foundation Battle", + "battle_skull_grunt": "SM Team Skull Battle", + "battle_macro_grunt": "SWSH Trainer Battle", + "battle_galactic_admin": "BDSP Team Galactic Admin Battle", + "battle_skull_admin": "SM Team Skull Admin Battle", + "battle_oleana": "SWSH Oleana Battle", "battle_rocket_boss": "USUM Giovanni Battle", "battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", "battle_galactic_boss": "BDSP Cyrus Battle", "battle_plasma_boss": "B2W2 Ghetsis Battle", "battle_flare_boss": "XY Lysandre Battle", + "battle_aether_boss": "SM Lusamine Battle", + "battle_skull_boss": "SM Guzma Battle", + "battle_macro_boss": "SWSH Rose Battle", + "abyss": "PMD EoS Dark Crater", "badlands": "PMD EoS Barren Valley", "beach": "PMD EoS Drenched Bluff", @@ -137,4 +147,4 @@ "heal": "BW Pokémon Heal", "menu": "PMD EoS Welcome to the World of Pokémon!", "title": "PMD EoS Top Menu Theme" -} \ No newline at end of file +} diff --git a/src/locales/en/dialogue-female.json b/src/locales/en/dialogue-female.json index 6be1c7586b6..ca7f961e3a6 100644 --- a/src/locales/en/dialogue-female.json +++ b/src/locales/en/dialogue-female.json @@ -655,6 +655,86 @@ "5": "You may have beaten me, but when I lose, I go out in style!" } }, + "aether_grunt": { + "encounter": { + "1": "I'll fight you with all I have to wipe you out!", + "2": "I don't care if you're a kid or what. I'll send you flying if you threaten us!", + "3": "I was told to turn away Trainers, whomever they might be!", + "4": "I'll show you the power of Aether Paradise!", + "5": "Now that you've learned of the darkness at the heart of Aether Paradise, we'll need you to conveniently disappear!" + }, + "victory": { + "1": "Hmph! You seem to have a lot of skill.", + "2": "What does this mean? What does this mean!", + "3": "Hey! You're so strong that there's no way I can turn you away!", + "4": "Hmm... It seems as though I may have lost.", + "5": "Here's an impression for you: Aiyee!" + } + }, + "faba": { + "encounter": { + "1": "I, Branch Chief Faba, shall show you the harshness of the real world!", + "2": "The man who is called Aether Paradise's last line of defense is to battle a mere child?", + "3": "I, Faba, am the Aether Branch Chief. The only one in the world, I'm irreplaceable." + }, + "victory": { + "1": "Aiyee!", + "2": "H-h-how can this be?! How could this child...", + "3": "This is why... This is why I can't bring myself to like children." + } + }, + "skull_grunt": { + "encounter": { + "1": "We're not bad-we're just hard!", + "2": "You want some? That's how we say hello! Nice knowing you, punks!", + "3": "We're just a bunch of guys and gals with a great interest in other people's Pokémon!", + "4": "Why you trying to act hard when we're already hard as bones out here, homie?", + "5": "Team Skull represent! We can't pay the rent! Had a lot of fun, but our youth was misspent!" + }, + "victory": { + "1": "Huh? Is it over already?", + "2": "Time for us to break out, yo! Gotta tell y'all peace out, yo!", + "3": "We don't need your wack Pokémon anyway!", + "4": "Wha-?! This kid's way too strong-no bones about it!", + "5": "So, what? I'm lower than a Pokémon?! I already got self-esteem issues, man." + } + }, + "plumeria": { + "encounter": { + "1": " ...Hmph. You don't look like anything special to me.", + "2": "It takes these dumb Grunts way too long to deal with you kids...", + "3": "Mess with anyone in Team Skull, and I'll show you how serious I can get." + }, + "victory": { + "1": "Hmmph! You're pretty strong. I'll give you that.", + "2": "Hmmph. Guess you are pretty tough. Now I understand why my Grunts waste so much time battling kids.", + "3": "Hmmph! I guess I just have to hold that loss." + } + }, + "macro_grunt": { + "encounter": { + "1": "It looks like this is the end of the line for you!", + "2": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.", + "3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?" + }, + "victory": { + "1": "I have little choice but to respectfully retreat.", + "2": "Having to give up my pocket money... Losing means I'm back in the red...", + "3": "Nobody can beat Macro Cosmos when it comes to our dedication to our work!" + } + }, + "oleana": { + "encounter": { + "1": "I won't let anyone interfere with Mr. Rose's plan!", + "2": "So, you got through all of the special staff that I had ordered to stop you. I would expect nothing less.", + "3": "For the chairman! I won't lose!" + }, + "victory": { + "1": "*sigh* I wasn't able to win... Oleana...you really are a hopeless woman.", + "2": "Arghhh! This is inexcusable... What was I thinking... Any trainer who's made it this far would be no pushover..", + "3": "*sigh* I am one tired Oleana..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "So! I must say, I am impressed you got here!" @@ -787,6 +867,72 @@ "1": "Fools with no vision will continue to befoul this beautiful world." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "You're going to startle my sweet beast! It looks like I'll need to silence you first." + }, + "victory": { + "1": "How... how can you be so awful!" + }, + "defeat": { + "1": "Hmph..." + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "Why must you continue to pester me?! I am sick of you. Sick through and through!\n$Enough with this useless talk.. with Nihilego's power I will show you how wrong you were to come here!" + }, + "victory": { + "1": "Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "All that I want is my precious beast! I don't care about any of the rest of you!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "The hated boss who beats you down and beats you down and never lets up...\n$Yeah. Big bad Guzma is here!" + }, + "victory": { + "1": "Tch. I'm gonna beat you down one of these days!" + }, + "defeat": { + "1": "And you came all the way out here just for that, huh?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "Doesn't matter who I'm up against, I'm gonna beat them down!\n$That's what big bad Guzma is all about!" + }, + "victory": { + "1": "Guzma!!! What is wrong with you?!" + }, + "defeat": { + "1": "Y'all are stupid!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "I must provide limitless energy to ensure everlasting prosperity for everyone...\n$It is my purpose, my duty, my destiny!" + }, + "victory": { + "1": "You still don't understand, trainer...\n$We... No, I am going to change the course of history!" + }, + "defeat": { + "1": "You still don't understand a thing!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "I'm committed to solving the energy problem in the Galar region—and, of course, around the world.\n$My experience and accomplishments that made Macro Cosmos a success are proof my methods work.\n$I don't intend to change my mind, even if I lose." + }, + "victory": { + "1": "I'd forgotten how great Pokémon battles are! It's been so long since I battled...\n$That sure was satisfying, I accept defeat for this battle." + }, + "defeat": { + "1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity." + } + }, "brock": { "encounter": { "1": "My expertise on Rock-type Pokémon will take you down! Come on!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}I… I think I fulfilled my purpose…\n$@c{smile_eclosed}Promise me… After you heal the world… Please… come home safe.\n$@c{smile_ehalf}…Thank you." } } -} \ No newline at end of file +} diff --git a/src/locales/en/dialogue-male.json b/src/locales/en/dialogue-male.json index bf0612539d3..166c047c4ff 100644 --- a/src/locales/en/dialogue-male.json +++ b/src/locales/en/dialogue-male.json @@ -655,6 +655,86 @@ "5": "You may have beaten me, but when I lose, I go out in style!" } }, + "aether_grunt": { + "encounter": { + "1": "I'll fight you with all I have to wipe you out!", + "2": "I don't care if you're a kid or what. I'll send you flying if you threaten us!", + "3": "I was told to turn away Trainers, whomever they might be!", + "4": "I'll show you the power of Aether Paradise!", + "5": "Now that you've learned of the darkness at the heart of Aether Paradise, we'll need you to conveniently disappear!" + }, + "victory": { + "1": "Hmph! You seem to have a lot of skill.", + "2": "What does this mean? What does this mean!", + "3": "Hey! You're so strong that there's no way I can turn you away!", + "4": "Hmm... It seems as though I may have lost.", + "5": "Here's an impression for you: Aiyee!" + } + }, + "faba": { + "encounter": { + "1": "I, Branch Chief Faba, shall show you the harshness of the real world!", + "2": "The man who is called Aether Paradise's last line of defense is to battle a mere child?", + "3": "I, Faba, am the Aether Branch Chief. The only one in the world, I'm irreplaceable." + }, + "victory": { + "1": "Aiyee!", + "2": "H-h-how can this be?! How could this child...", + "3": "This is why... This is why I can't bring myself to like children." + } + }, + "skull_grunt": { + "encounter": { + "1": "We're not bad-we're just hard!", + "2": "You want some? That's how we say hello! Nice knowing you, punks!", + "3": "We're just a bunch of guys and gals with a great interest in other people's Pokémon!", + "4": "Why you trying to act hard when we're already hard as bones out here, homie?", + "5": "Team Skull represent! We can't pay the rent! Had a lot of fun, but our youth was misspent!" + }, + "victory": { + "1": "Huh? Is it over already?", + "2": "Time for us to break out, yo! Gotta tell y'all peace out, yo!", + "3": "We don't need your wack Pokémon anyway!", + "4": "Wha-?! This kid's way too strong-no bones about it!", + "5": "So, what? I'm lower than a Pokémon?! I already got self-esteem issues, man." + } + }, + "plumeria": { + "encounter": { + "1": " ...Hmph. You don't look like anything special to me.", + "2": "It takes these dumb Grunts way too long to deal with you kids..", + "3": "Mess with anyone in Team Skull, and I'll show you how serious I can get." + }, + "victory": { + "1": "Hmmph! You're pretty strong. I'll give you that.", + "2": "Hmmph. Guess you are pretty tough. Now I understand why my Grunts waste so much time battling kids.", + "3": "Hmmph! I guess I just have to hold that loss." + } + }, + "macro_grunt": { + "encounter": { + "1": "It looks like this is the end of the line for you!", + "2": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.", + "3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?" + }, + "victory": { + "1": "I have little choice but to respectfully retreat.", + "2": "Having to give up my pocket money... Losing means I'm back in the red...", + "3": "Nobody can beat Macro Cosmos when it comes to our dedication to our work!" + } + }, + "oleana": { + "encounter": { + "1": "I won't let anyone interfere with Mr. Rose's plan!", + "2": "So, you got through all of the special staff that I had ordered to stop you. I would expect nothing less.", + "3": "For the chairman! I won't lose!" + }, + "victory": { + "1": "*sigh* I wasn't able to win... Oleana...you really are a hopeless woman.", + "2": "Arghhh! This is inexcusable... What was I thinking... Any trainer who's made it this far would be no pushover..", + "3": "*sigh* I am one tired Oleana..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "So! I must say, I am impressed you got here!" @@ -787,6 +867,72 @@ "1": "Fools with no vision will continue to befoul this beautiful world." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "You're going to startle my sweet beast! It looks like I'll need to silence you first." + }, + "victory": { + "1": "How... how can you be so awful!" + }, + "defeat": { + "1": "Hmph..." + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "Why must you continue to pester me?! I am sick of you. Sick through and through!\n$Enough with this useless talk.. with Nihilego's power I will show you how wrong you were to come here!" + }, + "victory": { + "1": "Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "All that I want is my precious beast! I don't care about any of the rest of you!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "The hated boss who beats you down and beats you down and never lets up...\n$Yeah. Big bad Guzma is here!" + }, + "victory": { + "1": "Tch. I'm gonna beat you down one of these days!" + }, + "defeat": { + "1": "And you came all the way out here just for that, huh?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "Doesn't matter who I'm up against, I'm gonna beat them down!\n$That's what big bad Guzma is all about!" + }, + "victory": { + "1": "Guzma!!! What is wrong with you?!" + }, + "defeat": { + "1": "Y'all are stupid!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "I must provide limitless energy to ensure everlasting prosperity for everyone...\n$It is my purpose, my duty, my destiny!" + }, + "victory": { + "1": "You still don't understand, trainer...\n$We... No, I am going to change the course of history!" + }, + "defeat": { + "1": "You still don't understand a thing!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "I'm committed to solving the energy problem in the Galar region—and, of course, around the world.\n$My experience and accomplishments that made Macro Cosmos a success are proof my methods work.\n$I don't intend to change my mind, even if I lose." + }, + "victory": { + "1": "I'd forgotten how great Pokémon battles are! It's been so long since I battled...\n$That sure was satisfying, I accept defeat for this battle." + }, + "defeat": { + "1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity." + } + }, "brock": { "encounter": { "1": "My expertise on Rock-type Pokémon will take you down! Come on!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}I… I think I fulfilled my purpose…\n$@c{smile_eclosed}Promise me… After you heal the world… Please… come home safe.\n$@c{smile_ehalf}…Thank you." } } -} \ No newline at end of file +} diff --git a/src/locales/en/move.json b/src/locales/en/move.json index e6c8b718e17..7a10335ed06 100644 --- a/src/locales/en/move.json +++ b/src/locales/en/move.json @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "Zippy Zap", - "effect": "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness." + "effect": "The user attacks the target with bursts of electricity at high speed. This move always goes first and results in a critical hit." }, "splishySplash": { "name": "Splishy Splash", @@ -3807,4 +3807,4 @@ "name": "Malignant Chain", "effect": "The user pours toxins into the target by wrapping them in a toxic, corrosive chain. This may also leave the target badly poisoned." } -} \ No newline at end of file +} diff --git a/src/locales/en/pokemon-form.json b/src/locales/en/pokemon-form.json index 1b2992cd6b3..ea7e0f60c90 100644 --- a/src/locales/en/pokemon-form.json +++ b/src/locales/en/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "Incarnate", "keldeoOrdinary": "Ordinary", "meloettaAria": "Aria", + "meloettaPirouette": "Pirouette", "froakieBattleBond": "Battle Bond", "scatterbugMeadow": "Meadow", "scatterbugIcySnow": "Icy Snow", diff --git a/src/locales/en/pokemon-summary.json b/src/locales/en/pokemon-summary.json index 8d266999084..80e0cdab010 100644 --- a/src/locales/en/pokemon-summary.json +++ b/src/locales/en/pokemon-summary.json @@ -13,5 +13,32 @@ "metFragment": { "normal": "met at Lv{{level}},\n{{biome}}.", "apparently": "apparently met at Lv{{level}},\n{{biome}}." + }, + "natureFragment": { + "Hardy": "{{nature}}", + "Lonely": "{{nature}}", + "Brave": "{{nature}}", + "Adamant": "{{nature}}", + "Naughty": "{{nature}}", + "Bold": "{{nature}}", + "Docile": "{{nature}}", + "Relaxed": "{{nature}}", + "Impish": "{{nature}}", + "Lax": "{{nature}}", + "Timid": "{{nature}}", + "Hasty": "{{nature}}", + "Serious": "{{nature}}", + "Jolly": "{{nature}}", + "Naive": "{{nature}}", + "Modest": "{{nature}}", + "Mild": "{{nature}}", + "Quiet": "{{nature}}", + "Bashful": "{{nature}}", + "Rash": "{{nature}}", + "Calm": "{{nature}}", + "Gentle": "{{nature}}", + "Sassy": "{{nature}}", + "Careful": "{{nature}}", + "Quirky": "{{nature}}" } } \ No newline at end of file diff --git a/src/locales/en/settings.json b/src/locales/en/settings.json index 314e4f89dd8..6528f0368fe 100644 --- a/src/locales/en/settings.json +++ b/src/locales/en/settings.json @@ -61,7 +61,9 @@ "typeHints": "Type Hints", "masterVolume": "Master Volume", "bgmVolume": "BGM Volume", + "fieldVolume": "Field Volume", "seVolume": "SE Volume", + "uiVolume": "UI Volume", "musicPreference": "Music Preference", "mixed": "Mixed", "gamepadPleasePlug": "Please Plug in a Gamepad or Press a Button", diff --git a/src/locales/en/trainer-classes.json b/src/locales/en/trainer-classes.json index 1b827281a6a..9e30915dee6 100644 --- a/src/locales/en/trainer-classes.json +++ b/src/locales/en/trainer-classes.json @@ -117,5 +117,14 @@ "plasma_grunts": "Plasma Grunts", "flare_grunt": "Flare Grunt", "flare_grunt_female": "Flare Grunt", - "flare_grunts": "Flare Grunts" -} \ No newline at end of file + "flare_grunts": "Flare Grunts", + "aether_grunt": "Aether Foundation Employee", + "aether_grunt_female": "Aether Foundation Employee", + "aether_grunts": "Aether Foundation Employees", + "skull_grunt": "Team Skull Grunt", + "skull_grunt_female": "Team Skull Grunt", + "skull_grunts": "Team Skull Grunts", + "macro_grunt": "Macro Cosmos Trainer", + "macro_grunt_female": "Macro Cosmos Trainer", + "macro_grunts": "Macro Cosmos Trainers" +} diff --git a/src/locales/en/trainer-names.json b/src/locales/en/trainer-names.json index 1d4cddf3411..50a2ce18f34 100644 --- a/src/locales/en/trainer-names.json +++ b/src/locales/en/trainer-names.json @@ -138,11 +138,19 @@ "rood": "Rood", "xerosic": "Xerosic", "bryony": "Bryony", + "faba": "Faba", + "plumeria": "Plumeria", + "oleana": "Oleana", + "maxie": "Maxie", "archie": "Archie", "cyrus": "Cyrus", "ghetsis": "Ghetsis", "lysandre": "Lysandre", + "lusamine": "Lusamine", + "guzma": "Guzma", + "rose": "Rose", + "blue_red_double": "Blue & Red", "red_blue_double": "Red & Blue", "tate_liza_double": "Tate & Liza", @@ -153,4 +161,4 @@ "iris_alder_double": "Iris & Alder", "marnie_piers_double": "Marnie & Piers", "piers_marnie_double": "Piers & Marnie" -} \ No newline at end of file +} diff --git a/src/locales/en/trainer-titles.json b/src/locales/en/trainer-titles.json index 888b3780b8d..b9c919022be 100644 --- a/src/locales/en/trainer-titles.json +++ b/src/locales/en/trainer-titles.json @@ -16,6 +16,10 @@ "galactic_boss": "Team Galactic Boss", "plasma_boss": "Team Plasma Boss", "flare_boss": "Team Flare Boss", + "aether_boss": "Aether President", + "skull_boss": "Team Skull Boss", + "macro_boss": "Macro Cosmos President", + "rocket_admin": "Team Rocket Admin", "rocket_admin_female": "Team Rocket Admin", "magma_admin": "Team Magma Admin", @@ -27,5 +31,8 @@ "plasma_sage": "Team Plasma Sage", "plasma_admin": "Team Plasma Admin", "flare_admin": "Team Flare Admin", - "flare_admin_female": "Team Flare Admin" -} \ No newline at end of file + "flare_admin_female": "Team Flare Admin", + "aether_admin": "Aether Foundation Admin", + "skull_admin": "Team Skull Admin", + "macro_admin": "Macro Cosmos" +} diff --git a/src/locales/es/ability-trigger.json b/src/locales/es/ability-trigger.json index f49b0a784db..8bbcc80662c 100644 --- a/src/locales/es/ability-trigger.json +++ b/src/locales/es/ability-trigger.json @@ -1,11 +1,62 @@ { "blockRecoilDamage": "¡{{abilityName}} de {{pokemonName}}\nlo protegió del daño de retroceso!", "badDreams": "¡{{pokemonName}} está atormentado!", + "costar": "¡{{pokemonName}} copió los cambios de características de {{allyName}}!", "iceFaceAvoidedDamage": "¡{{pokemonNameWithAffix}} evitó\ndaño con {{abilityName}}!", + "perishBody": "¡{{abilityName}} de {{pokemonName}} debilitará a ambos Pokémon en 3 turnos!", + "poisonHeal": "¡{{pokemonNameWithAffix}} restauró algunos de sus PS gracias a {{abilityName}}!", "trace": "¡{{pokemonName}} ha copiado la habilidad {{abilityName}} \nde {{targetName}}!", "windPowerCharged": "¡{{pokemonName}} se ha cargado de electricidad gracias a {{moveName}}!", "quickDraw": "¡{{pokemonName}} ataca primero gracias a la habilidad Mano Rápida!", "disguiseAvoidedDamage": "¡El disfraz de {{pokemonNameWithAffix}} se ha roto!", - "preventBerryUse": "{{pokemonNameWithAffix}} está muy nervioso y no puede comer bayas!", - "weatherEffectDisappeared": "El tiempo atmosférico ya no ejerce ninguna influencia." -} \ No newline at end of file + "blockItemTheft": "¡{{pokemonNameWithAffix}} evitó el robo gracias a {{abilityName}}!", + "typeImmunityHeal": "¡{{pokemonNameWithAffix}} restauró algunos de sus PS gracias a {{abilityName}}!", + "nonSuperEffectiveImmunity": "¡{{pokemonNameWithAffix}} evitó el daño gracias a {{abilityName}}!", + "moveImmunity": "¡No afecta a {{pokemonNameWithAffix}}!", + "reverseDrain": "¡{{pokemonNameWithAffix}} absorbió lodo líquido!", + "postDefendTypeChange": "¡{{abilityName}} de {{pokemonNameWithAffix}} cambió a tipo {{typeName}}!", + "postDefendContactDamage": "¡{{abilityName}} de {{pokemonNameWithAffix}} ha herido a su atacante!", + "postDefendAbilitySwap": "¡{{pokemonNameWithAffix}} intercambió su habilidad con su objetivo!", + "postDefendAbilityGive": "¡{{pokemonNameWithAffix}} cambió la habilidad del objetivo por {{abilityName}}!", + "postDefendMoveDisable": "¡{{moveName}} de {{pokemonNameWithAffix}} ha sido anulado!", + "pokemonTypeChange": "¡{{pokemonNameWithAffix}} ha cambiado a tipo {{moveType}}!", + "postAttackStealHeldItem": "¡{{pokemonNameWithAffix}} robó {{stolenItemType}} de {{defenderName}}!", + "postDefendStealHeldItem": "¡{{pokemonNameWithAffix}} robó {{stolenItemType}} de {{attackerName}}!", + "copyFaintedAllyAbility": "¡{{abilityName}} de {{pokemonNameWithAffix}} fue copiada!", + "intimidateImmunity": "¡{{abilityName}} de {{pokemonNameWithAffix}} evita que sea intimidado!", + "postSummonAllyHeal": "¡{{pokemonNameWithAffix}} se ha bebido el té que ha preparado {{pokemonName}}!", + "postSummonClearAllyStats": "¡Los cambios de características de {{pokemonNameWithAffix}} fueron eliminados!", + "postSummonTransform": "¡{{pokemonNameWithAffix}} se transformó en {{targetName}}!", + "protectStat": "¡{{abilityName}} de {{pokemonNameWithAffix}} evita que baje su {{statName}}!", + "statusEffectImmunityWithName": "¡{{abilityName}} de {{pokemonNameWithAffix}} evita {{statusEffectName}}!", + "statusEffectImmunity": "¡{{abilityName}} de {{pokemonNameWithAffix}} evita los problemas de estado!", + "battlerTagImmunity": "¡{{abilityName}} de {{pokemonNameWithAffix}} previene {{battlerTagName}}!", + "forewarn": "¡{{pokemonNameWithAffix}} ha detectado el movimiento {{moveName}}!", + "frisk": "¡{{pokemonNameWithAffix}} ha cacheado {{opponentAbilityName}} de {{opponentName}}!", + "postWeatherLapseHeal": "¡{{pokemonNameWithAffix}} restauró algunos de sus PS gracias a {{abilityName}}!", + "postWeatherLapseDamage": "¡{{pokemonNameWithAffix}} se hizo daño por su {{abilityName}}!", + "postTurnLootCreateEatenBerry": "¡{{pokemonNameWithAffix}} recogió una {{berryName}}!", + "postTurnHeal": "¡{{pokemonNameWithAffix}} restauró algunos de sus PS gracias a {{abilityName}}!", + "fetchBall": "¡{{pokemonNameWithAffix}} encontró {{pokeballName}}!", + "healFromBerryUse": "¡{{pokemonNameWithAffix}} se curó gracias a {{abilityName}}!", + "arenaTrap": "¡{{pokemonNameWithAffix}} impide el cambio con {{abilityName}}!", + "postBattleLoot": "¡{{pokemonNameWithAffix}} recogió {{itemName}}!", + "postFaintContactDamage": "¡{{abilityName}} de {{pokemonNameWithAffix}} hizo daño a su atacante!", + "postFaintHpDamage": "¡{{abilityName}} de {{pokemonNameWithAffix}} hizo daño a su atacante!", + "postSummonPressure": "¡{{pokemonNameWithAffix}} ejerce Presión!", + "weatherEffectDisappeared": "El tiempo atmosférico ya no ejerce ninguna influencia.", + "postSummonMoldBreaker": "¡{{pokemonNameWithAffix}} rompió el molde!", + "postSummonAnticipation": "¡{{pokemonNameWithAffix}} se anticipó!", + "postSummonTurboblaze": "¡{{pokemonNameWithAffix}} irradia un aura llameante!", + "postSummonTeravolt": "¡{{pokemonNameWithAffix}} irradia un aura chisporroteante!", + "postSummonDarkAura": "¡{{pokemonNameWithAffix}} irradia un aura oscura!", + "postSummonFairyAura": "¡{{pokemonNameWithAffix}} irradia un aura feérica!", + "postSummonNeutralizingGas": "¡El Gas Reactivo de {{pokemonNameWithAffix}} se propaga por toda la zona!", + "postSummonAsOneGlastrier": "¡{{pokemonNameWithAffix}} tiene dos Habilidades!", + "postSummonAsOneSpectrier": "¡{{pokemonNameWithAffix}} tiene dos Habilidades!", + "postSummonVesselOfRuin": "¡{{pokemonNameWithAffix}} ha mermado {{statName}} de los demás Pokémon con Caldero Debacle!", + "postSummonSwordOfRuin": "¡{{pokemonNameWithAffix}} ha mermado {{statName}} de los demás Pokémon con Espada Debacle!", + "postSummonTabletsOfRuin": "¡{{pokemonNameWithAffix}} ha mermado {{statName}} de los demás Pokémon con Tablilla Debacle!", + "postSummonBeadsOfRuin": "¡{{pokemonNameWithAffix}} ha mermado {{statName}} de los demás Pokémon con Abalorio Debacle!", + "preventBerryUse": "{{pokemonNameWithAffix}} está muy nervioso y no puede comer bayas!" +} diff --git a/src/locales/es/battle.json b/src/locales/es/battle.json index 648f738b179..8573f74a94e 100644 --- a/src/locales/es/battle.json +++ b/src/locales/es/battle.json @@ -36,7 +36,7 @@ "learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", "learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", "learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, @d{15}y@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}¡Puf!", + "countdownPoof": "@d{32}1, @d{15}2, @d{15}y@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}¡Puf!", "learnMoveAnd": "Y…", "levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", "moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", diff --git a/src/locales/es/bgm-name.json b/src/locales/es/bgm-name.json index 9aa09da3704..be617b79567 100644 --- a/src/locales/es/bgm-name.json +++ b/src/locales/es/bgm-name.json @@ -78,11 +78,18 @@ "battle_galactic_grunt": "BDSP Team Galactic Battle", "battle_plasma_grunt": "BW - ¡Vs Equipo Plasma!", "battle_flare_grunt": "XY Team Flare Battle", + "battle_aether_grunt": "SM Aether Foundation Battle", + "battle_skull_grunt": "SM Team Skull Battle", + "battle_macro_grunt": "SWSH Trainer Battle", + "battle_galactic_admin": "BDSP Team Galactic Admin Battle", + "battle_skull_admin": "SM Team Skull Admin Battle", + "battle_oleana": "SWSH Oleana Battle", "battle_rocket_boss": "USUM Giovanni Battle", "battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", "battle_galactic_boss": "BDSP Cyrus Battle", "battle_plasma_boss": "B2W2 Ghetsis Battle", "battle_flare_boss": "XY Lysandre Battle", + "abyss": "PMD EoS - Cráter Oscuro", "badlands": "PMD EoS - Valle Desolado", "beach": "PMD EoS - Risco Calado", @@ -135,4 +142,4 @@ "heal": "BW - Cura Pokémon", "menu": "PMD EoS - ¡Bienvenidos al mundo de los Pokémon!", "title": "PMD EoS - Tema del menú principal" -} \ No newline at end of file +} diff --git a/src/locales/es/dialogue-female.json b/src/locales/es/dialogue-female.json index 9e26dfeeb6e..cbd7dbf39ad 100644 --- a/src/locales/es/dialogue-female.json +++ b/src/locales/es/dialogue-female.json @@ -1 +1,52 @@ -{} \ No newline at end of file +{ + "aether_grunt": { + "encounter": { + "1": "¡Lucharé con toda mi fuerza para detenerte!", + "2": "Me da igual que seas un crío. Eres una amenaza y debes irte.", + "3": "Me dijeron que mandara a todos los entrenadores por donde venían, ¡sin excepciones!", + "4": "¡Te mostraré el poder del Paraíso Æther!", + "5": "Ahora que conoces la oscuridad en lo profundo del Paraíso Æther, es hora de que vayas desapareciendo..." + }, + "victory": { + "1": "¡Vaya! Demuestras habilidad.", + "2": "¿Qué quiere decir esto? ¿Eh?", + "3": "¡Vaya! Con esa fuerza, ¡no creo que pueda detenerte!", + "4": "Vaya... parece que puede que haya perdido.", + "5": "¡Mira, te hago una mueca!: ¡Aiyee!" + } + }, + "faba": { + "encounter": { + "1": "¡Yo, Subdirector Fabio, te mostraré la cruda realidad del mundo!", + "2": "¿Yo, la última línea de defensa de Æther, battallando a un mero crío?", + "3": "Yo, Fabio, soy el Subdirector de la Fundación Æther. Soy el único en el mundo, soy irremplazable." + }, + "victory": { + "1": "¡Aaaah!", + "2": "¿C-c-cómo puede ser? Eres tan solo un niño...", + "3": "Este... este es el motivo por el que odio a los niños." + } + }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "¡Vas a asustar a mi pobre criatura! Parece que tendré que silenciarte cuanto antes." + }, + "victory": { + "1": "¿Cómo?¿Cómo puedes ser tan terrible?" + }, + "defeat": { + "1": "Buff." + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "¡¿Por qué me sigues molestando?! Estoy cansada de ti. ¡Hasta las narices!\n$Se acabó esta charla innecesaria. Este es el poder de Nihilego, ¡te demostraré cuánto te equivocas al venir aquí!" + }, + "victory": { + "1": "¡¡¡Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "¡Todo lo que quiero es a esta preciosa criatura! ¡Los demás no me importáis!" + } + } +} diff --git a/src/locales/es/dialogue-male.json b/src/locales/es/dialogue-male.json index 9e26dfeeb6e..cbd7dbf39ad 100644 --- a/src/locales/es/dialogue-male.json +++ b/src/locales/es/dialogue-male.json @@ -1 +1,52 @@ -{} \ No newline at end of file +{ + "aether_grunt": { + "encounter": { + "1": "¡Lucharé con toda mi fuerza para detenerte!", + "2": "Me da igual que seas un crío. Eres una amenaza y debes irte.", + "3": "Me dijeron que mandara a todos los entrenadores por donde venían, ¡sin excepciones!", + "4": "¡Te mostraré el poder del Paraíso Æther!", + "5": "Ahora que conoces la oscuridad en lo profundo del Paraíso Æther, es hora de que vayas desapareciendo..." + }, + "victory": { + "1": "¡Vaya! Demuestras habilidad.", + "2": "¿Qué quiere decir esto? ¿Eh?", + "3": "¡Vaya! Con esa fuerza, ¡no creo que pueda detenerte!", + "4": "Vaya... parece que puede que haya perdido.", + "5": "¡Mira, te hago una mueca!: ¡Aiyee!" + } + }, + "faba": { + "encounter": { + "1": "¡Yo, Subdirector Fabio, te mostraré la cruda realidad del mundo!", + "2": "¿Yo, la última línea de defensa de Æther, battallando a un mero crío?", + "3": "Yo, Fabio, soy el Subdirector de la Fundación Æther. Soy el único en el mundo, soy irremplazable." + }, + "victory": { + "1": "¡Aaaah!", + "2": "¿C-c-cómo puede ser? Eres tan solo un niño...", + "3": "Este... este es el motivo por el que odio a los niños." + } + }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "¡Vas a asustar a mi pobre criatura! Parece que tendré que silenciarte cuanto antes." + }, + "victory": { + "1": "¿Cómo?¿Cómo puedes ser tan terrible?" + }, + "defeat": { + "1": "Buff." + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "¡¿Por qué me sigues molestando?! Estoy cansada de ti. ¡Hasta las narices!\n$Se acabó esta charla innecesaria. Este es el poder de Nihilego, ¡te demostraré cuánto te equivocas al venir aquí!" + }, + "victory": { + "1": "¡¡¡Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "¡Todo lo que quiero es a esta preciosa criatura! ¡Los demás no me importáis!" + } + } +} diff --git a/src/locales/es/menu.json b/src/locales/es/menu.json index 3c6587fa462..bd2479a02df 100644 --- a/src/locales/es/menu.json +++ b/src/locales/es/menu.json @@ -16,7 +16,7 @@ "invalidLoginUsername": "El usuario no es válido", "invalidRegisterUsername": "El usuario solo puede contener letras, números y guiones bajos", "invalidLoginPassword": "La contraseña no es válida", - "invalidRegisterPassword": "Contraseña debe tener 6 o más caracter.", + "invalidRegisterPassword": "La contraseña debe tener 6 o más caracteres.", "usernameAlreadyUsed": "El usuario ya está en uso", "accountNonExistent": "El usuario no existe", "unmatchingPassword": "La contraseña no coincide", @@ -37,12 +37,19 @@ "weeklyRankings": "Rankings Semanales", "noRankings": "Sin Rankings", "positionIcon": "#", + "usernameScoreboard": "Usuario", + "score": "Puntos", + "wave": "Oleada", "loading": "Cargando…", "loadingAsset": "Cargando recurso: {{assetName}}", "playersOnline": "Jugadores en Línea", "yes": "Sí", "no": "No", "disclaimer": "AVISO", - "disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida\n de datos de guardado),cambiar sin avisar, y puede o no puede ser actualizado hasta ser completado.", - "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente." -} \ No newline at end of file + "disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida\n de datos de guardado), cambiar sin avisar, y puede o no puede ser actualizado hasta ser completado.", + "choosePokemon": "Elige un Pokémon.", + "renamePokemon": "Renombrar Pokémon.", + "rename": "Renombrar", + "nickname": "Apodo", + "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta, el juego se reconectará automáticamente." +} diff --git a/src/locales/es/modifier-type.json b/src/locales/es/modifier-type.json index ef6d5acbfa2..95325788bf4 100644 --- a/src/locales/es/modifier-type.json +++ b/src/locales/es/modifier-type.json @@ -97,6 +97,10 @@ "name": "MT{{moveId}} - {{moveName}}", "description": "Enseña {{moveName}} a un Pokémon." }, + "TmModifierTypeWithInfo": { + "name": "MT{{moveId}} - {{moveName}}", + "description": "Enseña {{moveName}} a un Pokémon\n(Mantén pulsado C o Shift para más info)." + }, "EvolutionItemModifierType": { "description": "Hace que ciertos Pokémon evolucionen." }, @@ -129,12 +133,12 @@ "name": "Caramelorarísimo" }, "MEGA_BRACELET": { - "name": "Mega-aro", - "description": "Las Megapiedras están disponibles." + "name": "Megapulsera", + "description": "Las megapiedras se vuelven disponibles." }, "DYNAMAX_BAND": { "name": "Maximuñequera", - "description": "Las Maxisetas están disponibles." + "description": "Las maxisetas se vuelven disponibles." }, "TERA_ORB": { "name": "Orbe Teracristal", @@ -154,42 +158,42 @@ "name": "Hiperpoción" }, "MAX_POTION": { - "name": "Máx. Poción" + "name": "Máx. poción" }, "FULL_RESTORE": { - "name": "Restau. Todo" + "name": "Restau. todo" }, "REVIVE": { "name": "Revivir" }, "MAX_REVIVE": { - "name": "Máx. Revivir" + "name": "Máx. revivir" }, "FULL_HEAL": { - "name": "Cura Total" + "name": "Cura total" }, "SACRED_ASH": { - "name": "Cen. Sagrada" + "name": "Ceniza sagrada" }, "REVIVER_SEED": { - "name": "Semilla Revivir", + "name": "Semilla revivir", "description": "Revive al portador con la mitad de sus PS al debilitarse por un golpe directo." }, "WHITE_HERB": { - "name": "White Herb", - "description": "An item to be held by a Pokémon. It will restore any lowered stat in battle." + "name": "Hierba blanca", + "description": "Un objeto que puede llevar un Pokémon. Restaurará cualquier estadística reducida en combate." }, "ETHER": { "name": "Éter" }, "MAX_ETHER": { - "name": "Éter Máx." + "name": "Éter máx." }, "ELIXIR": { "name": "Elixir" }, "MAX_ELIXIR": { - "name": "Elixir Máx." + "name": "Elixir máx." }, "PP_UP": { "name": "Más PP" @@ -204,10 +208,10 @@ "name": "Superincienso" }, "MAX_LURE": { - "name": "Incienso Máximo" + "name": "Incienso máximo" }, "MEMORY_MUSHROOM": { - "name": "Seta Recuerdo", + "name": "Seta recuerdo", "description": "Recuerda un movimiento olvidado de un Pokémon." }, "EXP_SHARE": { @@ -215,8 +219,8 @@ "description": "Los que no combatan reciben el 20% de la EXP." }, "EXP_BALANCE": { - "name": "Equilibrar EXP", - "description": "Da mayor parte de la EXP recibida a los miembros del equipo que tengan menos nivel." + "name": "Equilibrador EXP", + "description": "Da una mayor parte de la EXP recibida a los miembros del equipo que tengan menos nivel." }, "OVAL_CHARM": { "name": "Amuleto Oval", @@ -232,13 +236,13 @@ "name": "Amuleto EXP Dorado" }, "LUCKY_EGG": { - "name": "Huevo Suerte" + "name": "Huevo suerte" }, "GOLDEN_EGG": { - "name": "Huevo Dorado" + "name": "Huevo dorado" }, "SOOTHE_BELL": { - "name": "Camp. Alivio" + "name": "Camp. alivio" }, "SCOPE_LENS": { "name": "Periscopio", @@ -249,7 +253,7 @@ "description": "Puerro muy largo y duro que aumenta la probabilidad de asestar un golpe crítico. Debe llevarlo Farfetch'd." }, "EVIOLITE": { - "name": "Mineral Evolutivo", + "name": "Mineral evolutivo", "description": "Roca misteriosa. El Pokémon portador aumentará su Defensa y su Defensa Especial si aún puede evolucionar." }, "SOUL_DEW": { @@ -266,7 +270,7 @@ "name": "Real de oro" }, "AMULET_COIN": { - "name": "Moneda Amuleto", + "name": "Moneda amuleto", "description": "Aumenta el dinero ganado en un 20%." }, "GOLDEN_PUNCH": { @@ -279,10 +283,10 @@ }, "LOCK_CAPSULE": { "name": "Cápsula candado", - "description": "Le permite bloquear las rarezas de los objetos al cambiar de objetos." + "description": "Permite bloquear las rarezas de los objetos al refrescar objetos." }, "GRIP_CLAW": { - "name": "Garra Garfio" + "name": "Garra garfio" }, "WIDE_LENS": { "name": "Lupa" @@ -294,20 +298,24 @@ "name": "Amuleto curación", "description": "Aumenta la efectividad de los movimientos y objetos de curacion de PS en un 10% (excepto revivir)." }, + "CANDY_JAR": { + "name": "Tarrón de caramelos", + "description": "Aumenta la cantidad de niveles otorgados por los ítems Caramelos Raros en 1." + }, "BERRY_POUCH": { - "name": "Saco Bayas", - "description": "Agrega un 30% de posibilidades de que una baya usada no se consuma." + "name": "Saco bayas", + "description": "Añade un 30% de posibilidades de que una baya no se gaste al usarla." }, "FOCUS_BAND": { - "name": "Cinta Focus", + "name": "Banda aguante", "description": "Agrega un 10% de probabilidad de resistir un ataque que lo debilitaría." }, "QUICK_CLAW": { - "name": "Garra Rápida", + "name": "Garra rápida", "description": "Agrega un 10% de probabilidad de atacar primero independientemente de la velocidad (después de la prioridad)." }, "KINGS_ROCK": { - "name": "Roca del Rey", + "name": "Roca del rey", "description": "Agrega un 10% de probabilidad de que un ataque haga que el oponente retroceda." }, "LEFTOVERS": { @@ -315,7 +323,7 @@ "description": "Cura 1/16 de los PS máximo de un Pokémon cada turno." }, "SHELL_BELL": { - "name": "Camp Concha", + "name": "Cascabel concha", "description": "Cura 1/8 del daño infligido por un Pokémon." }, "TOXIC_ORB": { @@ -327,15 +335,15 @@ "description": "Extraña esfera que causa quemaduras a quien la usa en combate." }, "BATON": { - "name": "Relevo", + "name": "Testigo", "description": "Permite pasar los efectos al cambiar de Pokémon, también evita las trampas." }, "SHINY_CHARM": { - "name": "Amuleto Iris", + "name": "Amuleto iris", "description": "Aumenta drásticamente la posibilidad de que un Pokémon salvaje sea Shiny." }, "ABILITY_CHARM": { - "name": "Amuleto Habilidad", + "name": "Amuleto habilidad", "description": "Aumenta drásticamente la posibilidad de que un Pokémon salvaje tenga una habilidad oculta." }, "IV_SCANNER": { @@ -346,60 +354,60 @@ "name": "Punta ADN" }, "MINI_BLACK_HOLE": { - "name": "Mini Agujero Negro" + "name": "Mini agujero negro" }, "GOLDEN_POKEBALL": { "name": "Poké Ball Dorada", "description": "Agrega 1 opción de objeto extra al final de cada combate." }, "ENEMY_DAMAGE_BOOSTER": { - "name": "Ficha Daño", + "name": "Ficha de daño", "description": "Aumenta el daño en un 5%." }, "ENEMY_DAMAGE_REDUCTION": { - "name": "Ficha Protección", + "name": "Ficha de protección", "description": "Reduce el daño recibido en un 2,5%." }, "ENEMY_HEAL": { - "name": "Ficha Curación", + "name": "Ficha de curación", "description": "Cura el 2% de los PS máximo en cada turno." }, "ENEMY_ATTACK_POISON_CHANCE": { - "name": "Ficha Veneno" + "name": "Ficha veneno" }, "ENEMY_ATTACK_PARALYZE_CHANCE": { - "name": "Ficha Parálisis" + "name": "Ficha parálisis" }, "ENEMY_ATTACK_BURN_CHANCE": { - "name": "Ficha Quemadura" + "name": "Ficha quemadura" }, "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { - "name": "Ficha Cura Total", + "name": "Ficha cura total", "description": "Agrega un 2.5% de probabilidad cada turno de curar un problema de estado." }, "ENEMY_ENDURE_CHANCE": { - "name": "Ficha Aguante" + "name": "Ficha aguante" }, "ENEMY_FUSED_CHANCE": { - "name": "Ficha Fusión", + "name": "Ficha fusión", "description": "Agrega un 1% de probabilidad de que un Pokémon salvaje sea una fusión." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { - "name": "Bola Luminosa", + "name": "Bola luminosa", "description": "Asombrosa esfera que aumenta el Ataque y el Ataque Especial. Debe llevarla Pikachu." }, "THICK_CLUB": { - "name": "Hueso Grueso", + "name": "Hueso grueso", "description": "Extraño tipo de hueso que potencia los ataques físicos. Debe llevarlo Cubone o Marowak." }, "METAL_POWDER": { - "name": "Polvo Metálico", + "name": "Polvo metálico", "description": "Polvo muy fino, pero a la vez poderoso, que aumenta la Defensa. Debe llevarlo Ditto." }, "QUICK_POWDER": { - "name": "Polvo Veloz", + "name": "Polvo veloz", "description": "Polvo muy fino, pero a la vez poderoso, que aumenta la Velocidad. Debe llevarlo Ditto." } }, @@ -413,35 +421,35 @@ "dire_hit": "Crítico X" }, "TempBattleStatBoosterStatName": { - "ATK": "Attack", - "DEF": "Defense", - "SPATK": "Sp. Atk", - "SPDEF": "Sp. Def", - "SPD": "Speed", - "ACC": "Accuracy", - "CRIT": "Critical Hit Ratio", - "EVA": "Evasiveness", + "ATK": "Ataque", + "DEF": "Defensa", + "SPATK": "Ataq. Esp.", + "SPDEF": "Def. Esp.", + "SPD": "Velocidad", + "ACC": "Precisión", + "CRIT": "Tasa de crítico", + "EVA": "Evasión", "DEFAULT": "???" }, "AttackTypeBoosterItem": { - "silk_scarf": "Pañuelo Seda", - "black_belt": "Cinturón Negro", - "sharp_beak": "Pico Afilado", - "poison_barb": "Flecha Venenosa", - "soft_sand": "Arena Fina", - "hard_stone": "Piedra Dura", - "silver_powder": "Polvo Plata", + "silk_scarf": "Pañuelo seda", + "black_belt": "Cinturón negro", + "sharp_beak": "Pico afilado", + "poison_barb": "Flecha venenosa", + "soft_sand": "Arena fina", + "hard_stone": "Piedra dura", + "silver_powder": "Polvo plata", "spell_tag": "Hechizo", - "metal_coat": "Rev. Metálico", + "metal_coat": "Revest. metálico", "charcoal": "Carbón", - "mystic_water": "Agua Mística", - "miracle_seed": "Semilla Milagro", + "mystic_water": "Agua mística", + "miracle_seed": "Semilla milagro", "magnet": "Imán", - "twisted_spoon": "Cuchara Torcida", + "twisted_spoon": "Cuchara torcida", "never_melt_ice": "Antiderretir", - "dragon_fang": "Colmillo Dragón", - "black_glasses": "Gafas de Sol", - "fairy_feather": "Pluma Hada" + "dragon_fang": "Colmillo dragón", + "black_glasses": "Gafas de sol", + "fairy_feather": "Pluma feérica" }, "BaseStatBoosterItem": { "hp_up": "Más PS", @@ -452,38 +460,38 @@ "carbos": "Carburante" }, "EvolutionItem": { - "NONE": "None", - "LINKING_CORD": "Cordón Unión", - "SUN_STONE": "Piedra Solar", - "MOON_STONE": "Piedra Lunar", - "LEAF_STONE": "Piedra Hoja", - "FIRE_STONE": "Piedra Fuego", - "WATER_STONE": "Piedra Agua", - "THUNDER_STONE": "Piedra Trueno", - "ICE_STONE": "Piedra Hielo", - "DUSK_STONE": "Piedra Noche", - "DAWN_STONE": "Piedra Alba", - "SHINY_STONE": "Piedra Día", - "CRACKED_POT": "Tetera Agrietada", - "SWEET_APPLE": "Manzana Dulce", - "TART_APPLE": "Manzana Ácida", - "STRAWBERRY_SWEET": "Confite Fresa", - "UNREMARKABLE_TEACUP": "Cuenco Mediocre", - "CHIPPED_POT": "Tetera Rota", - "BLACK_AUGURITE": "Mineral Negro", - "GALARICA_CUFF": "Brazal Galanuez", - "GALARICA_WREATH": "Corona Galanuez", - "PEAT_BLOCK": "Bloque de Turba", - "AUSPICIOUS_ARMOR": "Armadura Auspiciosa", - "MALICIOUS_ARMOR": "Armadura Maldita", - "MASTERPIECE_TEACUP": "Cuenco Exquisito", - "METAL_ALLOY": "Metal Compuesto", - "SCROLL_OF_DARKNESS": "Manuscrito Sombras", - "SCROLL_OF_WATERS": "Manuscrito Aguas", - "SYRUPY_APPLE": "Manzana Melosa" + "NONE": "Ninguno", + "LINKING_CORD": "Cordón unión", + "SUN_STONE": "Piedra solar", + "MOON_STONE": "Piedra lunar", + "LEAF_STONE": "Piedra hoja", + "FIRE_STONE": "Piedra fuego", + "WATER_STONE": "Piedra agua", + "THUNDER_STONE": "Piedra trueno", + "ICE_STONE": "Piedra hielo", + "DUSK_STONE": "Piedra noche", + "DAWN_STONE": "Piedra alba", + "SHINY_STONE": "Piedra día", + "CRACKED_POT": "Tetera agrietada", + "SWEET_APPLE": "Manzana dulce", + "TART_APPLE": "Manzana ácida", + "STRAWBERRY_SWEET": "Confite fresa", + "UNREMARKABLE_TEACUP": "Cuenco mediocre", + "CHIPPED_POT": "Tetera rota", + "BLACK_AUGURITE": "Mineral negro", + "GALARICA_CUFF": "Brazal galanuez", + "GALARICA_WREATH": "Corona galanuez", + "PEAT_BLOCK": "Bloque de turba", + "AUSPICIOUS_ARMOR": "Armadura auspiciosa", + "MALICIOUS_ARMOR": "Armadura maldita", + "MASTERPIECE_TEACUP": "Cuenco exquisito", + "METAL_ALLOY": "Metal compuesto", + "SCROLL_OF_DARKNESS": "Manuscrito sombras", + "SCROLL_OF_WATERS": "Manuscrito aguas", + "SYRUPY_APPLE": "Manzana melosa" }, "FormChangeItem": { - "NONE": "None", + "NONE": "Ninguno", "ABOMASITE": "Abomasnowita", "ABSOLITE": "Absolita", "AERODACTYLITE": "Aerodactylita", @@ -532,70 +540,70 @@ "SWAMPERTITE": "Swampertita", "TYRANITARITE": "Tyranitarita", "VENUSAURITE": "Venusaurita", - "BLUE_ORB": "Prisma Azul", - "RED_ORB": "Prisma Rojo", - "SHARP_METEORITE": "Meteorito Afilado", - "HARD_METEORITE": "Meteorito Duro", - "SMOOTH_METEORITE": "Meteorito Suave", - "ADAMANT_CRYSTAL": "Gran Diamansfera", - "LUSTROUS_GLOBE": "Gran Lustresfera", - "GRISEOUS_CORE": "Gran Griseosfera", - "REVEAL_GLASS": "Espejo Veraz", + "BLUE_ORB": "Prisma azul", + "RED_ORB": "Prisma rojo", + "SHARP_METEORITE": "Meteorito afilado", + "HARD_METEORITE": "Meteorito duro", + "SMOOTH_METEORITE": "Meteorito suave", + "ADAMANT_CRYSTAL": "Gran diamansfera", + "LUSTROUS_GLOBE": "Gran lustresfera", + "GRISEOUS_CORE": "Gran griseosfera", + "REVEAL_GLASS": "Espejo veraz", "GRACIDEA": "Gracídea", - "MAX_MUSHROOMS": "MaxiSetas", - "DARK_STONE": "Piedra Oscura", - "LIGHT_STONE": "Piedra Luminosa", - "PRISON_BOTTLE": "Vasija Castigo", + "MAX_MUSHROOMS": "Maxisetas", + "DARK_STONE": "Orbe oscuro", + "LIGHT_STONE": "Orbe claro", + "PRISON_BOTTLE": "Vasija castigo", "N_LUNARIZER": "Necroluna", "N_SOLARIZER": "Necrosol", - "RUSTED_SWORD": "Espada Oxidada", - "RUSTED_SHIELD": "Escudo Oxidado", - "ICY_REINS_OF_UNITY": "Riendas Unión Heladas", - "SHADOW_REINS_OF_UNITY": "Riendas Unión Oscuras", - "WELLSPRING_MASK": "Máscara Fuente", - "HEARTHFLAME_MASK": "Máscara Horno", - "CORNERSTONE_MASK": "Máscara Cimiento", + "RUSTED_SWORD": "Espada oxidada", + "RUSTED_SHIELD": "Escudo oxidado", + "ICY_REINS_OF_UNITY": "Riendas unión heladas", + "SHADOW_REINS_OF_UNITY": "Riendas unión oscuras", + "WELLSPRING_MASK": "Máscara fuente", + "HEARTHFLAME_MASK": "Máscara horno", + "CORNERSTONE_MASK": "Máscara cimiento", "SHOCK_DRIVE": "FulgoROM", "BURN_DRIVE": "PiroROM", "CHILL_DRIVE": "CrioROM", "DOUSE_DRIVE": "HidroROM", "ULTRANECROZIUM_Z": "Ultranecrostal Z", - "FIST_PLATE": "Tabla Fuerte", - "SKY_PLATE": "Tabla Cielo", - "TOXIC_PLATE": "Tabla Tóxica", - "EARTH_PLATE": "Tabla Terrax", - "STONE_PLATE": "Tabla Pétrea", - "INSECT_PLATE": "Tabla Bicho", - "SPOOKY_PLATE": "Tabla Terror", - "IRON_PLATE": "Tabla Acero", - "FLAME_PLATE": "Tabla Llama", - "SPLASH_PLATE": "Tabla Linfa", - "MEADOW_PLATE": "Tabla Pradal", - "ZAP_PLATE": "Tabla Trueno", - "MIND_PLATE": "Tabla Mental", - "ICICLE_PLATE": "Tabla Helada", - "DRACO_PLATE": "Tabla Draco", - "DREAD_PLATE": "Tabla Oscura", - "PIXIE_PLATE": "Tabla Duende", - "BLANK_PLATE": "Tabla Neutra", - "LEGEND_PLATE": "Tabla Legendaria", - "FIGHTING_MEMORY": "Disco Lucha", - "FLYING_MEMORY": "Disco Volador", - "POISON_MEMORY": "Disco Veneno", - "GROUND_MEMORY": "Disco Tierra", - "ROCK_MEMORY": "Disco Roca", - "BUG_MEMORY": "Disco Bicho", - "GHOST_MEMORY": "Disco Fantasma", - "STEEL_MEMORY": "Disco Acero", - "FIRE_MEMORY": "Disco Fuego", - "WATER_MEMORY": "Disco Agua", - "GRASS_MEMORY": "Disco Planta", - "ELECTRIC_MEMORY": "Disco Eléctrico", - "PSYCHIC_MEMORY": "Disco Psíquico", - "ICE_MEMORY": "Disco Hielo", - "DRAGON_MEMORY": "Disco Dragón", - "DARK_MEMORY": "Disco Siniestro", - "FAIRY_MEMORY": "Disco Hada", - "BLANK_MEMORY": "Disco Blanco" + "FIST_PLATE": "Tabla fuerte", + "SKY_PLATE": "Tabla cielo", + "TOXIC_PLATE": "Tabla tóxica", + "EARTH_PLATE": "Tabla terrax", + "STONE_PLATE": "Tabla pétrea", + "INSECT_PLATE": "Tabla bicho", + "SPOOKY_PLATE": "Tabla terror", + "IRON_PLATE": "Tabla acero", + "FLAME_PLATE": "Tabla llama", + "SPLASH_PLATE": "Tabla linfa", + "MEADOW_PLATE": "Tabla pradal", + "ZAP_PLATE": "Tabla trueno", + "MIND_PLATE": "Tabla mental", + "ICICLE_PLATE": "Tabla helada", + "DRACO_PLATE": "Tabla draco", + "DREAD_PLATE": "Tabla oscura", + "PIXIE_PLATE": "Tabla duende", + "BLANK_PLATE": "Tabla neutra", + "LEGEND_PLATE": "Tabla legendaria", + "FIGHTING_MEMORY": "Disco lucha", + "FLYING_MEMORY": "Disco volador", + "POISON_MEMORY": "Disco veneno", + "GROUND_MEMORY": "Disco tierra", + "ROCK_MEMORY": "Disco roca", + "BUG_MEMORY": "Disco bicho", + "GHOST_MEMORY": "Disco fantasma", + "STEEL_MEMORY": "Disco acero", + "FIRE_MEMORY": "Disco fuego", + "WATER_MEMORY": "Disco agua", + "GRASS_MEMORY": "Disco planta", + "ELECTRIC_MEMORY": "Disco eléctrico", + "PSYCHIC_MEMORY": "Disco psíquico", + "ICE_MEMORY": "Disco hielo", + "DRAGON_MEMORY": "Disco dragón", + "DARK_MEMORY": "Disco siniestro", + "FAIRY_MEMORY": "Disco hada", + "BLANK_MEMORY": "Disco en blanco" } -} \ No newline at end of file +} diff --git a/src/locales/es/move.json b/src/locales/es/move.json index f8ec3be9ca1..f4c28dd02e7 100644 --- a/src/locales/es/move.json +++ b/src/locales/es/move.json @@ -3807,4 +3807,4 @@ "name": "Cadena Virulenta", "effect": "Apresa al objetivo con una cadena hecha de ponzoña que le inocula toxinas para minarle las fuerzas. Puede envenenar gravemente." } -} \ No newline at end of file +} diff --git a/src/locales/es/pokemon-form.json b/src/locales/es/pokemon-form.json index 91c49e30ca7..c46521d78da 100644 --- a/src/locales/es/pokemon-form.json +++ b/src/locales/es/pokemon-form.json @@ -56,7 +56,8 @@ "deerlingSummer": "Verano", "deerlingAutumn": "Otoño", "deerlingWinter": "Invierno", - "meloettaAria": "Aria", + "meloettaAria": "Lírica", + "meloettaPirouette": "Danza", "froakieBattleBond": "Fuerte Afecto", "scatterbugMeadow": "Floral", "scatterbugIcySnow": "Polar", diff --git a/src/locales/es/pokemon-info.json b/src/locales/es/pokemon-info.json index 385970171f3..241f5e7c5d0 100644 --- a/src/locales/es/pokemon-info.json +++ b/src/locales/es/pokemon-info.json @@ -3,17 +3,18 @@ "HP": "PS", "HPshortened": "PS", "ATK": "Ataque", - "ATKshortened": "Ata", + "ATKshortened": "Atq.", "DEF": "Defensa", - "DEFshortened": "Def", - "SPATK": "At. Esp.", - "SPATKshortened": "AtEsp", + "DEFshortened": "Def.", + "SPATK": "Atq. Esp.", + "SPATKshortened": "AtqEs.", "SPDEF": "Def. Esp.", - "SPDEFshortened": "DefEsp", + "SPDEFshortened": "DefEs.", "SPD": "Velocidad", "SPDshortened": "Veloc.", - "ACC": "Accuracy", - "EVA": "Evasiveness" + "ACC": "Precisión", + "EVA": "Evasión", + "HPStat": "PS" }, "Type": { "UNKNOWN": "Desconocido", @@ -37,4 +38,4 @@ "FAIRY": "Hada", "STELLAR": "Astral" } -} \ No newline at end of file +} diff --git a/src/locales/es/settings.json b/src/locales/es/settings.json index 2351abf04ae..9c16fbb0fd6 100644 --- a/src/locales/es/settings.json +++ b/src/locales/es/settings.json @@ -2,6 +2,106 @@ "boy": "Chico", "girl": "Chica", "general": "General", + "display": "Pantalla", "audio": "Audio", - "shopOverlayOpacity": "Opacidad de la fase de compra" + "gamepad": "Mando", + "keyboard": "Teclado", + "gameSpeed": "Veloc. del juego", + "hpBarSpeed": "Veloc. barra PS", + "expGainsSpeed": "Veloc. de EXP", + "expPartyDisplay": "Mostrar EXP del Equipo", + "skipSeenDialogues": "Saltar diálogos leídos", + "battleStyle": "Estilo de lucha", + "enableRetries": "Activar reintento", + "hideIvs": "Ocultar escáner de IVs", + "tutorials": "Tutoriales", + "touchControls": "Control táctil", + "vibrations": "Vibración", + "normal": "Normal", + "fast": "+1", + "faster": "+2", + "skip": "Saltar", + "levelUpNotifications": "Aumentos de nivel", + "on": "Sí", + "off": "No", + "switch": "Cambiar", + "set": "Mantener", + "auto": "Auto.", + "disabled": "Desact.", + "language": "Idioma", + "change": "Cambiar", + "uiTheme": "Color UI", + "default": "Predet.", + "legacy": "Clásico", + "windowType": "Ventana", + "moneyFormat": "Formato dinero", + "damageNumbers": "Cifras de daño", + "simple": "Simple", + "fancy": "Elegante", + "abbreviated": "Abreviado", + "moveAnimations": "Animación de movs.", + "showStatsOnLevelUp": "Estadísticas al aum. nivel", + "candyUpgradeNotification": "Aviso de caramelos", + "passivesOnly": "Solo pasivas", + "candyUpgradeDisplay": "Muestra de caramelos", + "icon": "Icono", + "animation": "Animación", + "moveInfo": "Info. de movimientos", + "showMovesetFlyout": "Descripción de movimientos", + "showArenaFlyout": "Descripción de escenarios", + "showTimeOfDayWidget": "Mostrar hora del día", + "timeOfDayAnimation": "Animación hora del día", + "bounce": "Rebote", + "timeOfDay_back": "Vuelta", + "spriteSet": "Set de sprites", + "consistent": "Consistente", + "mixedAnimated": "Mixto", + "fusionPaletteSwaps": "Colores de fusión", + "playerGender": "Género del jugador", + "typeHints": "Pistas de tipos", + "masterVolume": "Volumen total", + "bgmVolume": "Volumen música", + "fieldVolume": "Volumen escenario", + "seVolume": "Volumen efectos", + "uiVolume": "Volumen sistema", + "musicPreference": "Preferencia musical", + "mixed": "Mixta", + "gamepadPleasePlug": "Conecta un mando o pulsa un botón", + "delete": "Eliminar", + "keyboardPleasePress": "Pulsa una tecla de tu teclado", + "reset": "Restablecer", + "requireReload": "Requiere reinicio", + "action": "Acción", + "back": "Atrás", + "pressToBind": "Pulsa para vincular", + "pressButton": "Pulsa un botón...", + "buttonUp": "Arriba", + "buttonDown": "Abajo", + "buttonLeft": "Izquierda", + "buttonRight": "Derecha", + "buttonAction": "Acción", + "buttonMenu": "Menú", + "buttonSubmit": "Confirmar", + "buttonCancel": "Cancelar", + "buttonStats": "Estadísticas", + "buttonCycleForm": "Cambiar forma", + "buttonCycleShiny": "Cambiar shiny", + "buttonCycleGender": "Cambiar género", + "buttonCycleAbility": "Cambiar habilidad", + "buttonCycleNature": "Cambiar naturaleza", + "buttonCycleVariant": "Cambiar variante", + "buttonSpeedUp": "Acelerar", + "buttonSlowDown": "Ralentizar", + "alt": " (Alt.)", + "mute": "Silenciar", + "controller": "Mando", + "gamepadSupport": "Soporte de mando", + "showBgmBar": "Mostrar título de canción", + "moveTouchControls": "Controles táctiles", + "shopOverlayOpacity": "Opacidad de la fase de compra", + "shopCursorTarget": "Cursor de la tienda", + "items": "Objetos", + "reroll": "Actualizar", + "shop": "Tienda", + "checkTeam": "Ver equipo" } diff --git a/src/locales/es/trainer-classes.json b/src/locales/es/trainer-classes.json index ac36d0c2b83..0677193e4f8 100644 --- a/src/locales/es/trainer-classes.json +++ b/src/locales/es/trainer-classes.json @@ -95,5 +95,8 @@ "worker": "Operario", "worker_female": "Operaria", "workers": "Operarios", - "youngster": "Joven" -} \ No newline at end of file + "youngster": "Joven", + "aether_grunt": "Empleado de la Fundación Æther", + "aether_grunt_female": "Empleada de la Fundación Æther", + "aether_grunts": "Empleados de la Fundación Æther" +} diff --git a/src/locales/es/trainer-names.json b/src/locales/es/trainer-names.json index 515a62d252a..c6758366db7 100644 --- a/src/locales/es/trainer-names.json +++ b/src/locales/es/trainer-names.json @@ -138,11 +138,15 @@ "rood": "Rood", "xerosic": "Xerosic", "bryony": "Bryony", + "faba": "Fabio", + "maxie": "Maxie", "archie": "Archie", "cyrus": "Cyrus", "ghetsis": "Ghetsis", "lysandre": "Lysandre", + "lusamine": "Samina", + "blue_red_double": "Azul y Rojo", "red_blue_double": "Rojo y Azul", "tate_liza_double": "Vito y Leti", @@ -153,4 +157,4 @@ "iris_alder_double": "Iris y Mirto", "marnie_piers_double": "Roxy y Nerio", "piers_marnie_double": "Nerio y Roxy" -} \ No newline at end of file +} diff --git a/src/locales/es/trainer-titles.json b/src/locales/es/trainer-titles.json index d352e404500..5bee9fc8c51 100644 --- a/src/locales/es/trainer-titles.json +++ b/src/locales/es/trainer-titles.json @@ -16,6 +16,8 @@ "galactic_boss": "Team Galactic Boss", "plasma_boss": "Team Plasma Boss", "flare_boss": "Team Flare Boss", + "aether_boss": "Presidente Æther", + "rocket_admin": "Team Rocket Admin", "rocket_admin_female": "Team Rocket Admin", "magma_admin": "Team Magma Admin", @@ -27,5 +29,6 @@ "plasma_sage": "Team Plasma Sage", "plasma_admin": "Team Plasma Admin", "flare_admin": "Team Flare Admin", - "flare_admin_female": "Team Flare Admin" -} \ No newline at end of file + "flare_admin_female": "Team Flare Admin", + "aether_admin": "Director de la Fundación Æther" +} diff --git a/src/locales/fr/ability-trigger.json b/src/locales/fr/ability-trigger.json index 0f91f6e2209..d10fc18a146 100644 --- a/src/locales/fr/ability-trigger.json +++ b/src/locales/fr/ability-trigger.json @@ -12,7 +12,7 @@ "typeImmunityHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaure un peu ses PV !", "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} évite\nles dégâts avec {{abilityName}} !", "disguiseAvoidedDamage": "Le déguisement de {{pokemonNameWithAffix}}\ntombe !", - "moveImmunity": "Ça n'affecte pas {{pokemonNameWithAffix}}…", + "moveImmunity": "Ça n’affecte pas {{pokemonNameWithAffix}}…", "reverseDrain": "{{pokemonNameWithAffix}} aspire\nle suintement !", "postDefendTypeChange": "{{abilityName}} de {{pokemonNameWithAffix}}\nle transforme en type {{typeName}} !", "postDefendContactDamage": "{{pokemonNameWithAffix}} est blessé\npar son talent {{abilityName}} !", @@ -23,7 +23,7 @@ "postAttackStealHeldItem": "{{pokemonNameWithAffix}} vole\nl’objet {{stolenItemType}} de {{defenderName}} !", "postDefendStealHeldItem": "{{pokemonNameWithAffix}} vole\nl’objet {{stolenItemType}} de {{attackerName}} !", "copyFaintedAllyAbility": "{{pokemonNameWithAffix}} reçoit\nle talent {{abilityName}} !", - "intimidateImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nl’empêche d'être intimidé !", + "intimidateImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nl’empêche d’être intimidé !", "postSummonAllyHeal": "{{pokemonNameWithAffix}} boit le thé\npréparé par {{pokemonName}} !", "postSummonClearAllyStats": "Les stats de {{pokemonNameWithAffix}}\nsont revenues à la normale !", "postSummonTransform": "{{pokemonNameWithAffix}} prend\nl’apparence de {{targetName}} !", @@ -59,4 +59,4 @@ "postSummonTabletsOfRuin": "Le Bois du Fléau de {{pokemonNameWithAffix}}\naffaiblit l’{{statName}} des Pokémon alentour !", "postSummonBeadsOfRuin": "Les Perles du Fléau de {{pokemonNameWithAffix}}\naffaiblissent la {{statName}} des Pokémon alentour !", "preventBerryUse": "{{pokemonNameWithAffix}} est tendu\net ne peut plus manger de Baies !" -} \ No newline at end of file +} diff --git a/src/locales/fr/ability.json b/src/locales/fr/ability.json index 0993fcde3a9..7db44c45fa7 100644 --- a/src/locales/fr/ability.json +++ b/src/locales/fr/ability.json @@ -469,11 +469,11 @@ }, "honeyGather": { "name": "Cherche Miel", - "description": "The Pokémon gathers Honey after a battle. The Honey is then sold for money." + "description": "Le Pokémon trouve du Miel après un combat et est directement revendu contre de l’argent." }, "frisk": { "name": "Fouille", - "description": "Lorsqu'il entre en combat, le Pokémon peut vérifier la capacité d'un Pokémon adverse." + "description": "Lorsqu’il entre en combat, le Pokémon peut vérifier la capacité d’un Pokémon adverse." }, "reckless": { "name": "Téméraire", @@ -1239,4 +1239,4 @@ "name": "Emprise Toxique", "description": "Lorsque Pêchaminus empoisonne un Pokémon grâce à l’une de ses capacités, ce dernier devient également confus." } -} \ No newline at end of file +} diff --git a/src/locales/fr/achv-female.json b/src/locales/fr/achv-female.json index 0f82f612a6c..68e114965cd 100644 --- a/src/locales/fr/achv-female.json +++ b/src/locales/fr/achv-female.json @@ -62,7 +62,7 @@ "name": "Caïd" }, "HealAchv": { - "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité, un talent ou un objet tenu." + "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité,\nun talent ou un objet tenu." }, "1000_HEAL": { "name": "Médecin" @@ -261,4 +261,4 @@ "name": "Du premier coup !", "description": "Terminer un challenge « Nouveau départ »." } -} \ No newline at end of file +} diff --git a/src/locales/fr/achv-male.json b/src/locales/fr/achv-male.json index c51da04ecc8..077d37b4500 100644 --- a/src/locales/fr/achv-male.json +++ b/src/locales/fr/achv-male.json @@ -36,7 +36,7 @@ "name": "One Punch Man" }, "HealAchv": { - "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité, un talent ou un objet tenu." + "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité,\nun talent ou un objet tenu." }, "250_HEAL": { "name": "Infirmier" @@ -261,4 +261,4 @@ "name": "Du premier coup !", "description": "Terminer un challenge « Nouveau départ »." } -} \ No newline at end of file +} diff --git a/src/locales/fr/battle-info.json b/src/locales/fr/battle-info.json index 1fd968a8bd4..1408fd4d602 100644 --- a/src/locales/fr/battle-info.json +++ b/src/locales/fr/battle-info.json @@ -1,3 +1,3 @@ { - "generation": "Génération {{generation}}" -} \ No newline at end of file + "generation": "{{generation}}" +} diff --git a/src/locales/fr/battle.json b/src/locales/fr/battle.json index bc8c02c07d8..1c108c89ded 100644 --- a/src/locales/fr/battle.json +++ b/src/locales/fr/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.", "learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?", "learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, @d{15}et@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Tadaaa !", + "countdownPoof": "@d{32}1, @d{15}2, @d{15}et@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}Tadaaa !", "learnMoveAnd": "Et…", "levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !", "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", diff --git a/src/locales/fr/bgm-name.json b/src/locales/fr/bgm-name.json index e32855990f7..ecf0075e79d 100644 --- a/src/locales/fr/bgm-name.json +++ b/src/locales/fr/bgm-name.json @@ -1,5 +1,5 @@ { - "music": "Musique : ", + "music": "♪ : ", "missing_entries": "{{name}}", "battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto", "battle_johto_champion": "N2B2 - Vs. Maitre de Johto", @@ -45,6 +45,7 @@ "battle_legendary_lake_trio": "ROSA - Vs. Gardiens des Lacs", "battle_legendary_sinnoh": "ROSA - Vs. Légendaire de Sinnoh", "battle_legendary_dia_pal": "ROSA - Vs. Dialga/Palkia", + "battle_legendary_origin_forme": "LPA - Vs. Dialga/Palkia Originel", "battle_legendary_giratina": "ROSA - Vs. Giratina", "battle_legendary_arceus": "HGSS - Vs. Arceus", "battle_legendary_unova": "NB - Vs. Légendaire d’Unys", @@ -59,6 +60,7 @@ "battle_legendary_zac_zam": "ÉB - Vs. Zacian/Zamazenta", "battle_legendary_glas_spec": "ÉB - Vs. Blizzeval/Spectreval", "battle_legendary_calyrex": "ÉB - Vs. Sylveroy", + "battle_legendary_riders": "ÉB - Vs. Sylveroy Cavalier du Froid/d’Effroi", "battle_legendary_birds_galar": "ÉB - Vs. Oiseaux Légendaires de Galar", "battle_legendary_ruinous": "ÉV - Vs. Trésors du fléau", "battle_legendary_kor_mir": "ÉV - Profondeurs de la Zone Zéro (Combat)", @@ -78,46 +80,56 @@ "battle_galactic_grunt": "DÉPS Vs. Team Galaxie", "battle_plasma_grunt": "NB - Vs. Team Plasma", "battle_flare_grunt": "XY - Vs. Team Flare", + "battle_aether_grunt": "SL - Vs. Fondation Æther", + "battle_skull_grunt": "SL - Vs. Team Skull", + "battle_macro_grunt": "ÉB - Vs. Macro Cosmos", + "battle_galactic_admin": "DÉPS - Vs. Admin Team Galaxie", + "battle_skull_admin": "SL - Vs. Admin Team Skull", + "battle_oleana": "ÉB - Vs. Liv", "battle_rocket_boss": "USUL - Vs. Giovanni", "battle_aqua_magma_boss": "ROSA - Vs. Arthur/Max", "battle_galactic_boss": "DÉPS - Vs. Hélio", "battle_plasma_boss": "N2B2 - Vs. Ghetis", "battle_flare_boss": "XY - Vs. Lysandre", - "abyss": "PDM EdS - Cratère Obscur", - "badlands": "PDM EdS - Vallée Stérile", - "beach": "PDM EdS - Falaise Trempée", - "cave": "PDM EdS - Pic Céleste (grotte)", - "construction_site": "PDM EdS - Carrière Rocher", - "desert": "PDM EdS - Désert du Nord", - "dojo": "PDM EdS - Dojo Ossatueur", - "end": "PDM EdS - Tour Céleste", - "factory": "PDM EdS - Ruines Cachées", - "fairy_cave": "PDM EdS - Caverne Étoile", - "forest": "PDM EdS - Forêt Crépuscule", - "grass": "PDM EdS - Bois aux Pommes", - "graveyard": "PDM EdS - Forêt Trompeuse", - "ice_cave": "PDM EdS - Montagne Glacier", - "island": "PDM EdS - Côte Escarpée", + "battle_aether_boss": "SL - Vs. Elsa-Mina", + "battle_skull_boss": "SL - Vs. Guzma", + "battle_macro_boss": "ÉB - Vs. Shehroz", + + "abyss": "PDM EdC - Cratère Obscur", + "badlands": "PDM EdC - Vallée Stérile", + "beach": "PDM EdC - Falaise Trempée", + "cave": "PDM EdC - Pic Céleste (grotte)", + "construction_site": "PDM EdC - Carrière Rocher", + "desert": "PDM EdC - Désert du Nord", + "dojo": "PDM EdC - Dojo Ossatueur", + "end": "PDM EdC - Tour Céleste", + "factory": "PDM EdC - Ruines Cachées", + "fairy_cave": "PDM EdC - Caverne Étoile", + "forest": "PDM EdC - Forêt Crépuscule", + "grass": "PDM EdC - Bois aux Pommes", + "graveyard": "PDM EdC - Forêt Trompeuse", + "ice_cave": "PDM EdC - Montagne Glacier", + "island": "PDM EdC - Côte Escarpée", "jungle": "Lmz - Jungle", "laboratory": "Firel - Laboratory", - "lake": "PDM EdS - Caverne Cristal", - "meadow": "PDM EdS - Pic Céleste (forêt)", + "lake": "PDM EdC - Caverne Cristal", + "meadow": "PDM EdC - Pic Céleste (forêt)", "metropolis": "Firel - Metropolis", - "mountain": "PDM EdS - Mt Corne", - "plains": "PDM EdS - Pic Céleste (prairie)", - "power_plant": "PDM EdS - Plaines Élek", - "ruins": "PDM EdS - Ruine Scellée", + "mountain": "PDM EdC - Mont Corne", + "plains": "PDM EdC - Pic Céleste (prairie)", + "power_plant": "PDM EdC - Plaines Élek", + "ruins": "PDM EdC - Ruine Scellée", "sea": "Andr06 - Marine Mystique", "seabed": "Firel - Seabed", "slum": "Andr06 - Sneaky Snom", - "snowy_forest": "PDM EdS - Pic Céleste (plaine enneigée)", + "snowy_forest": "PDM EdC - Pic Céleste (plaine enneigée)", "space": "Firel - Aether", - "swamp": "PDM EdS - Mer Fermée", - "tall_grass": "PDM EdS - Forêt Brumeuse", - "temple": "PDM EdS - Grotte Égide", - "town": "PDM EdS - Donjon aléatoire - Thème 3", - "volcano": "PDM EdS - Grotte Étuve", - "wasteland": "PDM EdS - Terres Illusoires", + "swamp": "PDM EdC - Mer Fermée", + "tall_grass": "PDM EdC - Forêt Brumeuse", + "temple": "PDM EdC - Grotte Égide", + "town": "PDM EdC - Donjon aléatoire - Thème 3", + "volcano": "PDM EdC - Grotte Étuve", + "wasteland": "PDM EdC - Terres Illusoires", "encounter_ace_trainer": "NB - Regards croisés (Topdresseur·euse)", "encounter_backpacker": "NB - Regards croisés (Randonneur·euse)", "encounter_clerk": "NB - Regards croisés (Employé·e)", @@ -133,6 +145,6 @@ "encounter_twins": "NB - Regards croisés (Jumelles)", "encounter_youngster": "NB - Regards croisés (Gamin)", "heal": "NB - Soin de Pokémon", - "menu": "PDM EdS - Bienvenue dans le monde de Pokémon !", - "title": "PDM EdS - Menu Principal" -} \ No newline at end of file + "menu": "PDM EdC - Bienvenue dans le monde de Pokémon !", + "title": "PDM EdC - Menu Principal" +} diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index a9ca99781fc..37ec76f3a20 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const frConfig = { ability, diff --git a/src/locales/fr/dialogue-double-battle-female.json b/src/locales/fr/dialogue-double-battle-female.json index 078149783a9..55bb5da9800 100644 --- a/src/locales/fr/dialogue-double-battle-female.json +++ b/src/locales/fr/dialogue-double-battle-female.json @@ -1,7 +1,7 @@ { "blue_red_double": { "encounter": { - "1": "Blue : Hé Red, montrons-leur de quel bois on se chauffe !\n$Red : …\n$Blue : Voilà la puissance du Bourg Palette !" + "1": "Blue : Hé Red, montrons-lui de quel bois on se chauffe !\n$Red : …\n$Blue : Voilà la puissance du Bourg Palette !" }, "victory": { "1": "Blue : C’était un magnifique combat !\n$Red : …" @@ -79,4 +79,4 @@ "1": "Peterson : Ça c’est du rock !\n$Rosemary : Frérot…" } } -} \ No newline at end of file +} diff --git a/src/locales/fr/dialogue-double-battle-male.json b/src/locales/fr/dialogue-double-battle-male.json index a31e855cf4b..188b27ca143 100644 --- a/src/locales/fr/dialogue-double-battle-male.json +++ b/src/locales/fr/dialogue-double-battle-male.json @@ -1,7 +1,7 @@ { "blue_red_double": { "encounter": { - "1": "Blue : Hé Red, montrons-leur de quel bois on se chauffe !\n$Red : …\n$Blue : Voilà la puissance du Bourg Palette !" + "1": "Blue : Hé Red, montrons-lui de quel bois on se chauffe !\n$Red : …\n$Blue : Voilà la puissance du Bourg Palette !" }, "victory": { "1": "Blue : C’était un magnifique combat !\n$Red : …" @@ -79,4 +79,4 @@ "1": "Peterson : Ça c’est du rock !\n$Rosemary : Frérot…" } } -} \ No newline at end of file +} diff --git a/src/locales/fr/dialogue-female.json b/src/locales/fr/dialogue-female.json index 1aaadbb6449..82e3a4efd46 100644 --- a/src/locales/fr/dialogue-female.json +++ b/src/locales/fr/dialogue-female.json @@ -38,7 +38,7 @@ "3": "Je te connais pas. Ça te dis de te battre ?", "4": "Prenons du bon temps avec ce combat Pokémon !", "5": "Je vais t’apprendre à te battre avec tes Pokémon !", - "6": "Un combat doit être pris au sérieux. T’es prête à te battre ?", + "6": "Un combat doit toujours être pris au sérieux.\nT’es prête à te battre ?", "7": "Tu seras pas jeune éternellement. T’as qu’une chance pendant un combat. Bientôt, tu seras plus qu’un souvenir.", "8": "Tu ferais mieux d’y aller doucement avec moi. Mais je vais me battre sérieusement !", "9": "Je m’ennuie à l’école. Y’a rien à y faire. *Baille*\nJe me bats juste pour passer le temps." @@ -69,7 +69,7 @@ "defeat": { "1": "Tu ne devrais pas t’énerver sur tes Pokémon, même après une défaite.", "2": "Alors ? Pas mal mes Pokémon, hein ? Je suis fait pour ça.", - "3": "Peut importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." + "3": "Peu importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." } }, "breeder_female": { @@ -148,7 +148,7 @@ }, "victory": { "1": "Très bien… T’as de bons Pokémon…", - "2": "Quoi ?! Mais c'est moi le génie des combats !", + "2": "Quoi ?! Mais c’est moi le génie des combats !", "3": "Évidemment que t’es le personnage principal !", "4": "OK ! OK ! Tu pourrais être une Topdresseuse !" }, @@ -169,50 +169,98 @@ }, "rocket_grunt": { "encounter": { - "1": "Nous sommes de retour !" + "1": "Nous sommes de retour !", + "2": "Ça bosse dur, ici ! Alors du balai !", + "3": "File-nous tes Pokémon ou tu vas gouter à la colère de la Team Rocket !", + "4": "Sois témoin de ce qu’est une vraie terreur de la Team Rocket!", + "5": "Hé gamine ! Moi être guy member of la Team Rocket !" }, "victory": { - "1": "Une fois de plus la Team Rocket s’envole vers d’autres cieux !" + "1": "Une fois de plus la Team Rocket s’envole vers d’autres cieux !", + "2": "Mince! J’ai laissé tomber\nla Clé Ascenseur !", + "3": "J’ai tout foiré !", + "4": "Mes compagnons vont me venger !", + "5": "Toi dire quoi ? Forget que tu m’as vu !\nYou n’as rien seen !" } }, "magma_grunt": { "encounter": { - "1": "N’espère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !" + "1": "N’espère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !", + "2": "Ne te mêle pas de nos affaires ! On va rendre ce monde meilleur !", + "3": "Hors de mon chemin ! La Team Magma n’a pas de temps pour les gamins !", + "4": "J’espère que t’as quelques marshmallows, car ça va chauffer !", + "5": "On va utiliser le puissance d’un volcan ! Ça va être… explosif ! Tu l’as… ? Héhé !" }, "victory": { - "1": "Je…?\nJ’ai perdu ?!" + "1": "Je…?\nJ’ai perdu ?!", + "2": "Je peux pas croire que j’ai pas pris mon déjeuner juste pour ça…", + "3": "Impossible ! T’es qu’une gosse !", + "4": "Aahhh…\nJ’aurais dû directement rentrer à la planque…", + "5": "Tu m’as démoli… Tu crois que le boss va suspendre mon salaire ?" } }, "aqua_grunt": { "encounter": { - "1": "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour une gamine !" + "1": "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour un gamin !", + "2": "Grrr…\nTu as eu le culot de t’opposer à la Team Aqua !", + "3": "Je vais te liquéfier !\nEt ce sera pas qu’à cause des mes Pokémon Eau !", + "4": "Nous, la Team Aqua, existons pour le bien commun !", + "5": "Prépare-toi à te faire emporter par le courant de…\nEuh… Mes Pokémon ! Oui, mes Pokémon !" }, "victory": { - "1": "Comment ça ?" + "1": "Comment ça ?", + "2": "Ah, j’avais pas prévu d’être gêné par un mouflet qui se mêle de tout !", + "3": "J’ai perdu ?! Super, j’ai plus qu’à nager jusqu’à la planque maintenant…", + "4": "Oh non quelle angoisse…\nLe boss va me démonter…", + "5": "Je suis battu… Tu penses que le boss va me faire subir le supplice de la planche ?…" } }, "galactic_grunt": { "encounter": { - "1": "Ne te mets pas en travers de la Team Galaxie !" + "1": "Ne te mets pas en travers de la Team Galaxie !", + "2": "Sois témoin de la puissance de notre technologie et du futur qui se profile !", + "3": "Au nom de la Team Galaxie, j’éliminerai quiconque se mettera sur notre route !", + "4": "Prépare ta défaite !", + "5": "J’espère que t’es prête à te prendre une raclée de l’espace !" }, "victory": { - "1": "Désactivation…" + "1": "Désactivation…", + "2": "Cet échec n’est qu’une poussière face à nos ambitions débordantes.", + "3": "Notre projet est bien plus important que cette défaite.", + "4": "Comment ?!", + "5": "Note à moi-même :\nM’entrainer aux combats Pokémon. Ça urge…" } }, "plasma_grunt": { "encounter": { - "1": "Pas de quatiers à ceux qui ne suivent pas notre idéal !" + "1": "Pas de quatiers à ceux qui ne suivent pas notre idéal !", + "2": "Si je gagne, tu relâches tous tes Pokémon !", + "3": "Si tu te mets en travers de la Team Plasma, je m’occuperai de toi personnellement !", + "4": "La Team Plasma va libérer les Pokémon de tous les humains égoïstes dans ton genre !", + "5": "Nos coupes sont lunaires… Mais en combat ?\nTu vas vite le découvrir." }, "victory": { - "1": "Plasmaaaaaaaaa !" + "1": "Plasmaaaaaaaaa !", + "2": "Comment ai-je pu perdre…", + "3": "… Ce Pokémon est nul, j’vais aller en voler de meilleurs !", + "4": "Les plans ambitieux connaissent toujours leurs lots d’interruptions.", + "5": "C’est mauvais… MAUVAIS MAUVAIS MAUVAIS MAUVAIS !\nVa falloir battre en retraite, c’est la méga cata !" } }, "flare_grunt": { "encounter": { - "1": "Le style et le bon gout, il n’y a que ça qui compte !" + "1": "Tes Pokémon ne sont pas dignes de l’élégance de la Team Flare.", + "2": "T’as des lunettes de soleil j’espère ?\nCar prépare-toi à être éblouie !", + "3": "La Team Flare va purifier ce monde de toute imperfection !", + "4": "Prépare-toi à découvrir l’indiscutable sens du style de la Team Flare !", + "5": "La mode, c’est important !" }, "victory": { - "1": "Mon futur me semble guère radieux." + "1": "Mon futur n’a pas l’air si radieux.", + "2": "Les combats semblent être plus complexes que je le pensais.\nRetour aux planches à dessin.", + "3": "Ehhhh ?! J’ai perdu ?!", + "4": "Même dans la défaite, l’élégance de la Team Flare continue de rayonner sur ce monde.", + "5": "J’appelle pas ça perdre, j’appelle ça échouer avec panache !" } }, "rocket_boss_giovanni_1": { @@ -223,7 +271,7 @@ "1": "QUOI ? IMPOSSIBLE !" }, "defeat": { - "1": "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n'es encore qu’une gamine." + "1": "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n’es encore qu’une gamine." } }, "rocket_boss_giovanni_2": { @@ -336,6 +384,77 @@ "1": "Les Pokémon… Ne devraient plus exister." } }, + "brock": { + "encounter": { + "1": "Mon expertise des types Roche va te mettre au sol ! En garde !", + "2": "Tu veux toujours te battre avec moi ? Même en sachant que tu vas perdre ?", + "3": "Laisse-moi de montrer la véritable force de mes Pokémon Roche !" + }, + "victory": { + "1": "J’étais trop sûr de moi, c’est pour ça que j’ai perdu.", + "2": "Ce monde est vaste ! Je suis honoré d’avoir pu t’affronter.", + "3": "Peut-être bien que je n’aurais pas dû abandonner ma vocation d’Éleveur…" + }, + "defeat": { + "1": "La défense est la meilleure des attaques !\nTelle est ma méthode !", + "2": "Viens étudier des roches avec moi la prochaine fois si tu veux apprendre à mieux les aborder !", + "3": "Tout ce temps à voyager autour du monde paie enfin !" + } + }, + "misty": { + "encounter": { + "1": "Ma tactique ? Attaquer avec des Pokémon Eau !", + "2": "Je vais te prouver le tsunami que sont mes Pokémon aquatiques !", + "3": "Mon rêve, c’était de voyager et de défier des Dresseurs super forts. Seras-tu à la hauteur ?" + }, + "victory": { + "1": "OK. T’es pas naze… Je le reconnais…", + "2": "Pfff… T’as juste eu de la chance hein ?!", + "3": "Ouah ! T’es super balèze !" + }, + "defeat": { + "1": "Qu’en dis-tu? C’est ça, la puissance des Pokémon Eau !", + "2": "J’espère que t’as pris note des élégantes techniques de nage de mes Pokémon !", + "3": "Tes Pokémon ne jouent visiblement pas dans le même bassin…" + } + }, + "lt_surge": { + "encounter": { + "1": "T’as pas froid aux yeux, soldat ! Les combats Pokémon, c’est la guerre !", + "2": "Tu as du guts pour venir me fight ici ! Je vais te shock !", + "3": "Compte tes dents, tu vas morfler !\nMes Pokémon Électrik vont t’atomiser !" + }, + "victory": { + "1": "Whoo ! T’iras loin toi.", + "2": "Oh noes ! Mes tricks électriques sont à plat…\nYou are very fortiche!", + "3": "Tu es very costaud ! Je vais training very dur mes Pokémon, moi too, et on sera Number One !" + }, + "defeat": { + "1": "Oh yeah !\nMes Pokémon Électrik sont les best du monde !", + "2": "Oh yeah, baby ! I am trop fort !", + "3": "Une combat Pokémon, c’est comme une guerre et t’as eu droit à une bataille de premier ordre !" + } + }, + "erika": { + "encounter": { + "1": "Il fait beau, aujourd’hui, n’est-ce pas… ?\nQuoi un combat… ? Très bien…", + "2": "L’arrangement floral est ma spécialité, et mes Pokémon sont de type Plante. Quoi ? Tu veux te battre ?", + "3": "Il fait beau… Le soleil brille… Les plantes bourgeonnent… Je m’ennuie…", + "4": "Voir un tel jardin rempli de fleurs est si apaisant…" + }, + "victory": { + "1": "Bien joué, c’est mértié.", + "2": "Dommage, on s’amusait si bien…", + "3": "Oh non, le combat est terminé…", + "4": "Aaah, ça fait du bien !\nMerci, j’en avais besoin." + }, + "defeat": { + "1": "J’ai failli m’endormir…", + "2": "Oh non… Mes Pokémon Plante ont l’air de t’avoir bien endormie…", + "3": "Ce combat était si apaisant…", + "4": "Oh non… C’est tout ?" + } + }, "flare_boss_lysandre_2": { "encounter": { "1": "Ton futur ou le mien…\nVoyons lequel mérite plus d’aboutir." @@ -349,7 +468,7 @@ }, "rival": { "encounter": { - "1": "@c{smile}Ah, je te cherchais ! Je savais que t’étais pressée de partir, mais je m’attendais quand même à un au revoir…\n$@c{smile_eclosed}T’as finalement décidé de réaliser ton rêve ?\nJ’ai peine à y croire.\n$@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t’es prête.\n$@c{serious_mopen_fists}Surtout ne te retiens pas et donne-moi tout ce que t’as !" + "1": "@c{smile}Ah, te voilà ! Je t’ai cherchée partout ! Je savais que t’étais pressée de partir, mais je m’attendais quand même à un au revoir…\n$@c{smile_eclosed}T’as finalement décidé de réaliser ton rêve ?\nJ’ai peine à y croire.\n$@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t’es prête.\n$@c{serious_mopen_fists}Surtout ne te retiens pas et donne-moi tout ce que t’as !" }, "victory": { "1": "@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment une débutante ?\n$@c{smile}T’as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin.\n$D’ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas.\n$@c{serious_smile_fists}Bonne chance à toi !" @@ -441,7 +560,7 @@ }, "rival_6": { "encounter": { - "1": "@c{smile_eclosed}Nous y revoilà.\n$@c{neutral}J’ai eu du temps pour réfléchir à tout ça.\nIl y a une raison à pourquoi tout semble étrange.\n$@c{neutral_eclosed}Ton rêve, ma volonté de te battre…\nFont partie de quelque chose de plus grand.\n$@c{serious}C’est même pas à propos de moi, ni de toi… Mais du monde, @c{serious_mhalf_fists}et te repousser dans tes limites est ma mission.\n$@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir.\n$@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds.\n$@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ?\n$@c{serious}… et c’est comme si quelque chose ici me parlait.\n$Comme si c’était tout ce que ce monde avait toujours connu.\n$Ces précieux moments ensemble semblent si proches ne sont rien de plus qu’un lointain souvenir.\n$@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ?\n$@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n'aura jamais de fin et t’es la seule à en être capable.\n$@c{serious_smile_fists}Difficile de comprendre le sens de tout ça, je sais juste que c’est la réalité.\n$@c{serious_mopen_fists}Si tu ne parviens à pas me battre ici et maintenant, tu n’as aucune chance." + "1": "@c{smile_eclosed}Nous y revoilà.\n$@c{neutral}J’ai eu du temps pour réfléchir à tout ça.\nIl y a une raison à pourquoi tout semble étrange.\n$@c{neutral_eclosed}Ton rêve, ma volonté de te battre…\nFont partie de quelque chose de plus grand.\n$@c{serious}C’est même pas à propos de moi, ni de toi… Mais du monde, @c{serious_mhalf_fists}et te repousser dans tes limites est ma mission.\n$@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir.\n$@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds.\n$@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ?\n$@c{serious}… et c’est comme si quelque chose ici me parlait.\n$Comme si c’était tout ce que ce monde avait toujours connu.\n$Ces précieux moments ensemble semblent si proches ne sont rien de plus qu’un lointain souvenir.\n$@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ?\n$@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es la seule à en être capable.\n$@c{serious_smile_fists}Difficile de comprendre le sens de tout ça, je sais juste que c’est la réalité.\n$@c{serious_mopen_fists}Si tu ne parviens à pas me battre ici et maintenant, tu n’as aucune chance." }, "victory": { "1": "@c{smile_eclosed}J’ai fait ce que j’avais à faire.\n$Promets-moi juste une chose.\n@c{smile}Après avoir réparé ce monde… Rentre à la maison." @@ -455,4 +574,4 @@ "1": "@c{smile_ehalf}Je… Je crois que j’ai rempli ma mission…\n$@c{smile_eclosed}Promets-moi… Après avoir réparé ce monde… Reviens à la maison saine et sauve.\n$@c{smile_ehalf}… Merci." } } -} \ No newline at end of file +} diff --git a/src/locales/fr/dialogue-male.json b/src/locales/fr/dialogue-male.json index d0642641d0f..26636a15e4f 100644 --- a/src/locales/fr/dialogue-male.json +++ b/src/locales/fr/dialogue-male.json @@ -38,7 +38,7 @@ "3": "Je te connais pas. Ça te dis de te battre ?", "4": "Prenons du bon temps avec ce combat Pokémon !", "5": "Je vais t’apprendre à te battre avec tes Pokémon !", - "6": "Un combat doit être pris au sérieux. T’es prêt à te battre ?", + "6": "Un combat doit toujours être pris au sérieux.\nT’es prêt à te battre ?", "7": "Tu seras pas jeune éternellement. T’as qu’une chance pendant un combat. Bientôt, tu seras plus qu’un souvenir.", "8": "Tu ferais mieux d’y aller doucement avec moi. Mais je vais me battre sérieusement !", "9": "Je m’ennuie à l’école. Y’a rien à y faire. *Baille*\nJe me bats juste pour passer le temps." @@ -69,7 +69,7 @@ "defeat": { "1": "Tu ne devrais pas t’énerver sur tes Pokémon, même après une défaite.", "2": "Alors ? Pas mal mes Pokémon, hein ? Je suis fait pour ça.", - "3": "Peut importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." + "3": "Peu importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." } }, "breeder_female": { @@ -93,7 +93,7 @@ "encounter": { "1": "Aaah non ! J’avais une touche !\nTu comptes faire quoi pour arranger ça ?", "2": "Bouge de là ! Tu fais peur aux Pokémon !", - "3": "Voyons si t'arrives à ferrer une victoire !" + "3": "Voyons si t’arrives à ferrer une victoire !" }, "victory": { "1": "Vas-y là, oublie.", @@ -148,7 +148,7 @@ }, "victory": { "1": "Très bien… T’as de bons Pokémon…", - "2": "Quoi ?! Mais c'est moi le génie des combats !", + "2": "Quoi ?! Mais c’est moi le génie des combats !", "3": "Évidemment que t’es le personnage principal !", "4": "OK ! OK ! Tu pourrais être un Topdresseur !" }, @@ -170,81 +170,97 @@ "rocket_grunt": { "encounter": { "1": "Nous sommes de retour !", - "2": "We're pulling a big job here! Get lost, kid!", - "3": "Hand over your Pokémon, or face the wrath of Team Rocket!", - "4": "You're about to experience the true terror of Team Rocket!", - "5": "Hey, kid! Me am a Team Rocket member kind of guy!" + "2": "Ça bosse dur, ici ! Alors du balai !", + "3": "File-nous tes Pokémon ou tu vas gouter à la colère de la Team Rocket !", + "4": "Sois témoin de ce qu’est une vraie terreur de la Team Rocket!", + "5": "Hé gamin ! Moi être guy member of la Team Rocket !" }, "victory": { "1": "Une fois de plus la Team Rocket s’envole vers d’autres cieux !", - "2": "Oh no! I dropped the Lift Key!", - "3": "I blew it!", - "4": "My associates won't stand for this!", - "5": "You say what? Team Rocket bye-bye a go-go? Broken it is says you?" + "2": "Mince! J’ai laissé tomber\nla Clé Ascenseur !", + "3": "J’ai tout foiré !", + "4": "Mes compagnons vont me venger !", + "5": "Toi dire quoi ? Forget que tu m’as vu !\nYou n’as rien seen !" } }, "magma_grunt": { "encounter": { "1": "N’espère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !", - "2": "You'd better not interfere with our plans! We're making the world a better place!", - "3": "You're in the way! Team Magma has no time for kids like you!", - "4": "I hope you brought marshmallows because things are about to heat up!", - "5": "We're going to use the power of a volcano! It's gonna be... explosive! Get it? Heh heh!" + "2": "Ne te mêle pas de nos affaires ! On va rendre ce monde meilleur !", + "3": "Hors de mon chemin ! La Team Magma n’a pas de temps pour les gamins !", + "4": "J’espère que t’as quelques marshmallows, car ça va chauffer !", + "5": "On va utiliser le puissance d’un volcan ! Ça va être… explosif ! Tu l’as… ? Héhé !" }, "victory": { "1": "Je…?\nJ’ai perdu ?!", - "2": "I can't believe I lost! I even skipped lunch for this", - "3": "No way! You're just a kid!", - "4": "Urrrgh... I should've ducked into our hideout right away...", - "5": "You beat me... Do you think the boss will dock my pay for this?" + "2": "Je peux pas croire que j’ai pas pris mon déjeuner juste pour ça…", + "3": "Impossible ! T’es qu’un gosse !", + "4": "Aahhh…\nJ’aurais dû directement rentrer à la planque…", + "5": "Tu m’as démoli… Tu crois que le boss va suspendre mon salaire ?" } }, "aqua_grunt": { "encounter": { "1": "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour un gamin !", - "2": "Grrr... You've got some nerve meddling with Team Aqua!", - "3": "You're about to get soaked! And not just from my water Pokémon!", - "4": "We, Team Aqua, exist for the good of all!", - "5": "Prepare to be washed away by the tides of my... uh, Pokémon! Yeah, my Pokémon!" + "2": "Grrr…\nTu as eu le culot de t’opposer à la Team Aqua !", + "3": "Je vais te liquéfier !\nEt ce sera pas qu’à cause des mes Pokémon Eau !", + "4": "Nous, la Team Aqua, existons pour le bien commun !", + "5": "Prépare-toi à te faire emporter par le courant de…\nEuh… Mes Pokémon ! Oui, mes Pokémon !" }, "victory": { "1": "Comment ça ?", - "2": "Arrgh, I didn't count on being meddled with by some meddling kid!", - "3": "I lost?! Guess I'll have to swim back to the hideout now...", - "4": "Oh, man, what a disaster... The boss is going to be furious...", - "5": "You beat me... Do you think the boss will make me walk the plank for this?" + "2": "Ah, j’avais pas prévu d’être gêné par un mouflet qui se mêle de tout !", + "3": "J’ai perdu ?! Super, j’ai plus qu’à nager jusqu’à la planque maintenant…", + "4": "Oh non quelle angoisse…\nLe boss va me démonter…", + "5": "Je suis battu… Tu penses que le boss va me faire subir le supplice de la planche ?…" } }, "galactic_grunt": { "encounter": { "1": "Ne te mets pas en travers de la Team Galaxie !", - "2": "Witness the power of our technology and the future we envision!", - "3": "In the name of Team Galactic, I'll eliminate anyone who stands in our way!", - "4": "Get ready to lose!", - "5": "Hope you're ready for a cosmic beatdown!" + "2": "Sois témoin de la puissance de notre technologie et du futur qui se profile !", + "3": "Au nom de la Team Galaxie, j’éliminerai quiconque se mettera sur notre route !", + "4": "Prépare ta défaite !", + "5": "J’espère que t’es prêt à te prendre une raclée de l’espace !" }, "victory": { "1": "Désactivation…", - "2": "This setback means nothing in the grand scheme.", - "3": "Our plans are bigger than this defeat.", - "4": "How?!", - "5": "Note to self: practice Pokémon battling, ASAP." + "2": "Cet échec n’est qu’une poussière face à nos ambitions débordantes.", + "3": "Notre projet est bien plus important que cette défaite.", + "4": "Comment ?!", + "5": "Note à moi-même :\nM’entrainer aux combats Pokémon. Ça urge…" } }, "plasma_grunt": { "encounter": { "1": "Pas de quatiers à ceux qui ne suivent pas notre idéal !", - "2": "If I win against you, release your Pokémon!", - "3": "If you get in the way of Team Plasma, I'll take care of you!", - "4": "Team Plasma will liberate Pokémon from selfish humans like you!", - "5": "Our hairstyles are out of this world... but our battling skills? You'll find out soon enough." + "2": "Si je gagne, tu relâches tous tes Pokémon !", + "3": "Si tu te mets en travers de la Team Plasma, je m’occuperai de toi personnellement !", + "4": "La Team Plasma va libérer les Pokémon de tous les humains égoïstes dans ton genre !", + "5": "Nos coupes sont lunaires… Mais en combat ?\nTu vas vite le découvrir." }, "victory": { "1": "Plasmaaaaaaaaa !", - "2": "How could I lose...", - "3": "...What a weak Pokémon, I'll just have to go steal some better ones!", - "4": "Great plans are always interrupted.", - "5": "This is bad... Badbadbadbadbadbadbad! Bad for Team Plasma! Or Plasbad, for short!" + "2": "Comment ai-je pu perdre…", + "3": "… Ce Pokémon est nul, j’vais aller en voler de meilleurs !", + "4": "Les plans ambitieux connaissent toujours leurs lots d’interruptions.", + "5": "C’est mauvais… MAUVAIS MAUVAIS MAUVAIS MAUVAIS !\nVa falloir battre en retraite, c’est la méga cata !" + } + }, + "flare_grunt": { + "encounter": { + "1": "Tes Pokémon ne sont pas dignes de l’élégance de la Team Flare.", + "2": "T’as des lunettes de soleil j’espère ?\nCar prépare-toi à être ébloui !", + "3": "La Team Flare va purifier ce monde de toute imperfection !", + "4": "Prépare-toi à découvrir l’indiscutable sens du style de la Team Flare !", + "5": "La mode, c’est important !" + }, + "victory": { + "1": "Mon futur n’a pas l’air si radieux.", + "2": "Les combats semblent être plus complexes que je le pensais.\nRetour aux planches à dessin.", + "3": "Ehhhh ?! J’ai perdu ?!", + "4": "Même dans la défaite, l’élégance de la Team Flare continue de rayonner sur ce monde.", + "5": "J’appelle pas ça perdre, j’appelle ça échouer avec panache !" } }, "rocket_boss_giovanni_1": { @@ -379,6 +395,77 @@ "1": "Les ignorants sans aucune vision n’auront donc de cesse de souiller ce monde." } }, + "brock": { + "encounter": { + "1": "Mon expertise des types Roche va te mettre au sol ! En garde !", + "2": "Tu veux toujours te battre avec moi ? Même en sachant que tu vas perdre ?", + "3": "Laisse-moi de montrer la véritable force de mes Pokémon Roche !" + }, + "victory": { + "1": "J’étais trop sûr de moi, c’est pour ça que j’ai perdu.", + "2": "Ce monde est vaste ! Je suis honoré d’avoir pu t’affronter.", + "3": "Peut-être bien que je n’aurais pas dû abandonner ma vocation d’Éleveur…" + }, + "defeat": { + "1": "La défense est la meilleure des attaques !\nTelle est ma méthode !", + "2": "Viens étudier des roches avec moi la prochaine fois si tu veux apprendre à mieux les aborder !", + "3": "Tout ce temps à voyager autour du monde paie enfin !" + } + }, + "misty": { + "encounter": { + "1": "Ma tactique ? Attaquer avec des Pokémon Eau !", + "2": "Je vais te prouver le tsunami que sont mes Pokémon aquatiques !", + "3": "Mon rêve, c’était de voyager et de défier des Dresseurs super forts. Seras-tu à la hauteur ?" + }, + "victory": { + "1": "OK. T’es pas naze… Je le reconnais…", + "2": "Pfff… T’as juste eu de la chance hein ?!", + "3": "Ouah ! T’es super balèze !" + }, + "defeat": { + "1": "Qu’en dis-tu? C’est ça, la puissance des Pokémon Eau !", + "2": "J’espère que t’as pris note des élégantes techniques de nage de mes Pokémon !", + "3": "Tes Pokémon ne jouent visiblement pas dans le même bassin…" + } + }, + "lt_surge": { + "encounter": { + "1": "T’as pas froid aux yeux, soldat ! Les combats Pokémon, c’est la guerre !", + "2": "Tu as du guts pour venir me fight ici ! Je vais te shock !", + "3": "Compte tes dents, tu vas morfler !\nMes Pokémon Électrik vont t’atomiser !" + }, + "victory": { + "1": "Whoo ! T’iras loin toi.", + "2": "Oh noes ! Mes tricks électriques sont à plat…\nYou are very fortiche!", + "3": "Tu es very costaud ! Je vais training very dur mes Pokémon, moi too, et on sera Number One !" + }, + "defeat": { + "1": "Oh yeah !\nMes Pokémon Électrik sont les best du monde !", + "2": "Oh yeah, baby ! I am trop fort !", + "3": "Une combat Pokémon, c’est comme une guerre et t’as eu droit à une bataille de premier ordre !" + } + }, + "erika": { + "encounter": { + "1": "Il fait beau, aujourd’hui, n’est-ce pas… ?\nQuoi un combat… ? Très bien…", + "2": "L’arrangement floral est ma spécialité, et mes Pokémon sont de type Plante. Quoi ? Tu veux te battre ?", + "3": "Il fait beau… Le soleil brille… Les plantes bourgeonnent… Je m’ennuie…", + "4": "Voir un tel jardin rempli de fleurs est si apaisant…" + }, + "victory": { + "1": "Bien joué, c’est mértié.", + "2": "Dommage, on s’amusait si bien…", + "3": "Oh non, le combat est terminé…", + "4": "Aaah, ça fait du bien !\nMerci, j’en avais besoin." + }, + "defeat": { + "1": "J’ai failli m’endormir…", + "2": "Oh non… Mes Pokémon Plante ont l’air de t’avoir bien endormi…", + "3": "Ce combat était si apaisant…", + "4": "Oh non… C’est tout ?" + } + }, "alder": { "encounter": { "1": "Prépare-toi pour un combat contre le meilleur Dresseur d’Unys !" @@ -411,7 +498,7 @@ }, "rival_female": { "encounter": { - "1": "@c{smile_wave}Ah, je te cherchais ! Je t’ai cherché partout !\n@c{angry_mopen}On oublie de dire au revoir à sa meilleure amie ?\n$@c{smile_ehalf}T’as décidé de réaliser ton rêve, hein ?\nCe jour est donc vraiment arrivé…\n$@c{smile}Je veux bien te pardonner de m’avoir oubliée,\nà une conditon. @c{smile_wave_wink}Que tu m’affronte !\n$@c{angry_mopen}Donne tout ! Ce serait dommage que ton aventure finisse avant d’avoir commencé, hein ?" + "1": "@c{smile_wave}Ah, te voilà ! Je t’ai cherché partout !\n@c{angry_mopen}On oublie de dire au revoir à sa meilleure amie ?\n$@c{smile_ehalf}T’as décidé de réaliser ton rêve, hein ?\nCe jour est donc vraiment arrivé…\n$@c{smile}Je veux bien te pardonner de m’avoir oubliée,\nà une conditon. @c{smile_wave_wink}Que tu m’affronte !\n$@c{angry_mopen}Donne tout ! Ce serait dommage que ton aventure finisse avant d’avoir commencé, hein ?" }, "victory": { "1": "@c{shock}Tu viens de commencer et t’es déjà si fort ?!@d{96}\n@c{angry}T’as triché non ? Avoue !\n$@c{smile_wave_wink}J’déconne !@d{64} @c{smile_eclosed}J’ai perdu dans les règles…\nJ’ai le sentiment que tu vas très bien t’en sortir.\n$@c{smile}D’ailleurs, le prof veut que je te donne ces quelques objets. Ils te seront utiles, pour sûr !\n$@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !" @@ -509,4 +596,4 @@ "1": "@c{smile_ehalf}Je… Je crois que j’ai rempli ma mission…\n$@c{smile_eclosed}Promets-moi… Après avoir réparé ce monde… Reviens à la maison sain et sauf.\n$@c{smile_ehalf}… Merci." } } -} \ No newline at end of file +} diff --git a/src/locales/fr/egg.json b/src/locales/fr/egg.json index 0cd6f0b3750..64f22aa330d 100644 --- a/src/locales/fr/egg.json +++ b/src/locales/fr/egg.json @@ -4,23 +4,23 @@ "ultraTier": "Épique", "masterTier": "Légendaire", "defaultTier": "Commun", - "hatchWavesMessageSoon": "Il fait du bruit. Il va éclore !", + "hatchWavesMessageSoon": "Il fait du bruit. Il va éclore !", "hatchWavesMessageClose": "Il bouge de temps en temps. Il devrait bientôt éclore.", "hatchWavesMessageNotClose": "Qu’est-ce qui va en sortir ? Ça va mettre du temps.", - "hatchWavesMessageLongTime": "Cet Œuf va sûrement mettre du temps à éclore.", + "hatchWavesMessageLongTime": "Cet Œuf va surement mettre du temps à éclore.", "gachaTypeLegendary": "Taux de Légendaires élevé", "gachaTypeMove": "Taux de Capacité Œuf Rare élevé", "gachaTypeShiny": "Taux de Chromatiques élevé", "selectMachine": "Sélectionnez une machine.", - "notEnoughVouchers": "Vous n’avez pas assez de coupons !", - "tooManyEggs": "Vous avez trop d’Œufs !", + "notEnoughVouchers": "Vous n’avez pas assez de coupons !", + "tooManyEggs": "Vous avez trop d’Œufs !", "pull": "Tirage", "pulls": "Tirages", "sameSpeciesEgg": "{{species}} sortira de cet Œuf !", - "hatchFromTheEgg": "{{pokemonName}} sort de l’Œuf !", + "hatchFromTheEgg": "{{pokemonName}} sort de l’Œuf !", "eggMoveUnlock": "Capacité Œuf débloquée :\n{{moveName}}", "rareEggMoveUnlock": "Capacité Œuf Rare débloquée :\n{{moveName}}", - "moveUPGacha": "Bonus Capacité\nŒuf Rare !", - "shinyUPGacha": "Bonus\nChromatique !", - "legendaryUPGacha": "Bonus !" -} \ No newline at end of file + "moveUPGacha": "Bonus Capacité\nŒuf Rare !", + "shinyUPGacha": "Bonus\nChromatique !", + "legendaryUPGacha": "Bonus !" +} diff --git a/src/locales/fr/menu.json b/src/locales/fr/menu.json index d6823b43009..83626a1f33f 100644 --- a/src/locales/fr/menu.json +++ b/src/locales/fr/menu.json @@ -42,14 +42,14 @@ "wave": "Vague", "loading": "Chargement…", "loadingAsset": "Chargement de la ressource : {{assetName}}", - "playersOnline": "Joueurs Connectés", + "playersOnline": "Joueurs connectés", "yes": "Oui", "no": "Non", "disclaimer": "AVERTISSEMENT", "disclaimerDescription": "Ce jeu n’est pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.", "choosePokemon": "Sélectionnez un Pokémon.", - "renamePokemon": "Renommer Pokémon", + "renamePokemon": "Renommer le Pokémon", "rename": "Renommer", "nickname": "Surnom", "errorServerDown": "Oupsi ! Un problème de connexion au serveur est survenu.\n\nVous pouvez garder cette fenêtre ouverte,\nle jeu se reconnectera automatiquement." -} \ No newline at end of file +} diff --git a/src/locales/fr/modifier-type.json b/src/locales/fr/modifier-type.json index c041adbf6d5..6d5cfb098ef 100644 --- a/src/locales/fr/modifier-type.json +++ b/src/locales/fr/modifier-type.json @@ -11,7 +11,7 @@ "PokemonHeldItemModifierType": { "extra": { "inoperable": "{{pokemonName}} ne peut pas\nporter cet objet !", - "tooMany": "{{pokemonName}} possède trop\nd’exemplaires de cet objet !" + "tooMany": "{{pokemonName}} porte trop\nd’exemplaires de cet objet !" } }, "PokemonHpRestoreModifierType": { @@ -108,7 +108,7 @@ "description": "Permet à certains Pokémon de changer de forme." }, "FusePokemonModifierType": { - "description": "Fusionne deux Pokémon (transfère le talent, sépare les stats de base et les types, partage le movepool)." + "description": "Fusionne deux Pokémon (transfère le talent, sépare les stats de base et les types, partage les capacités)." }, "TerastallizeModifierType": { "name": "Téra-Éclat {{teraType}}", @@ -194,7 +194,7 @@ "RELIC_GOLD": { "name": "Vieux Ducat" }, "AMULET_COIN": { "name": "Pièce Rune", "description": "Augmente de 20% les gains d’argent." }, - "GOLDEN_PUNCH": { "name": "Poing Doré", "description": "50% des dégâts infligés sont convertis en argent." }, + "GOLDEN_PUNCH": { "name": "Poing Doré", "description": "La moitié des dégâts infligés sont convertis en argent." }, "COIN_CASE": { "name": "Boite Jetons", "description": "Tous les 10 combats, recevez 10% de votre argent en intérêts." }, "LOCK_CAPSULE": { "name": "Poké Écrin", "description": "Permet de conserver la rareté des objets si vous relancez les objets proposés." }, @@ -205,13 +205,13 @@ "MULTI_LENS": { "name": "Lentille Multi" }, "HEALING_CHARM": { "name": "Charme Soin", "description": "Augmente de 10% l’efficacité des capacités et objets de soin de PV (hors Rappels)." }, - "CANDY_JAR": { "name": "Bonbonnière", "description": "Augmente de 1 le nombre de niveaux gagnés à l’utilisation d’un Super Bonbon." }, + "CANDY_JAR": { "name": "Bonbonnière", "description": "Augmente de 1 le nombre de niveaux gagnés à l’utilisation d’un Super Bonbon ou d’un Hyper Bonbon." }, "BERRY_POUCH": { "name": "Sac à Baies", "description": "Ajoute 30% de chances qu’une Baie utilisée ne soit pas consommée." }, "FOCUS_BAND": { "name": "Bandeau", "description": "Ajoute 10% de chances de survivre avec 1 PV si les dégâts reçus pouvaient mettre K.O. ." }, - "QUICK_CLAW": { "name": "Vive Griffe", "description": "Ajoute 10% de chances d’agir en premier, indépendamment de la vitesse (après la priorité)." }, + "QUICK_CLAW": { "name": "Vive Griffe", "description": "Ajoute 10% de chances d’agir en premier, indépendamment de la Vitesse (après la priorité)." }, "KINGS_ROCK": { "name": "Roche Royale", "description": "Ajoute 10% de chances qu’une capacité offensive apeure l’adversaire." }, @@ -261,14 +261,14 @@ }, "TempBattleStatBoosterStatName": { - "ATK": "Attaque", - "DEF": "Défense", - "SPATK": "Atq. Spé.", - "SPDEF": "Déf. Spé.", - "SPD": "Vitesse", - "ACC": "Précision", - "CRIT": "Taux de critique", - "EVA": "Esquive", + "ATK": "l’Attaque", + "DEF": "la Défense", + "SPATK": "l’Atq. Spé.", + "SPDEF": "la Déf. Spé.", + "SPD": "la Vitesse", + "ACC": "la précision", + "CRIT": "le taux de critique", + "EVA": "l’esquive", "DEFAULT": "???" }, @@ -452,4 +452,4 @@ "FAIRY_MEMORY": "ROM Fée", "BLANK_MEMORY": "ROM Vierge" } -} \ No newline at end of file +} diff --git a/src/locales/fr/modifier.json b/src/locales/fr/modifier.json index afc15b2cb88..8a15c9e5ddf 100644 --- a/src/locales/fr/modifier.json +++ b/src/locales/fr/modifier.json @@ -3,10 +3,10 @@ "turnHealApply": "Les PV de {{pokemonNameWithAffix}}\nsont un peu restaurés par les {{typeName}} !", "hitHealApply": "Les PV de {{pokemonNameWithAffix}}\nsont un peu restaurés par le {{typeName}} !", "pokemonInstantReviveApply": "{{pokemonNameWithAffix}} a repris connaissance\navec sa {{typeName}} et est prêt à se battre de nouveau !", - "pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}'s lowered stats were restored\nby its {{typeName}}!", + "pokemonResetNegativeStatStageApply": "Les stats baissées de {{pokemonNameWithAffix}}\nsont restaurées par l’{{typeName}} !", "moneyInterestApply": "La {{typeName}} vous rapporte\n{{moneyAmount}} ₽ d’intérêts !", "turnHeldItemTransferApply": "{{itemName}} de {{pokemonNameWithAffix}} est absorbé·e\npar le {{typeName}} de {{pokemonName}} !", "contactHeldItemTransferApply": "{{itemName}} de {{pokemonNameWithAffix}} est volé·e\npar l’{{typeName}} de {{pokemonName}} !", "enemyTurnHealApply": "{{pokemonNameWithAffix}}\nrestaure un peu ses PV !", "bypassSpeedChanceApply": "{{itemName}} de {{pokemonName}}\nlui permet d’agir plus vite que d’habitude !" -} \ No newline at end of file +} diff --git a/src/locales/fr/move.json b/src/locales/fr/move.json index 8ad216a2501..a48e17b3fd9 100644 --- a/src/locales/fr/move.json +++ b/src/locales/fr/move.json @@ -25,7 +25,7 @@ }, "firePunch": { "name": "Poing Feu", - "effect": "Un coup de poing enflammé vient frapper la cible, ce qui peut la brûler (10% de chances)." + "effect": "Un coup de poing enflammé vient frapper la cible, ce qui peut la bruler (10% de chances)." }, "icePunch": { "name": "Poing Glace", @@ -205,11 +205,11 @@ }, "ember": { "name": "Flammèche", - "effect": "La cible est attaquée par une faible flamme qui peut aussi la brûler." + "effect": "La cible est attaquée par une faible flamme qui peut aussi la bruler." }, "flamethrower": { "name": "Lance-Flammes", - "effect": "La cible reçoit un torrent de flammes qui peut aussi la brûler (10% de chances)." + "effect": "La cible reçoit un torrent de flammes qui peut aussi la bruler (10% de chances)." }, "mist": { "name": "Brume", @@ -356,7 +356,7 @@ "effect": "Le lanceur provoque un tremblement de terre touchant tous les Pokémon autour de lui." }, "fissure": { - "name": "Abîme", + "name": "Abime", "effect": "Le lanceur fait tomber la cible dans une crevasse. Si cette attaque réussit, elle met K.O. sur le coup." }, "dig": { @@ -489,7 +489,7 @@ }, "smog": { "name": "Purédpois", - "effect": "Le lanceur attaque à l'aide d'une éruption de gaz répugnants qui peuvent aussi empoisonner la cible." + "effect": "Le lanceur attaque à l’aide d’une éruption de gaz répugnants qui peuvent aussi empoisonner la cible." }, "sludge": { "name": "Détritus", @@ -501,7 +501,7 @@ }, "fireBlast": { "name": "Déflagration", - "effect": "Un déluge de flammes ardentes submerge la cible, ce qui peut aussi la brûler (10% de chances)." + "effect": "Un déluge de flammes ardentes submerge la cible, ce qui peut aussi la bruler (10% de chances)." }, "waterfall": { "name": "Cascade", @@ -581,7 +581,7 @@ }, "dizzyPunch": { "name": "Uppercut", - "effect": "Un enchaînement de coups de poing cadencés frappe l’ennemi. Peut aussi le rendre confus." + "effect": "Un enchainement de coups de poing cadencés frappe l’ennemi. Peut aussi le rendre confus." }, "spore": { "name": "Spore", @@ -632,7 +632,7 @@ "effect": "Le lanceur mord l’ennemi à l’aide de ses incisives aiguisées. Peut aussi l’apeurer (10% de chances)." }, "sharpen": { - "name": "Affûtage", + "name": "Affutage", "effect": "Le lanceur réduit son nombre de polygones pour accentuer ses angles et augmenter son Attaque." }, "conversion": { @@ -641,7 +641,7 @@ }, "triAttack": { "name": "Triplattaque", - "effect": "Le lanceur envoie trois boules d’énergie simultanément qui peuvent aussi paralyser, brûler ou geler la cible (6.67% de chances)." + "effect": "Le lanceur envoie trois boules d’énergie simultanément qui peuvent aussi paralyser, bruler ou geler la cible (6.67% de chances)." }, "superFang": { "name": "Croc Fatal", @@ -661,7 +661,7 @@ }, "sketch": { "name": "Gribouille", - "effect": "Le lanceur apprend la dernière capacité utilisée par la cible. Gribouille disparaît après utilisation." + "effect": "Le lanceur apprend la dernière capacité utilisée par la cible. Gribouille disparait après utilisation." }, "tripleKick": { "name": "Triple Pied", @@ -685,7 +685,7 @@ }, "flameWheel": { "name": "Roue de Feu", - "effect": "Le lanceur s’entoure de feu et charge la cible, ce qui peut aussi la brûler (10% de chances)." + "effect": "Le lanceur s’entoure de feu et charge la cible, ce qui peut aussi la bruler (10% de chances)." }, "snore": { "name": "Ronflement", @@ -881,7 +881,7 @@ }, "sacredFire": { "name": "Feu Sacré", - "effect": "Le lanceur génère un feu mystique d’une intensité redoutable pour attaquer l’ennemi. Peut aussi le brûler (50% de chances)." + "effect": "Le lanceur génère un feu mystique d’une intensité redoutable pour attaquer l’ennemi. Peut aussi le bruler (50% de chances)." }, "magnitude": { "name": "Ampleur", @@ -1025,7 +1025,7 @@ }, "heatWave": { "name": "Canicule", - "effect": "Le lanceur provoque une vague de chaleur qui peut aussi brûler la cible (10% de chances)." + "effect": "Le lanceur provoque une vague de chaleur qui peut aussi bruler la cible (10% de chances)." }, "hail": { "name": "Grêle", @@ -1041,7 +1041,7 @@ }, "willOWisp": { "name": "Feu Follet", - "effect": "Le lanceur projette des flammes maléfiques à la cible pour lui infliger une brûlure." + "effect": "Le lanceur projette des flammes maléfiques à la cible pour lui infliger une brulure." }, "memento": { "name": "Souvenir", @@ -1049,7 +1049,7 @@ }, "facade": { "name": "Façade", - "effect": "Une capacité dont la puissance double lorsque le lanceur est empoisonné, paralysé ou brûlé." + "effect": "Une capacité dont la puissance double lorsque le lanceur est empoisonné, paralysé ou brulé." }, "focusPunch": { "name": "Mitra-Poing", @@ -1145,7 +1145,7 @@ }, "refresh": { "name": "Régénération", - "effect": "Le lanceur se repose pour guérir d’un empoisonnement, d’une brûlure ou d’une paralysie." + "effect": "Le lanceur se repose pour guérir d’un empoisonnement, d’une brulure ou d’une paralysie." }, "grudge": { "name": "Rancune", @@ -1192,8 +1192,8 @@ "effect": "Danse qui rend confus tous les Pokémon autour du lanceur." }, "blazeKick": { - "name": "Pied Brûleur", - "effect": "Le lanceur envoie un coup de pied au taux de critiques élevé. Peut aussi brûler la cible (10% de chances)." + "name": "Pied Bruleur", + "effect": "Le lanceur envoie un coup de pied au taux de critiques élevé. Peut aussi bruler la cible (10% de chances)." }, "mudSport": { "name": "Lance-Boue", @@ -1573,7 +1573,7 @@ }, "flareBlitz": { "name": "Boutefeu", - "effect": "Le lanceur s’embrase avant de charger la cible, ce qui peut la brûler (10% de chances). Le choc blesse aussi gravement le lanceur." + "effect": "Le lanceur s’embrase avant de charger la cible, ce qui peut la bruler (10% de chances). Le choc blesse aussi gravement le lanceur." }, "forcePalm": { "name": "Forte-Paume", @@ -1693,7 +1693,7 @@ }, "fireFang": { "name": "Crocs Feu", - "effect": "Le lanceur utilise une morsure enflammée qui peut aussi brûler (10% de chances) ou apeurer (10% de chances) la cible." + "effect": "Le lanceur utilise une morsure enflammée qui peut aussi bruler (10% de chances) ou apeurer (10% de chances) la cible." }, "shadowSneak": { "name": "Ombre Portée", @@ -1741,7 +1741,7 @@ }, "lavaPlume": { "name": "Ébullilave", - "effect": "Des flammes s’abattent sur tous les Pokémon autour du lanceur, ce qui peut aussi les brûler (10% de chances)." + "effect": "Des flammes s’abattent sur tous les Pokémon autour du lanceur, ce qui peut aussi les bruler (10% de chances)." }, "leafStorm": { "name": "Tempête Verte", @@ -1796,7 +1796,7 @@ "effect": "Le lanceur libère une myriade de rayons de lumière. Le type varie selon la plaque que tient le lanceur." }, "bugBite": { - "name": "Piqûre", + "name": "Piqure", "effect": "Le lanceur pique la cible. Si celle-ci tient une Baie, le lanceur la dévore et obtient son effet." }, "chargeBeam": { @@ -1865,7 +1865,7 @@ }, "shadowForce": { "name": "Revenant", - "effect": "Le lanceur disparaît au premier tour et frappe la cible au deuxième. Cette capacité fonctionne même si la cible se protège." + "effect": "Le lanceur disparait au premier tour et frappe la cible au deuxième. Cette capacité fonctionne même si la cible se protège." }, "honeClaws": { "name": "Aiguisage", @@ -2009,7 +2009,7 @@ }, "scald": { "name": "Ébullition", - "effect": "Le lanceur projette un jet d’eau bouillante sur la cible, ce qui peut aussi la brûler (30% de chances)." + "effect": "Le lanceur projette un jet d’eau bouillante sur la cible, ce qui peut aussi la bruler (30% de chances)." }, "shellSmash": { "name": "Exuviation", @@ -2037,7 +2037,7 @@ }, "incinerate": { "name": "Calcination", - "effect": "Des flammes calcinent la cible. Si elle tient un objet, une Baie par exemple, celui-ci est brûlé et devient inutilisable." + "effect": "Des flammes calcinent la cible. Si elle tient un objet, une Baie par exemple, celui-ci est brulé et devient inutilisable." }, "quash": { "name": "À la Queue", @@ -2065,19 +2065,19 @@ }, "inferno": { "name": "Feu d’Enfer", - "effect": "La cible est entourée d’un torrent de flammes ardentes qui la brûlent." + "effect": "La cible est entourée d’un torrent de flammes ardentes qui la brulent." }, "waterPledge": { "name": "Aire d’Eau", - "effect": "Une masse d’eau s’abat sur la cible. Si cette capacité est utilisée en même temps qu’Aire de Feu, la puissance augmente et un arc-en-ciel apparaît." + "effect": "Une masse d’eau s’abat sur la cible. Si cette capacité est utilisée en même temps qu’Aire de Feu, la puissance augmente et un arc-en-ciel apparait." }, "firePledge": { "name": "Aire de Feu", - "effect": "Une masse de feu s’abat sur la cible. Si cette capacité est utilisée en même temps qu’Aire d’Herbe, la puissance augmente et une mer de feu apparaît." + "effect": "Une masse de feu s’abat sur la cible. Si cette capacité est utilisée en même temps qu’Aire d’Herbe, la puissance augmente et une mer de feu apparait." }, "grassPledge": { "name": "Aire d’Herbe", - "effect": "Une masse végétale s’abat sur la cible. Si cette capacité est utilisée en même temps qu’Aire d’Eau, la puissance augmente et un marécage apparaît." + "effect": "Une masse végétale s’abat sur la cible. Si cette capacité est utilisée en même temps qu’Aire d’Eau, la puissance augmente et un marécage apparait." }, "voltSwitch": { "name": "Change Éclair", @@ -2177,7 +2177,7 @@ }, "searingShot": { "name": "Incendie", - "effect": "Des boules de feu s’abattent sur tous les Pokémon autour du lanceur. Peut aussi les brûler (30% de chances)." + "effect": "Des boules de feu s’abattent sur tous les Pokémon autour du lanceur. Peut aussi les bruler (30% de chances)." }, "technoBlast": { "name": "Techno-Buster", @@ -2201,7 +2201,7 @@ }, "blueFlare": { "name": "Flamme Bleue", - "effect": "De magnifiques et redoutables flammes bleues fondent sur l’ennemi. Peut aussi le brûler (20% de chances)." + "effect": "De magnifiques et redoutables flammes bleues fondent sur l’ennemi. Peut aussi le bruler (20% de chances)." }, "fieryDance": { "name": "Danse du Feu", @@ -2213,7 +2213,7 @@ }, "iceBurn": { "name": "Feu Glacé", - "effect": "Au second tour, le lanceur projette un souffle de vent glacial dévastateur sur l’ennemi. Peut aussi le brûler (30% de chances)." + "effect": "Au second tour, le lanceur projette un souffle de vent glacial dévastateur sur l’ennemi. Peut aussi le bruler (30% de chances)." }, "snarl": { "name": "Aboiement", @@ -2261,7 +2261,7 @@ }, "phantomForce": { "name": "Hantise", - "effect": "Le lanceur disparaît au premier tour et frappe au second. Cette attaque passe outre les protections." + "effect": "Le lanceur disparait au premier tour et frappe au second. Cette attaque passe outre les protections." }, "trickOrTreat": { "name": "Halloween", @@ -2333,7 +2333,7 @@ }, "fairyWind": { "name": "Vent Féérique", - "effect": "Le lanceur déchaîne un vent magique qui cingle la cible." + "effect": "Le lanceur déchaine un vent magique qui cingle la cible." }, "moonblast": { "name": "Pouvoir Lunaire", @@ -2345,7 +2345,7 @@ }, "fairyLock": { "name": "Verrou Enchanté", - "effect": "Des chaînes entourent la zone de combat, empêchant tous les Pokémon de quitter le terrain au tour suivant." + "effect": "Des chaines entourent la zone de combat, empêchant tous les Pokémon de quitter le terrain au tour suivant." }, "kingsShield": { "name": "Bouclier Royal", @@ -2365,7 +2365,7 @@ }, "steamEruption": { "name": "Jet de Vapeur", - "effect": "Le lanceur projette de la vapeur extrêmement chaude sur la cible, ce qui peut aussi la brûler (30% de chances)." + "effect": "Le lanceur projette de la vapeur extrêmement chaude sur la cible, ce qui peut aussi la bruler (30% de chances)." }, "hyperspaceHole": { "name": "TrouDimensionnel", @@ -2377,7 +2377,7 @@ }, "mysticalFire": { "name": "Feu Ensorcelé", - "effect": "Le lanceur attaque en soufflant des flammes brûlantes par la bouche et diminue l’Attaque Spéciale de la cible." + "effect": "Le lanceur attaque en soufflant des flammes brulantes par la bouche et diminue l’Attaque Spéciale de la cible." }, "spikyShield": { "name": "Pico-Défense", @@ -2517,7 +2517,7 @@ }, "tectonicRagePhysical": { "name": "Éruption Géo-Sismique", - "effect": "Le Pokémon utilise la Force Z pour entraîner l’adversaire dans les profondeurs de la terre. La puissance varie selon celle de la capacité originale." + "effect": "Le Pokémon utilise la Force Z pour entrainer l’adversaire dans les profondeurs de la terre. La puissance varie selon celle de la capacité originale." }, "tectonicRageSpecial": { "name": "Éruption Géo-Sismique", @@ -2653,7 +2653,7 @@ }, "sparklingAria": { "name": "Aria de l’Écume", - "effect": "Le lanceur émet plusieurs bulles en chantant. Soigne les brûlures des Pokémon touchés par ces bulles." + "effect": "Le lanceur émet plusieurs bulles en chantant. Soigne les brulures des Pokémon touchés par ces bulles." }, "iceHammer": { "name": "Marteau de Glace", @@ -2757,7 +2757,7 @@ }, "beakBlast": { "name": "Bec-Canon", - "effect": "Le lanceur fait chauffer son bec avant d’attaquer. S’il subit une attaque directe pendant la montée en température, l’attaquant sera brûlé." + "effect": "Le lanceur fait chauffer son bec avant d’attaquer. S’il subit une attaque directe pendant la montée en température, l’attaquant sera brulé." }, "clangingScales": { "name": "Vibrécaille", @@ -2789,7 +2789,7 @@ }, "guardianOfAlola": { "name": "Colère du Gardien d’Alola", - "effect": "Le Pokémon Tutélaire utilise la Force Z et déchaîne toute la puissance d’Alola sur sa cible. Inflige des dégâts en fonction des PV restants de celle-ci." + "effect": "Le Pokémon Tutélaire utilise la Force Z et déchaine toute la puissance d’Alola sur sa cible. Inflige des dégâts en fonction des PV restants de celle-ci." }, "soulStealing7StarStrike": { "name": "Fauche-Âme des Sept Étoiles", @@ -2865,7 +2865,7 @@ }, "naturesMadness": { "name": "Ire de la Nature", - "effect": "Le lanceur déchaîne toute la colère de la nature pour baisser les PV de la cible de moitié." + "effect": "Le lanceur déchaine toute la colère de la nature pour baisser les PV de la cible de moitié." }, "multiAttack": { "name": "Coup Varia-Type", @@ -2873,7 +2873,7 @@ }, "tenMillionVoltThunderbolt": { "name": "Giga-Tonnerre", - "effect": "Le Pikachu à casquette utilise la Force Z pour augmenter sa puissance électrique avant de la déchaîner sur la cible. Taux de critique élevé." + "effect": "Le Pikachu à casquette utilise la Force Z pour augmenter sa puissance électrique avant de la déchainer sur la cible. Taux de critique élevé." }, "mindBlown": { "name": "Caboche-Kaboum", @@ -2893,11 +2893,11 @@ }, "searingSunrazeSmash": { "name": "Hélio-Choc Dévastateur", - "effect": "Baigné dans la Force Z, Solgaleo attaque en déchaînant toute sa puissance. Ignore le talent de la cible." + "effect": "Baigné dans la Force Z, Solgaleo attaque en déchainant toute sa puissance. Ignore le talent de la cible." }, "menacingMoonrazeMaelstrom": { "name": "Rayons Séléno-Explosifs", - "effect": "Baigné dans la Force Z, Lunala attaque en déchaînant toute sa puissance. Ignore le talent de la cible." + "effect": "Baigné dans la Force Z, Lunala attaque en déchainant toute sa puissance. Ignore le talent de la cible." }, "letsSnuggleForever": { "name": "Patati-Patattrape", @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "Pika-Sprint", - "effect": "Une attaque électrique rapide comme l’éclair qui augmente l’esquive. Frappe en priorité." + "effect": "Une attaque électrique rapide comme l’éclair qui inflige un coup critique à coup sûr. Frappe en priorité." }, "splishySplash": { "name": "Pika-Splash", @@ -2937,7 +2937,7 @@ }, "sizzlySlide": { "name": "Évo-Flambo", - "effect": "Évoli s’embrase et percure violemment l’adversaire. Brûle aussi l’ennemi." + "effect": "Évoli s’embrase et percure violemment l’adversaire. Brule aussi l’ennemi." }, "glitzyGlow": { "name": "Évo-Psycho", @@ -2961,7 +2961,7 @@ }, "veeveeVolley": { "name": "Évo-Chardasso", - "effect": "Le lanceur lance une attaque dès lors qu’un signe apparaît sur le terrain. Les dégâts infligés sont proportionnels à l’affection de votre Pokémon" + "effect": "Le lanceur lance une attaque dès lors qu’un signe apparait sur le terrain. Les dégâts infligés sont proportionnels à l’affection de votre Pokémon" }, "doubleIronBash": { "name": "Écrous d’Poing", @@ -3005,7 +3005,7 @@ }, "teatime": { "name": "Thérémonie", - "effect": "Le lanceur invite tous les Pokémon sur le terrain à prendre le goûter autour d’une tasse de thé. Ceux qui tiennent une Baie la mangent." + "effect": "Le lanceur invite tous les Pokémon sur le terrain à prendre le gouter autour d’une tasse de thé. Ceux qui tiennent une Baie la mangent." }, "octolock": { "name": "Octoprise", @@ -3105,7 +3105,7 @@ }, "decorate": { "name": "Nappage", - "effect": "Augmente fortement l’Attaque et l’Attaque Spéciale du lanceur." + "effect": "Augmente fortement l’Attaque et l’Attaque Spéciale de la cible." }, "drumBeating": { "name": "Tambour Battant", @@ -3116,8 +3116,8 @@ "effect": "Bloque l’ennemi pendant 4 à 5 tours." }, "pyroBall": { - "name": "Ballon Brûlant", - "effect": "Le lanceur attaque avec un ballon fait à partir d’un caillou enflammé. Peut aussi brûler la cible (10% de chances)." + "name": "Ballon Brulant", + "effect": "Le lanceur attaque avec un ballon fait à partir d’un caillou enflammé. Peut aussi bruler la cible (10% de chances)." }, "behemothBlade": { "name": "Gladius Maximus", @@ -3189,7 +3189,7 @@ }, "steelRoller": { "name": "Métalliroue", - "effect": "Une attaque qui inflige des dégâts et fait disparaître le champ actif, mais qui échoue s’il n’y en a pas à ce moment." + "effect": "Une attaque qui inflige des dégâts et fait disparaitre le champ actif, mais qui échoue s’il n’y en a pas à ce moment." }, "scaleShot": { "name": "Rafale Écailles", @@ -3225,7 +3225,7 @@ }, "burningJealousy": { "name": "Feu Envieux", - "effect": "Le lanceur attaque sa cible avec toute sa jalousie. Cette capacité brûle tout Pokémon dont les stats ont augmenté pendant ce tour." + "effect": "Le lanceur attaque sa cible avec toute sa jalousie. Cette capacité brule tout Pokémon dont les stats ont augmenté pendant ce tour." }, "lashOut": { "name": "Cent Rancunes", @@ -3257,7 +3257,7 @@ }, "scorchingSands": { "name": "Sable Ardent", - "effect": "Le lanceur projette du sable chauffé à blanc sur la cible, ce qui peut aussi la brûler (30% de chances)." + "effect": "Le lanceur projette du sable chauffé à blanc sur la cible, ce qui peut aussi la bruler (30% de chances)." }, "jungleHealing": { "name": "Selve Salvatrice", @@ -3265,11 +3265,11 @@ }, "wickedBlow": { "name": "Poing Obscur", - "effect": "Le lanceur assène un coup puissant à la cible. Cette technique qui inflige toujours un coup critique est réservée à ceux qui maîtrisent la puissance des Ténèbres." + "effect": "Le lanceur assène un coup puissant à la cible. Cette technique qui inflige toujours un coup critique est réservée à ceux qui maitrisent la puissance des Ténèbres." }, "surgingStrikes": { "name": "Torrent de Coups", - "effect": "Le lanceur assène trois coups fluides à la cible. Cette technique qui inflige toujours un coup critique est réservée à ceux qui maîtrisent la puissance de l’Eau." + "effect": "Le lanceur assène trois coups fluides à la cible. Cette technique qui inflige toujours un coup critique est réservée à ceux qui maitrisent la puissance de l’Eau." }, "thunderCage": { "name": "Voltageôle", @@ -3285,7 +3285,7 @@ }, "fieryWrath": { "name": "Fureur Ardente", - "effect": "Le lanceur canalise sa colère et la transforme en émanation brûlante, avec laquelle il attaque la cible, ce qui peut aussi apeurer celle-ci (20% de chances)." + "effect": "Le lanceur canalise sa colère et la transforme en émanation brulante, avec laquelle il attaque la cible, ce qui peut aussi apeurer celle-ci (20% de chances)." }, "thunderousKick": { "name": "Coup Fulgurant", @@ -3329,7 +3329,7 @@ }, "ragingFury": { "name": "Grand Courroux", - "effect": "Le lanceur se déchaîne et attaque en projetant de violentes flammes pendant deux ou trois tours. Il devient ensuite confus." + "effect": "Le lanceur se déchaine et attaque en projetant de violentes flammes pendant deux ou trois tours. Il devient ensuite confus." }, "waveCrash": { "name": "Aquatacle", @@ -3373,7 +3373,7 @@ }, "infernalParade": { "name": "Cortège Funèbre", - "effect": "Une multitude de boules de feu frappent la cible, ce qui peut aussi la brûler (30% de chances et 50% en Style Puissant). La puissance est doublée si celle-ci souffre d’une altération de statut." + "effect": "Une multitude de boules de feu frappent la cible, ce qui peut aussi la bruler (30% de chances et 50% en Style Puissant). La puissance est doublée si celle-ci souffre d’une altération de statut." }, "ceaselessEdge": { "name": "Vagues à Lames", @@ -3389,7 +3389,7 @@ }, "sandsearStorm": { "name": "Typhon Pyrosable", - "effect": "Le lanceur déclenche un violent typhon mêlé à du sable ardent qui s’abat sur la cible, ce qui peut la brûler (30% de chances et 50% en Style Puissant)." + "effect": "Le lanceur déclenche un violent typhon mêlé à du sable ardent qui s’abat sur la cible, ce qui peut la bruler (30% de chances et 50% en Style Puissant)." }, "lunarBlessing": { "name": "Prière Lunaire", @@ -3529,7 +3529,7 @@ }, "gMaxRapidFlow": { "name": "Multicoup G-Max", - "effect": "Une attaque de type Eau que seul un Shifours Gigamax peut utiliser. Cet enchaînement de coups permet d’ignorer la capacité Gardomax." + "effect": "Une attaque de type Eau que seul un Shifours Gigamax peut utiliser. Cet enchainement de coups permet d’ignorer la capacité Gardomax." }, "teraBlast": { "name": "Téra Explosion", @@ -3712,8 +3712,8 @@ "effect": "Le lanceur projette de l’eau pressurisée qui entaille la cible comme une lame. Taux de critiques élevé." }, "blazingTorque": { - "name": "Crash Brûlant", - "effect": "Crash Brûlant inflige des dégâts et possède 30 % de chances de brûler l’adversaire." + "name": "Crash Brulant", + "effect": "Crash Brulant inflige des dégâts et possède 30 % de chances de bruler l’adversaire." }, "wickedTorque": { "name": "Crash Obscur", @@ -3737,7 +3737,7 @@ }, "matchaGotcha": { "name": "Mortier Matcha", - "effect": "Le lanceur remue son thé et en bombarde la cible. La moitié des dégâts infligés sont convertis en PV pour le lanceur. Cette capacité peut aussi brûler la cible." + "effect": "Le lanceur remue son thé et en bombarde la cible. La moitié des dégâts infligés sont convertis en PV pour le lanceur. Cette capacité peut aussi bruler la cible." }, "syrupBomb": { "name": "Bombe au Sirop", @@ -3760,8 +3760,8 @@ "effect": "Le lanceur attaque en tirant un rayon lumineux. Il arrive parfois que toutes les têtes agissent ensemble, ce qui double la puissance de la capacité." }, "burningBulwark": { - "name": "Rempart Brûlant", - "effect": "Le lanceur se protège contre les attaques grâce à son pelage incandescent, et si un assaillant utilise une attaque directe contre lui, il le brûle." + "name": "Rempart Brulant", + "effect": "Le lanceur se protège contre les attaques grâce à son pelage incandescent, et si un assaillant utilise une attaque directe contre lui, il le brule." }, "thunderclap": { "name": "Vif Éclair", @@ -3784,7 +3784,7 @@ "effect": "Le lanceur galvanise ses alliés avec un encouragement draconique qui augmente leur taux de critiques. L’effet est plus puissant si les alliés ont le type Dragon." }, "alluringVoice": { - "name": "Voix Envoûtante", + "name": "Voix Envoutante", "effect": "Le lanceur attaque la cible avec sa voix angélique. Cette capacité rend la cible confuse si ses stats ont augmenté pendant ce tour." }, "temperFlare": { @@ -3804,7 +3804,7 @@ "effect": "Le lanceur réagit instinctivement au moindre mouvement et donne un coup de paume qui apeure la cible. Échoue si cette dernière n’a pas utilisé une attaque prioritaire." }, "malignantChain": { - "name": "Chaîne Malsaine", - "effect": "Le lanceur ligote la cible avec une chaîne faite de poison et lui injecte un venin corrosif, ce qui peut aussi gravement l’empoisonner." + "name": "Chaine Malsaine", + "effect": "Le lanceur ligote la cible avec une chaine faite de poison et lui injecte un venin corrosif, ce qui peut aussi gravement l’empoisonner." } -} \ No newline at end of file +} diff --git a/src/locales/fr/pokemon-form.json b/src/locales/fr/pokemon-form.json index 3a2557fb747..44f2bcecf2c 100644 --- a/src/locales/fr/pokemon-form.json +++ b/src/locales/fr/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "Avatar", "keldeoOrdinary": "Normal", "meloettaAria": "Chant", + "meloettaPirouette": "Danse", "froakieBattleBond": "Synergie", "scatterbugMeadow": "Floraison", "scatterbugIcySnow": "Blizzard", diff --git a/src/locales/fr/run-history-ui-handler.json b/src/locales/fr/run-history.json similarity index 100% rename from src/locales/fr/run-history-ui-handler.json rename to src/locales/fr/run-history.json diff --git a/src/locales/fr/settings.json b/src/locales/fr/settings.json index deee95a124a..181a593cc99 100644 --- a/src/locales/fr/settings.json +++ b/src/locales/fr/settings.json @@ -61,7 +61,9 @@ "typeHints": "Indications de type", "masterVolume": "Vol. principal", "bgmVolume": "Vol. musique", + "fieldVolume": "Vol. combats", "seVolume": "Vol. effets", + "uiVolume": "Vol. menus", "musicPreference": "Préf. musicale", "mixed": "Mixte", "gamepadPleasePlug": "Veuillez brancher une manette ou appuyer sur un bouton.", diff --git a/src/locales/fr/trainer-classes.json b/src/locales/fr/trainer-classes.json index 34768d0a31f..cebdadf09e9 100644 --- a/src/locales/fr/trainer-classes.json +++ b/src/locales/fr/trainer-classes.json @@ -11,7 +11,7 @@ "baker": "Boulangère", "battle_girl": "Combattante", "beauty": "Canon", - "beginners": "Beginners", + "beginners": "Débutants", "biker": "Motard", "black_belt": "Karatéka", "breeder": "Éleveur", @@ -29,7 +29,7 @@ "depot_agent": "Cheminot", "doctor": "Docteur", "doctor_female": "Docteure", - "firebreather": "Firebreather", + "firebreather": "Crache-Feu", "fisherman": "Pêcheur", "fisherman_female": "Pêcheuse", "gentleman": "Gentleman", @@ -68,7 +68,7 @@ "pokémon_rangers": "Pokémon Rangers", "ranger": "Ranger", "restaurant_staff": "Serveurs", - "rich": "Rich", + "rich": "Gentleman", "rich_female": "Mondaine", "rich_boy": "Gentleman", "rich_couple": "Couple de Bourgeois", @@ -117,5 +117,13 @@ "plasma_grunts": "Sbires de la Team Plasma", "flare_grunt": "Sbire de la Team Flare", "flare_grunt_female": "Sbire de la Team Flare", - "flare_grunts": "Sbires de la Team Flare" -} \ No newline at end of file + "flare_grunts": "Sbires de la Team Flare", + "aether_grunt": "Employé de la Fondation Æther", + "aether_grunt_female": "Employée de la Fondation Æther", + "aether_grunts": "Employés de la Fondation Æther", + "skull_grunt": "Sbire de la Team Skull", + "skull_grunt_female": "Sbire de la Team Skull", + "macro_grunt": "Employé de Macro Cosmos", + "macro_grunt_female": "Employée de Macro Cosmos", + "macro_grunts": "Employés de Macro Cosmos" +} diff --git a/src/locales/fr/trainer-names.json b/src/locales/fr/trainer-names.json index 4444a530df8..5864976cc34 100644 --- a/src/locales/fr/trainer-names.json +++ b/src/locales/fr/trainer-names.json @@ -138,11 +138,19 @@ "rood": "Carmine", "xerosic": "Xanthin", "bryony": "Brasénie", + "faba": "Saubohne", + "plumeria": "Apocyne", + "oleana": "Liv", + "maxie": "Max", "archie": "Arthur", "cyrus": "Hélio", "ghetsis": "Ghetis", "lysandre": "Lysandre", + "lusamine": "Elsa-Mina", + "guzma": "Guzma", + "rose": "Shehroz", + "blue_red_double": "Blue & Red", "red_blue_double": "Red & Blue", "tate_liza_double": "Lévy & Tatia", diff --git a/src/locales/fr/trainer-titles.json b/src/locales/fr/trainer-titles.json index f53c5be7445..6d966bbd9ec 100644 --- a/src/locales/fr/trainer-titles.json +++ b/src/locales/fr/trainer-titles.json @@ -16,6 +16,10 @@ "galactic_boss": "Leader de la Team Galaxie", "plasma_boss": "Leader de la Team Plasma", "flare_boss": "Leader de la Team Flare", + "aether_boss": "Présidente d’Æther", + "skull_boss": "Boss de la Team Skull", + "macro_boss": "Président de Macro Cosmos", + "rocket_admin": "Admin Team Rocket", "rocket_admin_female": "Admin Team Rocket", "magma_admin": "Admin Team Magma", @@ -27,5 +31,8 @@ "plasma_sage": "Sage Plasma", "plasma_admin": "Admin Team Plasma", "flare_admin": "Manager de la Team Flare", - "flare_admin_female": "Manageuse de la Team Flare" -} \ No newline at end of file + "flare_admin_female": "Manageuse de la Team Flare", + "aether_admin": "Directeur d’Æther", + "skull_admin": "Admin Team Skull", + "macro_admin": "Macro Cosmos" +} diff --git a/src/locales/it/battle.json b/src/locales/it/battle.json index 3fd255353d3..f0339f761c7 100644 --- a/src/locales/it/battle.json +++ b/src/locales/it/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}} non ha imparato\n{{moveName}}.", "learnMoveForgetQuestion": "Quale mossa deve dimenticare?", "learnMoveForgetSuccess": "{{pokemonName}} ha dimenticato la mossa\n{{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, @d{15}e@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}ta-daaaa!", + "countdownPoof": "@d{32}1, @d{15}2, @d{15}e@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}ta-daaaa!", "learnMoveAnd": "E…", "levelCapUp": "Il livello massimo\nè aumentato a {{levelCap}}!", "moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.", diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index 19d2f92f04e..c671851f6a9 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const itConfig = { ability, diff --git a/src/locales/it/move.json b/src/locales/it/move.json index 4c3a831197d..f5bb1954278 100644 --- a/src/locales/it/move.json +++ b/src/locales/it/move.json @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "Sprintaboom", - "effect": "Un attacco elettrico ad altissima velocità. Questa mossa ha priorità alta e aumenta l'elusione dell'utilizzatore." + "effect": "Un attacco elettrico ad altissima velocità. Questa mossa ha priorità alta e infligge sicuramente un brutto colpo." }, "splishySplash": { "name": "Surfasplash", @@ -3807,4 +3807,4 @@ "name": "Intossicatena", "effect": "Il Pokémon logora il bersaglio avvolgendolo con le sue catene fatte di veleno e iniettandogli delle tossine che possono anche iperavvelenarlo." } -} \ No newline at end of file +} diff --git a/src/locales/it/party-ui-handler.json b/src/locales/it/party-ui-handler.json index 9e26dfeeb6e..f5582e5b630 100644 --- a/src/locales/it/party-ui-handler.json +++ b/src/locales/it/party-ui-handler.json @@ -1 +1,42 @@ -{} \ No newline at end of file +{ + "SEND_OUT": "Manda in campo", + "SUMMARY": "Sommario", + "CANCEL": "Annulla", + "RELEASE": "Rilascia", + "APPLY": "Applica", + "TEACH": "Insegna", + "SPLICE": "Unisci", + "UNSPLICE": "Dividi", + "ACTIVATE": "Attiva", + "DEACTIVATE": "Disattiva", + "TRANSFER": "Trasferisci", + "ALL": "Tutto", + "PASS_BATON": "Staffetta", + "UNPAUSE_EVOLUTION": "Consenti evoluzione", + "REVIVE": "Revitalizza", + "RENAME": "Rinomina", + "choosePokemon": "Scegli un Pokémon.", + "doWhatWithThisPokemon": "Hai selezionato questo Pokémon.", + "noEnergy": "{{pokemonName}} non ha più energie\nper lottare!", + "hasEnergy": "{{pokemonName}} ha ancora energie\nper lottare!", + "cantBeUsed": "{{pokemonName}} non può essere usato\nin questa sfida!", + "tooManyItems": "{{pokemonName}} possiede già\nquest'oggetto in abbondanza!", + "anyEffect": "Non avrebbe alcun effetto.", + "unpausedEvolutions": "{{pokemonName}} può di nuovo evolversi.", + "unspliceConfirmation": "Vuoi davvero dividere {{fusionName}}\nda {{pokemonName}}? {{fusionName}} andrà perduto.", + "wasReverted": "{{fusionName}} è tornato ad essere {{pokemonName}}.", + "releaseConfirmation": "Vuoi davvero liberare {{pokemonName}}?", + "releaseInBattle": "Non puoi liberare un Pokémon che sta combattendo!", + "selectAMove": "Scegli una mossa.", + "changeQuantity": "Scegli un oggetto da trasferire.\nUsa < e > per cambiarne la quantità.", + "selectAnotherPokemonToSplice": "Scegli un altro Pokémon da unire.", + "cancel": "Annulla", + "goodbye": "Addio, {{pokemonName}}!", + "byebye": "Ciao ciao, {{pokemonName}}!", + "farewell": "Arrivederci, {{pokemonName}}!", + "soLong": "È stato bello, {{pokemonName}}!", + "thisIsWhereWePart": "Le nostre strade si dividono, {{pokemonName}}!", + "illMissYou": "Mi mancherai, {{pokemonName}}!", + "illNeverForgetYou": "Non ti dimenticherò, {{pokemonName}}!", + "untilWeMeetAgain": "Alla prossima, {{pokemonName}}!" + } \ No newline at end of file diff --git a/src/locales/it/pokemon-form-battle.json b/src/locales/it/pokemon-form-battle.json index 911f4fcf7c9..3c9b36f8150 100644 --- a/src/locales/it/pokemon-form-battle.json +++ b/src/locales/it/pokemon-form-battle.json @@ -10,5 +10,5 @@ "eternamaxChange": "{{preName}} si Dynamaxxa infinitamente\nin {{pokemonName}}!", "revertChange": "{{pokemonName}} è tornato\nalla sua forma originaria!", "formChange": "{{preName}} ha cambiato forma!", - "disguiseChange": "Its disguise served it as a decoy!" + "disguiseChange": "Il costume ha assorbito l’attacco!" } \ No newline at end of file diff --git a/src/locales/it/pokemon-form.json b/src/locales/it/pokemon-form.json index d51c038b83a..505173e4c8a 100644 --- a/src/locales/it/pokemon-form.json +++ b/src/locales/it/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "Incarnazione", "keldeoOrdinary": "Normale", "meloettaAria": "Canto", + "meloettaPirouette": "Danza", "froakieBattleBond": "Morfosintonia", "scatterbugMeadow": "Giardinfiore", "scatterbugIcySnow": "Nevi perenni", diff --git a/src/locales/it/pokemon-info.json b/src/locales/it/pokemon-info.json index 015cbd77ad0..4b655dbe1ce 100644 --- a/src/locales/it/pokemon-info.json +++ b/src/locales/it/pokemon-info.json @@ -13,7 +13,8 @@ "SPD": "Velocità", "SPDshortened": "Vel", "ACC": "Precisione", - "EVA": "Elusione" + "EVA": "Elusione", + "HPStat": "PS" }, "Type": { "UNKNOWN": "Sconosciuto", @@ -37,4 +38,4 @@ "FAIRY": "Folletto", "STELLAR": "Astrale" } -} \ No newline at end of file +} diff --git a/src/locales/it/run-history-ui-handler.json b/src/locales/it/run-history.json similarity index 100% rename from src/locales/it/run-history-ui-handler.json rename to src/locales/it/run-history.json diff --git a/src/locales/it/settings.json b/src/locales/it/settings.json index 1a0f05d368c..381503f21bd 100644 --- a/src/locales/it/settings.json +++ b/src/locales/it/settings.json @@ -2,6 +2,7 @@ "boy": "Ragazzo", "girl": "Ragazza", "general": "Generale", + "uiVolume": "Volume UI ", "gamepadSupport": "Supporto Gamepad", "showBgmBar": "Mostra Nomi Musica", "moveTouchControls": "Move Touch Controls", diff --git a/src/locales/it/starter-select-ui-handler.json b/src/locales/it/starter-select-ui-handler.json index 2bdc267d5f6..04137993d33 100644 --- a/src/locales/it/starter-select-ui-handler.json +++ b/src/locales/it/starter-select-ui-handler.json @@ -1,6 +1,6 @@ { "confirmStartTeam": "Vuoi iniziare con questi Pokémon?", - "confirmExit": "Do you want to exit?", + "confirmExit": "Vuoi tornare alla schermata principale?", "invalidParty": "Questo squadra iniziale non è valida!", "gen1": "1ª", "gen2": "2ª", @@ -21,13 +21,13 @@ "toggleIVs": "Vedi/Nascondi IV", "manageMoves": "Gestisci mosse", "manageNature": "Gestisci natura", - "addToFavorites": "Add to Favorites", - "removeFromFavorites": "Remove from Favorites", + "addToFavorites": "Aggiungi ai preferiti", + "removeFromFavorites": "Rimuovi dai preferiti", "useCandies": "Usa caramelle", "selectNature": "Seleziona natura.", "selectMoveSwapOut": "Seleziona una mossa da scambiare.", "selectMoveSwapWith": "Seleziona una mossa da scambiare con", - "sameSpeciesEgg": "Buy an Egg", + "sameSpeciesEgg": "Compra un uovo", "unlockPassive": "Sblocca passiva", "reduceCost": "Riduci costo", "cycleShiny": ": Shiny", @@ -36,7 +36,7 @@ "cycleAbility": ": Abilità", "cycleNature": ": Natura", "cycleVariant": ": Variante", - "goFilter": ": Go to filters", + "goFilter": ": Vai ai filtri", "enablePassive": "Attiva passiva", "disablePassive": "Disattiva passiva", "locked": "Bloccato", diff --git a/src/locales/it/terrain.json b/src/locales/it/terrain.json index 9e26dfeeb6e..d0a584d74ab 100644 --- a/src/locales/it/terrain.json +++ b/src/locales/it/terrain.json @@ -1 +1,16 @@ -{} \ No newline at end of file +{ + "misty": "Nebbioso", + "mistyStartMessage": "Ai piedi dei Pokémon si addensa la nebbia.", + "mistyClearMessage": "La nebbia si dissolve.", + "mistyBlockMessage": "Il Campo Nebbioso protegge {{pokemonNameWithAffix}}!", + "electric": "Elettrico", + "electricStartMessage": "Ai piedi dei Pokémon si accumula dell’elettricità.", + "electricClearMessage": "L’elettricità svanisce.", + "grassy": "Erboso", + "grassyStartMessage": "Ai piedi dei Pokémon cresce rigogliosa l’erba.", + "grassyClearMessage": "L’erba sparisce.", + "psychic": "Psichico", + "psychicStartMessage": "Nel campo si avverte una strana sensazione...", + "psychicClearMessage": "La strana sensazione nel campo è svanita!", + "defaultBlockMessage": "Il Campo {{terrainName}} protegge {{pokemonNameWithAffix}}!" +} diff --git a/src/locales/it/trainer-classes.json b/src/locales/it/trainer-classes.json index 854975859ce..205a7c59d42 100644 --- a/src/locales/it/trainer-classes.json +++ b/src/locales/it/trainer-classes.json @@ -117,5 +117,14 @@ "plasma_grunts": "Seguaci Plasma", "flare_grunt": "Recluta Team Flare", "flare_grunt_female": "Recluta Team Flare", - "flare_grunts": "Reclute Team Flare" -} \ No newline at end of file + "flare_grunts": "Reclute Team Flare", + "aether_grunt": "Dipendente (Fondazione Æther)", + "aether_grunt_female": "Dipendente (Fondazione Æther)", + "aether_grunts": "Dipendenti (Fondazione Æther)", + "skull_grunt": "Recluta Team Skull", + "skull_grunt_female": "Recluta Team Skull", + "skull_grunts": "Reclute Team Skull", + "macro_grunt": "Impiegato Macro Cosmos", + "macro_grunt_female": "Impiegata Macro Cosmos", + "macro_grunts": "Impiegati Macro Cosmos" +} diff --git a/src/locales/it/trainer-names.json b/src/locales/it/trainer-names.json index e5ad03321a8..6d1373c0bb3 100644 --- a/src/locales/it/trainer-names.json +++ b/src/locales/it/trainer-names.json @@ -124,25 +124,29 @@ "rival": "Finn", "rival_female": "Ivy", "archer": "Archer", - "ariana": "Ariana", - "proton": "Proton", - "petrel": "Petrel", - "tabitha": "Tabitha", - "courtney": "Courtney", - "shelly": "Shelly", - "matt": "Matt", - "mars": "Mars", - "jupiter": "Jupiter", - "saturn": "Saturn", - "zinzolin": "Zinzolin", - "rood": "Rood", - "xerosic": "Xerosic", - "bryony": "Bryony", - "maxie": "Maxie", - "archie": "Archie", + "ariana": "Atena", + "proton": "Milas", + "petrel": "Maxus", + "tabitha": "Ottavio", + "courtney": "Rossella", + "shelly": "Ada", + "matt": "Alan", + "mars": "Martes", + "jupiter": "Giovia", + "saturn": "Saturno", + "zinzolin": "Violante", + "rood": "Ross", + "xerosic": "Xante", + "bryony": "Bromelia", + "faba": "Vicio", + + "maxie": "Max", + "archie": "Ivan", "cyrus": "Cyrus", - "ghetsis": "Ghetsis", - "lysandre": "Lysandre", + "ghetsis": "Ghecis", + "lysandre": "Elisio", + "lusamine": "Samina", + "guzma": "Guzman", "blue_red_double": "Blu & Rosso", "red_blue_double": "Rosso & Blu", "tate_liza_double": "Tell & Pat", @@ -153,4 +157,4 @@ "iris_alder_double": "Iris & Nardo", "marnie_piers_double": "Mary & Ginepro", "piers_marnie_double": "Ginepro & Mary" -} \ No newline at end of file +} diff --git a/src/locales/it/trainer-titles.json b/src/locales/it/trainer-titles.json index c7f0dd8b323..eff152795cd 100644 --- a/src/locales/it/trainer-titles.json +++ b/src/locales/it/trainer-titles.json @@ -10,22 +10,30 @@ "rival": "Rivale", "professor": "Professore", "frontier_brain": "Asso lotta", - "rocket_boss": "Team Rocket Boss", - "magma_boss": "Team Magma Boss", - "aqua_boss": "Team Aqua Boss", - "galactic_boss": "Team Galactic Boss", - "plasma_boss": "Team Plasma Boss", - "flare_boss": "Team Flare Boss", - "rocket_admin": "Team Rocket Admin", - "rocket_admin_female": "Team Rocket Admin", - "magma_admin": "Team Magma Admin", - "magma_admin_female": "Team Magma Admin", - "aqua_admin": "Team Aqua Admin", - "aqua_admin_female": "Team Aqua Admin", - "galactic_commander": "Team Galactic Commander", - "galactic_commander_female": "Team Galactic Commander", - "plasma_sage": "Team Plasma Sage", - "plasma_admin": "Team Plasma Admin", - "flare_admin": "Team Flare Admin", - "flare_admin_female": "Team Flare Admin" -} \ No newline at end of file + "rocket_boss": "Capo Rocket", + "magma_boss": "Capo Magma", + "aqua_boss": "Capo Idro", + "galactic_boss": "Capo Galassia", + "plasma_boss": "Capo Plasma", + "flare_boss": "Capo Flare", + "aether_boss": "Direttrice Æther", + "skull_boss": "Capo Team Skull", + "macro_boss": "Presidente Macro Cosmos", + + "rocket_admin": "Tenente Team Rocket", + "rocket_admin_female": "Tenente Team Rocket", + "magma_admin": "Magmatenente", + "magma_admin_female": "Magmatenente", + "aqua_admin": "Idrotenente", + "aqua_admin_female": "Idrotenente", + "galactic_commander": "Comandante Galassia", + "galactic_commander_female": "Comandante Galassia", + "plasma_sage": "Saggio Team Plasma", + "plasma_admin": "Tenente Team Plasma", + "flare_admin": "Ufficiale Team Flare", + "flare_admin_female": "Ufficiale Team Flare", + "aether_admin": "Capo Filiale Æther", + "skull_admin": "Ufficiale Team Skull", + "macro_admin": "Vicepresidente Macro Cosmos" +} + diff --git a/src/locales/ja/battle-info.json b/src/locales/ja/battle-info.json index 9e26dfeeb6e..2959cdda332 100644 --- a/src/locales/ja/battle-info.json +++ b/src/locales/ja/battle-info.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "generation": "{{generation}}世代" +} diff --git a/src/locales/ja/battle.json b/src/locales/ja/battle.json index f75365a648e..f3f1d134d16 100644 --- a/src/locales/ja/battle.json +++ b/src/locales/ja/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}}は {{moveName}}を\n覚えずに 終わった!", "learnMoveForgetQuestion": "どの 技を\n忘れさせたい?", "learnMoveForgetSuccess": "{{pokemonName}}は {{moveName}}の\n使い方を きれいに 忘れた!", - "countdownPoof": "@d{32}1 @d{15}2の @d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}ポカン!", + "countdownPoof": "@d{32}1 @d{15}2の @d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}ポカン!", "learnMoveAnd": "そして…", "levelCapUp": "レベルキャップの\n{{levelCap}}に 上がった!", "moveNotImplemented": "{{moveName}}は まだ 実装されておらず 選択できません。", diff --git a/src/locales/ja/config.ts b/src/locales/ja/config.ts index fade2cd258f..b459ee12a9a 100644 --- a/src/locales/ja/config.ts +++ b/src/locales/ja/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const jaConfig = { ability, diff --git a/src/locales/ja/game-stats-ui-handler.json b/src/locales/ja/game-stats-ui-handler.json index 9e26dfeeb6e..25bb21f701a 100644 --- a/src/locales/ja/game-stats-ui-handler.json +++ b/src/locales/ja/game-stats-ui-handler.json @@ -1 +1,42 @@ -{} \ No newline at end of file +{ + "stats": "統計", + "playTime": "プレー時間", + "totalBattles": "合計バトル数", + "starters": "スターター数", + "shinyStarters": "色違いスターター数", + "speciesSeen": "合計発見数", + "speciesCaught": "合計捕獲数", + "ribbonsOwned": "リボン数", + "classicRuns": "クラシックラン", + "classicWins": "クラシック勝利", + "dailyRunAttempts": "デイリーラン", + "dailyRunWins": "デイリーラン勝利", + "endlessRuns": "エンドレスラン", + "highestWaveEndless": "エンドレス最高ウェーブ", + "highestMoney": "最大貯金", + "highestDamage": "最大ダメージ", + "highestHPHealed": "最大HP回復", + "pokemonEncountered": "遭遇したポケモン", + "pokemonDefeated": "倒したポケモン", + "pokemonCaught": "捕まえたポケモン", + "eggsHatched": "ふかしたタマゴ", + "subLegendsSeen": "見つけた順伝説", + "subLegendsCaught": "捕まえた順伝説", + "subLegendsHatched": "ふかした順伝説", + "legendsSeen": "見つけた伝説", + "legendsCaught": "捕まえた伝説", + "legendsHatched": "ふかした伝説", + "mythicalsSeen": "見つけた幻ポケモン", + "mythicalsCaught": "捕まえた幻ポケモン", + "mythicalsHatched": "ふかした幻ポケモン", + "shiniesSeen": "見つけた色違い", + "shiniesCaught": "捕まえた色違い", + "shiniesHatched": "ふかした色違い", + "pokemonFused": "合体したポケモン", + "trainersDefeated": "倒したトレーナー", + "eggsPulled": "引いたタマゴ", + "rareEggsPulled": "引いたレアタマゴ", + "epicEggsPulled": "引いた超レアタマゴ", + "legendaryEggsPulled": "引いた伝説タマゴ", + "manaphyEggsPulled": "引いたマナフィタマゴ" +} \ No newline at end of file diff --git a/src/locales/ja/menu-ui-handler.json b/src/locales/ja/menu-ui-handler.json index e9bec2cf0ae..beb014b84a9 100644 --- a/src/locales/ja/menu-ui-handler.json +++ b/src/locales/ja/menu-ui-handler.json @@ -1,19 +1,26 @@ { - "GAME_SETTINGS": "せってい", - "ACHIEVEMENTS": "じっせき", - "STATS": "とうけい", - "RUN_HISTORY":"ラン履歴", + "GAME_SETTINGS": "設定", + "ACHIEVEMENTS": "実績", + "STATS": "統計", "EGG_LIST": "タマゴリスト", "EGG_GACHA": "タマゴガチャ", - "MANAGE_DATA": "データかんり", + "MANAGE_DATA": "データ管理", "COMMUNITY": "コミュニティ", + "SAVE_AND_QUIT": "保存して終了", "LOG_OUT": "ログアウト", "slot": "スロット {{slotNumber}}", "importSession": "セッションのインポート", + "importSlotSelect": "インポート先の スロットを 選んでください", "exportSession": "セッションのエクスポート", - "importRunHistory":"ラン履歴インポート", - "exportRunHistory":"ラン履歴エクスポート", + "exportSlotSelect": "エクスポート元の スロットを 選んでください", "importData": "データのインポート", "exportData": "データのエクスポート", - "cancel": "キャンセル" + "consentPreferences": "同意設定", + "linkDiscord": "Discord連携", + "unlinkDiscord": "Discord連携解除", + "linkGoogle": "Google連携", + "unlinkGoogle": "Google連携解除", + "cancel": "キャンセル", + "losingProgressionWarning": "戦闘開始からの データが 保存されません。\nよろしいですか?", + "noEggs": "現在 タマゴを ふかしていません!" } \ No newline at end of file diff --git a/src/locales/ja/modifier-select-ui-handler.json b/src/locales/ja/modifier-select-ui-handler.json index 9e26dfeeb6e..9370f01491e 100644 --- a/src/locales/ja/modifier-select-ui-handler.json +++ b/src/locales/ja/modifier-select-ui-handler.json @@ -1 +1,12 @@ -{} \ No newline at end of file +{ + "transfer": "アイテム移行", + "reroll": "選択肢変更", + "lockRarities": "レア度の固定", + "checkTeam": "チームを確認", + "transferDesc": "ポケモンの 手持ちアイテムを 移行する", + "rerollDesc": "お金を 使って アイテムの 選択肢を 変更する", + "lockRaritiesDesc": "選択肢を 変更するときの レア度を 固定する\n(選択肢変更金額を影響する)", + "checkTeamDesc": "チームの 状態を 確認する\nフォルムチェンジアイテムを 有効・無効にする", + "rerollCost": "{{formattedMoney}}円", + "itemCost": "{{formattedMoney}}円" +} diff --git a/src/locales/ja/pokemon-form-battle.json b/src/locales/ja/pokemon-form-battle.json index 9e26dfeeb6e..adbc7b4b3da 100644 --- a/src/locales/ja/pokemon-form-battle.json +++ b/src/locales/ja/pokemon-form-battle.json @@ -1 +1,14 @@ -{} \ No newline at end of file +{ + "mega": "メガ{{pokemonName}}", + "mega-x": "メガ{{pokemonName}}X", + "mega-y": "メガ{{pokemonName}}Y", + "primal": "ゲンシ{{pokemonName}}", + "gigantamax": "キョダイ{{pokemonName}}", + "eternamax": "E・{{pokemonName}}", + "megaChange": "{{preName}}は\nメガ{{pokemonName}}に メガシンカした!", + "gigantamaxChange": "{{preName}}は\nキョダイマックスした!", + "eternamaxChange": "{{preName}}は\nムゲンダイマックスした!", + "revertChange": "{{pokemonName}}は\n元の姿に 戻った!", + "formChange": "{{preName}}は\n姿を 変えた!", + "disguiseChange": "ばけのかわが みがわりに なった!" +} diff --git a/src/locales/ja/pokemon-form.json b/src/locales/ja/pokemon-form.json index 9e26dfeeb6e..76124904456 100644 --- a/src/locales/ja/pokemon-form.json +++ b/src/locales/ja/pokemon-form.json @@ -1 +1,170 @@ -{} \ No newline at end of file +{ + "pikachuCosplay": "コスプレ", + "pikachuCoolCosplay": "クールなコスプレ", + "pikachuBeautyCosplay": "きれいなコスプレ", + "pikachuCuteCosplay": "かわいいコスプレ", + "pikachuSmartCosplay": "かしこいコスプレ", + "pikachuToughCosplay": "パワフルなコスプレ", + "pikachuPartner": "パートナー", + "eeveePartner": "パートナー", + "pichuSpiky": "ギザみみ", + "unownA": "A", + "unownB": "B", + "unownC": "C", + "unownD": "D", + "unownE": "E", + "unownF": "F", + "unownG": "G", + "unownH": "H", + "unownI": "I", + "unownJ": "J", + "unownK": "K", + "unownL": "L", + "unownM": "M", + "unownN": "N", + "unownO": "O", + "unownP": "P", + "unownQ": "Q", + "unownR": "R", + "unownS": "S", + "unownT": "T", + "unownU": "U", + "unownV": "V", + "unownW": "W", + "unownX": "X", + "unownY": "Y", + "unownZ": "Z", + "unownExclamation": "!", + "unownQuestion": "?", + "castformSunny": "たいよう", + "castformRainy": "あまみず", + "castformSnowy": "ゆきぐも", + "deoxysNormal": "ノーマル", + "burmyPlant": "くさき", + "burmySandy": "すなち", + "burmyTrash": "ゴミ", + "shellosEast": "ひがし", + "shellosWest": "にし", + "rotomHeat": "ヒート", + "rotomWash": "ウォッシュ", + "rotomFrost": "フロスト", + "rotomFan": "スピン", + "rotomMow": "カット", + "giratinaAltered": "アナザー", + "shayminLand": "ランド", + "basculinRedStriped": "赤筋", + "basculinBlueStriped": "青筋", + "basculinWhiteStriped": "白筋", + "deerlingSpring": "春", + "deerlingSummer": "夏", + "deerlingAutumn": "秋", + "deerlingWinter": "冬", + "tornadusIncarnate": "けしん", + "thundurusIncarnate": "けしん", + "landorusIncarnate": "けしん", + "keldeoOrdinary": "いつも", + "meloettaAria": "ボイス", + "meloettaPirouette": "ステップ", + "froakieBattleBond": "きずなへんげ", + "scatterbugMeadow": "はなぞの", + "scatterbugIcySnow": "ひょうせつ", + "scatterbugPolar": "ゆきぐに", + "scatterbugTundra": "せつげん", + "scatterbugContinental": "たいりく", + "scatterbugGarden": "ていえん", + "scatterbugElegant": "みやび", + "scatterbugModern": "モダン", + "scatterbugMarine": "マリン", + "scatterbugArchipelago": "ぐんとう", + "scatterbugHighPlains": "こうや", + "scatterbugSandstorm": "さじん", + "scatterbugRiver": "たいが", + "scatterbugMonsoon": "スコール", + "scatterbugSavanna": "サバンナ", + "scatterbugSun": "たいよう", + "scatterbugOcean": "オーシャン", + "scatterbugJungle": "ジャングル", + "scatterbugFancy": "ファンシー", + "scatterbugPokeBall": "ボール", + "flabebeRed": "赤", + "flabebeYellow": "黄", + "flabebeOrange": "オレンジ", + "flabebeBlue": "青", + "flabebeWhite": "白", + "furfrouHeart": "ハート", + "furfrouStar": "スター", + "furfrouDiamond": "ダイア", + "furfrouDebutante": "レディ", + "furfrouMatron": "マダム", + "furfrouDandy": "ジェントル", + "furfrouLaReine": "クイーン", + "furfrouKabuki": "カブキ", + "furfrouPharaoh": "キングダム", + "pumpkabooSmall": "ちいさい", + "pumpkabooLarge": "おおきい", + "pumpkabooSuper": "とくだい", + "xerneasNeutral": "リラックス", + "xerneasActive": "アクティブ", + "zygarde50": "50%フォルム", + "zygarde10": "10%フォルム", + "zygarde50Pc": "50%フォルム スワームチェンジ", + "zygarde10Pc": "10%フォルム スワームチェンジ", + "zygardeComplete": "パーフェクトフォルム", + "oricorioBaile": "めらめら", + "oricorioPompom": "ぱちぱち", + "oricorioPau": "ふらふら", + "oricorioSensu": "まいまい", + "rockruffOwnTempo": "マイペース", + "miniorRedMeteor": "赤 りゅうせい", + "miniorOrangeMeteor": "オレンジ りゅうせい", + "miniorYellowMeteor": "黄 りゅうせい", + "miniorGreenMeteor": "緑 りゅうせい", + "miniorBlueMeteor": "水色 りゅうせい", + "miniorIndigoMeteor": "青 りゅうせい", + "miniorVioletMeteor": "紫 りゅうせい", + "miniorRed": "赤", + "miniorOrange": "オレンジ", + "miniorYellow": "黄", + "miniorGreen": "緑", + "miniorBlue": "水色", + "miniorIndigo": "青", + "miniorViolet": "紫", + "mimikyuDisguised": "ばけたすがた", + "mimikyuBusted": "ばれたすがた", + "magearnaOriginal": "500ねんまえ", + "marshadowZenith": "Zパワー", + "sinisteaPhony": "がんさく", + "sinisteaAntique": "しんさく", + "eiscueNoIce": "ナイスなし", + "indeedeeMale": "オス", + "indeedeeFemale": "メス", + "morpekoFullBelly": "まんぷく", + "zacianHeroOfManyBattles": "れきせんのゆうしゃ", + "zamazentaHeroOfManyBattles": "れきせんのゆうしゃ", + "zarudeDada": "とうちゃん", + "enamorusIncarnate": "けしん", + "squawkabillyGreenPlumage": "グリーンフェザー", + "squawkabillyBluePlumage": "ブルーフェザー", + "squawkabillyYellowPlumage": "イエローフェザー", + "squawkabillyWhitePlumage": "ホワイトフェザー", + "tatsugiriCurly": "そったすがた", + "tatsugiriDroopy": "たれたすがた", + "tatsugiriStretchy": "のびたすがた", + "gimmighoulChest": "はこ", + "gimmighoulRoaming": "とほ", + "koraidonApexBuild": "かんぜんけいたい", + "koraidonLimitedBuild":"せいげんけいたい", + "koraidonSprintingBuild":"しっそうけいたい", + "koraidonSwimmingBuild":"ゆうえいけいたい", + "koraidonGlidingBuild":"かっくうけいたい", + "miraidonUltimateMode":"コンプリートモード", + "miraidonLowPowerMode":"リミテッドモード", + "miraidonDriveMode":"ドライブモード", + "miraidonAquaticMode":"フロートモード", + "miraidonGlideMode":"グライドモード", + "poltchageistCounterfeit": "マガイモノ", + "poltchageistArtisan": "タカイモノ", + "paldeaTaurosCombat": "コンバット", + "paldeaTaurosBlaze": "ブレイズ", + "paldeaTaurosAqua": "ウォーター" +} \ No newline at end of file diff --git a/src/locales/ja/run-history-ui-handler.json b/src/locales/ja/run-history.json similarity index 100% rename from src/locales/ja/run-history-ui-handler.json rename to src/locales/ja/run-history.json diff --git a/src/locales/ko/battle.json b/src/locales/ko/battle.json index 954ff84b4c9..001720e4e5c 100644 --- a/src/locales/ko/battle.json +++ b/src/locales/ko/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}}[[는]] {{moveName}}[[를]]\n결국 배우지 않았다!", "learnMoveForgetQuestion": "어느 기술을 잊게 하고싶은가?", "learnMoveForgetSuccess": "{{pokemonName}}[[는]] {{moveName}}[[를]] 깨끗이 잊었다!", - "countdownPoof": "@d{32}1, @d{15}2, @d{15}… @d{15}… @d{30}@s{pb_bounce_1}짠!", + "countdownPoof": "@d{32}1, @d{15}2, @d{15}… @d{15}… @d{30}@s{se/pb_bounce_1}짠!", "learnMoveAnd": "그리고…", "levelCapUp": "레벨의 최대치가\n{{levelCap}}까지 상승했다!", "moveNotImplemented": "{{moveName}}[[는]] 아직 구현되지 않아 사용할 수 없다…", diff --git a/src/locales/ko/bgm-name.json b/src/locales/ko/bgm-name.json index 5c35987b878..5295e2d8708 100644 --- a/src/locales/ko/bgm-name.json +++ b/src/locales/ko/bgm-name.json @@ -45,6 +45,7 @@ "battle_legendary_lake_trio": "ORAS 호수의 수호신 배틀", "battle_legendary_sinnoh": "ORAS 신오 전설 조우 배틀", "battle_legendary_dia_pal": "ORAS 디아루가 & 펄기아 배틀", + "battle_legendary_origin_forme": "LA 오리진 디아루가 & 펄기아 배틀", "battle_legendary_giratina": "ORAS 기라티나 배틀", "battle_legendary_arceus": "HGSS 아르세우스 배틀", "battle_legendary_unova": "BW 하나 전설 조우 배틀", @@ -59,6 +60,7 @@ "battle_legendary_zac_zam": "SWSH 자시안 & 자마젠타 배틀", "battle_legendary_glas_spec": "SWSH 블리자포스 & 레이스포스 배틀", "battle_legendary_calyrex": "SWSH 버드렉스 배틀", + "battle_legendary_riders": "SWSH 백마 & 흑마 버드렉스 배틀", "battle_legendary_birds_galar": "SWSH 가라르 전설의 새 배틀", "battle_legendary_ruinous": "SV 재앙의 보물 배틀", "battle_legendary_kor_mir": "SV 에리어 제로 배틀", @@ -78,11 +80,20 @@ "battle_galactic_grunt": "BDSP 갤럭시단 배틀", "battle_plasma_grunt": "BW 플라스마단 배틀", "battle_flare_grunt": "XY 플레어단 배틀", + "battle_aether_grunt": "SM 에테르재단 배틀", + "battle_skull_grunt": "SM 스컬단 배틀", + "battle_macro_grunt": "SWSH 트레이너 배틀", + "battle_galactic_admin": "BDSP 갤럭시단 간부 배틀", + "battle_skull_admin": "SM 스컬단 간부 배틀", + "battle_oleana": "SWSH 올리브 배틀", "battle_rocket_boss": "USUM 비주기 배틀", "battle_aqua_magma_boss": "ORAS 아강 & 마적 배틀", "battle_galactic_boss": "BDSP 태홍 배틀", "battle_plasma_boss": "B2W2 게치스 배틀", "battle_flare_boss": "XY 플라드리 배틀", + "battle_aether_boss": "SM 루자미네 배틀", + "battle_skull_boss": "SM 구즈마 배틀", + "battle_macro_boss": "SWSH 로즈 배틀", "abyss": "불가사의 던전 하늘의 탐험대 어둠의 화구", "badlands": "불가사의 던전 하늘의 탐험대 불모의 계곡", "beach": "불가사의 던전 하늘의 탐험대 축축한 암반", @@ -135,4 +146,4 @@ "heal": "BW 포켓몬 센터", "menu": "불가사의 던전 하늘의 탐험대 포켓몬 세계에 온 것을 환영한다!", "title": "불가사의 던전 하늘의 탐험대 메뉴 테마" -} \ No newline at end of file +} diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index e570742bb73..b5b34cea0ae 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const koConfig = { ability, diff --git a/src/locales/ko/dialogue-female.json b/src/locales/ko/dialogue-female.json index 693b0704512..1fdbfe7dfba 100644 --- a/src/locales/ko/dialogue-female.json +++ b/src/locales/ko/dialogue-female.json @@ -1,4 +1,4 @@ -{ +{ "youngster": { "encounter": { "1": "거기 너! 나와 배틀 어때?", @@ -655,6 +655,86 @@ "5": "네가 이긴 것 같네. 그렇지만 졌어도, 난 우아하게 퇴장할 거니까!" } }, + "aether_grunt": { + "encounter": { + "1": "죽을 각오로 퇴치하겠습니다!", + "2": "소중한 연구라고! 애라도 가만두지 않겠어!", + "3": "어떤 트레이너든 물리치라고 들었다고!", + "4": "에테르파라다이스의 파워를 보여드리겠습니다!", + "5": "에테르파라다이스 중심의 어둠을 알아내다니. 이제 사라져 주셔야겠습니다!" + }, + "victory": { + "1": "흥! 실력이 대단하시군요.", + "2": "이게 뭐하는 상황이지? 무슨 결과냐고!", + "3": "이런! 넌 너무 강해서 물리칠 방법도 없다고!", + "4": "으음… 제가 진 것처럼 보이네요.", + "5": "이 느낌을 한마디로 하면. 게에이~힝!!" + } + }, + "faba": { + "encounter": { + "1": "나, 에테르재단의 자우보! 꼬맹이 녀석에게 현실을 보여주겠어요!", + "2": "에테르파라다이스 마지막 보루라고 불리는, 이 자우보에게 애를 상대하라고요?", + "3": "에테르재단의 지부장이라면 세계에 단 한 명… 이 자우보뿐입니다." + }, + "victory": { + "1": "게에이~힝!!", + "2": "뭐 뭐뭐뭐 뭐가 어떻게 된 거죠? 내가 애를 상대로…", + "3": "이래서 애는… 좋아할 수가 없어요." + } + }, + "skull_grunt": { + "encounter": { + "1": "나쁜 짓 안해-그냥 사는 게 힘들 뿐스컬!", + "2": "껌 하나 드실? 이게 우리가 인사하는 방식YO! 만나서 반갑스컬!", + "3": "우린 그냥 다른 사람의 포켓몬에 관심이 많을 뿐임다!", + "4": "어이 어이! 잘난 체하는 녀석한테 무시당하고 있잖스컬!!", + "5": "우리는 리프리젠트 땡땡이 스컬-! 집세는 못 내겠지만-! 정말 즐거웠지만, 청춘을 날려YO!" + }, + "victory": { + "1": "엥? 벌써 끝났슴까?", + "2": "미는 엑시트! 유는 피쓰풀!", + "3": "꼬마 녀석의 이상한 포켓몬엔 관심 없어!", + "4": "뭐야-?! 너무 강해서 뼈도 못 추리겠어!", + "5": "우리가 포켓몬보다 아래야!? 소중히 대해주면 안 돼? 으응!?" + } + }, + "plumeria": { + "encounter": { + "1": "…아무것도 느껴지지 않는 평~범한 애로 보이는데!", + "2": "워낙 애들 상대로 우물쭈물 하길래 오래 걸릴 줄 알았지…", + "3": "누구라도 스컬단 또 방해하면, 정말로 혼내줄 테니까!" + }, + "victory": { + "1": "흥! 대단하군.", + "2": "흐음, 너 참 대단하군. 애들을 상대로 질질 끈 이유가 이해될 정도로 강해.", + "3": "흠. 이 손실은 그냥 안고 가야겠어." + } + }, + "macro_grunt": { + "encounter": { + "1": "당신은 여기서 끝날 것 같네요!", + "2": "당신은 트레이너 맞죠? 하지만 우리를 방해하는 건 용납 못 합니다!", + "3": "매크로코스모스 생명입니다! 가입하신 실비보험은 있으신가요?" + }, + "victory": { + "1": "순순히 물러나는 것 말고는 선택지가 없군요.", + "2": "용돈을 뺏기다니… 패배는 적자로 이어지는구나…", + "3": "매크로코스모스 생명에 관한 일이라면 누구에게도 지지 않을 텐데…" + } + }, + "oleana": { + "encounter": { + "1": "로즈님을 방해하는 것은 절대로 용서할 수 없으니까요!", + "2": "저의 지시를 따르는 특별한 스태프들을 아무렇지도 않게 쓰러뜨리다니. …더 기대되는 것도 없네요.", + "3": "로즈님을 위해서라면! 질 수 없습니다!" + }, + "victory": { + "1": "아아… 이기지 못하다니… 올리브… 넌 정말 구제 불능이구나.", + "2": "하아아…! 이런 실수를 하다니… 승리를 거듭한 트레이너의 실력을 너무 얕잡아봤던 모양이네요.", + "3": "아아… 이 올리브님 조금 지쳤어…" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "그래서! 여기까지 오다니, 감탄이 절로 나오는군!" @@ -787,6 +867,72 @@ "1": "우매한 자들이 이 아름다운 세상을 계속 더럽히고 있군." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "비스트가 놀라잖아! …우선은 너를 조용히 시켜야겠어." + }, + "victory": { + "1": "……너무해!" + }, + "defeat": { + "1": "흐음…" + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "그렇게 말했는데도! …왜 이리 끈질긴 거야! 정말 진절머리가 나.\n$더 말해봐야 소용 없겠지… 텅비드의 힘으로 네가 여기까지 온 걸 후회하게 해줄게!" + }, + "victory": { + "1": "………아아아웃!!" + }, + "defeat": { + "1": "나는 비스트만 있으면 돼! 너희가 어떻게 되든 상관없어!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "박살 내고 박살 내도 절대 봐주지 않아…\n$모두가 싫어하는 구즈마가 여기 있다!" + }, + "victory": { + "1": "쯧. 너는 내가 박살 내주겠어!" + }, + "defeat": { + "1": "겨우 그걸 위해서 일부러 온 거야?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "누구든지 박살 낸다!\n$그것이 구즈마님의 아이덴티티!!" + }, + "victory": { + "1": "구즈마!!! 뭐 하고 있는 거야?!" + }, + "defeat": { + "1": "너희들 바보군!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "내게는 모든 사람이 영원히 마음을 놓고 발전할 수 있도록…\n$무한한 에너지를 가져다 줘야 한다는 신념과 사명이 있단다!" + }, + "victory": { + "1": "아직 무르군… 트레이너.\n$역사는 바뀔 것이네! 이 나의 손에 의해서 말이지" + }, + "defeat": { + "1": "자네는 여전히 깨닫지 못했군!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "나는 가라르를 포함한— 전 세계의 에너지 문제를 해결하기 위해 최선을 다하고 있어.\n$매크로코스모스를 성공으로 이끈 경험과 성과는 내 방식이 효율적이라는 증거란다.\n$생각을 바꿀 마음은 없어. 내가 지더라도." + }, + "victory": { + "1": "포켓몬 승부는 좋군! 오랜만에 싸워보니 만족스러워…\n$제법 괜찮군. 패배를 인정하지." + }, + "defeat": { + "1": "너희가 보기에는 내가 끔찍한 짓을 벌이고 있는 것처럼 보이겠지? 조금도 이해가 가지 않을 거야.\n$하지만 난 가라르지방의 영원한 번영을 위해서 무한한 에너지를 가져다줘야 해." + } + }, "brock": { "encounter": { "1": "내 전문인 바위 타입 포켓몬으로 널 쓰러뜨려줄게! 덤벼!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}나… 내 소임을 다 한 기분이야…\n$@c{smile_eclosed}약속해 줘… 세상을 원래대로 되돌리고서… \n집으로… 무사히 돌아오는 거야.\n$@c{smile_ehalf}…고마워." } } -} \ No newline at end of file +} diff --git a/src/locales/ko/dialogue-male.json b/src/locales/ko/dialogue-male.json index 693b0704512..11194ab6398 100644 --- a/src/locales/ko/dialogue-male.json +++ b/src/locales/ko/dialogue-male.json @@ -655,6 +655,86 @@ "5": "네가 이긴 것 같네. 그렇지만 졌어도, 난 우아하게 퇴장할 거니까!" } }, + "aether_grunt": { + "encounter": { + "1": "죽을 각오로 퇴치하겠습니다!", + "2": "소중한 연구라고! 애라도 가만두지 않겠어!", + "3": "어떤 트레이너든 물리치라고 들었다고!", + "4": "에테르파라다이스의 파워를 보여드리겠습니다!", + "5": "에테르파라다이스 중심의 어둠을 알아내다니. 이제 사라져 주셔야겠습니다!" + }, + "victory": { + "1": "흥! 실력이 대단하시군요.", + "2": "이게 뭐하는 상황이지? 무슨 결과냐고!", + "3": "이런! 넌 너무 강해서 물리칠 방법도 없다고!", + "4": "으음… 제가 진 것처럼 보이네요.", + "5": "이 느낌을 한마디로 하면. 게에이~힝!!" + } + }, + "faba": { + "encounter": { + "1": "나, 에테르재단의 자우보! 꼬맹이 녀석에게 현실을 보여주겠어요!", + "2": "에테르파라다이스 마지막 보루라고 불리는, 이 자우보에게 애를 상대하라고요?", + "3": "에테르재단의 지부장이라면 세계에 단 한 명… 이 자우보뿐입니다." + }, + "victory": { + "1": "게에이~힝!!", + "2": "뭐 뭐뭐뭐 뭐가 어떻게 된 거죠? 내가 애를 상대로…", + "3": "이래서 애는… 좋아할 수가 없어요." + } + }, + "skull_grunt": { + "encounter": { + "1": "나쁜 짓 안해-그냥 사는 게 힘들 뿐스컬!", + "2": "껌 하나 드실? 이게 우리가 인사하는 방식YO! 만나서 반갑스컬!", + "3": "우린 그냥 다른 사람의 포켓몬에 관심이 많을 뿐임다!", + "4": "어이 어이! 잘난 체하는 녀석한테 무시당하고 있잖스컬!!", + "5": "우리는 리프리젠트 땡땡이 스컬-! 집세는 못 내겠지만-! 정말 즐거웠지만, 청춘을 날려YO!" + }, + "victory": { + "1": "엥? 벌써 끝났슴까?", + "2": "미는 엑시트! 유는 피쓰풀!", + "3": "꼬마 녀석의 이상한 포켓몬엔 관심 없어!", + "4": "뭐야-?! 너무 강해서 뼈도 못 추리겠어!", + "5": "우리가 포켓몬보다 아래야!? 소중히 대해주면 안 돼? 으응!?" + } + }, + "plumeria": { + "encounter": { + "1": "…아무것도 느껴지지 않는 평~범한 애로 보이는데!", + "2": "워낙 애들 상대로 우물쭈물 하길래 오래 걸릴 줄 알았지…", + "3": "누구라도 스컬단 또 방해하면, 정말로 혼내줄 테니까!" + }, + "victory": { + "1": "흥! 대단하군.", + "2": "흐음, 너 참 대단하군. 애들을 상대로 질질 끈 이유가 이해될 정도로 강해.", + "3": "흠. 이 손실은 그냥 안고 가야겠어." + } + }, + "macro_grunt": { + "encounter": { + "1": "당신은 여기서 끝날 것 같네요!", + "2": "당신은 트레이너 맞죠? 하지만 우리를 방해하는 건 용납 못 합니다!", + "3": "매크로코스모스 생명입니다! 가입하신 실비보험은 있으신가요?" + }, + "victory": { + "1": "순순히 물러나는 것 말고는 선택지가 없군요.", + "2": "용돈을 뺏기다니… 패배는 적자로 이어지는구나…", + "3": "매크로코스모스 생명에 관한 일이라면 누구에게도 지지 않을 텐데…" + } + }, + "oleana": { + "encounter": { + "1": "로즈님을 방해하는 것은 절대로 용서할 수 없으니까요!", + "2": "저의 지시를 따르는 특별한 스태프들을 아무렇지도 않게 쓰러뜨리다니. …더 기대되는 것도 없네요.", + "3": "로즈님을 위해서라면! 질 수 없습니다!" + }, + "victory": { + "1": "아아… 이기지 못하다니… 올리브… 넌 정말 구제 불능이구나.", + "2": "하아아…! 이런 실수를 하다니… 승리를 거듭한 트레이너의 실력을 너무 얕잡아봤던 모양이네요.", + "3": "아아… 이 올리브님 조금 지쳤어…" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "그래서! 여기까지 오다니, 감탄이 절로 나오는군!" @@ -787,6 +867,72 @@ "1": "우매한 자들이 이 아름다운 세상을 계속 더럽히고 있군." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "비스트가 놀라잖아! …우선은 너를 조용히 시켜야겠어." + }, + "victory": { + "1": "……너무해!" + }, + "defeat": { + "1": "흐음…" + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "그렇게 말했는데도! …왜 이리 끈질긴 거야! 정말 진절머리가 나.\n$더 말해봐야 소용 없겠지… 텅비드의 힘으로 네가 여기까지 온 걸 후회하게 해줄게!" + }, + "victory": { + "1": "………아아아웃!!" + }, + "defeat": { + "1": "나는 비스트만 있으면 돼! 너희가 어떻게 되든 상관없어!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "박살 내고 박살 내도 절대 봐주지 않아…\n$모두가 싫어하는 구즈마가 여기 있다!" + }, + "victory": { + "1": "쯧. 너는 내가 박살 내주겠어!" + }, + "defeat": { + "1": "겨우 그걸 위해서 일부러 온 거야?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "누구든지 박살 낸다!\n$그것이 구즈마님의 아이덴티티!!" + }, + "victory": { + "1": "구즈마!!! 뭐 하고 있는 거야?!" + }, + "defeat": { + "1": "너희들 바보군!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "내게는 모든 사람이 영원히 마음을 놓고 발전할 수 있도록…\n$무한한 에너지를 가져다 줘야 한다는 신념과 사명이 있단다!" + }, + "victory": { + "1": "아직 무르군… 트레이너.\n$역사는 바뀔 것이네! 이 나의 손에 의해서 말이지" + }, + "defeat": { + "1": "자네는 여전히 깨닫지 못했군!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "나는 가라르를 포함한— 전 세계의 에너지 문제를 해결하기 위해 최선을 다하고 있어.\n$매크로코스모스를 성공으로 이끈 경험과 성과는 내 방식이 효율적이라는 증거란다.\n$생각을 바꿀 마음은 없어. 내가 지더라도." + }, + "victory": { + "1": "포켓몬 승부는 좋군! 오랜만에 싸워보니 만족스러워…\n$제법 괜찮군. 패배를 인정하지." + }, + "defeat": { + "1": "너희가 보기에는 내가 끔찍한 짓을 벌이고 있는 것처럼 보이겠지? 조금도 이해가 가지 않을 거야.\n$하지만 난 가라르지방의 영원한 번영을 위해서 무한한 에너지를 가져다줘야 해." + } + }, "brock": { "encounter": { "1": "내 전문인 바위 타입 포켓몬으로 널 쓰러뜨려줄게! 덤벼!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}나… 내 소임을 다 한 기분이야…\n$@c{smile_eclosed}약속해 줘… 세상을 원래대로 되돌리고서… \n집으로… 무사히 돌아오는 거야.\n$@c{smile_ehalf}…고마워." } } -} \ No newline at end of file +} diff --git a/src/locales/ko/menu.json b/src/locales/ko/menu.json index 4369e8baaae..7976e0bedcf 100644 --- a/src/locales/ko/menu.json +++ b/src/locales/ko/menu.json @@ -41,6 +41,7 @@ "score": "점수", "wave": "웨이브", "loading": "로딩 중…", + "loadingAsset": "리소스 로드 중: {{assetName}}", "playersOnline": "플레이어 온라인", "yes": "예", "no": "아니오", @@ -51,4 +52,4 @@ "rename": "닉네임 바꾸기", "nickname": "닉네임", "errorServerDown": "서버 연결 중 문제가 발생했습니다.\n\n이 창을 종료하지 않고 두면,\n게임은 자동으로 재접속됩니다." -} \ No newline at end of file +} diff --git a/src/locales/ko/modifier.json b/src/locales/ko/modifier.json index 4a030c4e64f..281ecf61943 100644 --- a/src/locales/ko/modifier.json +++ b/src/locales/ko/modifier.json @@ -3,9 +3,10 @@ "turnHealApply": "{{pokemonNameWithAffix}}[[는]]\n{{typeName}}[[로]] 인해 조금 회복했다.", "hitHealApply": "{{pokemonNameWithAffix}}[[는]]\n{{typeName}}[[로]] 인해 조금 회복했다.", "pokemonInstantReviveApply": "{{pokemonNameWithAffix}}[[는]] {{typeName}}[[로]]\n정신을 차려 싸울 수 있게 되었다!", + "pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}[[는]] {{typeName}}[[로]]\n상태를 원래대로 되돌렸다!", "moneyInterestApply": "{{typeName}}[[로]]부터\n₽{{moneyAmount}}[[를]] 받았다!", "turnHeldItemTransferApply": "{{pokemonName}}의 {{typeName}}[[는]]\n{{pokemonNameWithAffix}}의 {{itemName}}[[를]] 흡수했다!", "contactHeldItemTransferApply": "{{pokemonName}}의 {{typeName}}[[는]]\n{{pokemonNameWithAffix}}의 {{itemName}}[[를]] 가로챘다!", "enemyTurnHealApply": "{{pokemonNameWithAffix}}의\n체력이 약간 회복되었다!", "bypassSpeedChanceApply": "{{pokemonName}}[[는]] {{itemName}}[[로]]\n행동이 빨라졌다!" -} \ No newline at end of file +} diff --git a/src/locales/ko/move.json b/src/locales/ko/move.json index a52d839aeb9..a06bb2b3e27 100644 --- a/src/locales/ko/move.json +++ b/src/locales/ko/move.json @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "파찌파찌액셀", - "effect": "맹렬한 속도의 전격 공격. 반드시 선제공격할 수 있고 자신의 회피율을 높인다." + "effect": "맹렬한 속도의 전격 공격. 반드시 선제공격할 수 있고 급소에 맞는다." }, "splishySplash": { "name": "참방참방서핑", @@ -3807,4 +3807,4 @@ "name": "악독사슬", "effect": "독으로 된 사슬로 상대를 휘감은 뒤 독소를 흘려보내어 해치운다. 맹독 상태로 만들 때가 있다." } -} \ No newline at end of file +} diff --git a/src/locales/ko/pokemon-form.json b/src/locales/ko/pokemon-form.json index aad63a4df3a..885f9a9b891 100644 --- a/src/locales/ko/pokemon-form.json +++ b/src/locales/ko/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "화신폼", "keldeoOrdinary": "평상시 모습", "meloettaAria": "보이스폼", + "meloettaPirouette": "스텝폼", "froakieBattleBond": "유대변화", "scatterbugMeadow": "화원의 모양", "scatterbugIcySnow": "빙설의 모양", diff --git a/src/locales/ko/pokemon-info.json b/src/locales/ko/pokemon-info.json index d23f90eab6e..1e26af64d0f 100644 --- a/src/locales/ko/pokemon-info.json +++ b/src/locales/ko/pokemon-info.json @@ -13,7 +13,8 @@ "SPD": "스피드", "SPDshortened": "스피드", "ACC": "명중률", - "EVA": "회피율" + "EVA": "회피율", + "HPStat": "HP" }, "Type": { "UNKNOWN": "Unknown", @@ -37,4 +38,4 @@ "FAIRY": "페어리", "STELLAR": "스텔라" } -} \ No newline at end of file +} diff --git a/src/locales/ko/pokemon-summary.json b/src/locales/ko/pokemon-summary.json index 5742058e45c..d9119623662 100644 --- a/src/locales/ko/pokemon-summary.json +++ b/src/locales/ko/pokemon-summary.json @@ -11,8 +11,8 @@ "cancel": "그만둔다", "memoString": "{{natureFragment}}.\n{{metFragment}}", "metFragment": { - "normal": "{{biome}}에서\nLv{{level}}일 때 만났다.", - "apparently": "{{biome}}에서\nLv{{level}}일 때 만난 것 같다." + "normal": "{{biome}}에서\n레벨 {{level}}일 때 만났다.", + "apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다." }, "natureFragment": { "Hardy": "{{nature}}하는 성격", @@ -41,4 +41,4 @@ "Careful": "{{nature}}한 성격", "Quirky": "{{nature}}스러운 성격" } -} \ No newline at end of file +} diff --git a/src/locales/ko/run-history-ui-handler.json b/src/locales/ko/run-history.json similarity index 84% rename from src/locales/ko/run-history-ui-handler.json rename to src/locales/ko/run-history.json index 387ed5fdeb5..340b0c98439 100644 --- a/src/locales/ko/run-history-ui-handler.json +++ b/src/locales/ko/run-history.json @@ -1,9 +1,9 @@ { "victory": "승리!", - "defeatedWild": "야생에서 패배: ", - "defeatedTrainer": "트레이너에게 패배: ", - "defeatedTrainerDouble": "더블 배틀에서 패배", - "defeatedRival": "라이벌에게 패배", + "defeatedWildM": "야생에서 패배: ", + "defeatedTrainerM": "트레이너에게 패배: ", + "defeatedTrainerDoubleM": "더블 배틀에서 패배", + "defeatedRivalM": "라이벌에게 패배", "defeatedM": "패배", "defeatedWildF": "야생에서 패배: ", "defeatedTrainerF": "트레이너에게 패배: ", @@ -34,4 +34,4 @@ "hallofFameTextF": "전당 등록을 축하합니다!", "viewHallOfFame": "전당 보기", "viewEndingSplash": "엔딩 화면 보기" -} \ No newline at end of file +} diff --git a/src/locales/ko/settings.json b/src/locales/ko/settings.json index 34fff42adb2..b7fc01cb148 100644 --- a/src/locales/ko/settings.json +++ b/src/locales/ko/settings.json @@ -61,7 +61,9 @@ "typeHints": "상성 힌트", "masterVolume": "마스터 볼륨", "bgmVolume": "BGM 볼륨", + "fieldVolume": "전투효과 볼륨", "seVolume": "SE 볼륨", + "uiVolume": "UI 볼륨", "musicPreference": "음악 설정", "mixed": "믹스", "gamepadPleasePlug": "게임패드를 연결하거나 버튼을 입력하세요", diff --git a/src/locales/ko/trainer-classes.json b/src/locales/ko/trainer-classes.json index 555e487b4a3..da6c6f4aceb 100644 --- a/src/locales/ko/trainer-classes.json +++ b/src/locales/ko/trainer-classes.json @@ -117,5 +117,14 @@ "plasma_grunts": "플라스마단 조무래기들", "flare_grunt": "플레어단 조무래기", "flare_grunt_female": "플레어단 조무래기", - "flare_grunts": "플레어단 조무래기들" -} \ No newline at end of file + "flare_grunts": "플레어단 조무래기들", + "aether_grunt": "에테르재단 직원", + "aether_grunt_female": "에테르재단 직원", + "aether_grunts": "에테르재단 직원들", + "skull_grunt": "스컬단 조무래기", + "skull_grunt_female": "스컬단 조무래기", + "skull_grunts": "스컬단 조무래기들", + "macro_grunt": "매크로코스모스 직원", + "macro_grunt_female": "매크로코스모스 직원", + "macro_grunts": "매크로코스모스 직원들" +} diff --git a/src/locales/ko/trainer-names.json b/src/locales/ko/trainer-names.json index bc24d0f3183..f1357a428ba 100644 --- a/src/locales/ko/trainer-names.json +++ b/src/locales/ko/trainer-names.json @@ -138,11 +138,19 @@ "rood": "로트", "xerosic": "크세로시키", "bryony": "바라", + "faba": "자우보", + "plumeria": "플루메리", + "oleana": "올리브", + "maxie": "마적", "archie": "아강", "cyrus": "태홍", "ghetsis": "게치스", "lysandre": "플라드리", + "lusamine": "루자미네", + "guzma": "구즈마", + "rose": "로즈", + "blue_red_double": "그린 & 레드", "red_blue_double": "레드 & 그린", "tate_liza_double": "풍 & 란", @@ -153,4 +161,4 @@ "iris_alder_double": "아이리스 & 노간주", "marnie_piers_double": "마리 & 두송", "piers_marnie_double": "두송 & 마리" -} \ No newline at end of file +} diff --git a/src/locales/ko/trainer-titles.json b/src/locales/ko/trainer-titles.json index 4e627392e0b..7cff2207817 100644 --- a/src/locales/ko/trainer-titles.json +++ b/src/locales/ko/trainer-titles.json @@ -16,6 +16,10 @@ "galactic_boss": "갤럭시단 보스", "plasma_boss": "플라스마단 보스", "flare_boss": "플레어단 보스", + "aether_boss": "에테르재단 대표", + "skull_boss": "스컬단 보스", + "macro_boss": "매크로코스모스 사장", + "rocket_admin": "로켓단 간부", "rocket_admin_female": "로켓단 간부", "magma_admin": "마그마단 간부", @@ -27,5 +31,8 @@ "plasma_sage": "플라스마단 현인", "plasma_admin": "플라스마단 간부", "flare_admin": "플레어단 간부", - "flare_admin_female": "플레어단 간부" -} \ No newline at end of file + "flare_admin_female": "플레어단 간부", + "aether_admin": "에테르재단 지부장", + "skull_admin": "스컬단 간부", + "macro_admin": "매크로코스모스 간부" +} diff --git a/src/locales/pt_BR/ability.json b/src/locales/pt_BR/ability.json index 5b885504bd1..c4180ff01dd 100644 --- a/src/locales/pt_BR/ability.json +++ b/src/locales/pt_BR/ability.json @@ -257,7 +257,7 @@ }, "overgrow": { "name": "Overgrow", - "description": "Fortalece os movimentos do tipo Planta quando o Pokémon está com poucos PS." + "description": "Fortalece os movimentos do tipo Grama quando o Pokémon está com poucos PS." }, "blaze": { "name": "Blaze", @@ -625,7 +625,7 @@ }, "sapSipper": { "name": "Sap Sipper", - "description": "Se for atingido por um movimento do tipo Planta, ao invés de receber dano, aumenta seu Ataque." + "description": "Se for atingido por um movimento do tipo Grama, ao invés de receber dano, aumenta seu Ataque." }, "prankster": { "name": "Prankster", @@ -661,7 +661,7 @@ }, "flowerVeil": { "name": "Flower Veil", - "description": "Pokémon aliados do tipo Planta são protegidos de mudanças de estado e diminuição de seus atributos." + "description": "Pokémon aliados do tipo Grama são protegidos de mudanças de estado e diminuição de seus atributos." }, "cheekPouch": { "name": "Cheek Pouch", @@ -927,6 +927,10 @@ "name": "Prism Armor", "description": "Reduz o dano recebido por movimentos supereficazes." }, + "neuroforce": { + "name": "Neuroforce", + "description": "Fortalece movimentos supereficazes." + }, "intrepidSword": { "name": "Intrepid Sword", "description": "Aumenta o atributo de Ataque ao entrar em batalha." @@ -1055,9 +1059,9 @@ "name": "Grim Neigh", "description": "Quando o Pokémon derrota um alvo, emite um relincho assustador que aumenta seu Ataque Esp." }, - "asOneGlacier": { + "asOneGlastrier": { "name": "As One", - "description": "Essa Habilidade combina os efeitos das Habilidades Enervar de Calyrex e Relincho Branco de Glastrier." + "description": "Esta habilidade combina os efeitos da habilidade Unnerve de Calyrex e da habilidade Chilling Neigh de Glastrier." }, "asOneSpectrier": { "name": "As One", @@ -1235,4 +1239,4 @@ "name": "Poison Puppeteer", "description": "Pokémon envenenados pelos movimentos de Pecharunt também ficarão confusos." } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/arena-flyout.json b/src/locales/pt_BR/arena-flyout.json index 7ef11bea17f..e221fa6c0a5 100644 --- a/src/locales/pt_BR/arena-flyout.json +++ b/src/locales/pt_BR/arena-flyout.json @@ -15,5 +15,26 @@ "misty": "Terreno Enevoado", "electric": "Terreno Elétrico", "grassy": "Terreno de Planta", - "psychic": "Terreno Psíquico" -} \ No newline at end of file + "psychic": "Terreno Psíquico", + "mudSport": "Mud Sport", + "waterSport": "Water Sport", + "spikes": "Spikes", + "toxicSpikes": "Toxic Spikes", + "mist": "Mist", + "futureSight": "Future Sight", + "doomDesire": "Doom Desire", + "wish": "Wish", + "stealthRock": "Stealth Rock", + "stickyWeb": "Sticky Web", + "trickRoom": "Trick Room", + "gravity": "Gravity", + "reflect": "Reflect", + "lightScreen": "Light Screen", + "auroraVeil": "Aurora Veil", + "quickGuard": "Quick Guard", + "wideGuard": "Wide Guard", + "matBlock": "Mat Block", + "craftyShield": "Crafty Shield", + "tailwind": "Tailwind", + "happyHour": "Happy Hour" +} diff --git a/src/locales/pt_BR/battle.json b/src/locales/pt_BR/battle.json index b48d97ef4e9..e34ce8efdca 100644 --- a/src/locales/pt_BR/battle.json +++ b/src/locales/pt_BR/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}} não aprendeu {{moveName}}.", "learnMoveForgetQuestion": "Qual movimento quer esquecer?", "learnMoveForgetSuccess": "{{pokemonName}} esqueceu como usar {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, @d{15}e@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Puf!", + "countdownPoof": "@d{32}1, @d{15}2, @d{15}e@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}Puf!", "learnMoveAnd": "E…", "levelCapUp": "O nível máximo aumentou\npara {{levelCap}}!", "moveNotImplemented": "{{moveName}} ainda não foi implementado e não pode ser usado.", diff --git a/src/locales/pt_BR/bgm-name.json b/src/locales/pt_BR/bgm-name.json index bfce77e3a69..86d8ce3e790 100644 --- a/src/locales/pt_BR/bgm-name.json +++ b/src/locales/pt_BR/bgm-name.json @@ -45,6 +45,7 @@ "battle_legendary_lake_trio": "ORAS Batalha do Trio dos Lagos", "battle_legendary_sinnoh": "ORAS Batalha dos Lendários de Sinnoh", "battle_legendary_dia_pal": "ORAS Batalha do Dialga & Palkia", + "battle_legendary_origin_forme": "LA Origin Batalha com Dialga & Palkia", "battle_legendary_giratina": "ORAS Batalha do Giratina", "battle_legendary_arceus": "HGSS Batalha do Arceus", "battle_legendary_unova": "BW Batalha dos Lendários de Unova", @@ -59,6 +60,7 @@ "battle_legendary_zac_zam": "SWSH Batalha do Zacian & Zamazenta", "battle_legendary_glas_spec": "SWSH Batalha do Glastrier & Spectrier", "battle_legendary_calyrex": "SWSH Batalha do Calyrex", + "battle_legendary_riders": "SWSH Batalha com Ice & Shadow Rider Calyrex", "battle_legendary_birds_galar": "SWSH Batalha dos Pássaros Lendários de Galar", "battle_legendary_ruinous": "SV Batalha dos Lendários Ruinosos", "battle_legendary_kor_mir": "SV Batalha das Cavernas da Área Zero", @@ -78,11 +80,21 @@ "battle_galactic_grunt": "BDSP Batalha da Equipe Galáctica", "battle_plasma_grunt": "BW Batalha da Equipe Plasma", "battle_flare_grunt": "XY Batalha da Equipe Flare", + "battle_aether_grunt": "SM Batalha da Fundação Aether", + "battle_skull_grunt": "SM Batalha da Equipe Skull", + "battle_macro_grunt": "SWSH Batalha de Treinador", + "battle_galactic_admin": "BDSP Batalha com Admin da Equipe Galáctica", + "battle_skull_admin": "SM Batalha com Admin da Euipe Skull", + "battle_oleana": "SWSH Batalha da Oleana", "battle_rocket_boss": "USUM Batalha do Giovanni", "battle_aqua_magma_boss": "ORAS Batalha do Maxie & Archie", "battle_galactic_boss": "BDSP Batalha do Cyrus", "battle_plasma_boss": "B2W2 Batalha do Ghetsis", "battle_flare_boss": "XY Batalha do Lysandre", + "battle_aether_boss": "SM Batalha da Lusamine", + "battle_skull_boss": "SM Batalha do Guzma", + "battle_macro_boss": "SWSH Batalha do Rose", + "abyss": "PMD EoS Dark Crater", "badlands": "PMD EoS Barren Valley", "beach": "PMD EoS Drenched Bluff", @@ -135,4 +147,4 @@ "heal": "BW Centro Pokémon", "menu": "PMD EoS Bem-vindo ao Mundo dos Pokémon!", "title": "PMD EoS Menu Principal" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index 74dce2dec3e..9cc8fe313a2 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const ptBrConfig = { ability, diff --git a/src/locales/pt_BR/dialogue-female.json b/src/locales/pt_BR/dialogue-female.json index 7f4dfe8865d..a25230117e3 100644 --- a/src/locales/pt_BR/dialogue-female.json +++ b/src/locales/pt_BR/dialogue-female.json @@ -655,6 +655,86 @@ "5": "Você pode ter me vencido, mas quando eu perco, eu saio com estilo!" } }, + "aether_grunt": { + "encounter": { + "1": "Eu vou lutar com tudo o que tenho para te eliminar!", + "2": "Eu não me importo se você é uma criança ou o que. Eu vou te mandar voando se você nos ameaçar!", + "3": "Me mandaram afastar Treinadores, não importa quem sejam!", + "4": "Eu vou te mostrar o poder do Paraíso Aether!", + "5": "Agora que você descobriu a escuridão no coração do Paraíso Aether, precisamos que você desapareça convenientemente!" + }, + "victory": { + "1": "Aff! Você parece ter muita habilidade.", + "2": "O que isso significa? O que isso significa!", + "3": "Ei! Você é tão forte que não há como eu te afastar!", + "4": "Hmm... Parece que eu posso ter perdido.", + "5": "Aqui está uma resposta para você: Aiyee!" + } + }, + "faba": { + "encounter": { + "1": "Eu, o Chefe de Ramo Faba, vou te mostrar a dureza do mundo real!", + "2": "O homem chamado de última linha de defesa do Paraíso Aether vai batalhar com uma mera criança?", + "3": "Eu, Faba, sou o Chefe de Ramo do Paraíso Aether. O único no mundo, eu sou insubstituível." + }, + "victory": { + "1": "Aiyee!", + "2": "C-c-como assim?! Como uma criança...", + "3": "Isso é por que... Isso é por que eu não consigo gostar de crianças." + } + }, + "skull_grunt": { + "encounter": { + "1": "Nós não somos maus, somos apenas durões!", + "2": "Quer um pouco de nós? É assim que dizemos olá! Prazer em conhecê-los, otários!", + "3": "Somos só um bando de caras e minas com um grande interesse nos Pokémon dos outros!", + "4": "Por que você está tentando agir durão quando já somos durões como ossos aqui fora, mano?", + "5": "Equipe Skull na área! Não podemos pagar o aluguel! Nos divertimos muito, mas nossa juventude foi desperdiçada!" + }, + "victory": { + "1": "Ahn? Já acabou?", + "2": "Hora de dar o fora, mano! Vamos ter que dizer tchau, mano!", + "3": "Nem precisamos dos seus Pokémon fracotes mesmo!", + "4": "Que?! Esse muleque é muito forte! Não tem como negar!", + "5": "Então, o que? Eu sou pior que um Pokémon?! Eu já tenho problemas de autoestima, cara." + } + }, + "plumeria": { + "encounter": { + "1": " ...Hmph. Você não parece nada especial para mim.", + "2": "Esses Capangas gastam muito tempo tentando lidar com crianças como você...", + "3": "Mexe com qualquer um da Equipe Skull, e eu vou te mostrar o quão séria eu posso ficar." + }, + "victory": { + "1": "Aff! Você é bem forte. Tenho que admitir.", + "2": "Aff! Você é bem forte. Agora eu entendi por que meus Capangas gastam tanto tempo batalhando com crianças.", + "3": "Aff! Acho que eu só tenho que aceitar essa derrota." + } + }, + "macro_grunt": { + "encounter": { + "1": "Parece que aqui é o fim da linha para você!", + "2": "Você é um treinador, não é? Temo que isso não lhe dê o direito de interferir em nosso trabalho.", + "3": "Sou da Macro Cosmos Seguros! Já tem um seguro de vida?" + }, + "victory": { + "1": "Eu não tenho muita escolha a não ser recuar respeitosamente.", + "2": "Ter que desistir do meu dinheiro... Perder significa que estou de volta no vermelho...", + "3": "Ninguém pode vencer a Macro Cosmos quando se trata de nossa dedicação ao trabalho!" + } + }, + "oleana": { + "encounter": { + "1": "Eu não vou deixar ninguém interferir no plano do Sr. Rose!", + "2": "Então, você passou por todo o pessoal especial que eu ordenei para te parar. Eu não esperaria nada menos.", + "3": "Pelo presidente! Eu não vou perder!" + }, + "victory": { + "1": "*suspiro* Eu não consegui vencer... Oleana... você realmente é uma mulher sem esperança.", + "2": "Aff! Isso é inaceitável... O que eu estava pensando... Qualquer treinador que chega tão longe não seria um fracote...", + "3": "*suspiro* Eu sou uma Oleana cansada..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Tenho que admitir, estou impressionado que tenha chegado até aqui!" @@ -787,6 +867,72 @@ "1": "Tolos sem visão continuarão a poluir este belo mundo." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "Você vai assustar minha fera querida! Parece que eu vou precisar te silenciar primeiro." + }, + "victory": { + "1": "Como... como você pode ser tão terrível!" + }, + "defeat": { + "1": "Aff..." + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "Por que você continua a me incomodar?! Estou cansada de você. Cansada até a alma!\n$Chega de papo furado... Com o poder de Nihilego, vou mostrar o quão errado você estava em vir aqui!" + }, + "victory": { + "1": "Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "Tudo o que eu quero é minha fera preciosa! Eu não me importo com nenhum de vocês!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "O odiado chefe que te bate e te bate e nunca para...\n$É. O grande e mau Guzma está aqui!" + }, + "victory": { + "1": "Tss. Eu vou te bater um dia desses!" + }, + "defeat": { + "1": "E você veio até aqui só pra isso, né?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "Não importa contra quem eu esteja, eu vou derrotá-los!\n$Isso é o que o grande e mau Guzma é!" + }, + "victory": { + "1": "Guzma!!! O que há de errado com você?!" + }, + "defeat": { + "1": "Vocês são tudo uns idiotas!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "Devo fornecer energia ilimitada para garantir a prosperidade eterna para todos...\n$É meu propósito, meu dever, meu destino!" + }, + "victory": { + "1": "Você ainda não entendeu, treinador...\n$Nós... Não, eu vou mudar o rumo da história!" + }, + "defeat": { + "1": "Você ainda não entende nada!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "Estou comprometido em resolver o problema de energia na região de Galar e, claro, em todo o mundo.\n$Minha experiência e conquistas que fizeram da Macro Cosmos um sucesso são a prova de que meus métodos funcionam.\n$Não pretendo mudar de ideia, mesmo que eu perca." + }, + "victory": { + "1": "Eu esqueci o quão incríveis são as batalhas Pokémon! Faz tanto tempo desde que eu batalhei...\n$Isso foi realmente satisfatório, eu aceito a derrota para esta batalha." + }, + "defeat": { + "1": "Eu suponho que deve parecer que estou fazendo algo terrível. Eu não espero que você entenda.\n$Mas eu devo fornecer à região de Galar energia ilimitada para garantir prosperidade eterna." + } + }, "brock": { "encounter": { "1": "Minha especialidade em Pokémon do tipo Pedra vai te derrubar! Vamos lá!", @@ -1218,6 +1364,40 @@ "3": "Cheguei onde estou porque os Pokémon estavam ao meu lado.\nTalvez precisemos pensar por que os Pokémon nos ajudam, não em termos de Pokémon e Treinadores, mas como uma relação entre seres vivos." } }, + "chili": { + "encounter": { + "1": "Yeeeeeooow! Hora de brincar com FOGO!! Eu sou o mais forte de nós irmãos!", + "2": "Tcharan! O escaldante Chili tipo Fogo (sou eu) será seu oponente!", + "3": "Vou te mostrar o que eu e meus ardentes tipo Fogo podemos fazer!" + }, + "victory": { + "1": "Você me pegou. Eu estou… queimado… esgotado…", + "2": "Uau! Você tá pegando fogo!", + "3": "Ai! Você me pegou!" + }, + "defeat": { + "1": "Estou pegando fogo! Brinque comigo e você vai se queimar!", + "2": "Quando você brinca com fogo, você se queima!", + "3": "Quero dizer, fala sério, seu oponente era eu! Você não teve chance!" + } + }, + "cilan": { + "encounter": { + "1": "Nada pessoal... Sem ressentimentos... Eu e meus Pokémon do tipo Grama vamos...\n$Hum... Nós iremos batalhar, aconteça o que acontecer.", + "2": "Então, hum, se você estiver bem comigo, eu vou, hum, dar tudo o que tenho para ser, hum, você sabe, seu oponente.", + "3": "OK... Então, eu sou Cilan, eu gosto de Pokémon do tipo Grama." + }, + "victory": { + "1": "Er… Já acabou?", + "2": "…Que surpresa. Você é muito forte, não é? \n$Eu acho que meus irmãos também não conseguiriam derrotar você…", + "3": "…Huh. Parece que meu timing estava, hum, errado?" + }, + "defeat": { + "1": "Hein? Eu ganhei?", + "2": "Eu acho... \n$Eu acho que ganhei, porque eu estava competindo com meus irmãos Chili e Cress, e todos nós conseguimos ficar mais fortes.", + "3": "Foi… foi uma experiência bastante emocionante…" + } + }, "roark": { "encounter": { "1": "Preciso ver seu potencial como Treinadora. E, vou precisar ver a dureza dos Pokémon que batalham com você!", @@ -2508,4 +2688,4 @@ "1": "@c{smile_ehalf}Eu… acho que cumpri meu propósito…\n$@c{smile_eclosed}Prometa-me… Depois que curar o mundo… Por favor… volte para casa.\n$@c{smile_ehalf}…Obrigada." } } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/dialogue-male.json b/src/locales/pt_BR/dialogue-male.json index 0316dda2524..2978bb9a6a5 100644 --- a/src/locales/pt_BR/dialogue-male.json +++ b/src/locales/pt_BR/dialogue-male.json @@ -655,6 +655,86 @@ "5": "Você pode ter me vencido, mas quando eu perco, eu saio com estilo!" } }, + "aether_grunt": { + "encounter": { + "1": "Eu vou lutar com tudo o que tenho para te eliminar!", + "2": "Eu não me importo se você é uma criança ou o que. Eu vou te mandar voando se você nos ameaçar!", + "3": "Me mandaram afastar Treinadores, não importa quem sejam!", + "4": "Eu vou te mostrar o poder do Paraíso Aether!", + "5": "Agora que você descobriu a escuridão no coração do Paraíso Aether, precisamos que você desapareça convenientemente!" + }, + "victory": { + "1": "Aff! Você parece ter muita habilidade.", + "2": "O que isso significa? O que isso significa!", + "3": "Ei! Você é tão forte que não há como eu te afastar!", + "4": "Hmm... Parece que eu posso ter perdido.", + "5": "Aqui está uma resposta para você: Aiyee!" + } + }, + "faba": { + "encounter": { + "1": "Eu, o Chefe de Ramo Faba, vou te mostrar a dureza do mundo real!", + "2": "O homem chamado de última linha de defesa do Paraíso Aether vai batalhar com uma mera criança?", + "3": "Eu, Faba, sou o Chefe de Ramo do Paraíso Aether. O único no mundo, eu sou insubstituível." + }, + "victory": { + "1": "Aiyee!", + "2": "C-c-como assim?! Como uma criança...", + "3": "Isso é por que... Isso é por que eu não consigo gostar de crianças." + } + }, + "skull_grunt": { + "encounter": { + "1": "Nós não somos maus, somos apenas durões!", + "2": "Quer um pouco de nós? É assim que dizemos olá! Prazer em conhecê-los, otários!", + "3": "Somos só um bando de caras e minas com um grande interesse nos Pokémon dos outros!", + "4": "Por que você está tentando agir durão quando já somos durões como ossos aqui fora, mano?", + "5": "Equipe Skull na área! Não podemos pagar o aluguel! Nos divertimos muito, mas nossa juventude foi desperdiçada!" + }, + "victory": { + "1": "Ahn? Já acabou?", + "2": "Hora de dar o fora, mano! Vamos ter que dizer tchau, mano!", + "3": "Nem precisamos dos seus Pokémon fracotes mesmo!", + "4": "Que?! Esse muleque é muito forte! Não tem como negar!", + "5": "Então, o que? Eu sou pior que um Pokémon?! Eu já tenho problemas de autoestima, cara." + } + }, + "plumeria": { + "encounter": { + "1": " ...Hmph. Você não parece nada especial para mim.", + "2": "Esses Capangas gastam muito tempo tentando lidar com crianças como você...", + "3": "Mexe com qualquer um da Equipe Skull, e eu vou te mostrar o quão séria eu posso ficar." + }, + "victory": { + "1": "Aff! Você é bem forte. Tenho que admitir.", + "2": "Aff! Você é bem forte. Agora eu entendi por que meus Capangas gastam tanto tempo batalhando com crianças.", + "3": "Aff! Acho que eu só tenho que aceitar essa derrota." + } + }, + "macro_grunt": { + "encounter": { + "1": "Parece que aqui é o fim da linha para você!", + "2": "Você é um treinador, não é? Temo que isso não lhe dê o direito de interferir em nosso trabalho.", + "3": "Sou da Macro Cosmos Seguros! Já tem um seguro de vida?" + }, + "victory": { + "1": "Eu não tenho muita escolha a não ser recuar respeitosamente.", + "2": "Ter que desistir do meu dinheiro... Perder significa que estou de volta no vermelho...", + "3": "Ninguém pode vencer a Macro Cosmos quando se trata de nossa dedicação ao trabalho!" + } + }, + "oleana": { + "encounter": { + "1": "Eu não vou deixar ninguém interferir no plano do Sr. Rose!", + "2": "Então, você passou por todo o pessoal especial que eu ordenei para te parar. Eu não esperaria nada menos.", + "3": "Pelo presidente! Eu não vou perder!" + }, + "victory": { + "1": "*suspiro* Eu não consegui vencer... Oleana... você realmente é uma mulher sem esperança.", + "2": "Aff! Isso é inaceitável... O que eu estava pensando... Qualquer treinador que chega tão longe não seria um fracote...", + "3": "*suspiro* Eu sou uma Oleana cansada..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Tenho que admitir, estou impressionado que tenha chegado até aqui!" @@ -787,6 +867,72 @@ "1": "Tolos sem visão continuarão a poluir este belo mundo." } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "Você vai assustar minha fera querida! Parece que eu vou precisar te silenciar primeiro." + }, + "victory": { + "1": "Como... como você pode ser tão terrível!" + }, + "defeat": { + "1": "Aff..." + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "Por que você continua a me incomodar?! Estou cansada de você. Cansada até a alma!\n$Chega de papo furado... Com o poder de Nihilego, vou mostrar o quão errado você estava em vir aqui!" + }, + "victory": { + "1": "Aaauuuggghhhhhhhhh!!!" + }, + "defeat": { + "1": "Tudo o que eu quero é minha fera preciosa! Eu não me importo com nenhum de vocês!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "O odiado chefe que te bate e te bate e nunca para...\n$É. O grande e mau Guzma está aqui!" + }, + "victory": { + "1": "Tss. Eu vou te bater um dia desses!" + }, + "defeat": { + "1": "E você veio até aqui só pra isso, né?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "Não importa contra quem eu esteja, eu vou derrotá-los!\n$Isso é o que o grande e mau Guzma é!" + }, + "victory": { + "1": "Guzma!!! O que há de errado com você?!" + }, + "defeat": { + "1": "Vocês são tudo uns idiotas!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "Devo fornecer energia ilimitada para garantir a prosperidade eterna para todos...\n$É meu propósito, meu dever, meu destino!" + }, + "victory": { + "1": "Você ainda não entendeu, treinador...\n$Nós... Não, eu vou mudar o rumo da história!" + }, + "defeat": { + "1": "Você ainda não entende nada!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "Estou comprometido em resolver o problema de energia na região de Galar e, claro, em todo o mundo.\n$Minha experiência e conquistas que fizeram da Macro Cosmos um sucesso são a prova de que meus métodos funcionam.\n$Não pretendo mudar de ideia, mesmo que eu perca." + }, + "victory": { + "1": "Eu esqueci o quão incríveis são as batalhas Pokémon! Faz tanto tempo desde que eu batalhei...\n$Isso foi realmente satisfatório, eu aceito a derrota para esta batalha." + }, + "defeat": { + "1": "Eu suponho que deve parecer que estou fazendo algo terrível. Eu não espero que você entenda.\n$Mas eu devo fornecer à região de Galar energia ilimitada para garantir prosperidade eterna." + } + }, "brock": { "encounter": { "1": "Minha especialidade em Pokémon do tipo Pedra vai te derrubar! Vamos lá!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}Eu… acho que cumpri meu propósito…\n$@c{smile_eclosed}Prometa-me… Depois que curar o mundo… Por favor… volte para casa.\n$@c{smile_ehalf}…Obrigada." } } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/modifier-type.json b/src/locales/pt_BR/modifier-type.json index 722da8d2dbf..1787360b51e 100644 --- a/src/locales/pt_BR/modifier-type.json +++ b/src/locales/pt_BR/modifier-type.json @@ -505,8 +505,8 @@ "BLASTOISINITE": "Blastoisinita", "BLAZIKENITE": "Blazikenita", "CAMERUPTITE": "Cameruptita", - "CHARIZARDITE X": "Charizardita X", - "CHARIZARDITE Y": "Charizardita Y", + "CHARIZARDITE_X": "Charizardita X", + "CHARIZARDITE_Y": "Charizardita Y", "DIANCITE": "Diancita", "GALLADITE": "Galladita", "GARCHOMPITE": "Garchompita", @@ -525,12 +525,12 @@ "MAWILITE": "Mawilita", "MEDICHAMITE": "Medichamita", "METAGROSSITE": "Metagrossita", - "MEWTWONITE X": "Mewtwonita X", - "MEWTWONITE Y": "Mewtwonita Y", + "MEWTWONITE_X": "Mewtwonita X", + "MEWTWONITE_Y": "Mewtwonita Y", "PIDGEOTITE": "Pidgeotita", "PINSIRITE": "Pinsirita", - "SABLENITE": "Sablenita", "RAYQUAZITE": "Rayquazita", + "SABLENITE": "Sablenita", "SALAMENCITE": "Salamencita", "SCEPTILITE": "Sceptilita", "SCIZORITE": "Scizorita", @@ -606,4 +606,4 @@ "FAIRY_MEMORY": "Memória de Fada", "BLANK_MEMORY": "Memória Vazia" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/move.json b/src/locales/pt_BR/move.json index 043a095159c..c463665f1ad 100644 --- a/src/locales/pt_BR/move.json +++ b/src/locales/pt_BR/move.json @@ -39,9 +39,9 @@ "name": "Scratch", "effect": "Garras duras, pontiagudas e afiadas rasgam o alvo para causar dano." }, - "viceGrip": { - "name": "Vice Grip", - "effect": "O alvo é agarrado pelos lados e espremido." + "viseGrip": { + "name": "Vise Grip", + "effect": "O alvo é agarrado e espremido de ambos os lados para causar dano." }, "guillotine": { "name": "Guillotine", @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "Zippy Zap", - "effect": "O usuário ataca o alvo com rajadas de eletricidade em alta velocidade. Esse movimento sempre vai primeiro e aumenta a Evasão do usuário." + "effect": "O usuário ataca o alvo com rajadas de eletricidade em alta velocidade. Esse movimento sempre vai primeiro e resulta em um golpe crítico." }, "splishySplash": { "name": "Splishy Splash", @@ -3807,4 +3807,4 @@ "name": "Malignant Chain", "effect": "O usuário derrama toxinas no alvo envolvendo-o em uma corrente tóxica e corrosiva. Isso também pode deixar o alvo seriamente envenenado." } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon-form.json b/src/locales/pt_BR/pokemon-form.json index 83169a44414..aa8f32a5d36 100644 --- a/src/locales/pt_BR/pokemon-form.json +++ b/src/locales/pt_BR/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "Materializado", "keldeoOrdinary": "Comum", "meloettaAria": "Ária", + "meloettaPirouette": "Pirueta", "froakieBattleBond": "Vínculo de Batalha", "scatterbugMeadow": "Prado", "scatterbugIcySnow": "Neve Congelada", @@ -151,10 +152,19 @@ "tatsugiriStretchy": "Reto", "gimmighoulChest": "Baú", "gimmighoulRoaming": "Perambulante", - "koraidonGlidingBuild": "Gliding Build", + "koraidonApexBuild": "Forma Plena", + "koraidonLimitedBuild": "Forma Limitada", + "koraidonSprintingBuild": "Forma de Corrida", + "koraidonSwimmingBuild": "Forma de Nado", + "koraidonGlidingBuild": "Forma de Voo", + "miraidonUltimateMode": "Modo Pleno", + "miraidonLowPowerMode": "Modo Limitado", + "miraidonDriveMode": "Modo Terrestre", + "miraidonAquaticMode": "Modo Aquático", + "miraidonGlideMode": "Modo Aéreo", "poltchageistCounterfeit": "Imitação", "poltchageistArtisan": "Artesão", "paldeaTaurosCombat": "Combate", "paldeaTaurosBlaze": "Chamas", "paldeaTaurosAqua": "Aquático" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon-info.json b/src/locales/pt_BR/pokemon-info.json index 3d374f62bba..a7a46b7a24e 100644 --- a/src/locales/pt_BR/pokemon-info.json +++ b/src/locales/pt_BR/pokemon-info.json @@ -13,7 +13,8 @@ "SPD": "Veloc.", "SPDshortened": "Veloc.", "ACC": "Precisão", - "EVA": "Evasão" + "EVA": "Evasão", + "HPStat": "PS" }, "Type": { "UNKNOWN": "Desconhecido", @@ -37,4 +38,4 @@ "FAIRY": "Fada", "STELLAR": "Estelar" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon.json b/src/locales/pt_BR/pokemon.json index 9e26dfeeb6e..f780d2accbd 100644 --- a/src/locales/pt_BR/pokemon.json +++ b/src/locales/pt_BR/pokemon.json @@ -1 +1,1084 @@ -{} \ No newline at end of file +{ + "bulbasaur": "Bulbasaur", + "ivysaur": "Ivysaur", + "venusaur": "Venusaur", + "charmander": "Charmander", + "charmeleon": "Charmeleon", + "charizard": "Charizard", + "squirtle": "Squirtle", + "wartortle": "Wartortle", + "blastoise": "Blastoise", + "caterpie": "Caterpie", + "metapod": "Metapod", + "butterfree": "Butterfree", + "weedle": "Weedle", + "kakuna": "Kakuna", + "beedrill": "Beedrill", + "pidgey": "Pidgey", + "pidgeotto": "Pidgeotto", + "pidgeot": "Pidgeot", + "rattata": "Rattata", + "raticate": "Raticate", + "spearow": "Spearow", + "fearow": "Fearow", + "ekans": "Ekans", + "arbok": "Arbok", + "pikachu": "Pikachu", + "raichu": "Raichu", + "sandshrew": "Sandshrew", + "sandslash": "Sandslash", + "nidoran_f": "Nidoran♀", + "nidorina": "Nidorina", + "nidoqueen": "Nidoqueen", + "nidoran_m": "Nidoran♂", + "nidorino": "Nidorino", + "nidoking": "Nidoking", + "clefairy": "Clefairy", + "clefable": "Clefable", + "vulpix": "Vulpix", + "ninetales": "Ninetales", + "jigglypuff": "Jigglypuff", + "wigglytuff": "Wigglytuff", + "zubat": "Zubat", + "golbat": "Golbat", + "oddish": "Oddish", + "gloom": "Gloom", + "vileplume": "Vileplume", + "paras": "Paras", + "parasect": "Parasect", + "venonat": "Venonat", + "venomoth": "Venomoth", + "diglett": "Diglett", + "dugtrio": "Dugtrio", + "meowth": "Meowth", + "persian": "Persian", + "psyduck": "Psyduck", + "golduck": "Golduck", + "mankey": "Mankey", + "primeape": "Primeape", + "growlithe": "Growlithe", + "arcanine": "Arcanine", + "poliwag": "Poliwag", + "poliwhirl": "Poliwhirl", + "poliwrath": "Poliwrath", + "abra": "Abra", + "kadabra": "Kadabra", + "alakazam": "Alakazam", + "machop": "Machop", + "machoke": "Machoke", + "machamp": "Machamp", + "bellsprout": "Bellsprout", + "weepinbell": "Weepinbell", + "victreebel": "Victreebel", + "tentacool": "Tentacool", + "tentacruel": "Tentacruel", + "geodude": "Geodude", + "graveler": "Graveler", + "golem": "Golem", + "ponyta": "Ponyta", + "rapidash": "Rapidash", + "slowpoke": "Slowpoke", + "slowbro": "Slowbro", + "magnemite": "Magnemite", + "magneton": "Magneton", + "farfetchd": "Farfetch'd", + "doduo": "Doduo", + "dodrio": "Dodrio", + "seel": "Seel", + "dewgong": "Dewgong", + "grimer": "Grimer", + "muk": "Muk", + "shellder": "Shellder", + "cloyster": "Cloyster", + "gastly": "Gastly", + "haunter": "Haunter", + "gengar": "Gengar", + "onix": "Onix", + "drowzee": "Drowzee", + "hypno": "Hypno", + "krabby": "Krabby", + "kingler": "Kingler", + "voltorb": "Voltorb", + "electrode": "Electrode", + "exeggcute": "Exeggcute", + "exeggutor": "Exeggutor", + "cubone": "Cubone", + "marowak": "Marowak", + "hitmonlee": "Hitmonlee", + "hitmonchan": "Hitmonchan", + "lickitung": "Lickitung", + "koffing": "Koffing", + "weezing": "Weezing", + "rhyhorn": "Rhyhorn", + "rhydon": "Rhydon", + "chansey": "Chansey", + "tangela": "Tangela", + "kangaskhan": "Kangaskhan", + "horsea": "Horsea", + "seadra": "Seadra", + "goldeen": "Goldeen", + "seaking": "Seaking", + "staryu": "Staryu", + "starmie": "Starmie", + "mr_mime": "Mr. Mime", + "scyther": "Scyther", + "jynx": "Jynx", + "electabuzz": "Electabuzz", + "magmar": "Magmar", + "pinsir": "Pinsir", + "tauros": "Tauros", + "magikarp": "Magikarp", + "gyarados": "Gyarados", + "lapras": "Lapras", + "ditto": "Ditto", + "eevee": "Eevee", + "vaporeon": "Vaporeon", + "jolteon": "Jolteon", + "flareon": "Flareon", + "porygon": "Porygon", + "omanyte": "Omanyte", + "omastar": "Omastar", + "kabuto": "Kabuto", + "kabutops": "Kabutops", + "aerodactyl": "Aerodactyl", + "snorlax": "Snorlax", + "articuno": "Articuno", + "zapdos": "Zapdos", + "moltres": "Moltres", + "dratini": "Dratini", + "dragonair": "Dragonair", + "dragonite": "Dragonite", + "mewtwo": "Mewtwo", + "mew": "Mew", + "chikorita": "Chikorita", + "bayleef": "Bayleef", + "meganium": "Meganium", + "cyndaquil": "Cyndaquil", + "quilava": "Quilava", + "typhlosion": "Typhlosion", + "totodile": "Totodile", + "croconaw": "Croconaw", + "feraligatr": "Feraligatr", + "sentret": "Sentret", + "furret": "Furret", + "hoothoot": "Hoothoot", + "noctowl": "Noctowl", + "ledyba": "Ledyba", + "ledian": "Ledian", + "spinarak": "Spinarak", + "ariados": "Ariados", + "crobat": "Crobat", + "chinchou": "Chinchou", + "lanturn": "Lanturn", + "pichu": "Pichu", + "cleffa": "Cleffa", + "igglybuff": "Igglybuff", + "togepi": "Togepi", + "togetic": "Togetic", + "natu": "Natu", + "xatu": "Xatu", + "mareep": "Mareep", + "flaaffy": "Flaaffy", + "ampharos": "Ampharos", + "bellossom": "Bellossom", + "marill": "Marill", + "azumarill": "Azumarill", + "sudowoodo": "Sudowoodo", + "politoed": "Politoed", + "hoppip": "Hoppip", + "skiploom": "Skiploom", + "jumpluff": "Jumpluff", + "aipom": "Aipom", + "sunkern": "Sunkern", + "sunflora": "Sunflora", + "yanma": "Yanma", + "wooper": "Wooper", + "quagsire": "Quagsire", + "espeon": "Espeon", + "umbreon": "Umbreon", + "murkrow": "Murkrow", + "slowking": "Slowking", + "misdreavus": "Misdreavus", + "unown": "Unown", + "wobbuffet": "Wobbuffet", + "girafarig": "Girafarig", + "pineco": "Pineco", + "forretress": "Forretress", + "dunsparce": "Dunsparce", + "gligar": "Gligar", + "steelix": "Steelix", + "snubbull": "Snubbull", + "granbull": "Granbull", + "qwilfish": "Qwilfish", + "scizor": "Scizor", + "shuckle": "Shuckle", + "heracross": "Heracross", + "sneasel": "Sneasel", + "teddiursa": "Teddiursa", + "ursaring": "Ursaring", + "slugma": "Slugma", + "magcargo": "Magcargo", + "swinub": "Swinub", + "piloswine": "Piloswine", + "corsola": "Corsola", + "remoraid": "Remoraid", + "octillery": "Octillery", + "delibird": "Delibird", + "mantine": "Mantine", + "skarmory": "Skarmory", + "houndour": "Houndour", + "houndoom": "Houndoom", + "kingdra": "Kingdra", + "phanpy": "Phanpy", + "donphan": "Donphan", + "porygon2": "Porygon2", + "stantler": "Stantler", + "smeargle": "Smeargle", + "tyrogue": "Tyrogue", + "hitmontop": "Hitmontop", + "smoochum": "Smoochum", + "elekid": "Elekid", + "magby": "Magby", + "miltank": "Miltank", + "blissey": "Blissey", + "raikou": "Raikou", + "entei": "Entei", + "suicune": "Suicune", + "larvitar": "Larvitar", + "pupitar": "Pupitar", + "tyranitar": "Tyranitar", + "lugia": "Lugia", + "ho_oh": "Ho-Oh", + "celebi": "Celebi", + "treecko": "Treecko", + "grovyle": "Grovyle", + "sceptile": "Sceptile", + "torchic": "Torchic", + "combusken": "Combusken", + "blaziken": "Blaziken", + "mudkip": "Mudkip", + "marshtomp": "Marshtomp", + "swampert": "Swampert", + "poochyena": "Poochyena", + "mightyena": "Mightyena", + "zigzagoon": "Zigzagoon", + "linoone": "Linoone", + "wurmple": "Wurmple", + "silcoon": "Silcoon", + "beautifly": "Beautifly", + "cascoon": "Cascoon", + "dustox": "Dustox", + "lotad": "Lotad", + "lombre": "Lombre", + "ludicolo": "Ludicolo", + "seedot": "Seedot", + "nuzleaf": "Nuzleaf", + "shiftry": "Shiftry", + "taillow": "Taillow", + "swellow": "Swellow", + "wingull": "Wingull", + "pelipper": "Pelipper", + "ralts": "Ralts", + "kirlia": "Kirlia", + "gardevoir": "Gardevoir", + "surskit": "Surskit", + "masquerain": "Masquerain", + "shroomish": "Shroomish", + "breloom": "Breloom", + "slakoth": "Slakoth", + "vigoroth": "Vigoroth", + "slaking": "Slaking", + "nincada": "Nincada", + "ninjask": "Ninjask", + "shedinja": "Shedinja", + "whismur": "Whismur", + "loudred": "Loudred", + "exploud": "Exploud", + "makuhita": "Makuhita", + "hariyama": "Hariyama", + "azurill": "Azurill", + "nosepass": "Nosepass", + "skitty": "Skitty", + "delcatty": "Delcatty", + "sableye": "Sableye", + "mawile": "Mawile", + "aron": "Aron", + "lairon": "Lairon", + "aggron": "Aggron", + "meditite": "Meditite", + "medicham": "Medicham", + "electrike": "Electrike", + "manectric": "Manectric", + "plusle": "Plusle", + "minun": "Minun", + "volbeat": "Volbeat", + "illumise": "Illumise", + "roselia": "Roselia", + "gulpin": "Gulpin", + "swalot": "Swalot", + "carvanha": "Carvanha", + "sharpedo": "Sharpedo", + "wailmer": "Wailmer", + "wailord": "Wailord", + "numel": "Numel", + "camerupt": "Camerupt", + "torkoal": "Torkoal", + "spoink": "Spoink", + "grumpig": "Grumpig", + "spinda": "Spinda", + "trapinch": "Trapinch", + "vibrava": "Vibrava", + "flygon": "Flygon", + "cacnea": "Cacnea", + "cacturne": "Cacturne", + "swablu": "Swablu", + "altaria": "Altaria", + "zangoose": "Zangoose", + "seviper": "Seviper", + "lunatone": "Lunatone", + "solrock": "Solrock", + "barboach": "Barboach", + "whiscash": "Whiscash", + "corphish": "Corphish", + "crawdaunt": "Crawdaunt", + "baltoy": "Baltoy", + "claydol": "Claydol", + "lileep": "Lileep", + "cradily": "Cradily", + "anorith": "Anorith", + "armaldo": "Armaldo", + "feebas": "Feebas", + "milotic": "Milotic", + "castform": "Castform", + "kecleon": "Kecleon", + "shuppet": "Shuppet", + "banette": "Banette", + "duskull": "Duskull", + "dusclops": "Dusclops", + "tropius": "Tropius", + "chimecho": "Chimecho", + "absol": "Absol", + "wynaut": "Wynaut", + "snorunt": "Snorunt", + "glalie": "Glalie", + "spheal": "Spheal", + "sealeo": "Sealeo", + "walrein": "Walrein", + "clamperl": "Clamperl", + "huntail": "Huntail", + "gorebyss": "Gorebyss", + "relicanth": "Relicanth", + "luvdisc": "Luvdisc", + "bagon": "Bagon", + "shelgon": "Shelgon", + "salamence": "Salamence", + "beldum": "Beldum", + "metang": "Metang", + "metagross": "Metagross", + "regirock": "Regirock", + "regice": "Regice", + "registeel": "Registeel", + "latias": "Latias", + "latios": "Latios", + "kyogre": "Kyogre", + "groudon": "Groudon", + "rayquaza": "Rayquaza", + "jirachi": "Jirachi", + "deoxys": "Deoxys", + "turtwig": "Turtwig", + "grotle": "Grotle", + "torterra": "Torterra", + "chimchar": "Chimchar", + "monferno": "Monferno", + "infernape": "Infernape", + "piplup": "Piplup", + "prinplup": "Prinplup", + "empoleon": "Empoleon", + "starly": "Starly", + "staravia": "Staravia", + "staraptor": "Staraptor", + "bidoof": "Bidoof", + "bibarel": "Bibarel", + "kricketot": "Kricketot", + "kricketune": "Kricketune", + "shinx": "Shinx", + "luxio": "Luxio", + "luxray": "Luxray", + "budew": "Budew", + "roserade": "Roserade", + "cranidos": "Cranidos", + "rampardos": "Rampardos", + "shieldon": "Shieldon", + "bastiodon": "Bastiodon", + "burmy": "Burmy", + "wormadam": "Wormadam", + "mothim": "Mothim", + "combee": "Combee", + "vespiquen": "Vespiquen", + "pachirisu": "Pachirisu", + "buizel": "Buizel", + "floatzel": "Floatzel", + "cherubi": "Cherubi", + "cherrim": "Cherrim", + "shellos": "Shellos", + "gastrodon": "Gastrodon", + "ambipom": "Ambipom", + "drifloon": "Drifloon", + "drifblim": "Drifblim", + "buneary": "Buneary", + "lopunny": "Lopunny", + "mismagius": "Mismagius", + "honchkrow": "Honchkrow", + "glameow": "Glameow", + "purugly": "Purugly", + "chingling": "Chingling", + "stunky": "Stunky", + "skuntank": "Skuntank", + "bronzor": "Bronzor", + "bronzong": "Bronzong", + "bonsly": "Bonsly", + "mime_jr": "Mime Jr.", + "happiny": "Happiny", + "chatot": "Chatot", + "spiritomb": "Spiritomb", + "gible": "Gible", + "gabite": "Gabite", + "garchomp": "Garchomp", + "munchlax": "Munchlax", + "riolu": "Riolu", + "lucario": "Lucario", + "hippopotas": "Hippopotas", + "hippowdon": "Hippowdon", + "skorupi": "Skorupi", + "drapion": "Drapion", + "croagunk": "Croagunk", + "toxicroak": "Toxicroak", + "carnivine": "Carnivine", + "finneon": "Finneon", + "lumineon": "Lumineon", + "mantyke": "Mantyke", + "snover": "Snover", + "abomasnow": "Abomasnow", + "weavile": "Weavile", + "magnezone": "Magnezone", + "lickilicky": "Lickilicky", + "rhyperior": "Rhyperior", + "tangrowth": "Tangrowth", + "electivire": "Electivire", + "magmortar": "Magmortar", + "togekiss": "Togekiss", + "yanmega": "Yanmega", + "leafeon": "Leafeon", + "glaceon": "Glaceon", + "gliscor": "Gliscor", + "mamoswine": "Mamoswine", + "porygon_z": "Porygon-Z", + "gallade": "Gallade", + "probopass": "Probopass", + "dusknoir": "Dusknoir", + "froslass": "Froslass", + "rotom": "Rotom", + "uxie": "Uxie", + "mesprit": "Mesprit", + "azelf": "Azelf", + "dialga": "Dialga", + "palkia": "Palkia", + "heatran": "Heatran", + "regigigas": "Regigigas", + "giratina": "Giratina", + "cresselia": "Cresselia", + "phione": "Phione", + "manaphy": "Manaphy", + "darkrai": "Darkrai", + "shaymin": "Shaymin", + "arceus": "Arceus", + "victini": "Victini", + "snivy": "Snivy", + "servine": "Servine", + "serperior": "Serperior", + "tepig": "Tepig", + "pignite": "Pignite", + "emboar": "Emboar", + "oshawott": "Oshawott", + "dewott": "Dewott", + "samurott": "Samurott", + "patrat": "Patrat", + "watchog": "Watchog", + "lillipup": "Lillipup", + "herdier": "Herdier", + "stoutland": "Stoutland", + "purrloin": "Purrloin", + "liepard": "Liepard", + "pansage": "Pansage", + "simisage": "Simisage", + "pansear": "Pansear", + "simisear": "Simisear", + "panpour": "Panpour", + "simipour": "Simipour", + "munna": "Munna", + "musharna": "Musharna", + "pidove": "Pidove", + "tranquill": "Tranquill", + "unfezant": "Unfezant", + "blitzle": "Blitzle", + "zebstrika": "Zebstrika", + "roggenrola": "Roggenrola", + "boldore": "Boldore", + "gigalith": "Gigalith", + "woobat": "Woobat", + "swoobat": "Swoobat", + "drilbur": "Drilbur", + "excadrill": "Excadrill", + "audino": "Audino", + "timburr": "Timburr", + "gurdurr": "Gurdurr", + "conkeldurr": "Conkeldurr", + "tympole": "Tympole", + "palpitoad": "Palpitoad", + "seismitoad": "Seismitoad", + "throh": "Throh", + "sawk": "Sawk", + "sewaddle": "Sewaddle", + "swadloon": "Swadloon", + "leavanny": "Leavanny", + "venipede": "Venipede", + "whirlipede": "Whirlipede", + "scolipede": "Scolipede", + "cottonee": "Cottonee", + "whimsicott": "Whimsicott", + "petilil": "Petilil", + "lilligant": "Lilligant", + "basculin": "Basculin", + "sandile": "Sandile", + "krokorok": "Krokorok", + "krookodile": "Krookodile", + "darumaka": "Darumaka", + "darmanitan": "Darmanitan", + "maractus": "Maractus", + "dwebble": "Dwebble", + "crustle": "Crustle", + "scraggy": "Scraggy", + "scrafty": "Scrafty", + "sigilyph": "Sigilyph", + "yamask": "Yamask", + "cofagrigus": "Cofagrigus", + "tirtouga": "Tirtouga", + "carracosta": "Carracosta", + "archen": "Archen", + "archeops": "Archeops", + "trubbish": "Trubbish", + "garbodor": "Garbodor", + "zorua": "Zorua", + "zoroark": "Zoroark", + "minccino": "Minccino", + "cinccino": "Cinccino", + "gothita": "Gothita", + "gothorita": "Gothorita", + "gothitelle": "Gothitelle", + "solosis": "Solosis", + "duosion": "Duosion", + "reuniclus": "Reuniclus", + "ducklett": "Ducklett", + "swanna": "Swanna", + "vanillite": "Vanillite", + "vanillish": "Vanillish", + "vanilluxe": "Vanilluxe", + "deerling": "Deerling", + "sawsbuck": "Sawsbuck", + "emolga": "Emolga", + "karrablast": "Karrablast", + "escavalier": "Escavalier", + "foongus": "Foongus", + "amoonguss": "Amoonguss", + "frillish": "Frillish", + "jellicent": "Jellicent", + "alomomola": "Alomomola", + "joltik": "Joltik", + "galvantula": "Galvantula", + "ferroseed": "Ferroseed", + "ferrothorn": "Ferrothorn", + "klink": "Klink", + "klang": "Klang", + "klinklang": "Klinklang", + "tynamo": "Tynamo", + "eelektrik": "Eelektrik", + "eelektross": "Eelektross", + "elgyem": "Elgyem", + "beheeyem": "Beheeyem", + "litwick": "Litwick", + "lampent": "Lampent", + "chandelure": "Chandelure", + "axew": "Axew", + "fraxure": "Fraxure", + "haxorus": "Haxorus", + "cubchoo": "Cubchoo", + "beartic": "Beartic", + "cryogonal": "Cryogonal", + "shelmet": "Shelmet", + "accelgor": "Accelgor", + "stunfisk": "Stunfisk", + "mienfoo": "Mienfoo", + "mienshao": "Mienshao", + "druddigon": "Druddigon", + "golett": "Golett", + "golurk": "Golurk", + "pawniard": "Pawniard", + "bisharp": "Bisharp", + "bouffalant": "Bouffalant", + "rufflet": "Rufflet", + "braviary": "Braviary", + "vullaby": "Vullaby", + "mandibuzz": "Mandibuzz", + "heatmor": "Heatmor", + "durant": "Durant", + "deino": "Deino", + "zweilous": "Zweilous", + "hydreigon": "Hydreigon", + "larvesta": "Larvesta", + "volcarona": "Volcarona", + "cobalion": "Cobalion", + "terrakion": "Terrakion", + "virizion": "Virizion", + "tornadus": "Tornadus", + "thundurus": "Thundurus", + "reshiram": "Reshiram", + "zekrom": "Zekrom", + "landorus": "Landorus", + "kyurem": "Kyurem", + "keldeo": "Keldeo", + "meloetta": "Meloetta", + "genesect": "Genesect", + "chespin": "Chespin", + "quilladin": "Quilladin", + "chesnaught": "Chesnaught", + "fennekin": "Fennekin", + "braixen": "Braixen", + "delphox": "Delphox", + "froakie": "Froakie", + "frogadier": "Frogadier", + "greninja": "Greninja", + "bunnelby": "Bunnelby", + "diggersby": "Diggersby", + "fletchling": "Fletchling", + "fletchinder": "Fletchinder", + "talonflame": "Talonflame", + "scatterbug": "Scatterbug", + "spewpa": "Spewpa", + "vivillon": "Vivillon", + "litleo": "Litleo", + "pyroar": "Pyroar", + "flabebe": "Flabébé", + "floette": "Floette", + "florges": "Florges", + "skiddo": "Skiddo", + "gogoat": "Gogoat", + "pancham": "Pancham", + "pangoro": "Pangoro", + "furfrou": "Furfrou", + "espurr": "Espurr", + "meowstic": "Meowstic", + "honedge": "Honedge", + "doublade": "Doublade", + "aegislash": "Aegislash", + "spritzee": "Spritzee", + "aromatisse": "Aromatisse", + "swirlix": "Swirlix", + "slurpuff": "Slurpuff", + "inkay": "Inkay", + "malamar": "Malamar", + "binacle": "Binacle", + "barbaracle": "Barbaracle", + "skrelp": "Skrelp", + "dragalge": "Dragalge", + "clauncher": "Clauncher", + "clawitzer": "Clawitzer", + "helioptile": "Helioptile", + "heliolisk": "Heliolisk", + "tyrunt": "Tyrunt", + "tyrantrum": "Tyrantrum", + "amaura": "Amaura", + "aurorus": "Aurorus", + "sylveon": "Sylveon", + "hawlucha": "Hawlucha", + "dedenne": "Dedenne", + "carbink": "Carbink", + "goomy": "Goomy", + "sliggoo": "Sliggoo", + "goodra": "Goodra", + "klefki": "Klefki", + "phantump": "Phantump", + "trevenant": "Trevenant", + "pumpkaboo": "Pumpkaboo", + "gourgeist": "Gourgeist", + "bergmite": "Bergmite", + "avalugg": "Avalugg", + "noibat": "Noibat", + "noivern": "Noivern", + "xerneas": "Xerneas", + "yveltal": "Yveltal", + "zygarde": "Zygarde", + "diancie": "Diancie", + "hoopa": "Hoopa", + "volcanion": "Volcanion", + "rowlet": "Rowlet", + "dartrix": "Dartrix", + "decidueye": "Decidueye", + "litten": "Litten", + "torracat": "Torracat", + "incineroar": "Incineroar", + "popplio": "Popplio", + "brionne": "Brionne", + "primarina": "Primarina", + "pikipek": "Pikipek", + "trumbeak": "Trumbeak", + "toucannon": "Toucannon", + "yungoos": "Yungoos", + "gumshoos": "Gumshoos", + "grubbin": "Grubbin", + "charjabug": "Charjabug", + "vikavolt": "Vikavolt", + "crabrawler": "Crabrawler", + "crabominable": "Crabominable", + "oricorio": "Oricorio", + "cutiefly": "Cutiefly", + "ribombee": "Ribombee", + "rockruff": "Rockruff", + "lycanroc": "Lycanroc", + "wishiwashi": "Wishiwashi", + "mareanie": "Mareanie", + "toxapex": "Toxapex", + "mudbray": "Mudbray", + "mudsdale": "Mudsdale", + "dewpider": "Dewpider", + "araquanid": "Araquanid", + "fomantis": "Fomantis", + "lurantis": "Lurantis", + "morelull": "Morelull", + "shiinotic": "Shiinotic", + "salandit": "Salandit", + "salazzle": "Salazzle", + "stufful": "Stufful", + "bewear": "Bewear", + "bounsweet": "Bounsweet", + "steenee": "Steenee", + "tsareena": "Tsareena", + "comfey": "Comfey", + "oranguru": "Oranguru", + "passimian": "Passimian", + "wimpod": "Wimpod", + "golisopod": "Golisopod", + "sandygast": "Sandygast", + "palossand": "Palossand", + "pyukumuku": "Pyukumuku", + "type_null": "Tipo Nulo", + "silvally": "Silvally", + "minior": "Minior", + "komala": "Komala", + "turtonator": "Turtonator", + "togedemaru": "Togedemaru", + "mimikyu": "Mimikyu", + "bruxish": "Bruxish", + "drampa": "Drampa", + "dhelmise": "Dhelmise", + "jangmo_o": "Jangmo-o", + "hakamo_o": "Hakamo-o", + "kommo_o": "Kommo-o", + "tapu_koko": "Tapu Koko", + "tapu_lele": "Tapu Lele", + "tapu_bulu": "Tapu Bulu", + "tapu_fini": "Tapu Fini", + "cosmog": "Cosmog", + "cosmoem": "Cosmoem", + "solgaleo": "Solgaleo", + "lunala": "Lunala", + "nihilego": "Nihilego", + "buzzwole": "Buzzwole", + "pheromosa": "Pheromosa", + "xurkitree": "Xurkitree", + "celesteela": "Celesteela", + "kartana": "Kartana", + "guzzlord": "Guzzlord", + "necrozma": "Necrozma", + "magearna": "Magearna", + "marshadow": "Marshadow", + "poipole": "Poipole", + "naganadel": "Naganadel", + "stakataka": "Stakataka", + "blacephalon": "Blacephalon", + "zeraora": "Zeraora", + "meltan": "Meltan", + "melmetal": "Melmetal", + "grookey": "Grookey", + "thwackey": "Thwackey", + "rillaboom": "Rillaboom", + "scorbunny": "Scorbunny", + "raboot": "Raboot", + "cinderace": "Cinderace", + "sobble": "Sobble", + "drizzile": "Drizzile", + "inteleon": "Inteleon", + "skwovet": "Skwovet", + "greedent": "Greedent", + "rookidee": "Rookidee", + "corvisquire": "Corvisquire", + "corviknight": "Corviknight", + "blipbug": "Blipbug", + "dottler": "Dottler", + "orbeetle": "Orbeetle", + "nickit": "Nickit", + "thievul": "Thievul", + "gossifleur": "Gossifleur", + "eldegoss": "Eldegoss", + "wooloo": "Wooloo", + "dubwool": "Dubwool", + "chewtle": "Chewtle", + "drednaw": "Drednaw", + "yamper": "Yamper", + "boltund": "Boltund", + "rolycoly": "Rolycoly", + "carkol": "Carkol", + "coalossal": "Coalossal", + "applin": "Applin", + "flapple": "Flapple", + "appletun": "Appletun", + "silicobra": "Silicobra", + "sandaconda": "Sandaconda", + "cramorant": "Cramorant", + "arrokuda": "Arrokuda", + "barraskewda": "Barraskewda", + "toxel": "Toxel", + "toxtricity": "Toxtricity", + "sizzlipede": "Sizzlipede", + "centiskorch": "Centiskorch", + "clobbopus": "Clobbopus", + "grapploct": "Grapploct", + "sinistea": "Sinistea", + "polteageist": "Polteageist", + "hatenna": "Hatenna", + "hattrem": "Hattrem", + "hatterene": "Hatterene", + "impidimp": "Impidimp", + "morgrem": "Morgrem", + "grimmsnarl": "Grimmsnarl", + "obstagoon": "Obstagoon", + "perrserker": "Perrserker", + "cursola": "Cursola", + "sirfetchd": "Sirfetch'd", + "mr_rime": "Mr. Rime", + "runerigus": "Runerigus", + "milcery": "Milcery", + "alcremie": "Alcremie", + "falinks": "Falinks", + "pincurchin": "Pincurchin", + "snom": "Snom", + "frosmoth": "Frosmoth", + "stonjourner": "Stonjourner", + "eiscue": "Eiscue", + "indeedee": "Indeedee", + "morpeko": "Morpeko", + "cufant": "Cufant", + "copperajah": "Copperajah", + "dracozolt": "Dracozolt", + "arctozolt": "Arctozolt", + "dracovish": "Dracovish", + "arctovish": "Arctovish", + "duraludon": "Duraludon", + "dreepy": "Dreepy", + "drakloak": "Drakloak", + "dragapult": "Dragapult", + "zacian": "Zacian", + "zamazenta": "Zamazenta", + "eternatus": "Eternatus", + "kubfu": "Kubfu", + "urshifu": "Urshifu", + "zarude": "Zarude", + "regieleki": "Regieleki", + "regidrago": "Regidrago", + "glastrier": "Glastrier", + "spectrier": "Spectrier", + "calyrex": "Calyrex", + "wyrdeer": "Wyrdeer", + "kleavor": "Kleavor", + "ursaluna": "Ursaluna", + "basculegion": "Basculegion", + "sneasler": "Sneasler", + "overqwil": "Overqwil", + "enamorus": "Enamorus", + "sprigatito": "Sprigatito", + "floragato": "Floragato", + "meowscarada": "Meowscarada", + "fuecoco": "Fuecoco", + "crocalor": "Crocalor", + "skeledirge": "Skeledirge", + "quaxly": "Quaxly", + "quaxwell": "Quaxwell", + "quaquaval": "Quaquaval", + "lechonk": "Lechonk", + "oinkologne": "Oinkologne", + "tarountula": "Tarountula", + "spidops": "Spidops", + "nymble": "Nymble", + "lokix": "Lokix", + "pawmi": "Pawmi", + "pawmo": "Pawmo", + "pawmot": "Pawmot", + "tandemaus": "Tandemaus", + "maushold": "Maushold", + "fidough": "Fidough", + "dachsbun": "Dachsbun", + "smoliv": "Smoliv", + "dolliv": "Dolliv", + "arboliva": "Arboliva", + "squawkabilly": "Squawkabilly", + "nacli": "Nacli", + "naclstack": "Naclstack", + "garganacl": "Garganacl", + "charcadet": "Charcadet", + "armarouge": "Armarouge", + "ceruledge": "Ceruledge", + "tadbulb": "Tadbulb", + "bellibolt": "Bellibolt", + "wattrel": "Wattrel", + "kilowattrel": "Kilowattrel", + "maschiff": "Maschiff", + "mabosstiff": "Mabosstiff", + "shroodle": "Shroodle", + "grafaiai": "Grafaiai", + "bramblin": "Bramblin", + "brambleghast": "Brambleghast", + "toedscool": "Toedscool", + "toedscruel": "Toedscruel", + "klawf": "Klawf", + "capsakid": "Capsakid", + "scovillain": "Scovillain", + "rellor": "Rellor", + "rabsca": "Rabsca", + "flittle": "Flittle", + "espathra": "Espathra", + "tinkatink": "Tinkatink", + "tinkatuff": "Tinkatuff", + "tinkaton": "Tinkaton", + "wiglett": "Wiglett", + "wugtrio": "Wugtrio", + "bombirdier": "Bombirdier", + "finizen": "Finizen", + "palafin": "Palafin", + "varoom": "Varoom", + "revavroom": "Revavroom", + "cyclizar": "Cyclizar", + "orthworm": "Orthworm", + "glimmet": "Glimmet", + "glimmora": "Glimmora", + "greavard": "Greavard", + "houndstone": "Houndstone", + "flamigo": "Flamigo", + "cetoddle": "Cetoddle", + "cetitan": "Cetitan", + "veluza": "Veluza", + "dondozo": "Dondozo", + "tatsugiri": "Tatsugiri", + "annihilape": "Annihilape", + "clodsire": "Clodsire", + "farigiraf": "Farigiraf", + "dudunsparce": "Dudunsparce", + "kingambit": "Kingambit", + "great_tusk": "Presa Grande", + "scream_tail": "Cauda Brado", + "brute_bonnet": "Capuz Bruto", + "flutter_mane": "Juba Sopro", + "slither_wing": "Asa Rasteira", + "sandy_shocks": "Choque Areia", + "iron_treads": "Trilho Férreo", + "iron_bundle": "Pacote Férreo", + "iron_hands": "Mãos Férreas", + "iron_jugulis": "Jugulares Férreas", + "iron_moth": "Mariposa Férrea", + "iron_thorns": "Espinhos Férreos", + "frigibax": "Frigibax", + "arctibax": "Arctibax", + "baxcalibur": "Baxcalibur", + "gimmighoul": "Gimmighoul", + "gholdengo": "Gholdengo", + "wo_chien": "Wo-Chien", + "chien_pao": "Chien-Pao", + "ting_lu": "Ting-Lu", + "chi_yu": "Chi-Yu", + "roaring_moon": "Lua Estrondo", + "iron_valiant": "Valentia Férrea", + "koraidon": "Koraidon", + "miraidon": "Miraidon", + "walking_wake": "Onda Ando", + "iron_leaves": "Folhas Férreas", + "dipplin": "Dipplin", + "poltchageist": "Poltchageist", + "sinistcha": "Sinistcha", + "okidogi": "Okidogi", + "munkidori": "Munkidori", + "fezandipiti": "Fezandipiti", + "ogerpon": "Ogerpon", + "archaludon": "Archaludon", + "hydrapple": "Hydrapple", + "gouging_fire": "Fogo Corrosão", + "raging_bolt": "Raio Fúria", + "iron_boulder": "Rocha Férrea", + "iron_crown": "Chifres Férreos", + "terapagos": "Terapagos", + "pecharunt": "Pecharunt", + "alola_rattata": "Rattata", + "alola_raticate": "Raticate", + "alola_raichu": "Raichu", + "alola_sandshrew": "Sandshrew", + "alola_sandslash": "Sandslash", + "alola_vulpix": "Vulpix", + "alola_ninetales": "Ninetales", + "alola_diglett": "Diglett", + "alola_dugtrio": "Dugtrio", + "alola_meowth": "Meowth", + "alola_persian": "Persian", + "alola_geodude": "Geodude", + "alola_graveler": "Graveler", + "alola_golem": "Golem", + "alola_grimer": "Grimer", + "alola_muk": "Muk", + "alola_exeggutor": "Exeggutor", + "alola_marowak": "Marowak", + "eternal_floette": "Floette", + "galar_meowth": "Meowth", + "galar_ponyta": "Ponyta", + "galar_rapidash": "Rapidash", + "galar_slowpoke": "Slowpoke", + "galar_slowbro": "Slowbro", + "galar_farfetchd": "Farfetch'd", + "galar_weezing": "Weezing", + "galar_mr_mime": "Mr. Mime", + "galar_articuno": "Articuno", + "galar_zapdos": "Zapdos", + "galar_moltres": "Moltres", + "galar_slowking": "Slowking", + "galar_corsola": "Corsola", + "galar_zigzagoon": "Zigzagoon", + "galar_linoone": "Linoone", + "galar_darumaka": "Darumaka", + "galar_darmanitan": "Darmanitan", + "galar_yamask": "Yamask", + "galar_stunfisk": "Stunfisk", + "hisui_growlithe": "Growlithe", + "hisui_arcanine": "Arcanine", + "hisui_voltorb": "Voltorb", + "hisui_electrode": "Electrode", + "hisui_typhlosion": "Typhlosion", + "hisui_qwilfish": "Qwilfish", + "hisui_sneasel": "Sneasel", + "hisui_samurott": "Samurott", + "hisui_lilligant": "Lilligant", + "hisui_zorua": "Zorua", + "hisui_zoroark": "Zoroark", + "hisui_braviary": "Braviary", + "hisui_sliggoo": "Sliggoo", + "hisui_goodra": "Goodra", + "hisui_avalugg": "Avalugg", + "hisui_decidueye": "Decidueye", + "paldea_tauros": "Tauros", + "paldea_wooper": "Wooper", + "bloodmoon_ursaluna": "Ursaluna" +} \ No newline at end of file diff --git a/src/locales/pt_BR/run-history-ui-handler.json b/src/locales/pt_BR/run-history.json similarity index 100% rename from src/locales/pt_BR/run-history-ui-handler.json rename to src/locales/pt_BR/run-history.json diff --git a/src/locales/pt_BR/settings.json b/src/locales/pt_BR/settings.json index d1b4bd33c76..58ccb45f86d 100644 --- a/src/locales/pt_BR/settings.json +++ b/src/locales/pt_BR/settings.json @@ -60,8 +60,10 @@ "playerGender": "Gênero do Jogador", "typeHints": "Dicas de Tipo", "masterVolume": "Volume Mestre", - "bgmVolume": "Volume de BGM", - "seVolume": "Volume de SE", + "bgmVolume": "Músicas", + "fieldVolume": "Ambiente", + "seVolume": "Ef. Sonoros", + "uiVolume": "Interface", "musicPreference": "Preferência de Música", "mixed": "Misto", "gamepadPleasePlug": "Conecte um controle ou pressione um botão", @@ -95,11 +97,11 @@ "controller": "Controle", "gamepadSupport": "Suporte para Controle", "showBgmBar": "Exibir Nomes das Músicas", - "moveTouchControls": "Move Touch Controls", + "moveTouchControls": "Mover Controles de Toque", "shopOverlayOpacity": "Opacidade da Loja", "shopCursorTarget": "Alvo do Cursor da Loja", "items": "Itens", "reroll": "Atualizar", "shop": "Loja", "checkTeam": "Checar Time" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/trainer-classes.json b/src/locales/pt_BR/trainer-classes.json index 72742dccf82..482265d00c6 100644 --- a/src/locales/pt_BR/trainer-classes.json +++ b/src/locales/pt_BR/trainer-classes.json @@ -4,10 +4,10 @@ "ace_duo": "Dupla Ás", "artist": "Artista", "artist_female": "Artista", - "backpackers": "Mochileiros", "backers": "Torcedores", "backpacker": "Mochileiro", "backpacker_female": "Mochileira", + "backpackers": "Mochileiros", "baker": "Padeira", "battle_girl": "Lutadora", "beauty": "Modelo", @@ -30,8 +30,8 @@ "doctor": "Doutor", "doctor_female": "Doutora", "firebreather": "Cospe-Fogo", - "fishermen": "Pescador", - "fishermen_female": "Pescadora", + "fisherman": "Pescador", + "fisherman_female": "Pescadora", "gentleman": "Cavalheiro", "guitarist": "Guitarrista", "guitarist_female": "Guitarrista", @@ -101,8 +101,8 @@ "workers": "Operários", "youngster": "Jovem", "rocket_grunt": "Capanga da Equipe Rocket", - "rocket_grunt_female": "Capanga da Equipe Rocket", "rocket_grunts": "Capangas da Equipe Rocket", + "rocket_grunt_female": "Capanga da Equipe Rocket", "magma_grunt": "Capanga da Equipe Magma", "magma_grunt_female": "Capanga da Equipe Magma", "magma_grunts": "Capangas da Equipe Magma", @@ -117,5 +117,15 @@ "plasma_grunts": "Capangas da Equipe Plasma", "flare_grunt": "Capanga da Equipe Flare", "flare_grunt_female": "Capanga da Equipe Flare", - "flare_grunts": "Capangas da Equipe Flare" -} \ No newline at end of file + "flare_grunts": "Capangas da Equipe Flare", + "aether_grunt": "Funcionário da Fundação Aether", + "aether_grunt_female": "Funcionária da Fundação Aether", + "aether_grunts": "Funcionários da Fundação Aether", + "skull_grunt": "Capanga da Equipe Skull", + "skull_grunt_female": "Capanga da Equipe Skull", + "skull_grunts": "Capangas da Equipe Skull", + "macro_grunt": "Treinador da Macro Cosmos", + "macro_grunt_female": "Treinadora da Macro Cosmos", + "macro_grunts": "Treinadores da Macro Cosmos" + +} diff --git a/src/locales/pt_BR/trainer-names.json b/src/locales/pt_BR/trainer-names.json index fc4e48de040..5500e2ddb46 100644 --- a/src/locales/pt_BR/trainer-names.json +++ b/src/locales/pt_BR/trainer-names.json @@ -138,11 +138,17 @@ "rood": "Rood", "xerosic": "Xerosic", "bryony": "Bryony", + "faba": "Faba", + "plumeria": "Plumeria", + "oleana": "Oleana", "maxie": "Maxie", "archie": "Archie", "cyrus": "Cyrus", "ghetsis": "Ghetsis", "lysandre": "Lysandre", + "lusamine": "Lusamine", + "guzma": "Guzma", + "rose": "Rose", "blue_red_double": "Blue & Red", "red_blue_double": "Red & Blue", "tate_liza_double": "Tate & Liza", @@ -153,4 +159,4 @@ "iris_alder_double": "Iris & Alder", "marnie_piers_double": "Marnie & Piers", "piers_marnie_double": "Piers & Marnie" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/trainer-titles.json b/src/locales/pt_BR/trainer-titles.json index b38de9439c9..701c2e143fa 100644 --- a/src/locales/pt_BR/trainer-titles.json +++ b/src/locales/pt_BR/trainer-titles.json @@ -16,6 +16,10 @@ "galactic_boss": "Chefe da Equipe Galáctica", "plasma_boss": "Chefe da Equipe Plasma", "flare_boss": "Chefe da Equipe Flare", + "aether_boss": "Presidente Aether", + "skull_boss": "Chefe da Equipe Skull", + "macro_boss": "Presidente da Macro Cosmos", + "rocket_admin": "Admin da Equipe Rocket", "rocket_admin_female": "Admin da Equipe Rocket", "magma_admin": "Admin da Equipe Magma", @@ -27,5 +31,8 @@ "plasma_sage": "Sábio da Equipe Plasma", "plasma_admin": "Admin da Equipe Plasma", "flare_admin": "Admin da Equipe Flare", - "flare_admin_female": "Admin da Equipe Flare" -} \ No newline at end of file + "flare_admin_female": "Admin da Equipe Flare", + "aether_admin": "Admin da Fundação Aether", + "skull_admin": "Admin da Equipe Skull", + "macro_admin": "Macro Cosmos" +} diff --git a/src/locales/pt_BR/tutorial.json b/src/locales/pt_BR/tutorial.json index 7184f8538f1..e347ca6fbee 100644 --- a/src/locales/pt_BR/tutorial.json +++ b/src/locales/pt_BR/tutorial.json @@ -5,6 +5,6 @@ "starterSelect": "Aqui você pode escolher seus iniciais apertando a tecla Z ou\na Barra de Espaço.\n$Esses serão os primeiro Pokémon da sua equipe.\n$Cada inicial tem seu custo. Sua equipe pode ter até 6\nmembros, desde que a soma dos custos não ultrapasse 10. \n$Você pode escolher o gênero, a habilidade\ne até a forma do seu inicial.\n$Essas opções dependem das variantes dessa\nespécie que você já capturou ou chocou. \n$Os IVs de cada inicial são os melhores de todos os Pokémon\ndaquela espécie que você já capturou ou chocou.\n$Sempre capture vários Pokémon de várias espécies!", "pokerus": "Todo dia, 3 Pokémon iniciais ficam com uma borda roxa.\n$Caso veja um inicial que você possui com uma dessa, tente\nadicioná-lo a sua equipe. Lembre-se de olhar seu sumário!", "statChange": "As mudanças de atributos se mantém após a batalha desde que o Pokémon não seja trocado.\n$Seus Pokémon voltam a suas Poké Bolas antes de batalhas contra treinadores e de entrar em um novo bioma.\n$Para ver as mudanças de atributos dos Pokémon em campo, mantena C ou Shift pressionado durante a batalha.", - "selectItem": "Após cada batalha, você pode escolher entre 3 itens aleatórios.\n$Você pode escolher apenas um deles.\n$Esses itens variam entre consumíveis, itens de segurar e itens passivos permanentes.\n$A maioria dos efeitos de itens não consumíveis podem ser acumulados.\n$Alguns itens só aparecerão se puderem ser usados, como os itens de evolução.\n$Você também pode transferir itens de segurar entre os Pokémon utilizando a opção \"Transfer\".\n$A opção de transferir irá aparecer no canto inferior direito assim que você obter um item de segurar.\n$Você pode comprar itens consumíveis com dinheiro, e sua variedade aumentará conforme você for mais longe.\n$Certifique-se de comprá-los antes de escolher seu item aleatório. Ao escolhê-lo, a próxima batalha começará.", + "selectItem": "Após cada batalha, você pode escolher entre 3 itens aleatórios.\n$Você pode escolher apenas um deles.\n$Esses itens variam entre consumíveis, itens de segurar e itens passivos permanentes.\n$A maioria dos efeitos de itens não consumíveis podem ser acumulados.\n$Alguns itens só aparecerão se puderem ser usados, como os itens de evolução.\n$Você também pode transferir itens de segurar entre os Pokémon utilizando a opção \"Alterar\".\n$A opção de transferir irá aparecer no canto inferior direito assim que você obter um item de segurar.\n$Você pode comprar itens consumíveis com dinheiro, e sua variedade aumentará conforme você for mais longe.\n$Certifique-se de comprá-los antes de escolher seu item aleatório. Ao escolhê-lo, a próxima batalha começará.", "eggGacha": "Aqui você pode trocar seus vouchers\npor ovos de Pokémon.\n$Ovos ficam mais próximos de chocar após cada batalha.\nOvos mais raros demoram mais para chocar.\n$Pokémon chocados não serão adicionados a sua equipe,\nmas sim aos seus iniciais.\n$Pokémon chocados geralmente possuem IVs melhores\nque Pokémon selvagens.\n$Alguns Pokémon só podem ser obtidos através de seus ovos.\n$Temos 3 máquinas, cada uma com seu bônus específico,\nentão escolha a que mais lhe convém!" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/battle.json b/src/locales/zh_CN/battle.json index f16b6fac77c..84f468a4a4b 100644 --- a/src/locales/zh_CN/battle.json +++ b/src/locales/zh_CN/battle.json @@ -38,7 +38,7 @@ "learnMoveNotLearned": "{{pokemonName}}没有学会{{moveName}}。", "learnMoveForgetQuestion": "要忘记哪个技能?", "learnMoveForgetSuccess": "{{pokemonName}}忘记了\n如何使用{{moveName}}。", - "countdownPoof": "@d{32}1, @d{15}2 @d{15}… @d{15}… @d{15}@s{pb_bounce_1}空!", + "countdownPoof": "@d{32}1, @d{15}2 @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}空!", "learnMoveAnd": "然后……", "levelCapUp": "等级上限提升到{{levelCap}}!", "moveNotImplemented": "{{moveName}}尚未实装,无法选择。", diff --git a/src/locales/zh_CN/bgm-name.json b/src/locales/zh_CN/bgm-name.json index 34ce16db00f..d0508a49661 100644 --- a/src/locales/zh_CN/bgm-name.json +++ b/src/locales/zh_CN/bgm-name.json @@ -78,11 +78,21 @@ "battle_galactic_grunt": "晶灿钻石·明亮珍珠「战斗!银河队」", "battle_plasma_grunt": "黑白「战斗!等离子团」", "battle_flare_grunt": "XY「战斗!闪焰队」", + "battle_aether_grunt": "日月「战斗!以太基金会」", + "battle_skull_grunt": "日月「战斗!骷髅队」", + "battle_macro_grunt": "剑盾「战斗!马洛科蒙集团」", + "battle_galactic_admin": "晶灿钻石·明亮珍珠「战斗!银河队干部」", + "battle_skull_admin": "日月「战斗!骷髅队干部」", + "battle_oleana": "剑盾「战斗!奥利薇」", "battle_rocket_boss": "究极日月「战斗!坂木」", "battle_aqua_magma_boss": "Ω红宝石α蓝宝石「战斗!水梧桐・赤焰松」", "battle_galactic_boss": "晶灿钻石·明亮珍珠「战斗!赤日」", "battle_plasma_boss": "黑2白2「战斗!魁奇思」", "battle_flare_boss": "XY「战斗!弗拉达利」", + "battle_aether_boss": "日月「战斗!露莎米奈」", + "battle_skull_boss": "日月「战斗!古兹马」", + "battle_macro_boss": "剑盾「战斗!洛兹」", + "abyss": "空之探险队「黑暗小丘」", "badlands": "空之探险队「枯竭之谷」", "beach": "空之探险队「潮湿岩地」", @@ -135,4 +145,4 @@ "heal": "黑白「宝可梦回复」", "menu": "空之探险队「欢迎来到宝可梦的世界」", "title": "空之探险队「主题曲」" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 63e3f46f7b3..7c29262ac1a 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const zhCnConfig = { ability, diff --git a/src/locales/zh_CN/dialogue-female.json b/src/locales/zh_CN/dialogue-female.json index 09090f36d94..5a4615fac54 100644 --- a/src/locales/zh_CN/dialogue-female.json +++ b/src/locales/zh_CN/dialogue-female.json @@ -655,6 +655,86 @@ "5": "你虽然打败了我,但是我输的也这么潇洒!" } }, + "aether_grunt": { + "encounter": { + "1": "我会用尽全力消灭你!", + "2": "我才不管你是不是小孩!\n只要和我们作对,我就把你打飞!", + "3": "上头要我拦下所有训练师,无论是谁!", + "4": "给你展现一下以太乐园的力量!", + "5": "既然你已经触达到了以太基金会的黑暗,\n那我要请你就此消失了。" + }, + "victory": { + "1": "哼!看来你有点实力。", + "2": "这什么情况!什么情况!", + "3": "啊!你怎么这么强!我这下可没法阻止你!", + "4": "嗯……看来我输了……", + "5": "我惊掉大牙了……" + } + }, + "faba": { + "encounter": { + "1": "我,分部长扎奥博, \n给你见识下现实世界的残酷吧!", + "2": "堂堂以太乐园的最后防线,\n我扎奥博竟然要跟个毛头小子对战。", + "3": "我,扎奥博,以太基金会分部长。\n世上唯一,无可替代!" + }, + "victory": { + "1": "哎咿呀!", + "2": "怎……怎么可能!这孩子!", + "3": "这就是……这就是为啥我讨厌小孩子!" + } + }, + "skull_grunt": { + "encounter": { + "1": "我们并不坏,YO,我们是硬汉!", + "2": "YO!咋样!我们就这样打招呼!\n混个脸熟呗,崽子!", + "3": "咱们就是一帮对别人的宝可梦\n比较感兴趣的哥们和姐们!", + "4": "别装B了,你有我们拽吗,老弟?", + "5": "骷髅队在此!没钱住房子!\n天天找乐子!青春混到死!" + }, + "victory": { + "1": "哈?这就完了?", + "2": "该逃跑了YO!闪一边去YO!", + "3": "你这种弱鸡宝可梦反正我们也不要!", + "4": "啥!? 这小屁孩也太牛B了!", + "5": "MAN!我能说什么,\n我的人生比宝可梦还烂。" + } + }, + "plumeria": { + "encounter": { + "1": " …哼嗯,你看起来也没啥特别的。", + "2": "这帮呆子对付你也花了太长时间了吧……", + "3": "要是惹了骷髅队的人!我就不和你开玩笑了!" + }, + "victory": { + "1": "哼嗯!你很强,我承认。", + "2": "哼,你是挺强的。现在我知道\n为啥那帮手下要花那么久对付一个小孩了。", + "3": "哼嗯!看来我得承认我输了。" + } + }, + "macro_grunt": { + "encounter": { + "1": "你的对战生涯到此为止了。", + "2": "你是一名训练师吧\n你没有干涉我们工作的权力!", + "3": "我是马洛科蒙集团的,要买马洛科蒙人寿保险吗。" + }, + "victory": { + "1": "除了礼貌地撤退我似乎别无选择…", + "2": "没法留住我的零花钱了,我又要财政赤字了…", + "3": "没人能比马洛科蒙集团的我们工作更卷!" + } + }, + "oleana": { + "encounter": { + "1": "我不会让你方案洛兹先生的计划!", + "2": "看来你打倒了所有我安排的训练师,本身也没对他们有啥期待…", + "3": "为了总裁!我不会输的!" + }, + "victory": { + "1": "*叹气*我赢不了。\n奥利薇,你真是个没用的女人", + "2": "呃啊!不可饶恕...我在想什么。\n走到这里的训练师果然不会轻易屈服!", + "3": "*叹气*奥利薇累累了……" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "我不得不说,能来到这里,你的确很不简单!" @@ -787,6 +867,72 @@ "1": "没有远见的蠢货会继续玷污这个美丽的世界。" } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "你吓到我可爱的异兽了!我要让你先闭嘴!" + }, + "victory": { + "1": "你…你怎么这么不听话!" + }, + "defeat": { + "1": "哼嗯…" + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "为什么你要一直妨碍我!\n我受够你了,完完全全受够了! \n$不用说废话了…有了虚吾伊德的力量。\n我会让你明白,你来这里是有多么错误!" + }, + "victory": { + "1": "呃呃啊啊啊啊呜呜呜啊啊!" + }, + "defeat": { + "1": "我只要和我可爱的异兽在一起就好了!你们怎么样都无所谓了!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "摧毁,摧毁,\n不管摧毁几次也从不手软\n$惹人厌的古兹马大爷在此。" + }, + "victory": { + "1": "切,我一定要找时间干掉你!" + }, + "defeat": { + "1": "大老远跑来就这,昂?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "不管谁与我作对,我都会干掉他们!\n$这就是大坏蛋古兹马的全部!" + }, + "victory": { + "1": "古兹马!!你在干什么啊!!!" + }, + "defeat": { + "1": "你们真够蠢的!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "我必须为所有人提供无限的能源,实现繁荣。$这是我的目的,我的责任,我的使命!" + }, + "victory": { + "1": "你还是没有明白,训练师\n$我们…不,我要推动历史的进程啊!" + }, + "defeat": { + "1": "你完全不理解!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "我致力于解决伽勒尔的能源问题\n——当然也是全世界的能源问题。\n$我的经验与成果,造就了马洛科蒙集团,证明了我的正确与成功!\n$就算输了,我也不会改变主意的……" + }, + "victory": { + "1": "我都忘记宝可梦对战的魅力了!我太久没有着手对战了…\n$这的确让人很满足,我接受我的失败!" + }, + "defeat": { + "1": "我承认我做的事情非常渗人,我也不指望你能理解。\n$但我必须为伽勒尔地区提供无限的能源,确保永久的繁荣。" + } + }, "brock": { "encounter": { "1": "我对岩石属性宝可梦的专精会击败你!来吧!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}我……\n我想我完成了我的使命……$@c{smile_eclosed}答应我……在你拯救世界之后\n……要……平安到家。$@c{smile_ehalf}……谢谢你。" } } -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/dialogue-male.json b/src/locales/zh_CN/dialogue-male.json index 09090f36d94..5a4615fac54 100644 --- a/src/locales/zh_CN/dialogue-male.json +++ b/src/locales/zh_CN/dialogue-male.json @@ -655,6 +655,86 @@ "5": "你虽然打败了我,但是我输的也这么潇洒!" } }, + "aether_grunt": { + "encounter": { + "1": "我会用尽全力消灭你!", + "2": "我才不管你是不是小孩!\n只要和我们作对,我就把你打飞!", + "3": "上头要我拦下所有训练师,无论是谁!", + "4": "给你展现一下以太乐园的力量!", + "5": "既然你已经触达到了以太基金会的黑暗,\n那我要请你就此消失了。" + }, + "victory": { + "1": "哼!看来你有点实力。", + "2": "这什么情况!什么情况!", + "3": "啊!你怎么这么强!我这下可没法阻止你!", + "4": "嗯……看来我输了……", + "5": "我惊掉大牙了……" + } + }, + "faba": { + "encounter": { + "1": "我,分部长扎奥博, \n给你见识下现实世界的残酷吧!", + "2": "堂堂以太乐园的最后防线,\n我扎奥博竟然要跟个毛头小子对战。", + "3": "我,扎奥博,以太基金会分部长。\n世上唯一,无可替代!" + }, + "victory": { + "1": "哎咿呀!", + "2": "怎……怎么可能!这孩子!", + "3": "这就是……这就是为啥我讨厌小孩子!" + } + }, + "skull_grunt": { + "encounter": { + "1": "我们并不坏,YO,我们是硬汉!", + "2": "YO!咋样!我们就这样打招呼!\n混个脸熟呗,崽子!", + "3": "咱们就是一帮对别人的宝可梦\n比较感兴趣的哥们和姐们!", + "4": "别装B了,你有我们拽吗,老弟?", + "5": "骷髅队在此!没钱住房子!\n天天找乐子!青春混到死!" + }, + "victory": { + "1": "哈?这就完了?", + "2": "该逃跑了YO!闪一边去YO!", + "3": "你这种弱鸡宝可梦反正我们也不要!", + "4": "啥!? 这小屁孩也太牛B了!", + "5": "MAN!我能说什么,\n我的人生比宝可梦还烂。" + } + }, + "plumeria": { + "encounter": { + "1": " …哼嗯,你看起来也没啥特别的。", + "2": "这帮呆子对付你也花了太长时间了吧……", + "3": "要是惹了骷髅队的人!我就不和你开玩笑了!" + }, + "victory": { + "1": "哼嗯!你很强,我承认。", + "2": "哼,你是挺强的。现在我知道\n为啥那帮手下要花那么久对付一个小孩了。", + "3": "哼嗯!看来我得承认我输了。" + } + }, + "macro_grunt": { + "encounter": { + "1": "你的对战生涯到此为止了。", + "2": "你是一名训练师吧\n你没有干涉我们工作的权力!", + "3": "我是马洛科蒙集团的,要买马洛科蒙人寿保险吗。" + }, + "victory": { + "1": "除了礼貌地撤退我似乎别无选择…", + "2": "没法留住我的零花钱了,我又要财政赤字了…", + "3": "没人能比马洛科蒙集团的我们工作更卷!" + } + }, + "oleana": { + "encounter": { + "1": "我不会让你方案洛兹先生的计划!", + "2": "看来你打倒了所有我安排的训练师,本身也没对他们有啥期待…", + "3": "为了总裁!我不会输的!" + }, + "victory": { + "1": "*叹气*我赢不了。\n奥利薇,你真是个没用的女人", + "2": "呃啊!不可饶恕...我在想什么。\n走到这里的训练师果然不会轻易屈服!", + "3": "*叹气*奥利薇累累了……" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "我不得不说,能来到这里,你的确很不简单!" @@ -787,6 +867,72 @@ "1": "没有远见的蠢货会继续玷污这个美丽的世界。" } }, + "aether_boss_lusamine_1": { + "encounter": { + "1": "你吓到我可爱的异兽了!我要让你先闭嘴!" + }, + "victory": { + "1": "你…你怎么这么不听话!" + }, + "defeat": { + "1": "哼嗯…" + } + }, + "aether_boss_lusamine_2": { + "encounter": { + "1": "为什么你要一直妨碍我!\n我受够你了,完完全全受够了! \n$不用说废话了…有了虚吾伊德的力量。\n我会让你明白,你来这里是有多么错误!" + }, + "victory": { + "1": "呃呃啊啊啊啊呜呜呜啊啊!" + }, + "defeat": { + "1": "我只要和我可爱的异兽在一起就好了!你们怎么样都无所谓了!" + } + }, + "skull_boss_guzma_1": { + "encounter": { + "1": "摧毁,摧毁,\n不管摧毁几次也从不手软\n$惹人厌的古兹马大爷在此。" + }, + "victory": { + "1": "切,我一定要找时间干掉你!" + }, + "defeat": { + "1": "大老远跑来就这,昂?" + } + }, + "skull_boss_guzma_2": { + "encounter": { + "1": "不管谁与我作对,我都会干掉他们!\n$这就是大坏蛋古兹马的全部!" + }, + "victory": { + "1": "古兹马!!你在干什么啊!!!" + }, + "defeat": { + "1": "你们真够蠢的!" + } + }, + "macro_boss_rose_1": { + "encounter": { + "1": "我必须为所有人提供无限的能源,实现繁荣。$这是我的目的,我的责任,我的使命!" + }, + "victory": { + "1": "你还是没有明白,训练师\n$我们…不,我要推动历史的进程啊!" + }, + "defeat": { + "1": "你完全不理解!" + } + }, + "macro_boss_rose_2": { + "encounter": { + "1": "我致力于解决伽勒尔的能源问题\n——当然也是全世界的能源问题。\n$我的经验与成果,造就了马洛科蒙集团,证明了我的正确与成功!\n$就算输了,我也不会改变主意的……" + }, + "victory": { + "1": "我都忘记宝可梦对战的魅力了!我太久没有着手对战了…\n$这的确让人很满足,我接受我的失败!" + }, + "defeat": { + "1": "我承认我做的事情非常渗人,我也不指望你能理解。\n$但我必须为伽勒尔地区提供无限的能源,确保永久的繁荣。" + } + }, "brock": { "encounter": { "1": "我对岩石属性宝可梦的专精会击败你!来吧!", @@ -2542,4 +2688,4 @@ "1": "@c{smile_ehalf}我……\n我想我完成了我的使命……$@c{smile_eclosed}答应我……在你拯救世界之后\n……要……平安到家。$@c{smile_ehalf}……谢谢你。" } } -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/move.json b/src/locales/zh_CN/move.json index ad7212c3f67..5974271abb2 100644 --- a/src/locales/zh_CN/move.json +++ b/src/locales/zh_CN/move.json @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "电电加速", - "effect": "迅猛无比的电击。必定能够先制攻击,\n并且提高自己的闪避率。" + "effect": "迅猛无比的电击。必定能够先制攻击,击中对方的要害。" }, "splishySplash": { "name": "滔滔冲浪", @@ -3807,4 +3807,4 @@ "name": "邪毒锁链", "effect": "用由毒形成的锁链缠住对手注入毒\n素加以侵蚀。有时会让对手陷入剧毒状态" } -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/pokemon-form.json b/src/locales/zh_CN/pokemon-form.json index b0f3c05d1d4..09ec54be804 100644 --- a/src/locales/zh_CN/pokemon-form.json +++ b/src/locales/zh_CN/pokemon-form.json @@ -64,6 +64,7 @@ "landorusIncarnate": "化身", "keldeoOrdinary": "通常", "meloettaAria": "歌声", + "meloettaPirouette": "舞步形态", "froakieBattleBond": "牵绊变身", "scatterbugMeadow": "花园花纹", "scatterbugIcySnow": "冰雪花纹", diff --git a/src/locales/zh_CN/run-history-ui-handler.json b/src/locales/zh_CN/run-history.json similarity index 100% rename from src/locales/zh_CN/run-history-ui-handler.json rename to src/locales/zh_CN/run-history.json diff --git a/src/locales/zh_CN/settings.json b/src/locales/zh_CN/settings.json index 140ed3b78ad..3ae0fa8204c 100644 --- a/src/locales/zh_CN/settings.json +++ b/src/locales/zh_CN/settings.json @@ -61,6 +61,7 @@ "typeHints": "属性提示", "masterVolume": "主音量", "bgmVolume": "音乐", + "fieldVolume": "场景音量", "seVolume": "音效", "musicPreference": "音乐偏好", "mixed": "全曲混合", diff --git a/src/locales/zh_CN/trainer-classes.json b/src/locales/zh_CN/trainer-classes.json index fe5b9f43592..3a50acf5c01 100644 --- a/src/locales/zh_CN/trainer-classes.json +++ b/src/locales/zh_CN/trainer-classes.json @@ -117,5 +117,14 @@ "plasma_grunts": "等离子队手下们", "flare_grunt": "闪焰队手下", "flare_grunt_female": "闪焰队手下", - "flare_grunts": "闪焰队手下们" -} \ No newline at end of file + "flare_grunts": "闪焰队手下们", + "aether_grunt": "以太基金会职员", + "aether_grunt_female": "以太基金会职员", + "aether_grunts": "以太基金会职员", + "skull_grunt": "骷髅队手下", + "skull_grunt_female": "骷髅队手下", + "skull_grunts": "骷髅队手下", + "macro_grunt": "马洛科蒙训练师", + "macro_grunt_female": "马洛科蒙训练师", + "macro_grunts": "马洛科蒙训练师" +} diff --git a/src/locales/zh_CN/trainer-names.json b/src/locales/zh_CN/trainer-names.json index 74d97c22846..9e03a514ff7 100644 --- a/src/locales/zh_CN/trainer-names.json +++ b/src/locales/zh_CN/trainer-names.json @@ -30,6 +30,10 @@ "crasher_wake": "吉宪", "fantina": "梅丽莎", "byron": "东瓜", + "faba": "扎奥博", + "plumeria": "布尔美丽", + "oleana": "奥莉薇", + "candice": "小菘", "volkner": "电次", "cilan": "天桐", @@ -143,6 +147,10 @@ "cyrus": "赤日", "ghetsis": "魁奇思", "lysandre": "弗拉达利", + "lusamine": "露莎米奈", + "guzma": "古兹马", + "rose": "洛兹", + "blue_red_double": "青绿 & 赤红", "red_blue_double": "赤红 & 青绿", "tate_liza_double": "小枫 & 小南", @@ -153,4 +161,4 @@ "iris_alder_double": "艾莉丝 & 阿戴克", "marnie_piers_double": "玛俐 & 聂梓", "piers_marnie_double": "聂梓 & 玛俐" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/trainer-titles.json b/src/locales/zh_CN/trainer-titles.json index 2961d65683c..07654ec8fc3 100644 --- a/src/locales/zh_CN/trainer-titles.json +++ b/src/locales/zh_CN/trainer-titles.json @@ -16,6 +16,10 @@ "galactic_boss": "银河队老大", "plasma_boss": "等离子队老大", "flare_boss": "闪焰队老大", + "aether_boss": "以太基金会理事长", + "skull_boss": "骷髅队老大", + "macro_boss": "马洛科蒙总裁", + "rocket_admin": "火箭队干部", "rocket_admin_female": "火箭队干部", "magma_admin": "熔岩队干部", @@ -27,5 +31,8 @@ "plasma_sage": "等离子队贤人", "plasma_admin": "等离子队干部", "flare_admin": "闪焰队干部", - "flare_admin_female": "闪焰队干部" -} \ No newline at end of file + "flare_admin_female": "闪焰队干部", + "aether_admin": "以太基金会干部", + "skull_admin": "骷髅队干部", + "macro_admin": "马洛科蒙干部" +} diff --git a/src/locales/zh_TW/battle.json b/src/locales/zh_TW/battle.json index ada85d4d9b0..97b85a9cd5a 100644 --- a/src/locales/zh_TW/battle.json +++ b/src/locales/zh_TW/battle.json @@ -34,7 +34,7 @@ "learnMoveNotLearned": "{{pokemonName}} 沒有學會 {{moveName}}.", "learnMoveForgetQuestion": "要忘記哪個技能?", "learnMoveForgetSuccess": "{{pokemonName}} 忘記了 {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, 和@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}噗!", + "countdownPoof": "@d{32}1, @d{15}2, 和@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}噗!", "learnMoveAnd": "然後…", "levelCapUp": "等級上限提升到 {{levelCap}}!", "moveNotImplemented": "{{moveName}} 未實裝,無法選擇。", diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index b0dfca1757c..8d9fb7f4a37 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -57,7 +57,7 @@ import weather from "./weather.json"; import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history-ui-handler.json"; +import runHistory from "./run-history.json"; export const zhTwConfig = { ability, diff --git a/src/locales/zh_TW/pokemon-form.json b/src/locales/zh_TW/pokemon-form.json index 9e26dfeeb6e..b98a1e946b8 100644 --- a/src/locales/zh_TW/pokemon-form.json +++ b/src/locales/zh_TW/pokemon-form.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "meloettaPirouette": "舞步形態" +} \ No newline at end of file diff --git a/src/locales/zh_TW/run-history-ui-handler.json b/src/locales/zh_TW/run-history.json similarity index 100% rename from src/locales/zh_TW/run-history-ui-handler.json rename to src/locales/zh_TW/run-history.json diff --git a/src/locales/zh_TW/settings.json b/src/locales/zh_TW/settings.json index eac573f2cba..b077e0216a3 100644 --- a/src/locales/zh_TW/settings.json +++ b/src/locales/zh_TW/settings.json @@ -61,6 +61,7 @@ "typeHints": "屬性提示", "masterVolume": "主音量", "bgmVolume": "音樂", + "fieldVolume": "場景音量", "seVolume": "音效", "musicPreference": "音樂偏好", "mixed": "全曲混合", diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 365fc433d2f..938f73a1e08 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -57,7 +57,7 @@ export class ModifierType { this.localeKey = localeKey!; // TODO: is this bang correct? this.iconImage = iconImage!; // TODO: is this bang correct? this.group = group!; // TODO: is this bang correct? - this.soundName = soundName ?? "restore"; + this.soundName = soundName ?? "se/restore"; this.newModifierFunc = newModifierFunc; } @@ -169,7 +169,7 @@ class AddPokeballModifierType extends ModifierType { private count: integer; constructor(iconImage: string, pokeballType: PokeballType, count: integer) { - super("", iconImage, (_type, _args) => new Modifiers.AddPokeballModifier(this, pokeballType, count), "pb", "pb_bounce_1"); + super("", iconImage, (_type, _args) => new Modifiers.AddPokeballModifier(this, pokeballType, count), "pb", "se/pb_bounce_1"); this.pokeballType = pokeballType; this.count = count; } @@ -677,7 +677,7 @@ export class MoneyRewardModifierType extends ModifierType { private moneyMultiplierDescriptorKey: string; constructor(localeKey: string, iconImage: string, moneyMultiplier: number, moneyMultiplierDescriptorKey: string) { - super(localeKey, iconImage, (_type, _args) => new Modifiers.MoneyRewardModifier(this, moneyMultiplier), "money", "buy"); + super(localeKey, iconImage, (_type, _args) => new Modifiers.MoneyRewardModifier(this, moneyMultiplier), "money", "se/buy"); this.moneyMultiplier = moneyMultiplier; this.moneyMultiplierDescriptorKey = moneyMultiplierDescriptorKey; @@ -791,10 +791,10 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge super("", EvolutionItem[evolutionItem].toLowerCase(), (_type, args) => new Modifiers.EvolutionItemModifier(this, (args[0] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { if (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && pokemonEvolutions[pokemon.species.speciesId].filter(e => e.item === this.evolutionItem - && (!e.condition || e.condition.predicate(pokemon))).length && (pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX)) { + && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === pokemon.getFormKey())).length && (pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX)) { return null; } else if (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId) && pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter(e => e.item === this.evolutionItem - && (!e.condition || e.condition.predicate(pokemon))).length && (pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX)) { + && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === pokemon.getFusionFormKey())).length && (pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX)) { return null; } @@ -829,7 +829,7 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G // Make sure the Pokemon has alternate forms if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) // Get all form changes for this species with an item trigger, including any compound triggers - && pokemonFormChanges[pokemon.species.speciesId].filter(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger)) + && pokemonFormChanges[pokemon.species.speciesId].filter(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger) && (fc.preFormKey === pokemon.getFormKey())) // Returns true if any form changes match this item .map(fc => fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger) .flat().flatMap(fc => fc.item).includes(this.formChangeItem) @@ -1053,7 +1053,8 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { const formChanges = pokemonFormChanges[p.species.speciesId]; let formChangeItemTriggers = formChanges.filter(fc => ((fc.formKey.indexOf(SpeciesFormKey.MEGA) === -1 && fc.formKey.indexOf(SpeciesFormKey.PRIMAL) === -1) || party[0].scene.getModifiers(Modifiers.MegaEvolutionAccessModifier).length) && ((fc.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) === -1 && fc.formKey.indexOf(SpeciesFormKey.ETERNAMAX) === -1) || party[0].scene.getModifiers(Modifiers.GigantamaxAccessModifier).length) - && (!fc.conditions.length || fc.conditions.filter(cond => cond instanceof SpeciesFormChangeCondition && cond.predicate(p)).length)) + && (!fc.conditions.length || fc.conditions.filter(cond => cond instanceof SpeciesFormChangeCondition && cond.predicate(p)).length) + && (fc.preFormKey === p.getFormKey())) .map(fc => fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger) .filter(t => t && t.active && !p.scene.findModifier(m => m instanceof Modifiers.PokemonFormChangeItemModifier && m.pokemonId === p.id && m.formChangeItem === t.item)); @@ -1461,7 +1462,7 @@ export const modifierTypes = { VOUCHER_PLUS: () => new AddVoucherModifierType(VoucherType.PLUS, 1), VOUCHER_PREMIUM: () => new AddVoucherModifierType(VoucherType.PREMIUM, 1), - GOLDEN_POKEBALL: () => new ModifierType("modifierType:ModifierType.GOLDEN_POKEBALL", "pb_gold", (type, _args) => new Modifiers.ExtraModifierModifier(type), undefined, "pb_bounce_1"), + GOLDEN_POKEBALL: () => new ModifierType("modifierType:ModifierType.GOLDEN_POKEBALL", "pb_gold", (type, _args) => new Modifiers.ExtraModifierModifier(type), undefined, "se/pb_bounce_1"), ENEMY_DAMAGE_BOOSTER: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_BOOSTER", "wl_item_drop", (type, _args) => new Modifiers.EnemyDamageBoosterModifier(type, 5)), ENEMY_DAMAGE_REDUCTION: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_REDUCTION", "wl_guard_spec", (type, _args) => new Modifiers.EnemyDamageReducerModifier(type, 2.5)), diff --git a/src/overrides.ts b/src/overrides.ts index 8b3d628e05e..32ff116f41d 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -46,14 +46,14 @@ class DefaultOverrides { readonly SEED_OVERRIDE: string = ""; readonly WEATHER_OVERRIDE: WeatherType = WeatherType.NONE; readonly BATTLE_TYPE_OVERRIDE: "double" | "single" | null = null; - readonly STARTING_WAVE_OVERRIDE: integer = 0; + readonly STARTING_WAVE_OVERRIDE: number = 0; readonly STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN; readonly ARENA_TINT_OVERRIDE: TimeOfDay | null = null; /** Multiplies XP gained by this value including 0. Set to null to ignore the override */ readonly XP_MULTIPLIER_OVERRIDE: number | null = null; readonly NEVER_CRIT_OVERRIDE: boolean = false; /** default 1000 */ - readonly STARTING_MONEY_OVERRIDE: integer = 0; + readonly STARTING_MONEY_OVERRIDE: number = 0; /** Sets all shop item prices to 0 */ readonly WAIVE_SHOP_FEES_OVERRIDE: boolean = false; /** Sets reroll price to 0 */ @@ -86,14 +86,14 @@ class DefaultOverrides { readonly STARTER_FORM_OVERRIDES: Partial> = {}; /** default 5 or 20 for Daily */ - readonly STARTING_LEVEL_OVERRIDE: integer = 0; + readonly STARTING_LEVEL_OVERRIDE: number = 0; /** * SPECIES OVERRIDE * will only apply to the first starter in your party or each enemy pokemon * default is 0 to not override * @example SPECIES_OVERRIDE = Species.Bulbasaur; */ - readonly STARTER_SPECIES_OVERRIDE: Species | integer = 0; + readonly STARTER_SPECIES_OVERRIDE: Species | number = 0; readonly ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; @@ -105,7 +105,7 @@ class DefaultOverrides { // -------------------------- // OPPONENT / ENEMY OVERRIDES // -------------------------- - readonly OPP_SPECIES_OVERRIDE: Species | integer = 0; + readonly OPP_SPECIES_OVERRIDE: Species | number = 0; readonly OPP_LEVEL_OVERRIDE: number = 0; readonly OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; @@ -114,7 +114,8 @@ class DefaultOverrides { readonly OPP_MOVESET_OVERRIDE: Array = []; readonly OPP_SHINY_OVERRIDE: boolean = false; readonly OPP_VARIANT_OVERRIDE: Variant = 0; - readonly OPP_IVS_OVERRIDE: integer | integer[] = []; + readonly OPP_IVS_OVERRIDE: number | number[] = []; + readonly OPP_FORM_OVERRIDES: Partial> = {}; // ------------- // EGG OVERRIDES diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 3c165a25157..72995c0f006 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -54,7 +54,7 @@ export class AttemptCapturePhase extends PokemonPhase { this.pokeball.setOrigin(0.5, 0.625); this.scene.field.add(this.pokeball); - this.scene.playSound("pb_throw"); + this.scene.playSound("se/pb_throw"); this.scene.time.delayedCall(300, () => { this.scene.field.moveBelow(this.pokeball as Phaser.GameObjects.GameObject, pokemon); }); @@ -67,7 +67,7 @@ export class AttemptCapturePhase extends PokemonPhase { onComplete: () => { this.pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); this.scene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}_open`)); - this.scene.playSound("pb_rel"); + this.scene.playSound("se/pb_rel"); pokemon.tint(getPokeballTintColor(this.pokeballType)); addPokeballOpenParticles(this.scene, this.pokeball.x, this.pokeball.y, this.pokeballType); @@ -81,7 +81,7 @@ export class AttemptCapturePhase extends PokemonPhase { onComplete: () => { this.pokeball.setTexture("pb", `${pokeballAtlasKey}_opening`); pokemon.setVisible(false); - this.scene.playSound("pb_catch"); + this.scene.playSound("se/pb_catch"); this.scene.time.delayedCall(17, () => this.pokeball.setTexture("pb", `${pokeballAtlasKey}`)); const doShake = () => { @@ -109,13 +109,13 @@ export class AttemptCapturePhase extends PokemonPhase { this.failCatch(shakeCount); } else if (shakeCount++ < 3) { if (pokeballMultiplier === -1 || pokemon.randSeedInt(65536) < y) { - this.scene.playSound("pb_move"); + this.scene.playSound("se/pb_move"); } else { shakeCounter.stop(); this.failCatch(shakeCount); } } else { - this.scene.playSound("pb_lock"); + this.scene.playSound("se/pb_lock"); addPokeballCaptureStars(this.scene, this.pokeball); const pbTint = this.scene.add.sprite(this.pokeball.x, this.pokeball.y, "pb", "pb"); @@ -156,7 +156,7 @@ export class AttemptCapturePhase extends PokemonPhase { failCatch(shakeCount: integer) { const pokemon = this.getPokemon(); - this.scene.playSound("pb_rel"); + this.scene.playSound("se/pb_rel"); pokemon.setY(this.originalY); if (pokemon.status?.effect !== StatusEffect.SLEEP) { pokemon.cry(pokemon.getHpRatio() > 0.25 ? undefined : { rate: 0.85 }); diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 17625c57fc6..817801985d2 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -26,7 +26,7 @@ export class AttemptRunPhase extends PokemonPhase { applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); if (playerPokemon.randSeedInt(256) < escapeChance.value) { - this.scene.playSound("flee"); + this.scene.playSound("se/flee"); this.scene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); this.scene.tweens.add({ diff --git a/src/phases/damage-phase.ts b/src/phases/damage-phase.ts index 9f63ce35cf2..029c1e717f1 100644 --- a/src/phases/damage-phase.ts +++ b/src/phases/damage-phase.ts @@ -42,14 +42,14 @@ export class DamagePhase extends PokemonPhase { applyDamage() { switch (this.damageResult) { case HitResult.EFFECTIVE: - this.scene.playSound("hit"); + this.scene.playSound("se/hit"); break; case HitResult.SUPER_EFFECTIVE: case HitResult.ONE_HIT_KO: - this.scene.playSound("hit_strong"); + this.scene.playSound("se/hit_strong"); break; case HitResult.NOT_VERY_EFFECTIVE: - this.scene.playSound("hit_weak"); + this.scene.playSound("se/hit_weak"); break; } diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 6f3f0b37905..a5b0252d4de 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -178,7 +178,7 @@ export class EggHatchPhase extends Phase { if (this.hatched) { return; } - this.scene.playSound("egg_crack"); + this.scene.playSound("se/egg_crack"); this.doSpray(4); this.eggCrackSprite.setFrame("3"); this.scene.time.delayedCall(125, () => this.eggCrackSprite.setFrame("4")); @@ -220,7 +220,7 @@ export class EggHatchPhase extends Phase { if (count === undefined) { count = 0; } - this.scene.playSound("pb_move"); + this.scene.playSound("se/pb_move"); this.scene.tweens.add({ targets: this.eggContainer, x: `-=${intensity / (count ? 1 : 2)}`, @@ -281,7 +281,7 @@ export class EggHatchPhase extends Phase { SoundFade.fadeOut(this.scene, this.evolutionBgm, Utils.fixedInt(100)); } for (let e = 0; e < 5; e++) { - this.scene.time.delayedCall(Utils.fixedInt(375 * e), () => this.scene.playSound("egg_hatch", { volume: 1 - (e * 0.2) })); + this.scene.time.delayedCall(Utils.fixedInt(375 * e), () => this.scene.playSound("se/egg_hatch", { volume: 1 - (e * 0.2) })); } this.eggLightraysOverlay.setVisible(true); this.eggLightraysOverlay.play("egg_lightrays"); @@ -334,7 +334,7 @@ export class EggHatchPhase extends Phase { if (isShiny) { this.scene.time.delayedCall(Utils.fixedInt(500), () => { this.pokemonShinySparkle.play(`sparkle${this.pokemon.variant ? `_${this.pokemon.variant + 1}` : ""}`); - this.scene.playSound("sparkle"); + this.scene.playSound("se/sparkle"); }); } this.scene.time.delayedCall(Utils.fixedInt(!this.skipped ? !isShiny ? 1250 : 1750 : !isShiny ? 250 : 750), () => { diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 398450ec693..0c3c2fa5bcf 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -157,7 +157,7 @@ export class EvolutionPhase extends Phase { this.evolutionBg.setVisible(true); this.evolutionBg.play(); }); - this.scene.playSound("charge"); + this.scene.playSound("se/charge"); this.doSpiralUpward(); this.scene.tweens.addCounter({ from: 0, @@ -169,7 +169,7 @@ export class EvolutionPhase extends Phase { onComplete: () => { this.pokemonSprite.setVisible(false); this.scene.time.delayedCall(1100, () => { - this.scene.playSound("beam"); + this.scene.playSound("se/beam"); this.doArcDownward(); this.scene.time.delayedCall(1500, () => { this.pokemonEvoTintSprite.setScale(0.25); @@ -214,7 +214,7 @@ export class EvolutionPhase extends Phase { return; } - this.scene.playSound("sparkle"); + this.scene.playSound("se/sparkle"); this.pokemonEvoSprite.setVisible(true); this.doCircleInward(); this.scene.time.delayedCall(900, () => { @@ -227,7 +227,7 @@ export class EvolutionPhase extends Phase { } this.scene.unshiftPhase(new EndEvolutionPhase(this.scene)); - this.scene.playSound("shine"); + this.scene.playSound("se/shine"); this.doSpray(); this.scene.tweens.add({ targets: this.evolutionOverlay, diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 9cc26deb673..b53d6828db2 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -128,7 +128,7 @@ export class FaintPhase extends PokemonPhase { pokemon.addFriendship(-10); } pokemon.hideInfo(); - this.scene.playSound("faint"); + this.scene.playSound("se/faint"); this.scene.tweens.add({ targets: pokemon, duration: 500, diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index 88e0dd00ce1..33c1f8e8cef 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -68,7 +68,7 @@ export class FormChangePhase extends EvolutionPhase { this.evolutionBg.setVisible(true); this.evolutionBg.play(); }); - this.scene.playSound("charge"); + this.scene.playSound("se/charge"); this.doSpiralUpward(); this.scene.tweens.addCounter({ from: 0, @@ -80,13 +80,13 @@ export class FormChangePhase extends EvolutionPhase { onComplete: () => { this.pokemonSprite.setVisible(false); this.scene.time.delayedCall(1100, () => { - this.scene.playSound("beam"); + this.scene.playSound("se/beam"); this.doArcDownward(); this.scene.time.delayedCall(1000, () => { this.pokemonEvoTintSprite.setScale(0.25); this.pokemonEvoTintSprite.setVisible(true); this.doCycle(1, 1).then(_success => { - this.scene.playSound("sparkle"); + this.scene.playSound("se/sparkle"); this.pokemonEvoSprite.setVisible(true); this.doCircleInward(); this.scene.time.delayedCall(900, () => { @@ -95,7 +95,7 @@ export class FormChangePhase extends EvolutionPhase { this.scene.unshiftPhase(new EndEvolutionPhase(this.scene)); } - this.scene.playSound("shine"); + this.scene.playSound("se/shine"); this.doSpray(); this.scene.tweens.add({ targets: this.evolutionOverlay, diff --git a/src/phases/game-over-modifier-reward-phase.ts b/src/phases/game-over-modifier-reward-phase.ts index e2f4d134cba..c27659bf9d4 100644 --- a/src/phases/game-over-modifier-reward-phase.ts +++ b/src/phases/game-over-modifier-reward-phase.ts @@ -13,6 +13,7 @@ export class GameOverModifierRewardPhase extends ModifierRewardPhase { return new Promise(resolve => { const newModifier = this.modifierType.newModifier(); this.scene.addModifier(newModifier).then(() => { + // Sound loaded into game as is this.scene.playSound("level_up_fanfare"); this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.fadeIn(250).then(() => { diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index a42e8472952..78dd73057a1 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -1,19 +1,19 @@ -import { clientSessionId } from "#app/account.js"; -import BattleScene from "#app/battle-scene.js"; -import { BattleType } from "#app/battle.js"; -import { miscDialogue, getCharVariantFromDialogue } from "#app/data/dialogue.js"; -import { pokemonEvolutions } from "#app/data/pokemon-evolutions.js"; -import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species.js"; -import { trainerConfigs } from "#app/data/trainer-config.js"; -import { PlayerGender } from "#app/enums/player-gender.js"; -import { TrainerType } from "#app/enums/trainer-type.js"; -import Pokemon from "#app/field/pokemon.js"; -import { modifierTypes } from "#app/modifier/modifier-type.js"; -import { achvs, ChallengeAchv } from "#app/system/achv.js"; -import { Unlockables } from "#app/system/unlockables.js"; -import { Mode } from "#app/ui/ui.js"; +import { clientSessionId } from "#app/account"; +import BattleScene from "#app/battle-scene"; +import { BattleType } from "#app/battle"; +import { miscDialogue, getCharVariantFromDialogue } from "#app/data/dialogue"; +import { pokemonEvolutions } from "#app/data/pokemon-evolutions"; +import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; +import { trainerConfigs } from "#app/data/trainer-config"; +import { PlayerGender } from "#app/enums/player-gender"; +import { TrainerType } from "#app/enums/trainer-type"; +import Pokemon from "#app/field/pokemon"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import { achvs, ChallengeAchv } from "#app/system/achv"; +import { Unlockables } from "#app/system/unlockables"; +import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import * as Utils from "#app/utils.js"; +import * as Utils from "#app/utils"; import { BattlePhase } from "./battle-phase"; import { CheckSwitchPhase } from "./check-switch-phase"; import { EncounterPhase } from "./encounter-phase"; @@ -23,6 +23,12 @@ import { SummonPhase } from "./summon-phase"; import { EndCardPhase } from "./end-card-phase"; import { PostGameOverPhase } from "./post-game-over-phase"; import { UnlockPhase } from "./unlock-phase"; +import { SessionSaveData } from "../system/game-data"; +import TrainerData from "../system/trainer-data"; +import PokemonData from "../system/pokemon-data"; +import PersistentModifierData from "../system/modifier-data"; +import ChallengeData from "../system/challenge-data"; +import ArenaData from "../system/arena-data"; export class GameOverPhase extends BattlePhase { private victory: boolean; @@ -98,13 +104,7 @@ export class GameOverPhase extends BattlePhase { this.scene.gameData.gameStats.dailyRunSessionsWon++; } } - this.scene.gameData.getSession(this.scene.sessionSlotId).then(sessionData => { - if (sessionData) { - this.scene.gameData.saveRunHistory(this.scene, sessionData, this.victory); - } - }).catch(err => { - console.error("Failed to save run to history.", err); - }); + this.scene.gameData.saveRunHistory(this.scene, this.getFinalSessionData(), this.victory); const fadeDuration = this.victory ? 10000 : 5000; this.scene.fadeOutBgm(fadeDuration, true); const activeBattlers = this.scene.getField().filter(p => p?.isActive(true)); @@ -207,4 +207,32 @@ export class GameOverPhase extends BattlePhase { this.firstRibbons.push(getPokemonSpecies(pokemon.species.getRootSpeciesId(forStarter))); } } + + /** + * This function mirrors game-data.ts' getSessionSaveData() to update the session data to reflect any changes that occurred within the last wave + * This means that level ups, item usage, evolutions, etc. will all be accurately reflected. + * @returns {@linkCode SessionSaveData} an updated version of the wave's SessionSaveData that accurately reflects the events of the wave + */ + private getFinalSessionData(): SessionSaveData { + return { + seed: this.scene.seed, + playTime: this.scene.sessionPlayTime, + gameMode: this.scene.gameMode.modeId, + party: this.scene.getParty().map(p => new PokemonData(p)), + enemyParty: this.scene.getEnemyParty().map(p => new PokemonData(p)), + modifiers: this.scene.findModifiers(() => true).map(m => new PersistentModifierData(m, true)), + enemyModifiers: this.scene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)), + arena: new ArenaData(this.scene.arena), + pokeballCounts: this.scene.pokeballCounts, + money: this.scene.money, + score: this.scene.score, + waveIndex: this.scene.currentBattle.waveIndex, + battleType: this.scene.currentBattle.battleType, + trainer: this.scene.currentBattle.battleType === BattleType.TRAINER ? new TrainerData(this.scene.currentBattle.trainer) : null, + gameVersion: this.scene.game.config.gameVersion, + timestamp: new Date().getTime(), + challenges: this.scene.gameMode.challenges.map(c => new ChallengeData(c)) + } as SessionSaveData; + } } + diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index e30fc0c3d10..5a9a16b6f5e 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -45,6 +45,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { loadMoveAnimAssets(this.scene, [this.moveId], true) .then(() => { this.scene.ui.setMode(messageMode).then(() => { + // Sound loaded into game as is this.scene.playSound("level_up_fanfare"); this.scene.ui.showText(i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => { this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); diff --git a/src/phases/level-cap-phase.ts b/src/phases/level-cap-phase.ts index 4a07e7d131e..db59fbd6473 100644 --- a/src/phases/level-cap-phase.ts +++ b/src/phases/level-cap-phase.ts @@ -12,6 +12,7 @@ export class LevelCapPhase extends FieldPhase { super.start(); this.scene.ui.setMode(Mode.MESSAGE).then(() => { + // Sound loaded into game as is this.scene.playSound("level_up_fanfare"); this.scene.ui.showText(i18next.t("battle:levelCapUp", { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true); this.executeForAll(pokemon => pokemon.updateInfo(true)); diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 12018656458..f100a763219 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -311,8 +311,6 @@ export class MoveEffectPhase extends PokemonPhase { } end() { - const move = this.move.getMove(); - move.type = move.defaultType; const user = this.getUserPokemon(); /** * If this phase isn't for the invoked move's last strike, diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 57b842e7b38..1c96d278d69 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -69,7 +69,7 @@ export class SelectModifierPhase extends BattlePhase { this.scene.updateMoneyText(); this.scene.animateMoneyChanged(false); } - this.scene.playSound("buy"); + this.scene.playSound("se/buy"); } break; case 1: @@ -128,7 +128,7 @@ export class SelectModifierPhase extends BattlePhase { this.scene.updateMoneyText(); this.scene.animateMoneyChanged(false); } - this.scene.playSound("buy"); + this.scene.playSound("se/buy"); (this.scene.ui.getHandler() as ModifierSelectUiHandler).updateCostText(); } else { this.scene.ui.playError(); diff --git a/src/phases/stat-change-phase.ts b/src/phases/stat-change-phase.ts index 99f30304502..856d0a33eea 100644 --- a/src/phases/stat-change-phase.ts +++ b/src/phases/stat-change-phase.ts @@ -134,7 +134,7 @@ export class StatChangePhase extends PokemonPhase { statSprite.setScale(6); statSprite.setOrigin(0.5, 1); - this.scene.playSound(`stat_${levels.value >= 1 ? "up" : "down"}`); + this.scene.playSound(`se/stat_${levels.value >= 1 ? "up" : "down"}`); statSprite.setMask(new Phaser.Display.Masks.BitmapMask(this.scene, pokemonMaskSprite ?? undefined)); diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 50424170ea7..f65a2063d4c 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -127,7 +127,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { angle: 1440, y: (this.player ? 132 : 86) + fpOffset[1], onComplete: () => { - this.scene.playSound("pb_rel"); + this.scene.playSound("se/pb_rel"); pokeball.destroy(); this.scene.add.existing(pokemon); this.scene.field.add(pokemon); diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 05e041cd730..68dc8f8bf65 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -74,7 +74,7 @@ export class SwitchSummonPhase extends SummonPhase { pokemonName: getPokemonNameWithAffix(pokemon) }) ); - this.scene.playSound("pb_rel"); + this.scene.playSound("se/pb_rel"); pokemon.hideInfo(); pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn"); this.scene.tweens.add({ diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 7b8ee05de44..a38874c9acd 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -1,6 +1,5 @@ import BattleScene from "#app/battle-scene.js"; import { getCharVariantFromDialogue } from "#app/data/dialogue.js"; -import { TrainerSlot } from "#app/data/trainer-config.js"; import { TrainerType } from "#app/enums/trainer-type.js"; import { modifierTypes } from "#app/modifier/modifier-type.js"; import { vouchers } from "#app/system/voucher.js"; @@ -9,6 +8,7 @@ import * as Utils from "#app/utils.js"; import { BattlePhase } from "./battle-phase"; import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; +import { TrainerSlot } from "#app/data/trainer-config"; export class TrainerVictoryPhase extends BattlePhase { constructor(scene: BattleScene) { @@ -42,7 +42,7 @@ export class TrainerVictoryPhase extends BattlePhase { const showMessage = () => { const originalFunc = showMessageOrEnd; - showMessageOrEnd = () => this.scene.ui.showDialogue(message, this.scene.currentBattle.trainer?.getName(), null, originalFunc); + showMessageOrEnd = () => this.scene.ui.showDialogue(message, this.scene.currentBattle.trainer?.getName(TrainerSlot.TRAINER, true), null, originalFunc); showMessageOrEnd(); }; diff --git a/src/phases/unlock-phase.ts b/src/phases/unlock-phase.ts index ce06e2445ac..1662afaa758 100644 --- a/src/phases/unlock-phase.ts +++ b/src/phases/unlock-phase.ts @@ -16,6 +16,7 @@ export class UnlockPhase extends Phase { start(): void { this.scene.time.delayedCall(2000, () => { this.scene.gameData.unlocks[this.unlockable] = true; + // Sound loaded into game as is this.scene.playSound("level_up_fanfare"); this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.showText(i18next.t("battle:unlockedSomething", { unlockedThing: getUnlockableName(this.unlockable) }), null, () => { diff --git a/src/scene-base.ts b/src/scene-base.ts index 1d7a2518300..298b8096e54 100644 --- a/src/scene-base.ts +++ b/src/scene-base.ts @@ -73,7 +73,7 @@ export class SceneBase extends Phaser.Scene { filenames = `${key}.wav`; } if (!folder) { - folder = ""; + folder = "se/"; } else { folder += "/"; } @@ -81,7 +81,7 @@ export class SceneBase extends Phaser.Scene { filenames = [ filenames ]; } for (const f of filenames as string[]) { - this.load.audio(key, this.getCachedUrl(`audio/se/${folder}${f}`)); + this.load.audio(folder+key, this.getCachedUrl(`audio/${folder}${f}`)); } } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index e7bc85d9037..d10d6288696 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -635,13 +635,13 @@ export class GameData { async saveRunHistory(scene: BattleScene, runEntry : SessionSaveData, isVictory: boolean): Promise { const runHistoryData = await this.getRunHistoryData(scene); // runHistoryData should always return run history or {} empty object - const timestamps = Object.keys(runHistoryData); - const timestampsNo = timestamps.map(Number); + let timestamps = Object.keys(runHistoryData).map(Number); // Arbitrary limit of 25 entries per user --> Can increase or decrease while (timestamps.length >= RUN_HISTORY_LIMIT ) { - const oldestTimestamp = Math.min.apply(Math, timestampsNo); + const oldestTimestamp = (Math.min.apply(Math, timestamps)).toString(); delete runHistoryData[oldestTimestamp]; + timestamps = Object.keys(runHistoryData).map(Number); } const timestamp = (runEntry.timestamp).toString(); diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 4bd69788f04..7b0fea95a98 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -117,7 +117,9 @@ export const SettingKeys = { Type_Hints: "TYPE_HINTS", Master_Volume: "MASTER_VOLUME", BGM_Volume: "BGM_VOLUME", + Field_Volume: "FIELD_VOLUME", SE_Volume: "SE_VOLUME", + UI_Volume: "UI_SOUND_EFFECTS", Music_Preference: "MUSIC_PREFERENCE", Show_BGM_Bar: "SHOW_BGM_BAR", Move_Touch_Controls: "MOVE_TOUCH_CONTROLS", @@ -541,6 +543,13 @@ export const Setting: Array = [ default: 10, type: SettingType.AUDIO }, + { + key: SettingKeys.Field_Volume, + label: i18next.t("settings:fieldVolume"), + options: VOLUME_OPTIONS, + default: 10, + type: SettingType.AUDIO + }, { key: SettingKeys.SE_Volume, label: i18next.t("settings:seVolume"), @@ -548,6 +557,13 @@ export const Setting: Array = [ default: 10, type: SettingType.AUDIO }, + { + key: SettingKeys.UI_Volume, + label: i18next.t("settings:uiVolume"), + options: VOLUME_OPTIONS, + default: 10, + type: SettingType.AUDIO + }, { key: SettingKeys.Music_Preference, label: i18next.t("settings:musicPreference"), @@ -654,10 +670,17 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): scene.bgmVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; scene.updateSoundVolume(); break; + case SettingKeys.Field_Volume: + scene.fieldVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + scene.updateSoundVolume(); + break; case SettingKeys.SE_Volume: scene.seVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; scene.updateSoundVolume(); break; + case SettingKeys.UI_Volume: + scene.uiVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + break; case SettingKeys.Music_Preference: scene.musicPreference = value; break; diff --git a/src/test/abilities/forecast.test.ts b/src/test/abilities/forecast.test.ts index 58f50c5a9a6..78453c5f4d2 100644 --- a/src/test/abilities/forecast.test.ts +++ b/src/test/abilities/forecast.test.ts @@ -1,19 +1,18 @@ -import { Abilities } from "#app/enums/abilities.js"; -import GameManager from "#test/utils/gameManager"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { SPLASH_ONLY } from "#test/utils/testUtils"; -import { WeatherType } from "#app/enums/weather-type"; import { BattlerIndex } from "#app/battle"; -import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; +import { allAbilities } from "#app/data/ability"; +import { Abilities } from "#app/enums/abilities"; +import { WeatherType } from "#app/enums/weather-type"; import { DamagePhase } from "#app/phases/damage-phase"; import { MovePhase } from "#app/phases/move-phase"; import { PostSummonPhase } from "#app/phases/post-summon-phase"; +import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { VictoryPhase } from "#app/phases/victory-phase"; -import { allAbilities } from "#app/data/ability"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import { SPLASH_ONLY } from "#test/utils/testUtils"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Abilities - Forecast", () => { let phaserGame: Phaser.Game; @@ -31,7 +30,7 @@ describe("Abilities - Forecast", () => { * @param initialForm The initial form pre form change */ const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => { - game.override.weather(weather).starterForms({[Species.CASTFORM]: initialForm}); + game.override.weather(weather).starterForms({ [Species.CASTFORM]: initialForm }); await game.startBattle([Species.CASTFORM]); game.move.select(Moves.SPLASH); @@ -53,54 +52,6 @@ describe("Abilities - Forecast", () => { expect(game.scene.getPlayerPokemon()?.formIndex).toBe(NORMAL_FORM); }; - /** - * Tests transforming back to match the weather when Cloud Nine/Air Lock user is fainted - * @param {GameManager} game The game manager instance - * @param {Abilities} ability The ability that will go out of battle (faint) - */ - const testTransformAfterAbilityFaint = async (game: GameManager, ability: Abilities) => { - game.override.enemyAbility(ability).weather(WeatherType.SNOW).enemySpecies(Species.SHUCKLE); - await game.startBattle([Species.CASTFORM]); - const castform = game.scene.getPlayerPokemon(); - - expect(castform?.formIndex).toBe(NORMAL_FORM); - - game.move.select(Moves.TACKLE); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); - await game.phaseInterceptor.to(DamagePhase); - - await game.doKillOpponents(); - await game.phaseInterceptor.to(VictoryPhase); - - expect(castform?.formIndex).toBe(SNOWY_FORM); - }; - - /** - * Tests transforming back to match the weather when Cloud Nine/Air Lock user is switched out - * @param {GameManager} game The game manager instance - * @param {Abilities} ability The ability that will go out of battle (switched out) - */ - const testTransformAfterAbilitySwitchOut = async (game: GameManager, ability: Abilities) => { - game.override - .weather(WeatherType.SNOW) - .enemySpecies(Species.CASTFORM) - .enemyAbility(Abilities.FORECAST) - .ability(ability); - await game.startBattle([Species.PICHU, Species.PIKACHU]); - - const castform = game.scene.getEnemyPokemon(); - - // We mock the return value of the second Pokemon to be other than Air Lock/Cloud Nine - vi.spyOn(game.scene.getParty()[1]!, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); - expect(game.scene.getParty()[1]?.hasAbility(Abilities.BALL_FETCH)); - - expect(castform?.formIndex).toBe(NORMAL_FORM); - - game.doSwitchPokemon(1); - await game.phaseInterceptor.to(MovePhase); - expect(castform?.formIndex).toBe(SNOWY_FORM); - }; - beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -113,55 +64,127 @@ describe("Abilities - Forecast", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([ Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE ]) + game.override + .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE]) + .enemySpecies(Species.MAGIKARP) .enemyMoveset(SPLASH_ONLY) .enemyAbility(Abilities.BALL_FETCH); }); - it("changes to Sunny Form during Harsh Sunlight", async () => { - await testWeatherFormChange(game, WeatherType.SUNNY, SUNNY_FORM); - }); + it("changes form based on weather", async () => { + game.override + .moveset([Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SNOWSCAPE, Moves.SPLASH]) + .battleType("double") + .starterForms({ + [Species.KYOGRE]: 1, + [Species.GROUDON]: 1, + [Species.RAYQUAZA]: 1 + }); + await game.startBattle([Species.CASTFORM, Species.FEEBAS, Species.KYOGRE, Species.GROUDON, Species.RAYQUAZA, Species.ALTARIA]); - it("changes to Sunny Form during Extreme Harsh Sunlight", async () => { - await testWeatherFormChange(game, WeatherType.HARSH_SUN, SUNNY_FORM); - }); + vi.spyOn(game.scene.getParty()[5], "getAbility").mockReturnValue(allAbilities[Abilities.CLOUD_NINE]); - it("changes to Rainy Form during Rain", async () => { - await testWeatherFormChange(game, WeatherType.RAIN, RAINY_FORM); - }); + const castform = game.scene.getPlayerField()[0]; + expect(castform.formIndex).toBe(NORMAL_FORM); - it("changes to Rainy Form during Heavy Rain", async () => { - await testWeatherFormChange(game, WeatherType.HEAVY_RAIN, RAINY_FORM); - }); + game.move.select(Moves.RAIN_DANCE); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); - it("changes to Snowy Form during Hail", async () => { - await testWeatherFormChange(game, WeatherType.HAIL, SNOWY_FORM); - }); + expect(castform.formIndex).toBe(RAINY_FORM); - it("changes to Snowy Form during Snow", async () => { - await testWeatherFormChange(game, WeatherType.SNOW, SNOWY_FORM); - }); + game.move.select(Moves.SUNNY_DAY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); - it("reverts to Normal Form during Sandstorm", async () => { - await testWeatherFormChange(game, WeatherType.SANDSTORM, NORMAL_FORM, SUNNY_FORM); - }); + expect(castform.formIndex).toBe(SUNNY_FORM); - it("reverts to Normal Form during Fog", async () => { - await testWeatherFormChange(game, WeatherType.FOG, NORMAL_FORM, SUNNY_FORM); - }); + game.move.select(Moves.SNOWSCAPE); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); - it("reverts to Normal Form during Strong Winds", async () => { - await testWeatherFormChange(game, WeatherType.STRONG_WINDS, NORMAL_FORM, SUNNY_FORM); - }); + expect(castform.formIndex).toBe(SNOWY_FORM); + + game.override.moveset([Moves.HAIL, Moves.SANDSTORM, Moves.SNOWSCAPE, Moves.SPLASH]); + + game.move.select(Moves.SANDSTORM); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(NORMAL_FORM); + + game.move.select(Moves.HAIL); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(SNOWY_FORM); + + game.move.select(Moves.SPLASH); + game.doSwitchPokemon(2); // Feebas now 2, Kyogre 1 + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(RAINY_FORM); + + game.move.select(Moves.SPLASH); + game.doSwitchPokemon(3); // Kyogre now 3, Groudon 1 + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(SUNNY_FORM); + + game.move.select(Moves.SPLASH); + game.doSwitchPokemon(4); // Groudon now 4, Rayquaza 1 + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(NORMAL_FORM); + + game.move.select(Moves.SPLASH); + game.doSwitchPokemon(2); // Rayquaza now 2, Feebas 1 + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(NORMAL_FORM); + + game.move.select(Moves.SNOWSCAPE); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(SNOWY_FORM); + + game.move.select(Moves.SPLASH); + game.doSwitchPokemon(5); // Feebas now 5, Altaria 1 + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(NORMAL_FORM); + + game.move.select(Moves.SPLASH); + game.doSwitchPokemon(5); // Altaria now 5, Feebas 1 + await game.phaseInterceptor.to("MovePhase"); + await game.toNextTurn(); + + expect(castform.formIndex).toBe(SNOWY_FORM); + + game.scene.arena.trySetWeather(WeatherType.FOG, false); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("TurnStartPhase"); + + expect(castform.formIndex).toBe(NORMAL_FORM); + }, 30 * 1000); it("reverts to Normal Form during Clear weather", async () => { await testWeatherFormChange(game, WeatherType.NONE, NORMAL_FORM, SUNNY_FORM); }); - it("reverts to Normal Form if a Pokémon on the field has Cloud Nine", async () => { - await testRevertFormAgainstAbility(game, Abilities.CLOUD_NINE); - }); - it("reverts to Normal Form if a Pokémon on the field has Air Lock", async () => { await testRevertFormAgainstAbility(game, Abilities.AIR_LOCK); }); @@ -177,93 +200,50 @@ describe("Abilities - Forecast", () => { expect(game.scene.getEnemyPokemon()?.formIndex).not.toBe(RAINY_FORM); }); - it("cannot be copied", async () => { - game.override.enemyAbility(Abilities.TRACE); - await game.startBattle([Species.CASTFORM]); + it("reverts to Normal Form when Castform loses Forecast, changes form to match the weather when it regains it", async () => { + game.override.moveset([Moves.SKILL_SWAP, Moves.WORRY_SEED, Moves.SPLASH]).weather(WeatherType.RAIN).battleType("double"); + await game.startBattle([Species.CASTFORM, Species.FEEBAS]); - game.move.select(Moves.SPLASH); + const castform = game.scene.getPlayerField()[0]; - expect(game.scene.getEnemyPokemon()?.hasAbility(Abilities.FORECAST)).toBe(false); - }); + expect(castform.formIndex).toBe(RAINY_FORM); - it("(Skill Swap) reverts to Normal Form when Castform loses Forecast, changes form to match the weather when it regains it", async () => { - game.override.moveset([Moves.SKILL_SWAP]).weather(WeatherType.RAIN); - await game.startBattle([Species.CASTFORM]); - const castform = game.scene.getPlayerPokemon(); + game.move.select(Moves.SKILL_SWAP, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.SKILL_SWAP, 1, BattlerIndex.PLAYER); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); - expect(castform?.formIndex).toBe(RAINY_FORM); + await game.phaseInterceptor.to("MoveEndPhase"); + expect(castform.formIndex).toBe(NORMAL_FORM); - // First turn - loses Forecast - game.move.select(Moves.SKILL_SWAP); - await game.phaseInterceptor.to(TurnEndPhase); - - expect(castform?.formIndex).toBe(NORMAL_FORM); - - // Second turn - regains Forecast - game.move.select(Moves.SKILL_SWAP); - await game.phaseInterceptor.to(TurnEndPhase); - - expect(castform?.formIndex).toBe(RAINY_FORM); - }); - - it("(Worry Seed) reverts to Normal Form when Castform loses Forecast, changes form to match the weather when it regains it", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.WORRY_SEED)).weather(WeatherType.RAIN); - await game.startBattle([Species.CASTFORM, Species.PIKACHU]); - const castform = game.scene.getPlayerPokemon(); - - expect(castform?.formIndex).toBe(RAINY_FORM); - - // First turn - loses Forecast - game.move.select(Moves.SPLASH); - await game.phaseInterceptor.to(TurnEndPhase); - - expect(castform?.formIndex).toBe(NORMAL_FORM); + await game.phaseInterceptor.to("MoveEndPhase"); + expect(castform.formIndex).toBe(RAINY_FORM); await game.toNextTurn(); - // Second turn - switch out Castform, regains Forecast - game.doSwitchPokemon(1); - await game.toNextTurn(); + game.move.select(Moves.SPLASH); + game.move.select(Moves.WORRY_SEED, 1, BattlerIndex.PLAYER); + await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.phaseInterceptor.to("MoveEndPhase"); - // Third turn - switch in Castform - game.doSwitchPokemon(1); - await game.phaseInterceptor.to(MovePhase); - - expect(castform?.formIndex).toBe(RAINY_FORM); - }); - - it("reverts to Normal Form when active weather ends", async () => { - await game.startBattle([Species.CASTFORM]); - const castform = game.scene.getPlayerPokemon(); - - game.move.select(Moves.SUNNY_DAY); - await game.phaseInterceptor.to(TurnEndPhase); - - while (game.scene.arena.weather && game.scene.arena.weather.turnsLeft > 0) { - game.move.select(Moves.SPLASH); - expect(castform?.formIndex).toBe(SUNNY_FORM); - await game.toNextTurn(); - } - - expect(castform?.formIndex).toBe(NORMAL_FORM); + expect(castform.formIndex).toBe(NORMAL_FORM); }); it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { game.override.enemyMoveset(Array(4).fill(Moves.GASTRO_ACID)).weather(WeatherType.RAIN); await game.startBattle([Species.CASTFORM, Species.PIKACHU]); - const castform = game.scene.getPlayerPokemon(); + const castform = game.scene.getPlayerPokemon()!; - expect(castform?.formIndex).toBe(RAINY_FORM); + expect(castform.formIndex).toBe(RAINY_FORM); // First turn - Forecast is suppressed game.move.select(Moves.SPLASH); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceHit(); await game.phaseInterceptor.to(TurnEndPhase); - expect(castform?.summonData.abilitySuppressed).toBe(true); - expect(castform?.formIndex).toBe(NORMAL_FORM); + expect(castform.summonData.abilitySuppressed).toBe(true); + expect(castform.formIndex).toBe(NORMAL_FORM); await game.toNextTurn(); @@ -275,21 +255,8 @@ describe("Abilities - Forecast", () => { game.doSwitchPokemon(1); await game.phaseInterceptor.to(MovePhase); - expect(castform?.summonData.abilitySuppressed).toBe(false); - expect(castform?.formIndex).toBe(RAINY_FORM); - }); - - it("if a Pokémon transforms into Castform, the Pokémon will remain in the same form as the target Castform, regardless of the weather", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.TRANSFORM)); - await game.startBattle([Species.CASTFORM]); - - game.move.select(Moves.SUNNY_DAY); - await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - - await game.phaseInterceptor.to(TurnEndPhase); - - expect(game.scene.getPlayerPokemon()?.formIndex).toBe(SUNNY_FORM); - expect(game.scene.getEnemyPokemon()?.formIndex).toBe(NORMAL_FORM); + expect(castform.summonData.abilitySuppressed).toBe(false); + expect(castform.formIndex).toBe(RAINY_FORM); }); it("does not change Castform's form until after Stealth Rock deals damage", async () => { @@ -304,31 +271,15 @@ describe("Abilities - Forecast", () => { game.doSwitchPokemon(1); await game.phaseInterceptor.to(PostSummonPhase); - const castform = game.scene.getPlayerPokemon(); + const castform = game.scene.getPlayerPokemon()!; // Damage phase should come first await game.phaseInterceptor.to(DamagePhase); - expect(castform?.hp).toBeLessThan(castform?.getMaxHp() ?? 0); + expect(castform.hp).toBeLessThan(castform.getMaxHp()); // Then change form await game.phaseInterceptor.to(QuietFormChangePhase); - expect(castform?.formIndex).toBe(RAINY_FORM); - }); - - it("transforms to weather-based form when Pokemon with Air Lock is fainted", async () => { - await testTransformAfterAbilityFaint(game, Abilities.AIR_LOCK); - }); - - it("transforms to weather-based form when Pokemon with Cloud Nine is fainted", async () => { - await testTransformAfterAbilityFaint(game, Abilities.CLOUD_NINE); - }); - - it("transforms to weather-based form when Pokemon with Air Lock is switched out", async () => { - await testTransformAfterAbilitySwitchOut(game, Abilities.AIR_LOCK); - }); - - it("transforms to weather-based form when Pokemon with Cloud Nine is switched out", async () => { - await testTransformAfterAbilitySwitchOut(game, Abilities.CLOUD_NINE); + expect(castform.formIndex).toBe(RAINY_FORM); }); it("should be in Normal Form after the user is switched out", async () => { diff --git a/src/test/abilities/galvanize.test.ts b/src/test/abilities/galvanize.test.ts new file mode 100644 index 00000000000..4b0ddc14d7c --- /dev/null +++ b/src/test/abilities/galvanize.test.ts @@ -0,0 +1,133 @@ +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/move"; +import { Type } from "#app/data/type"; +import { Abilities } from "#app/enums/abilities"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; +import { HitResult } from "#app/field/pokemon"; +import GameManager from "#test/utils/gameManager"; +import { SPLASH_ONLY } from "#test/utils/testUtils"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +const TIMEOUT = 20 * 1000; + +describe("Abilities - Galvanize", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .battleType("single") + .startingLevel(100) + .ability(Abilities.GALVANIZE) + .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) + .enemySpecies(Species.DUSCLOPS) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(SPLASH_ONLY) + .enemyLevel(100); + }); + + it("should change Normal-type attacks to Electric type and boost their power", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + + const move = allMoves[Moves.TACKLE]; + vi.spyOn(move, "calculateBattlePower"); + + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(playerPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC); + expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.EFFECTIVE); + expect(move.calculateBattlePower).toHaveReturnedWith(48); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + }, TIMEOUT); + + it("should cause Normal-type attacks to activate Volt Absorb", async () => { + game.override.enemyAbility(Abilities.VOLT_ABSORB); + + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + + enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); + + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(playerPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC); + expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.NO_EFFECT); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + }, TIMEOUT); + + it("should not change the type of variable-type moves", async () => { + game.override.enemySpecies(Species.MIGHTYENA); + + await game.startBattle([Species.ESPEON]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + + game.move.select(Moves.REVELATION_DANCE); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(playerPokemon.getMoveType).not.toHaveLastReturnedWith(Type.ELECTRIC); + expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.NO_EFFECT); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + }, TIMEOUT); + + it("should affect all hits of a Normal-type multi-hit move", async () => { + await game.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + vi.spyOn(playerPokemon, "getMoveType"); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + + game.move.select(Moves.FURY_SWIPES); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.move.forceHit(); + + await game.phaseInterceptor.to("MoveEffectPhase"); + expect(playerPokemon.turnData.hitCount).toBeGreaterThan(1); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + + while (playerPokemon.turnData.hitsLeft > 0) { + const enemyStartingHp = enemyPokemon.hp; + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(playerPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC); + expect(enemyPokemon.hp).toBeLessThan(enemyStartingHp); + } + + expect(enemyPokemon.apply).not.toHaveReturnedWith(HitResult.NO_EFFECT); + }, TIMEOUT); +}); diff --git a/src/test/abilities/libero.test.ts b/src/test/abilities/libero.test.ts index 16597e90285..7895e7de6bf 100644 --- a/src/test/abilities/libero.test.ts +++ b/src/test/abilities/libero.test.ts @@ -76,7 +76,7 @@ describe("Abilities - Libero", () => { expect(leadPokemon.summonData.abilitiesApplied.filter((a) => a === Abilities.LIBERO)).toHaveLength(1); const leadPokemonType = Type[leadPokemon.getTypes()[0]]; - const moveType = Type[allMoves[Moves.AGILITY].defaultType]; + const moveType = Type[allMoves[Moves.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); await game.toNextTurn(); @@ -249,7 +249,7 @@ describe("Abilities - Libero", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].defaultType]; + leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -357,6 +357,6 @@ function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Mov expect(pokemon.summonData.abilitiesApplied).toContain(Abilities.LIBERO); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = Type[pokemon.getTypes()[0]], - moveType = Type[allMoves[move].defaultType]; + moveType = Type[allMoves[move].type]; expect(pokemonType).toBe(moveType); } diff --git a/src/test/abilities/protean.test.ts b/src/test/abilities/protean.test.ts index a7c6799132f..6ecabbfade0 100644 --- a/src/test/abilities/protean.test.ts +++ b/src/test/abilities/protean.test.ts @@ -76,7 +76,7 @@ describe("Abilities - Protean", () => { expect(leadPokemon.summonData.abilitiesApplied.filter((a) => a === Abilities.PROTEAN)).toHaveLength(1); const leadPokemonType = Type[leadPokemon.getTypes()[0]]; - const moveType = Type[allMoves[Moves.AGILITY].defaultType]; + const moveType = Type[allMoves[Moves.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); await game.toNextTurn(); @@ -249,7 +249,7 @@ describe("Abilities - Protean", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].defaultType]; + leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -357,6 +357,6 @@ function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Mov expect(pokemon.summonData.abilitiesApplied).toContain(Abilities.PROTEAN); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = Type[pokemon.getTypes()[0]], - moveType = Type[allMoves[move].defaultType]; + moveType = Type[allMoves[move].type]; expect(pokemonType).toBe(moveType); } diff --git a/src/test/eggs/egg.test.ts b/src/test/eggs/egg.test.ts index 7f3d92fa51c..28f1b7f0a6c 100644 --- a/src/test/eggs/egg.test.ts +++ b/src/test/eggs/egg.test.ts @@ -8,7 +8,6 @@ import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import BattleScene from "../../battle-scene"; describe("Egg Generation Tests", () => { let phaserGame: Phaser.Game; @@ -18,6 +17,7 @@ describe("Egg Generation Tests", () => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); + game = new GameManager(phaserGame); }); afterEach(() => { @@ -25,13 +25,12 @@ describe("Egg Generation Tests", () => { vi.restoreAllMocks(); }); - beforeEach(async() => { - game = new GameManager(phaserGame); + beforeEach(async () => { await game.importData("src/test/utils/saves/everything.prsv"); }); it("should return Arceus for the 10th of June", () => { - const scene = new BattleScene(); + const scene = game.scene; const timestamp = new Date(2024, 5, 10, 15, 0, 0, 0).getTime(); const expectedSpecies = Species.ARCEUS; @@ -40,7 +39,7 @@ describe("Egg Generation Tests", () => { expect(result).toBe(expectedSpecies); }); it("should return Arceus for the 10th of July", () => { - const scene = new BattleScene(); + const scene = game.scene; const timestamp = new Date(2024, 6, 10, 15, 0, 0, 0).getTime(); const expectedSpecies = Species.ARCEUS; @@ -48,12 +47,12 @@ describe("Egg Generation Tests", () => { expect(result).toBe(expectedSpecies); }); - it("should hatch an Arceus. Set from legendary gacha", async() => { + it("should hatch an Arceus. Set from legendary gacha", async () => { const scene = game.scene; const timestamp = new Date(2024, 6, 10, 15, 0, 0, 0).getTime(); const expectedSpecies = Species.ARCEUS; - const result = new Egg({scene, timestamp, sourceType: EggSourceType.GACHA_LEGENDARY, tier: EggTier.MASTER}).generatePlayerPokemon(scene).species.speciesId; + const result = new Egg({ scene, timestamp, sourceType: EggSourceType.GACHA_LEGENDARY, tier: EggTier.MASTER }).generatePlayerPokemon(scene).species.speciesId; expect(result).toBe(expectedSpecies); }); @@ -61,7 +60,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedSpecies = Species.ARCEUS; - const result = new Egg({scene, species: expectedSpecies}).generatePlayerPokemon(scene).species.speciesId; + const result = new Egg({ scene, species: expectedSpecies }).generatePlayerPokemon(scene).species.speciesId; expect(result).toBe(expectedSpecies); }); @@ -69,7 +68,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedTier = EggTier.COMMON; - const result = new Egg({scene, tier: expectedTier}).tier; + const result = new Egg({ scene, tier: expectedTier }).tier; expect(result).toBe(expectedTier); }); @@ -77,7 +76,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedTier = EggTier.GREAT; - const result = new Egg({scene, tier: expectedTier}).tier; + const result = new Egg({ scene, tier: expectedTier }).tier; expect(result).toBe(expectedTier); }); @@ -85,7 +84,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedTier = EggTier.ULTRA; - const result = new Egg({scene, tier: expectedTier}).tier; + const result = new Egg({ scene, tier: expectedTier }).tier; expect(result).toBe(expectedTier); }); @@ -93,7 +92,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedTier = EggTier.MASTER; - const result = new Egg({scene, tier: expectedTier}).tier; + const result = new Egg({ scene, tier: expectedTier }).tier; expect(result).toBe(expectedTier); }); @@ -101,7 +100,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedResult = true; - const result = new Egg({scene, species: Species.MANAPHY}).isManaphyEgg(); + const result = new Egg({ scene, species: Species.MANAPHY }).isManaphyEgg(); expect(result).toBe(expectedResult); }); @@ -109,7 +108,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedResult = true; - const result = new Egg({scene, tier: EggTier.COMMON, id: 204}).isManaphyEgg(); + const result = new Egg({ scene, tier: EggTier.COMMON, id: 204 }).isManaphyEgg(); expect(result).toBe(expectedResult); }); @@ -117,7 +116,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedHatchWaves = 1000; - const result = new Egg({scene, hatchWaves: expectedHatchWaves}).hatchWaves; + const result = new Egg({ scene, hatchWaves: expectedHatchWaves }).hatchWaves; expect(result).toBe(expectedHatchWaves); }); @@ -125,7 +124,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedResult = true; - const result = new Egg({scene, isShiny: expectedResult, species: Species.BULBASAUR}).generatePlayerPokemon(scene).isShiny(); + const result = new Egg({ scene, isShiny: expectedResult, species: Species.BULBASAUR }).generatePlayerPokemon(scene).isShiny(); expect(result).toBe(expectedResult); }); @@ -133,7 +132,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedVariantTier = VariantTier.COMMON; - const result = new Egg({scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR}).generatePlayerPokemon(scene).variant; + const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon(scene).variant; expect(result).toBe(expectedVariantTier); }); @@ -141,7 +140,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedVariantTier = VariantTier.RARE; - const result = new Egg({scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR}).generatePlayerPokemon(scene).variant; + const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon(scene).variant; expect(result).toBe(expectedVariantTier); }); @@ -149,14 +148,14 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedVariantTier = VariantTier.EPIC; - const result = new Egg({scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR}).generatePlayerPokemon(scene).variant; + const result = new Egg({ scene, isShiny: true, variantTier: expectedVariantTier, species: Species.BULBASAUR }).generatePlayerPokemon(scene).variant; expect(result).toBe(expectedVariantTier); }); it("should return an egg with an egg move index of 0, 1, 2 or 3", () => { const scene = game.scene; - const eggMoveIndex = new Egg({scene}).eggMoveIndex; + const eggMoveIndex = new Egg({ scene }).eggMoveIndex; const result = eggMoveIndex && eggMoveIndex >= 0 && eggMoveIndex <= 3; expect(result).toBe(true); @@ -165,14 +164,14 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedEggMoveIndex = 3; - const result = new Egg({scene, eggMoveIndex: expectedEggMoveIndex}).eggMoveIndex; + const result = new Egg({ scene, eggMoveIndex: expectedEggMoveIndex }).eggMoveIndex; expect(result).toBe(expectedEggMoveIndex); }); it("should return a hatched pokemon with a hidden ability", () => { const scene = game.scene; - const playerPokemon = new Egg({scene, overrideHiddenAbility: true, species: Species.BULBASAUR}).generatePlayerPokemon(scene); + const playerPokemon = new Egg({ scene, overrideHiddenAbility: true, species: Species.BULBASAUR }).generatePlayerPokemon(scene); const expectedAbilityIndex = playerPokemon.species.ability2 ? 2 : 1; const result = playerPokemon.abilityIndex; @@ -183,7 +182,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedEggCount = 1; - new Egg({scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true}); + new Egg({ scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true }); const result = scene.gameData.eggs.length; @@ -193,7 +192,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedEggTier = EggTier.COMMON; - const result = new Egg({scene, tier: EggTier.MASTER, species: Species.BULBASAUR}).tier; + const result = new Egg({ scene, tier: EggTier.MASTER, species: Species.BULBASAUR }).tier; expect(result).toBe(expectedEggTier); }); @@ -201,7 +200,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedHatchWaves = 10; - const result = new Egg({scene, tier: EggTier.MASTER, species: Species.BULBASAUR}).hatchWaves; + const result = new Egg({ scene, tier: EggTier.MASTER, species: Species.BULBASAUR }).hatchWaves; expect(result).toBe(expectedHatchWaves); }); @@ -232,7 +231,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startPityValues = [...scene.gameData.eggPity]; - new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.COMMON}); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.COMMON }); expect(scene.gameData.eggPity[EggTier.GREAT]).toBe(startPityValues[EggTier.GREAT] + 1); expect(scene.gameData.eggPity[EggTier.ULTRA]).toBe(startPityValues[EggTier.ULTRA] + 1); @@ -242,7 +241,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startPityValues = [...scene.gameData.eggPity]; - new Egg({scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true, tier: EggTier.COMMON}); + new Egg({ scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true, tier: EggTier.COMMON }); expect(scene.gameData.eggPity[EggTier.GREAT]).toBe(startPityValues[EggTier.GREAT] + 1); expect(scene.gameData.eggPity[EggTier.ULTRA]).toBe(startPityValues[EggTier.ULTRA] + 1); @@ -253,7 +252,7 @@ describe("Egg Generation Tests", () => { const startingManaphyEggCount = scene.gameData.gameStats.manaphyEggsPulled; for (let i = 0; i < 200; i++) { - new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, species: Species.BULBASAUR}); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, species: Species.BULBASAUR }); } expect(scene.gameData.gameStats.manaphyEggsPulled).toBe(startingManaphyEggCount); @@ -262,7 +261,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingManaphyEggCount = scene.gameData.gameStats.manaphyEggsPulled; - new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, id: 204, tier: EggTier.COMMON}); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, id: 204, tier: EggTier.COMMON }); expect(scene.gameData.gameStats.manaphyEggsPulled).toBe(startingManaphyEggCount + 1); }); @@ -270,7 +269,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingRareEggsPulled = scene.gameData.gameStats.rareEggsPulled; - new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.GREAT}); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.GREAT }); expect(scene.gameData.gameStats.rareEggsPulled).toBe(startingRareEggsPulled + 1); }); @@ -278,7 +277,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingEpicEggsPulled = scene.gameData.gameStats.epicEggsPulled; - new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.ULTRA}); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.ULTRA }); expect(scene.gameData.gameStats.epicEggsPulled).toBe(startingEpicEggsPulled + 1); }); @@ -286,7 +285,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingLegendaryEggsPulled = scene.gameData.gameStats.legendaryEggsPulled; - new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.MASTER}); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.MASTER }); expect(scene.gameData.gameStats.legendaryEggsPulled).toBe(startingLegendaryEggsPulled + 1); }); @@ -297,8 +296,8 @@ describe("Egg Generation Tests", () => { const expectedTier1 = EggTier.MASTER; const expectedTier2 = EggTier.ULTRA; - const result1 = new Egg({scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true}).tier; - const result2 = new Egg({scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true}).tier; + const result1 = new Egg({ scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true }).tier; + const result2 = new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true }).tier; expect(result1).toBe(expectedTier1); expect(result2).toBe(expectedTier2); @@ -306,7 +305,7 @@ describe("Egg Generation Tests", () => { it("should generate an epic shiny from pokemon with a different form", () => { const scene = game.scene; - const egg = new Egg({scene, isShiny: true, variantTier: VariantTier.EPIC, species: Species.MIRAIDON}); + const egg = new Egg({ scene, isShiny: true, variantTier: VariantTier.EPIC, species: Species.MIRAIDON }); expect(egg.variantTier).toBe(VariantTier.EPIC); }); diff --git a/src/test/moves/belly_drum.test.ts b/src/test/moves/belly_drum.test.ts index 631de952a58..e4956c6e83a 100644 --- a/src/test/moves/belly_drum.test.ts +++ b/src/test/moves/belly_drum.test.ts @@ -6,6 +6,8 @@ import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { SPLASH_ONLY } from "../utils/testUtils"; +import { Abilities } from "#app/enums/abilities"; const TIMEOUT = 20 * 1000; // RATIO : HP Cost of Move @@ -29,12 +31,14 @@ describe("Moves - BELLY DRUM", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.starterSpecies(Species.MAGIKARP); - game.override.enemySpecies(Species.SNORLAX); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.moveset([Moves.BELLY_DRUM]); - game.override.enemyMoveset([Moves.SPLASH]); + game.override + .starterSpecies(Species.MAGIKARP) + .enemySpecies(Species.SNORLAX) + .startingLevel(100) + .enemyLevel(100) + .moveset([Moves.BELLY_DRUM]) + .enemyMoveset(SPLASH_ONLY) + .enemyAbility(Abilities.BALL_FETCH); }); // Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Belly_Drum_(move) diff --git a/src/test/moves/effectiveness.test.ts b/src/test/moves/effectiveness.test.ts new file mode 100644 index 00000000000..af44586b69d --- /dev/null +++ b/src/test/moves/effectiveness.test.ts @@ -0,0 +1,70 @@ +import { allMoves } from "#app/data/move"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { TrainerSlot } from "#app/data/trainer-config"; +import { Abilities } from "#app/enums/abilities"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; +import * as Messages from "#app/messages"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; + +function testMoveEffectiveness(game: GameManager, move: Moves, targetSpecies: Species, + expected: number, targetAbility: Abilities = Abilities.BALL_FETCH): void { + // Suppress getPokemonNameWithAffix because it calls on a null battle spec + vi.spyOn(Messages, "getPokemonNameWithAffix").mockReturnValue(""); + game.override.enemyAbility(targetAbility); + const user = game.scene.addPlayerPokemon(getPokemonSpecies(Species.SNORLAX), 5); + const target = game.scene.addEnemyPokemon(getPokemonSpecies(targetSpecies), 5, TrainerSlot.NONE); + + expect(target.getMoveEffectiveness(user, allMoves[move])).toBe(expected); +} + +describe("Moves - Type Effectiveness", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + game = new GameManager(phaserGame); + game.override.ability(Abilities.BALL_FETCH); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + it("Normal-type attacks are neutrally effective against Normal-type Pokemon", + () => testMoveEffectiveness(game, Moves.TACKLE, Species.SNORLAX, 1) + ); + + it("Normal-type attacks are not very effective against Steel-type Pokemon", + () => testMoveEffectiveness(game, Moves.TACKLE, Species.REGISTEEL, 0.5) + ); + + it("Normal-type attacks are doubly resisted by Steel/Rock-type Pokemon", + () => testMoveEffectiveness(game, Moves.TACKLE, Species.AGGRON, 0.25) + ); + + it("Normal-type attacks have no effect on Ghost-type Pokemon", + () => testMoveEffectiveness(game, Moves.TACKLE, Species.DUSCLOPS, 0) + ); + + it("Normal-type status moves are not affected by type matchups", + () => testMoveEffectiveness(game, Moves.GROWL, Species.DUSCLOPS, 1) + ); + + it("Electric-type attacks are super-effective against Water-type Pokemon", + () => testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.BLASTOISE, 2) + ); + + it("Electric-type attacks are doubly super-effective against Water/Flying-type Pokemon", + () => testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 4) + ); + + it("Electric-type attacks are negated by Volt Absorb", + () => testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 0, Abilities.VOLT_ABSORB) + ); +}); diff --git a/src/test/moves/lunar_blessing.test.ts b/src/test/moves/lunar_blessing.test.ts new file mode 100644 index 00000000000..73647716f06 --- /dev/null +++ b/src/test/moves/lunar_blessing.test.ts @@ -0,0 +1,83 @@ +import { StatusEffect } from "#app/enums/status-effect.js"; +import { CommandPhase } from "#app/phases/command-phase.js"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import { SPLASH_ONLY } from "#test/utils/testUtils"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Lunar Blessing", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ type: Phaser.HEADLESS }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override.battleType("double"); + + game.override.enemySpecies(Species.SHUCKLE); + game.override.enemyMoveset(SPLASH_ONLY); + game.override.enemyAbility(Abilities.BALL_FETCH); + + game.override.moveset([Moves.LUNAR_BLESSING, Moves.SPLASH]); + game.override.ability(Abilities.BALL_FETCH); + }); + + it("should restore 25% HP of the user and its ally", async () => { + await game.startBattle([Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); + + vi.spyOn(leftPlayer, "getMaxHp").mockReturnValue(100); + vi.spyOn(rightPlayer, "getMaxHp").mockReturnValue(100); + + const initialHp = 1; + leftPlayer["hp"] = initialHp; + rightPlayer["hp"] = initialHp; + const expectedHeal = 25; + + vi.spyOn(leftPlayer, "heal"); + vi.spyOn(rightPlayer, "heal"); + + + game.move.select(Moves.LUNAR_BLESSING, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.heal).toHaveBeenCalledOnce(); + expect(leftPlayer.heal).toHaveReturnedWith(expectedHeal); + + expect(rightPlayer.heal).toHaveBeenCalledOnce(); + expect(rightPlayer.heal).toHaveReturnedWith(expectedHeal); + }); + + it("should cure status effect of the user and its ally", async () => { + game.override.statusEffect(StatusEffect.BURN); + await game.startBattle([Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); + + vi.spyOn(leftPlayer, "resetStatus"); + vi.spyOn(rightPlayer, "resetStatus"); + + game.move.select(Moves.LUNAR_BLESSING, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(rightPlayer.resetStatus).toHaveBeenCalledOnce(); + + expect(leftPlayer.status?.effect).toBeUndefined(); + expect(rightPlayer.status?.effect).toBeUndefined(); + }); +}); diff --git a/src/test/moves/multi_target.test.ts b/src/test/moves/multi_target.test.ts index b8c1f67b3df..16ccd5519b1 100644 --- a/src/test/moves/multi_target.test.ts +++ b/src/test/moves/multi_target.test.ts @@ -1,7 +1,7 @@ -import { getMoveTargets } from "#app/data/move"; +import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import * as Utils from "#app/utils"; import { Moves } from "#enums/moves"; import GameManager from "#test/utils/gameManager"; import { SPLASH_ONLY } from "#test/utils/testUtils"; @@ -10,7 +10,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; const TIMEOUT = 20 * 1000; -describe("Moves - Multi target", () => { +describe("Multi-target damage reduction", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -21,160 +21,111 @@ describe("Moves - Multi target", () => { }); afterEach(() => { - afterTrial(game); + game.phaseInterceptor.restoreOg(); }); beforeEach(() => { - game = beforeTrial(phaserGame); + game = new GameManager(phaserGame); + game.override + .disableCrits() + .battleType("double") + .enemyLevel(100) + .startingLevel(100) + .enemySpecies(Species.POLIWAG) + .enemyMoveset(SPLASH_ONLY) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([Moves.TACKLE, Moves.DAZZLING_GLEAM, Moves.EARTHQUAKE, Moves.SPLASH]) + .ability(Abilities.BALL_FETCH); }); - it("2v2 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, false, false, true), TIMEOUT); + it("should reduce d.gleam damage when multiple enemies but not tackle", async () => { + await game.startBattle([Species.MAGIKARP, Species.FEEBAS]); - it("2v2 - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, false, false, true), TIMEOUT); + const [enemy1, enemy2] = game.scene.getEnemyField(); - it("2v1 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, false, true, true), TIMEOUT); + game.move.select(Moves.DAZZLING_GLEAM); + game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.phaseInterceptor.to("MoveEndPhase"); - it("2v1 - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, false, true, true), TIMEOUT); + const gleam1 = enemy1.getMaxHp() - enemy1.hp; + enemy1.hp = enemy1.getMaxHp(); - it("1v2 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, true, false, true), TIMEOUT); + await game.phaseInterceptor.to("MoveEndPhase"); - it("1v2 - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, true, false, true), TIMEOUT); + const tackle1 = enemy1.getMaxHp() - enemy1.hp; + enemy1.hp = enemy1.getMaxHp(); - it("1v1 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, true, true, false), TIMEOUT); + await game.killPokemon(enemy2); + await game.toNextTurn(); - it("2v2 (immune) - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, false, false, true, Abilities.LEVITATE), TIMEOUT); + game.move.select(Moves.DAZZLING_GLEAM); + game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); - it("2v2 (immune) - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, false, false, true, Abilities.LEVITATE), TIMEOUT); + await game.phaseInterceptor.to("MoveEndPhase"); - it("2v2 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, false, false, true), TIMEOUT); + const gleam2 = enemy1.getMaxHp() - enemy1.hp; + enemy1.hp = enemy1.getMaxHp(); - it("2v2 - target all near enemies - damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, false, false, true), TIMEOUT); + await game.phaseInterceptor.to("MoveEndPhase"); + const tackle2 = enemy1.getMaxHp() - enemy1.hp; - it("2v1 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, false, true, false), TIMEOUT); + // Single target moves don't get reduced + expect(tackle1).toBe(tackle2); + // Moves that target all enemies get reduced if there's more than one enemy + expect(gleam1).toBeLessThanOrEqual(Utils.toDmgValue(gleam2 * 0.75) + 1); + expect(gleam1).toBeGreaterThanOrEqual(Utils.toDmgValue(gleam2 * 0.75) - 1); + }, TIMEOUT); - it("2v1 - target all near enemies - no damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, false, true, false), TIMEOUT); + it("should reduce earthquake when more than one pokemon other than user is not fainted", async () => { + await game.startBattle([Species.MAGIKARP, Species.FEEBAS]); - it("1v2 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, true, false, true), TIMEOUT); + const player2 = game.scene.getParty()[1]; + const [enemy1, enemy2] = game.scene.getEnemyField(); - it("1v2 - target all near enemies - damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, true, false, true), TIMEOUT); - - it("1v1 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, true, true, false), TIMEOUT); - - it("2v2 (immune) - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, false, false, true, Abilities.SOUNDPROOF), TIMEOUT); - - it("2v2 (immune) - target all near enemies - damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, false, false, true, Abilities.SOUNDPROOF), TIMEOUT); - -}); - -async function checkTargetMultiplier(game: GameManager, attackMove: Moves, killAlly: boolean, killSecondEnemy: boolean, shouldMultiplied: boolean, oppAbility?: Abilities) { - // play an attack and check target count - game.override.enemyAbility(oppAbility ? oppAbility : Abilities.BALL_FETCH); - await game.startBattle(); - - const playerPokemonRepr = game.scene.getPlayerField(); - - killAllyAndEnemy(game, killAlly, killSecondEnemy); - - const targetCount = getMoveTargets(playerPokemonRepr[0], attackMove).targets.length; - const targetMultiplier = targetCount > 1 ? 0.75 : 1; - - if (shouldMultiplied) { - expect(targetMultiplier).toBe(0.75); - } else { - expect(targetMultiplier).toBe(1); - } -} - -async function checkDamageDecrease(game: GameManager, attackMove: Moves, killAlly: boolean, killSecondEnemy: boolean, shouldDecreased: boolean, ability?: Abilities) { - // Tested combination on first turn, 1v1 on second turn - await game.classicMode.runToSummon([Species.EEVEE, Species.EEVEE]); - - if (ability !== undefined) { - game.scene.getPlayerField()[1].abilityIndex = ability; - game.scene.getEnemyField()[1].abilityIndex = ability; - } - - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - - - await game.phaseInterceptor.to(TurnEndPhase); - - killAllyAndEnemy(game, killAlly, killSecondEnemy); - await game.toNextTurn(); - - const initialHp = game.scene.getEnemyField()[0].hp; - game.move.select(attackMove); - if (!killAlly) { + game.move.select(Moves.EARTHQUAKE); game.move.select(Moves.SPLASH, 1); - } + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); - await game.phaseInterceptor.to(TurnEndPhase); - const afterHp = game.scene.getEnemyField()[0].hp; + await game.phaseInterceptor.to("MoveEndPhase"); - killAllyAndEnemy(game, true, true); - await game.toNextTurn(); + const damagePlayer2Turn1 = player2.getMaxHp() - player2.hp; + const damageEnemy1Turn1 = enemy1.getMaxHp() - enemy1.hp; - game.scene.getEnemyField()[0].hp = initialHp; + player2.hp = player2.getMaxHp(); + enemy1.hp = enemy1.getMaxHp(); - const initialHp1v1 = game.scene.getEnemyField()[0].hp; - game.move.select(attackMove); + await game.killPokemon(enemy2); + await game.toNextTurn(); - await game.phaseInterceptor.to(TurnEndPhase); - const afterHp1v1 = game.scene.getEnemyField()[0].hp; + game.move.select(Moves.EARTHQUAKE); + game.move.select(Moves.SPLASH, 1); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); - if (shouldDecreased) { - expect(initialHp - afterHp).toBeLessThan(0.75 * (initialHp1v1 - afterHp1v1) + 2); - expect(initialHp - afterHp).toBeGreaterThan(0.75 * (initialHp1v1 - afterHp1v1) - 2); - } else { - expect(initialHp - afterHp).toBeLessThan(initialHp1v1 - afterHp1v1 + 2); - expect(initialHp - afterHp).toBeGreaterThan(initialHp1v1 - afterHp1v1 - 2); - } + await game.phaseInterceptor.to("MoveEndPhase"); -} + const damagePlayer2Turn2 = player2.getMaxHp() - player2.hp; + const damageEnemy1Turn2 = enemy1.getMaxHp() - enemy1.hp; -// To simulate the situation where all of the enemies or the player's Pokemons dies except for one. -function killAllyAndEnemy(game: GameManager, killAlly: boolean, killSecondEnemy: boolean) { - if (killAlly) { - leaveOnePlayerPokemon(game); - expect(game.scene.getPlayerField().filter(p => p.isActive()).length).toBe(1); - } - if (killSecondEnemy) { - leaveOneEnemyPokemon(game); - expect(game.scene.getEnemyField().filter(p => p.isActive()).length).toBe(1); - } -} + enemy1.hp = enemy1.getMaxHp(); -function leaveOnePlayerPokemon(game: GameManager) { - const playerPokemons = game.scene.getParty(); - for (let i = 1; i < playerPokemons.length; i++) { - playerPokemons[i].hp = 0; - } - expect(playerPokemons.filter(pokemon => pokemon.hp > 0).length).toBe(1); -} + // Turn 1: 3 targets, turn 2: 2 targets + // Both should have damage reduction + expect(damageEnemy1Turn1).toBe(damageEnemy1Turn2); + expect(damagePlayer2Turn1).toBe(damagePlayer2Turn2); -function leaveOneEnemyPokemon(game: GameManager) { - const enemyPokemons = game.scene.getEnemyParty(); - for (let i = 1; i < enemyPokemons.length; i++) { - enemyPokemons[i].hp = 0; - } -} + await game.killPokemon(player2); + await game.toNextTurn(); -function beforeTrial(phaserGame: Phaser.Game, single: boolean = false) { - const game = new GameManager(phaserGame); - game.override - .battleType("double") - .moveset([Moves.EARTHQUAKE, Moves.HYPER_VOICE, Moves.SURF, Moves.SPLASH]) - .ability(Abilities.BALL_FETCH) - .passiveAbility(Abilities.UNNERVE) - .enemyMoveset(SPLASH_ONLY) - .disableCrits() - .startingLevel(50) - .enemyLevel(40) - .enemySpecies(Species.EEVEE); - return game; -} + game.move.select(Moves.EARTHQUAKE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); -function afterTrial(game: GameManager) { - game.phaseInterceptor.restoreOg(); -} + await game.phaseInterceptor.to("MoveEndPhase"); + + const damageEnemy1Turn3 = enemy1.getMaxHp() - enemy1.hp; + // Turn 3: 1 target, should be no damage reduction + expect(damageEnemy1Turn1).toBeLessThanOrEqual(Utils.toDmgValue(damageEnemy1Turn3 * 0.75) + 1); + expect(damageEnemy1Turn1).toBeGreaterThanOrEqual(Utils.toDmgValue(damageEnemy1Turn3 * 0.75) - 1); + }, TIMEOUT); +}); diff --git a/src/test/moves/tera_blast.test.ts b/src/test/moves/tera_blast.test.ts index d261d4b856b..bd7df8403d1 100644 --- a/src/test/moves/tera_blast.test.ts +++ b/src/test/moves/tera_blast.test.ts @@ -62,9 +62,6 @@ describe("Moves - Tera Blast", () => { it("increases power if user is Stellar tera type", async () => { game.override.startingHeldItems([{ name: "TERA_SHARD", type: Type.STELLAR }]); - const stellarTypeMultiplier = 2; - const stellarTypeDmgBonus = 20; - const basePower = moveToCheck.power; await game.startBattle(); @@ -72,9 +69,25 @@ describe("Moves - Tera Blast", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); - expect(moveToCheck.calculateBattlePower).toHaveReturnedWith((basePower + stellarTypeDmgBonus) * stellarTypeMultiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); }, 20000); + it("is super effective against terastallized targets if user is Stellar tera type", async () => { + game.override.startingHeldItems([{ name: "TERA_SHARD", type: Type.STELLAR }]); + + await game.startBattle(); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "apply"); + vi.spyOn(enemyPokemon, "isTerastallized").mockReturnValue(true); + + game.move.select(Moves.TERA_BLAST); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); + }); + // Currently abilities are bugged and can't see when a move's category is changed it.skip("uses the higher stat of the user's Atk and SpAtk for damage calculation", async () => { game.override.enemyAbility(Abilities.TOXIC_DEBRIS); diff --git a/src/test/moves/thunder_wave.test.ts b/src/test/moves/thunder_wave.test.ts new file mode 100644 index 00000000000..0c91be29714 --- /dev/null +++ b/src/test/moves/thunder_wave.test.ts @@ -0,0 +1,102 @@ +import { StatusEffect } from "#app/data/status-effect"; +import { Abilities } from "#app/enums/abilities"; +import { EnemyPokemon } from "#app/field/pokemon"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { SPLASH_ONLY } from "../utils/testUtils"; + +const TIMEOUT = 20 * 1000; + +describe("Moves - Thunder Wave", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .starterSpecies(Species.PIKACHU) + .moveset([Moves.THUNDER_WAVE]) + .enemyMoveset(SPLASH_ONLY); + }); + + // References: https://bulbapedia.bulbagarden.net/wiki/Thunder_Wave_(move) + + it("paralyzes non-statused Pokemon that are not Ground types", async () => { + game.override.enemySpecies(Species.MAGIKARP); + await game.startBattle(); + + const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDER_WAVE); + await game.move.forceHit(); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.status?.effect).toBe(StatusEffect.PARALYSIS); + }, TIMEOUT); + + it("does not paralyze if the Pokemon is a Ground-type", async () => { + game.override.enemySpecies(Species.DIGLETT); + await game.startBattle(); + + const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDER_WAVE); + await game.move.forceHit(); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.status).toBeUndefined(); + }, TIMEOUT); + + it("does not paralyze if the Pokemon already has a status effect", async () => { + game.override.enemySpecies(Species.MAGIKARP).enemyStatusEffect(StatusEffect.BURN); + await game.startBattle(); + + const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDER_WAVE); + await game.move.forceHit(); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.PARALYSIS); + }, TIMEOUT); + + it("affects Ground types if the user has Normalize", async () => { + game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.DIGLETT); + await game.startBattle(); + + const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDER_WAVE); + await game.move.forceHit(); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.status?.effect).toBe(StatusEffect.PARALYSIS); + }, TIMEOUT); + + it("does not affect Ghost types if the user has Normalize", async () => { + game.override.ability(Abilities.NORMALIZE).enemySpecies(Species.HAUNTER); + await game.startBattle(); + + const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDER_WAVE); + await game.move.forceHit(); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.status).toBeUndefined(); + }, TIMEOUT); +}); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index cb3c547744b..d3c2652fcbe 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -1,6 +1,7 @@ import { updateUserInfo } from "#app/account"; import { BattlerIndex } from "#app/battle"; import BattleScene from "#app/battle-scene"; +import { BattleStyle } from "#app/enums/battle-style"; import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { GameModes, getGameMode } from "#app/game-mode"; @@ -170,6 +171,8 @@ export default class GameManager { } /** + * @deprecated Use `game.classicMode.startBattle()` or `game.dailyMode.startBattle()` instead + * * Transitions to the start of a battle. * @param species - Optional array of species to start the battle with. * @returns A promise that resolves when the battle is started. @@ -177,15 +180,17 @@ export default class GameManager { async startBattle(species?: Species[]) { await this.classicMode.runToSummon(species); - this.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { - this.setMode(Mode.MESSAGE); - this.endPhase(); - }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase)); + if (this.scene.battleStyle === BattleStyle.SWITCH) { + this.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.setMode(Mode.MESSAGE); + this.endPhase(); + }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase)); - this.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { - this.setMode(Mode.MESSAGE); - this.endPhase(); - }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase)); + this.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.setMode(Mode.MESSAGE); + this.endPhase(); + }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnInitPhase)); + } await this.phaseInterceptor.to(CommandPhase); console.log("==================[New Turn]=================="); diff --git a/src/test/utils/helpers/classicModeHelper.ts b/src/test/utils/helpers/classicModeHelper.ts index f41472303b4..55e995fc9dc 100644 --- a/src/test/utils/helpers/classicModeHelper.ts +++ b/src/test/utils/helpers/classicModeHelper.ts @@ -1,8 +1,11 @@ +import { BattleStyle } from "#app/enums/battle-style"; import { Species } from "#app/enums/species"; import { GameModes, getGameMode } from "#app/game-mode"; import overrides from "#app/overrides"; +import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { SelectStarterPhase } from "#app/phases/select-starter-phase"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { Mode } from "#app/ui/ui"; import { generateStarter } from "../gameManagerUtils"; import { GameManagerHelper } from "./gameManagerHelper"; @@ -33,4 +36,28 @@ export class ClassicModeHelper extends GameManagerHelper { this.game.removeEnemyHeldItems(); } } + + /** + * Transitions to the start of a battle. + * @param species - Optional array of species to start the battle with. + * @returns A promise that resolves when the battle is started. + */ + async startBattle(species?: Species[]) { + await this.runToSummon(species); + + if (this.game.scene.battleStyle === BattleStyle.SWITCH) { + this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.game.setMode(Mode.MESSAGE); + this.game.endPhase(); + }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase)); + + this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.game.setMode(Mode.MESSAGE); + this.game.endPhase(); + }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase)); + } + + await this.game.phaseInterceptor.to(CommandPhase); + console.log("==================[New Turn]=================="); + } } diff --git a/src/test/utils/helpers/dailyModeHelper.ts b/src/test/utils/helpers/dailyModeHelper.ts index 8f60981f4d8..e40fada8ac7 100644 --- a/src/test/utils/helpers/dailyModeHelper.ts +++ b/src/test/utils/helpers/dailyModeHelper.ts @@ -1,7 +1,10 @@ +import { BattleStyle } from "#app/enums/battle-style"; import { Button } from "#app/enums/buttons"; import overrides from "#app/overrides"; +import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; import SaveSlotSelectUiHandler from "#app/ui/save-slot-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { GameManagerHelper } from "./gameManagerHelper"; @@ -28,10 +31,33 @@ export class DailyModeHelper extends GameManagerHelper { uihandler.processInput(Button.ACTION); // select first slot. that's fine }); - await this.game.phaseInterceptor.run(EncounterPhase); + await this.game.phaseInterceptor.to(EncounterPhase); if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { this.game.removeEnemyHeldItems(); } } + + /** + * Transitions to the start of a battle. + * @returns A promise that resolves when the battle is started. + */ + async startBattle() { + await this.runToSummon(); + + if (this.game.scene.battleStyle === BattleStyle.SWITCH) { + this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.game.setMode(Mode.MESSAGE); + this.game.endPhase(); + }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase)); + + this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.game.setMode(Mode.MESSAGE); + this.game.endPhase(); + }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase)); + } + + await this.game.phaseInterceptor.to(CommandPhase); + console.log("==================[New Turn]=================="); + } } diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index a8ecc860aab..5860702a15b 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -182,7 +182,7 @@ export class UiInputs { break; case Mode.MENU: this.scene.ui.revertMode(); - this.scene.playSound("select"); + this.scene.playSound("ui/select"); break; default: return; diff --git a/src/ui/achv-bar.ts b/src/ui/achv-bar.ts index 0f3ab7c2e47..6e7b3185024 100644 --- a/src/ui/achv-bar.ts +++ b/src/ui/achv-bar.ts @@ -25,7 +25,7 @@ export default class AchvBar extends Phaser.GameObjects.Container { } setup(): void { - this.defaultWidth = 160; + this.defaultWidth = 200; this.defaultHeight = 40; this.bg = this.scene.add.nineslice(0, 0, "achv_bar", undefined, this.defaultWidth, this.defaultHeight, 41, 6, 16, 4); @@ -90,7 +90,7 @@ export default class AchvBar extends Phaser.GameObjects.Container { this.bg.height = Math.max(this.defaultHeight, this.titleText.displayHeight + this.descriptionText.displayHeight + 8); this.icon.y = (this.bg.height / 2) - (this.icon.height / 2); - (this.scene as BattleScene).playSound("achv"); + (this.scene as BattleScene).playSound("se/achv"); this.scene.tweens.add({ targets: this, diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index df2fde9d902..a3e698c63ba 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -15,6 +15,16 @@ enum Page { VOUCHERS } +interface LanguageSetting { + TextSize: string, +} + +const languageSettings: { [key: string]: LanguageSetting } = { + "de":{ + TextSize: "80px" + } +}; + export default class AchvsUiHandler extends MessageUiHandler { private readonly ROWS = 4; private readonly COLS = 17; @@ -105,8 +115,13 @@ export default class AchvsUiHandler extends MessageUiHandler { titleBg.setOrigin(0, 0); this.titleText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW); + const textSize = languageSettings[i18next.language]?.TextSize ?? this.titleText.style.fontSize; + this.titleText.setFontSize(textSize); this.titleText.setOrigin(0, 0); - this.titleText.setPositionRelative(titleBg, 8, 4); + const titleBgCenterX = titleBg.x + titleBg.width / 2; + const titleBgCenterY = titleBg.y + titleBg.height / 2; + this.titleText.setOrigin(0.5, 0.5); + this.titleText.setPosition(titleBgCenterX, titleBgCenterY); const scoreBg = addWindow(this.scene, titleBg.x + titleBg.width, titleBg.y, 46, 24); scoreBg.setOrigin(0, 0); @@ -211,12 +226,11 @@ export default class AchvsUiHandler extends MessageUiHandler { if (this.currentPage === Page.ACHIEVEMENTS) { this.currentPage = Page.VOUCHERS; this.updateVoucherIcons(); - this.setCursor(0); } else if (this.currentPage === Page.VOUCHERS) { this.currentPage = Page.ACHIEVEMENTS; this.updateAchvIcons(); - this.setCursor(0); } + this.setCursor(0, true); this.mainContainer.update(); } if (button === Button.CANCEL) { diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts new file mode 100644 index 00000000000..371604c00a2 --- /dev/null +++ b/src/ui/admin-ui-handler.ts @@ -0,0 +1,85 @@ +import BattleScene from "#app/battle-scene.js"; +import { ModalConfig } from "./modal-ui-handler"; +import { Mode } from "./ui"; +import * as Utils from "../utils"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { Button } from "#app/enums/buttons.js"; + +export default class AdminUiHandler extends FormModalUiHandler { + + constructor(scene: BattleScene, mode: Mode | null = null) { + super(scene, mode); + } + + setup(): void { + super.setup(); + } + + getModalTitle(config?: ModalConfig): string { + return "Admin panel"; + } + + getFields(config?: ModalConfig): string[] { + return ["Username", "Discord ID"]; + } + + getWidth(config?: ModalConfig): number { + return 160; + } + + getMargin(config?: ModalConfig): [number, number, number, number] { + return [0, 0, 48, 0]; + } + + getButtonLabels(config?: ModalConfig): string[] { + return ["Link account", "Cancel"]; + } + + processInput(button: Button): boolean { + if (button === Button.SUBMIT && this.submitAction) { + this.submitAction(); + return true; + } + + return false; + } + + show(args: any[]): boolean { + if (super.show(args)) { + const config = args[0] as ModalConfig; + const originalSubmitAction = this.submitAction; + this.submitAction = (_) => { + this.submitAction = originalSubmitAction; + this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + const onFail = error => { + this.scene.ui.setMode(Mode.ADMIN, Object.assign(config, { errorMessage: error?.trim() })); + this.scene.ui.playError(); + }; + if (!this.inputs[0].text) { + return onFail("Username is required"); + } + if (!this.inputs[1].text) { + return onFail("Discord Id is required"); + } + Utils.apiPost("admin/account/discord-link", `username=${encodeURIComponent(this.inputs[0].text)}&discordId=${encodeURIComponent(this.inputs[1].text)}`, "application/x-www-form-urlencoded", true) + .then(response => { + if (!response.ok) { + return response.text(); + } + return response.json(); + }) + .then(response => { + this.scene.ui.setMode(Mode.ADMIN, config); + }); + return false; + }; + return true; + } + return false; + + } + + clear(): void { + super.clear(); + } +} diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index dbf0d5911c8..11b807e8ab7 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -713,7 +713,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevelExp = pokemon.levelExp; } if (duration) { - (this.scene as BattleScene).playSound("exp"); + (this.scene as BattleScene).playSound("se/exp"); } this.scene.tweens.add({ targets: this.expMaskRect, @@ -725,10 +725,10 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } if (duration) { - this.scene.sound.stopByKey("exp"); + this.scene.sound.stopByKey("se/exp"); } if (ratio === 1) { - (this.scene as BattleScene).playSound("level_up"); + (this.scene as BattleScene).playSound("se/level_up"); this.setLevel(this.lastLevel); this.scene.time.delayedCall(500 * levelDurationMultiplier, () => { this.expMaskRect.x = 0; diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 3c4ab03efd9..189305ce4c1 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -252,9 +252,8 @@ export default class BattleMessageUiHandler extends MessageUiHandler { textStyle = TextStyle.SUMMARY_GREEN; } } else { - textStyle = TextStyle.SUMMARY; + textStyle = TextStyle.WINDOW; } - //const textStyle: TextStyle = isBetter ? TextStyle.SUMMARY_GREEN : TextStyle.SUMMARY; const color = getTextColor(textStyle, false, uiTheme); return `[color=${color}][shadow=${getTextColor(textStyle, true, uiTheme)}]${text}[/shadow][/color]`; }; diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 5496ce9afce..14015f02259 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -71,7 +71,7 @@ export default class CandyBar extends Phaser.GameObjects.Container { this.tween.stop(); } - (this.scene as BattleScene).playSound("shing"); + (this.scene as BattleScene).playSound("se/shing"); this.tween = this.scene.tweens.add({ targets: this, diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index 73c47da41fe..f1ba0da6c51 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -35,6 +35,8 @@ export default class GameChallengesUiHandler extends UiHandler { private startCursor: Phaser.GameObjects.NineSlice; + private optionsWidth: number; + constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); } @@ -74,18 +76,19 @@ export default class GameChallengesUiHandler extends UiHandler { // difficultyName.setOrigin(0, 0); // difficultyName.setPositionRelative(difficultyBg, difficultyBg.width - difficultyName.displayWidth - 8, 4); - this.optionsBg = addWindow(this.scene, 0, headerBg.height, (this.scene.game.canvas.width / 9), (this.scene.game.canvas.height / 6) - headerBg.height - 2); + this.optionsWidth = this.scene.scaledCanvas.width * 0.6; + this.optionsBg = addWindow(this.scene, 0, headerBg.height, this.optionsWidth, this.scene.scaledCanvas.height - headerBg.height - 2); this.optionsBg.setName("window-options-bg"); this.optionsBg.setOrigin(0, 0); - const descriptionBg = addWindow(this.scene, 0, headerBg.height, (this.scene.game.canvas.width / 18) - 2, (this.scene.game.canvas.height / 6) - headerBg.height - 26); + const descriptionBg = addWindow(this.scene, 0, headerBg.height, this.scene.scaledCanvas.width - this.optionsWidth, this.scene.scaledCanvas.height - headerBg.height - 26); descriptionBg.setName("window-desc-bg"); descriptionBg.setOrigin(0, 0); descriptionBg.setPositionRelative(this.optionsBg, this.optionsBg.width, 0); this.descriptionText = new BBCodeText(this.scene, descriptionBg.x + 6, descriptionBg.y + 4, "", { fontFamily: "emerald", - fontSize: 96, + fontSize: 84, color: Color.ORANGE, padding: { bottom: 6 @@ -109,12 +112,12 @@ export default class GameChallengesUiHandler extends UiHandler { const startText = addTextObject(this.scene, 0, 0, i18next.t("common:start"), TextStyle.SETTINGS_LABEL); startText.setName("text-start"); startText.setOrigin(0, 0); - startText.setPositionRelative(startBg, 8, 4); + startText.setPositionRelative(startBg, (startBg.width - startText.displayWidth) / 2, 4); - this.startCursor = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, (this.scene.game.canvas.width / 18) - 10, 16, 1, 1, 1, 1); + this.startCursor = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, descriptionBg.width - 8, 16, 1, 1, 1, 1); this.startCursor.setName("9s-start-cursor"); this.startCursor.setOrigin(0, 0); - this.startCursor.setPositionRelative(startBg, 4, 4); + this.startCursor.setPositionRelative(startBg, 4, 3); this.startCursor.setVisible(false); this.valuesContainer = this.scene.add.container(0, 0); @@ -140,7 +143,7 @@ export default class GameChallengesUiHandler extends UiHandler { }; } - this.monoTypeValue = this.scene.add.sprite(8, 98, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`); + this.monoTypeValue = this.scene.add.sprite(8, 98, Utils.getLocalizedSpriteKey("types")); this.monoTypeValue.setName("challenge-value-monotype-sprite"); this.monoTypeValue.setScale(0.86); this.monoTypeValue.setVisible(false); @@ -355,7 +358,7 @@ export default class GameChallengesUiHandler extends UiHandler { let ret = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, (this.scene.game.canvas.width / 9) - 10, 16, 1, 1, 1, 1); + this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, this.optionsWidth - 8, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); this.valuesContainer.add(this.cursorObj); } diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 1c3140158b7..9497dfe58c6 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -355,11 +355,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.gachaContainers[this.gachaCursor].moveTo(egg, 2); const doPullAnim = () => { - this.scene.playSound("gacha_running", { loop: true }); + this.scene.playSound("se/gacha_running", { loop: true }); this.scene.time.delayedCall(this.getDelayValue(count ? 500 : 1250), () => { - this.scene.playSound("gacha_dispense"); + this.scene.playSound("se/gacha_dispense"); this.scene.time.delayedCall(this.getDelayValue(750), () => { - this.scene.sound.stopByKey("gacha_running"); + this.scene.sound.stopByKey("se/gacha_running"); this.scene.tweens.add({ targets: egg, duration: this.getDelayValue(350), @@ -367,7 +367,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { ease: "Bounce.easeOut", onComplete: () => { this.scene.time.delayedCall(this.getDelayValue(125), () => { - this.scene.playSound("pb_catch"); + this.scene.playSound("se/pb_catch"); this.gachaHatches[this.gachaCursor].play("open"); this.scene.tweens.add({ targets: egg, @@ -405,7 +405,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { }; if (!count) { - this.scene.playSound("gacha_dial"); + this.scene.playSound("se/gacha_dial"); this.scene.tweens.add({ targets: this.gachaKnobs[this.gachaCursor], duration: this.getDelayValue(350), diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 977daf3dc7a..0beaddbb517 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -44,7 +44,7 @@ export default class FightUiHandler extends UiHandler { this.moveInfoContainer.setName("move-info"); ui.add(this.moveInfoContainer); - this.typeIcon = this.scene.add.sprite(this.scene.scaledCanvas.width - 57, -36, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`, "unknown"); + this.typeIcon = this.scene.add.sprite(this.scene.scaledCanvas.width - 57, -36, Utils.getLocalizedSpriteKey("types"), "unknown"); this.typeIcon.setVisible(false); this.moveInfoContainer.add(this.typeIcon); @@ -179,15 +179,20 @@ export default class FightUiHandler extends UiHandler { if (hasMove) { const pokemonMove = moveset[cursor]!; // TODO: is the bang correct? - this.typeIcon.setTexture(`types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`, Type[pokemonMove.getMove().type].toLowerCase()).setScale(0.8); - this.moveCategoryIcon.setTexture("categories", MoveCategory[pokemonMove.getMove().category].toLowerCase()).setScale(1.0); + const moveType = pokemon.getMoveType(pokemonMove.getMove()); + const textureKey = Utils.getLocalizedSpriteKey("types"); + this.typeIcon.setTexture(textureKey, Type[moveType].toLowerCase()).setScale(0.8); + const moveCategory = pokemonMove.getMove().category; + this.moveCategoryIcon.setTexture("categories", MoveCategory[moveCategory].toLowerCase()).setScale(1.0); const power = pokemonMove.getMove().power; const accuracy = pokemonMove.getMove().accuracy; const maxPP = pokemonMove.getMovePp(); const pp = maxPP - pokemonMove.ppUsed; - this.ppText.setText(`${Utils.padInt(pp, 2, " ")}/${Utils.padInt(maxPP, 2, " ")}`); + const ppLeftStr = Utils.padInt(pp, 2, " "); + const ppMaxStr = Utils.padInt(maxPP, 2, " "); + this.ppText.setText(`${ppLeftStr}/${ppMaxStr}`); this.powerText.setText(`${power >= 0 ? power : "---"}`); this.accuracyText.setText(`${accuracy >= 0 ? accuracy : "---"}`); @@ -231,7 +236,7 @@ export default class FightUiHandler extends UiHandler { * Returns undefined if it's a status move */ private getEffectivenessText(pokemon: Pokemon, opponent: Pokemon, pokemonMove: PokemonMove): string | undefined { - const effectiveness = opponent.getMoveEffectiveness(pokemon, pokemonMove); + const effectiveness = opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData?.abilityRevealed); if (effectiveness === undefined) { return undefined; } @@ -274,7 +279,7 @@ export default class FightUiHandler extends UiHandler { } const moveColors = opponents - .map((opponent) => opponent.getMoveEffectiveness(pokemon, pokemonMove)) + .map((opponent) => opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData.abilityRevealed)) .sort((a, b) => b - a) .map((effectiveness) => getTypeDamageMultiplierColor(effectiveness ?? 0, "offense")); diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 4516e39675c..8c4ea5f6768 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -6,7 +6,7 @@ import { WindowVariant, addWindow } from "./ui-theme"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; import i18next from "i18next"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export interface FormModalConfig extends ModalConfig { errorMessage?: string; @@ -60,7 +60,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { const inputBg = addWindow(this.scene, 0, 0, 80, 16, false, false, 0, 0, WindowVariant.XTHIN); const isPassword = field.includes(i18next.t("menu:password")) || field.includes(i18next.t("menu:confirmPassword")); - const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 16 }); + const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 18 }); input.setOrigin(0, 0); inputContainer.add(inputBg); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 80ec5c93bbd..0bbfe21e4f9 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -306,16 +306,34 @@ export default class MenuUiHandler extends MessageUiHandler { return true; }, keepOpen: true - }, - { - label: i18next.t("menuUiHandler:cancel"), + }]; + if (!bypassLogin && loggedInUser?.hasAdminRole) { + communityOptions.push({ + label: "Admin", handler: () => { - this.scene.ui.revertMode(); + ui.playSelect(); + ui.setOverlayMode(Mode.ADMIN, { + buttonActions: [ + () => { + ui.revertMode(); + }, + () => { + ui.revertMode(); + } + ] + }); return true; - } + }, + keepOpen: true + }); + } + communityOptions.push({ + label: i18next.t("menuUiHandler:cancel"), + handler: () => { + this.scene.ui.revertMode(); + return true; } - ]; - + }); this.communityConfig = { xOffset: 98, options: communityOptions @@ -340,7 +358,7 @@ export default class MenuUiHandler extends MessageUiHandler { this.getUi().hideTooltip(); - this.scene.playSound("menu_open"); + this.scene.playSound("ui/menu_open"); handleTutorial(this.scene, Tutorial.Menu); diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 531e5b537b0..4a567c926d7 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -654,7 +654,7 @@ class ModifierOption extends Phaser.GameObjects.Container { } const value = t.getValue(); if (!bounce && value > lastValue) { - (this.scene as BattleScene).playSound("pb_bounce_1", { volume: 1 / ++bounceCount }); + (this.scene as BattleScene).playSound("se/pb_bounce_1", { volume: 1 / ++bounceCount }); bounce = true; } else if (bounce && value < lastValue) { bounce = false; @@ -666,7 +666,7 @@ class ModifierOption extends Phaser.GameObjects.Container { for (let u = 0; u < this.modifierTypeOption.upgradeCount; u++) { const upgradeIndex = u; this.scene.time.delayedCall(remainingDuration - 2000 * (this.modifierTypeOption.upgradeCount - (upgradeIndex + 1 + upgradeCountOffset)), () => { - (this.scene as BattleScene).playSound("upgrade", { rate: 1 + 0.25 * upgradeIndex }); + (this.scene as BattleScene).playSound("se/upgrade", { rate: 1 + 0.25 * upgradeIndex }); this.pbTint.setPosition(this.pb.x, this.pb.y); this.pbTint.setTintFill(0xFFFFFF); this.pbTint.setAlpha(0); @@ -700,7 +700,7 @@ class ModifierOption extends Phaser.GameObjects.Container { if (!this.modifierTypeOption.cost) { this.pb.setTexture("pb", `${this.getPbAtlasKey(0)}_open`); - (this.scene as BattleScene).playSound("pb_rel"); + (this.scene as BattleScene).playSound("se/pb_rel"); this.scene.tweens.add({ targets: this.pb, diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 66c777944d1..e7c4069c16e 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -5,7 +5,7 @@ import { Command } from "./command-ui-handler"; import MessageUiHandler from "./message-ui-handler"; import { Mode } from "./ui"; import * as Utils from "../utils"; -import { PokemonBaseStatModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier"; +import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier"; import { allMoves, ForceSwitchOutAttr } from "../data/move"; import { getGenderColor, getGenderSymbol } from "../data/gender"; import { StatusEffect } from "../data/status-effect"; @@ -989,14 +989,8 @@ export default class PartyUiHandler extends MessageUiHandler { optionText.setOrigin(0, 0); /** For every item that has stack bigger than 1, display the current quantity selection */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && this.transferQuantitiesMax[option] > 1) { - const itemModifier = itemModifiers[option]; - - /** Not sure why getMaxHeldItemCount had an error, but it only checks the Pokemon parameter if the modifier is PokemonBaseStatModifier */ - if (itemModifier === undefined || itemModifier instanceof PokemonBaseStatModifier) { - continue; - } - + const itemModifier = itemModifiers[option]; + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && this.transferQuantitiesMax[option] > 1 && !this.transferMode && itemModifier !== undefined && itemModifier.type.name === optionName) { let amountText = ` (${this.transferQuantities[option]})`; /** If the amount held is the maximum, display the count in red */ diff --git a/src/ui/pokeball-tray.ts b/src/ui/pokeball-tray.ts index cf3b24c4d11..0313812ef79 100644 --- a/src/ui/pokeball-tray.ts +++ b/src/ui/pokeball-tray.ts @@ -57,7 +57,7 @@ export default class PokeballTray extends Phaser.GameObjects.Container { ball.setFrame(ballFrame); }); - (this.scene as BattleScene).playSound("pb_tray_enter"); + (this.scene as BattleScene).playSound("se/pb_tray_enter"); this.scene.tweens.add({ targets: this, @@ -71,7 +71,7 @@ export default class PokeballTray extends Phaser.GameObjects.Container { x: `${this.player ? "-" : "+"}=104`, duration: b * 100, ease: "Sine.easeIn", - onComplete: () => (this.scene as BattleScene).playSound(b < party.length ? "pb_tray_ball" : "pb_tray_empty") + onComplete: () => (this.scene as BattleScene).playSound(`se/${(b < party.length ? "pb_tray_ball" : "pb_tray_empty")}`) }); }); } diff --git a/src/ui/settings/settings-audio-ui-handler.ts b/src/ui/settings/settings-audio-ui-handler.ts index b834e37efe5..4a895fc3170 100644 --- a/src/ui/settings/settings-audio-ui-handler.ts +++ b/src/ui/settings/settings-audio-ui-handler.ts @@ -15,6 +15,6 @@ export default class SettingsAudioUiHandler extends AbstractSettingsUiHandler { super(scene, SettingType.AUDIO, mode); this.title = "Audio"; this.localStorageKey = "settings"; - this.rowsToDisplay = 4; + this.rowsToDisplay = 6; } } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 250f097c2fc..f9b40dd96e6 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -410,7 +410,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (index === 0 || index === 19) { return; } - const typeSprite = this.scene.add.sprite(0, 0, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`); + const typeSprite = this.scene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("types")); typeSprite.setScale(0.5); typeSprite.setFrame(type.toLowerCase()); typeOptions.push(new DropDownOption(this.scene, index, new DropDownLabel("", typeSprite))); @@ -668,12 +668,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonSprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); this.starterSelectContainer.add(this.pokemonSprite); - this.type1Icon = this.scene.add.sprite(8, 98, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`); + this.type1Icon = this.scene.add.sprite(8, 98, Utils.getLocalizedSpriteKey("types")); this.type1Icon.setScale(0.5); this.type1Icon.setOrigin(0, 0); this.starterSelectContainer.add(this.type1Icon); - this.type2Icon = this.scene.add.sprite(26, 98, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`); + this.type2Icon = this.scene.add.sprite(26, 98, Utils.getLocalizedSpriteKey("types")); this.type2Icon.setScale(0.5); this.type2Icon.setOrigin(0, 0); this.starterSelectContainer.add(this.type2Icon); @@ -1656,7 +1656,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }); this.tryUpdateValue(0); ui.setMode(Mode.STARTER_SELECT); - this.scene.playSound("buy"); + this.scene.playSound("se/buy"); // if starterContainer exists, update the value reduction background if (starterContainer) { @@ -1701,7 +1701,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); ui.setMode(Mode.STARTER_SELECT); - this.scene.playSound("buy"); + this.scene.playSound("se/buy"); return true; } @@ -1753,7 +1753,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { starterAttributes.shiny = starterAttributes.shiny ? !starterAttributes.shiny : true; this.setSpeciesDetails(this.lastSpecies, !props.shiny, undefined, undefined, props.shiny ? 0 : undefined, undefined, undefined); if (starterAttributes.shiny) { - this.scene.playSound("sparkle"); + this.scene.playSound("se/sparkle"); // Set the variant label to the shiny tint const tint = getVariantTint(newVariant); this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant)); @@ -1795,15 +1795,17 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.canCycleAbility) { const abilityCount = this.lastSpecies.getAbilityCount(); const abilityAttr = this.scene.gameData.starterData[this.lastSpecies.speciesId].abilityAttr; + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; let newAbilityIndex = this.abilityCursor; do { newAbilityIndex = (newAbilityIndex + 1) % abilityCount; - if (!newAbilityIndex) { - if (abilityAttr & AbilityAttr.ABILITY_1) { + if (newAbilityIndex === 0) { + if (hasAbility1) { break; } } else if (newAbilityIndex === 1) { - if (this.lastSpecies.ability1 === this.lastSpecies.ability2) { + // If ability 1 and 2 are the same and ability 1 is unlocked, skip over ability 2 + if (this.lastSpecies.ability1 === this.lastSpecies.ability2 && hasAbility1) { newAbilityIndex = (newAbilityIndex + 1) % abilityCount; } break; @@ -3045,7 +3047,20 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.canCycleShiny = isVariantCaught || isVariant2Caught || isVariant3Caught; this.canCycleGender = isMaleCaught && isFemaleCaught; - this.canCycleAbility = [ abilityAttr & AbilityAttr.ABILITY_1, (abilityAttr & AbilityAttr.ABILITY_2) && species.ability2, abilityAttr & AbilityAttr.ABILITY_HIDDEN ].filter(a => a).length > 1; + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; + let hasAbility2 = abilityAttr & AbilityAttr.ABILITY_2; + const hasHiddenAbility = abilityAttr & AbilityAttr.ABILITY_HIDDEN; + + /* + * Check for Pokemon with a single ability (at some point it was possible to catch them with their ability 2 attribute) + * This prevents cycling between ability 1 and 2 if they are both unlocked and the same + * but we still need to account for the possibility ability 1 was never unlocked and fallback on ability 2 in this case + */ + if (hasAbility1 && hasAbility2 && species.ability1 === species.ability2) { + hasAbility2 = 0; + } + + this.canCycleAbility = [ hasAbility1, hasAbility2, hasHiddenAbility ].filter(a => a).length > 1; this.canCycleForm = species.forms.filter(f => f.isStarterSelectable || !pokemonFormChanges[species.speciesId]?.find(fc => fc.formKey)) .map((_, f) => dexEntry.caughtAttr & this.scene.gameData.getFormAttr(f)).filter(f => f).length > 1; this.canCycleNature = this.scene.gameData.getNaturesForAttr(dexEntry.natureAttr).length > 1; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 3b789954f66..ea7b798f2bf 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -716,7 +716,8 @@ export default class SummaryUiHandler extends UiHandler { const getTypeIcon = (index: integer, type: Type, tera: boolean = false) => { const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; const typeIcon = !tera - ? this.scene.add.sprite(xCoord, 42, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`, Type[type].toLowerCase()) : this.scene.add.sprite(xCoord, 42, "type_tera"); + ? this.scene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), Type[type].toLowerCase()) + : this.scene.add.sprite(xCoord, 42, "type_tera"); if (tera) { typeIcon.setScale(0.5); const typeRgb = getTypeRgb(type); @@ -824,10 +825,7 @@ export default class SummaryUiHandler extends UiHandler { biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? }), - natureFragment: - i18next.exists(`pokemonSummary:natureFragment.${rawNature}`) ? - i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) : - nature, + natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) }); const memoText = addBBCodeTextObject(this.scene, 7, 113, String(memoString), TextStyle.WINDOW_ALT); @@ -934,10 +932,14 @@ export default class SummaryUiHandler extends UiHandler { if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { this.extraMoveRowContainer.setVisible(true); - const newMoveTypeIcon = this.scene.add.sprite(0, 0, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`, Type[this.newMove?.type!].toLowerCase()); // TODO: is this bang correct? - newMoveTypeIcon.setOrigin(0, 1); - this.extraMoveRowContainer.add(newMoveTypeIcon); + if (this.newMove && this.pokemon) { + const spriteKey = Utils.getLocalizedSpriteKey("types"); + const moveType = this.pokemon.getMoveType(this.newMove); + const newMoveTypeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); + newMoveTypeIcon.setOrigin(0, 1); + this.extraMoveRowContainer.add(newMoveTypeIcon); + } const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); ppOverlay.setOrigin(0, 1); this.extraMoveRowContainer.add(ppOverlay); @@ -956,8 +958,11 @@ export default class SummaryUiHandler extends UiHandler { const moveRowContainer = this.scene.add.container(0, 16 * m); this.moveRowsContainer.add(moveRowContainer); - if (move) { - const typeIcon = this.scene.add.sprite(0, 0, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`, Type[move.getMove().type].toLowerCase()); typeIcon.setOrigin(0, 1); + if (move && this.pokemon) { + const spriteKey = Utils.getLocalizedSpriteKey("types"); + const moveType = this.pokemon.getMoveType(move.getMove()); + const typeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); + typeIcon.setOrigin(0, 1); moveRowContainer.add(typeIcon); } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 7352c9f8704..5e1c28eda2d 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -23,7 +23,7 @@ import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import EggHatchSceneHandler from "./egg-hatch-scene-handler"; import EggListUiHandler from "./egg-list-ui-handler"; import EggGachaUiHandler from "./egg-gacha-ui-handler"; -import {addWindow} from "./ui-theme"; +import { addWindow } from "./ui-theme"; import LoginFormUiHandler from "./login-form-ui-handler"; import RegistrationFormUiHandler from "./registration-form-ui-handler"; import LoadingModalUiHandler from "./loading-modal-ui-handler"; @@ -46,6 +46,7 @@ import SettingsAudioUiHandler from "./settings/settings-audio-ui-handler"; import { PlayerGender } from "#enums/player-gender"; import BgmBar from "#app/ui/bgm-bar"; import RenameFormUiHandler from "./rename-form-ui-handler"; +import AdminUiHandler from "./admin-ui-handler"; import RunHistoryUiHandler from "./run-history-ui-handler"; import RunInfoUiHandler from "./run-info-ui-handler"; @@ -86,6 +87,7 @@ export enum Mode { OUTDATED, CHALLENGE_SELECT, RENAME_POKEMON, + ADMIN, RUN_HISTORY, RUN_INFO, } @@ -124,7 +126,8 @@ const noTransitionModes = [ Mode.SESSION_RELOAD, Mode.UNAVAILABLE, Mode.OUTDATED, - Mode.RENAME_POKEMON + Mode.RENAME_POKEMON, + Mode.ADMIN, ]; export default class UI extends Phaser.GameObjects.Container { @@ -188,6 +191,7 @@ export default class UI extends Phaser.GameObjects.Container { new RenameFormUiHandler(scene), new RunHistoryUiHandler(scene), new RunInfoUiHandler(scene), + new AdminUiHandler(scene), ]; } @@ -399,11 +403,11 @@ export default class UI extends Phaser.GameObjects.Container { } playSelect(): void { - (this.scene as BattleScene).playSound("select"); + (this.scene as BattleScene).playSound("ui/select"); } playError(): void { - (this.scene as BattleScene).playSound("error"); + (this.scene as BattleScene).playSound("ui/error"); } fadeOut(duration: integer): Promise { diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index dab1a8c3be8..3375fb930e6 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -55,7 +55,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { if (response[0] || [200, 400].includes(response[1])) { this.reconnectTimer = null; this.reconnectDuration = this.minTime; - this.scene.playSound("pb_bounce_1"); + this.scene.playSound("se/pb_bounce_1"); this.reconnectCallback(); } else if (response[1] === 401) { Utils.removeCookie(Utils.sessionIdKey); diff --git a/src/utils.ts b/src/utils.ts index a9bbc93d684..173ea25b17c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -574,3 +574,12 @@ export function isNullOrUndefined(object: any): boolean { export function toDmgValue(value: number, minValue: number = 1) { return Math.max(Math.floor(value), minValue); } + +/** + * Helper method to localize a sprite key (e.g. for types) + * @param baseKey the base key of the sprite (e.g. `type`) + * @returns the localized sprite key + */ +export function getLocalizedSpriteKey(baseKey: string) { + return `${baseKey}${verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`; +}