diff --git a/README.md b/README.md index 839bfa3ae455..d1b46e630bf9 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Check out [Github Issues](https://github.com/pagefaultgames/pokerogue/issues) to - Pokémon Ultra Sun/Ultra Moon - Pokémon Sword/Shield - Pokémon Scarlet/Violet - - Firel (Custom Metropolis and Laboratory biome music) + - Firel (Custom Laboratory, Metropolis, Seabed, and Space biome music) - Lmz (Custom Jungle biome music) ### 🎵 Sound Effects diff --git a/public/audio/bgm/abyss.mp3 b/public/audio/bgm/abyss.mp3 index 3347d89d7e5e..08882ac7e093 100644 Binary files a/public/audio/bgm/abyss.mp3 and b/public/audio/bgm/abyss.mp3 differ diff --git a/public/audio/bgm/badlands.mp3 b/public/audio/bgm/badlands.mp3 index 40b3cf94156f..386cf09c6a3f 100644 Binary files a/public/audio/bgm/badlands.mp3 and b/public/audio/bgm/badlands.mp3 differ diff --git a/public/audio/bgm/battle_alola_champion.mp3 b/public/audio/bgm/battle_alola_champion.mp3 index 94173ca69fd8..9fdefa524143 100644 Binary files a/public/audio/bgm/battle_alola_champion.mp3 and b/public/audio/bgm/battle_alola_champion.mp3 differ diff --git a/public/audio/bgm/battle_alola_elite.mp3 b/public/audio/bgm/battle_alola_elite.mp3 index d87a4a89968a..2d595c25f1eb 100644 Binary files a/public/audio/bgm/battle_alola_elite.mp3 and b/public/audio/bgm/battle_alola_elite.mp3 differ diff --git a/public/audio/bgm/battle_aqua_magma_boss.mp3 b/public/audio/bgm/battle_aqua_magma_boss.mp3 index b3f3375b16c8..1bee013e5c5a 100644 Binary files a/public/audio/bgm/battle_aqua_magma_boss.mp3 and b/public/audio/bgm/battle_aqua_magma_boss.mp3 differ diff --git a/public/audio/bgm/battle_aqua_magma_grunt.mp3 b/public/audio/bgm/battle_aqua_magma_grunt.mp3 index 8dafa05dac5d..019d7d40e352 100644 Binary files a/public/audio/bgm/battle_aqua_magma_grunt.mp3 and b/public/audio/bgm/battle_aqua_magma_grunt.mp3 differ diff --git a/public/audio/bgm/battle_bb_elite.mp3 b/public/audio/bgm/battle_bb_elite.mp3 index e0ec0dbd5180..64420ab3b966 100644 Binary files a/public/audio/bgm/battle_bb_elite.mp3 and b/public/audio/bgm/battle_bb_elite.mp3 differ diff --git a/public/audio/bgm/battle_champion_alder.mp3 b/public/audio/bgm/battle_champion_alder.mp3 index 8b58b5ad6def..001d442c4610 100644 Binary files a/public/audio/bgm/battle_champion_alder.mp3 and b/public/audio/bgm/battle_champion_alder.mp3 differ diff --git a/public/audio/bgm/battle_champion_geeta.mp3 b/public/audio/bgm/battle_champion_geeta.mp3 index 1b654e33ee26..4deb395e1d17 100644 Binary files a/public/audio/bgm/battle_champion_geeta.mp3 and b/public/audio/bgm/battle_champion_geeta.mp3 differ diff --git a/public/audio/bgm/battle_champion_iris.mp3 b/public/audio/bgm/battle_champion_iris.mp3 index 7583574e8e0f..e412925cebcd 100644 Binary files a/public/audio/bgm/battle_champion_iris.mp3 and b/public/audio/bgm/battle_champion_iris.mp3 differ diff --git a/public/audio/bgm/battle_champion_kieran.mp3 b/public/audio/bgm/battle_champion_kieran.mp3 index e43a1c904cd1..d6896e401a32 100644 Binary files a/public/audio/bgm/battle_champion_kieran.mp3 and b/public/audio/bgm/battle_champion_kieran.mp3 differ diff --git a/public/audio/bgm/battle_champion_nemona.mp3 b/public/audio/bgm/battle_champion_nemona.mp3 index 9d835030e491..9174fca42849 100644 Binary files a/public/audio/bgm/battle_champion_nemona.mp3 and b/public/audio/bgm/battle_champion_nemona.mp3 differ diff --git a/public/audio/bgm/battle_final.mp3 b/public/audio/bgm/battle_final.mp3 index 6f5cb5d12654..31a79f5eaeef 100644 Binary files a/public/audio/bgm/battle_final.mp3 and b/public/audio/bgm/battle_final.mp3 differ diff --git a/public/audio/bgm/battle_final_encounter.mp3 b/public/audio/bgm/battle_final_encounter.mp3 index 818e84cc264d..a0fe790e4339 100644 Binary files a/public/audio/bgm/battle_final_encounter.mp3 and b/public/audio/bgm/battle_final_encounter.mp3 differ diff --git a/public/audio/bgm/battle_flare_boss.mp3 b/public/audio/bgm/battle_flare_boss.mp3 index 0c46d364e687..fd2e2a544d98 100644 Binary files a/public/audio/bgm/battle_flare_boss.mp3 and b/public/audio/bgm/battle_flare_boss.mp3 differ diff --git a/public/audio/bgm/battle_flare_grunt.mp3 b/public/audio/bgm/battle_flare_grunt.mp3 index be9d5895259c..7e2805f86757 100644 Binary files a/public/audio/bgm/battle_flare_grunt.mp3 and b/public/audio/bgm/battle_flare_grunt.mp3 differ diff --git a/public/audio/bgm/battle_galactic_boss.mp3 b/public/audio/bgm/battle_galactic_boss.mp3 index 1d4b3ad7c7c8..3d6c624130e9 100644 Binary files a/public/audio/bgm/battle_galactic_boss.mp3 and b/public/audio/bgm/battle_galactic_boss.mp3 differ diff --git a/public/audio/bgm/battle_galactic_grunt.mp3 b/public/audio/bgm/battle_galactic_grunt.mp3 index 098d14dab68b..17d8295c50c3 100644 Binary files a/public/audio/bgm/battle_galactic_grunt.mp3 and b/public/audio/bgm/battle_galactic_grunt.mp3 differ diff --git a/public/audio/bgm/battle_galar_champion.mp3 b/public/audio/bgm/battle_galar_champion.mp3 index 9dd43f9bbc82..01e089de9d2d 100644 Binary files a/public/audio/bgm/battle_galar_champion.mp3 and b/public/audio/bgm/battle_galar_champion.mp3 differ diff --git a/public/audio/bgm/battle_galar_elite.mp3 b/public/audio/bgm/battle_galar_elite.mp3 index 34587edcbd14..5074172310dd 100644 Binary files a/public/audio/bgm/battle_galar_elite.mp3 and b/public/audio/bgm/battle_galar_elite.mp3 differ diff --git a/public/audio/bgm/battle_galar_gym.mp3 b/public/audio/bgm/battle_galar_gym.mp3 index a10b284cf4b4..539b389bb3aa 100644 Binary files a/public/audio/bgm/battle_galar_gym.mp3 and b/public/audio/bgm/battle_galar_gym.mp3 differ diff --git a/public/audio/bgm/battle_hoenn_champion.mp3 b/public/audio/bgm/battle_hoenn_champion.mp3 index 0fd09d5f4cde..37fd25b6a7b6 100644 Binary files a/public/audio/bgm/battle_hoenn_champion.mp3 and b/public/audio/bgm/battle_hoenn_champion.mp3 differ diff --git a/public/audio/bgm/battle_hoenn_elite.mp3 b/public/audio/bgm/battle_hoenn_elite.mp3 index 7d352d4332ad..798d8c34241d 100644 Binary files a/public/audio/bgm/battle_hoenn_elite.mp3 and b/public/audio/bgm/battle_hoenn_elite.mp3 differ diff --git a/public/audio/bgm/battle_hoenn_gym.mp3 b/public/audio/bgm/battle_hoenn_gym.mp3 index 9bf06628c6a7..02b36ebefea4 100644 Binary files a/public/audio/bgm/battle_hoenn_gym.mp3 and b/public/audio/bgm/battle_hoenn_gym.mp3 differ diff --git a/public/audio/bgm/battle_johto_champion.mp3 b/public/audio/bgm/battle_johto_champion.mp3 index 47c4af88e231..dcc64a13502e 100644 Binary files a/public/audio/bgm/battle_johto_champion.mp3 and b/public/audio/bgm/battle_johto_champion.mp3 differ diff --git a/public/audio/bgm/battle_johto_gym.mp3 b/public/audio/bgm/battle_johto_gym.mp3 index 3cb7e075428f..6b9a51b54013 100644 Binary files a/public/audio/bgm/battle_johto_gym.mp3 and b/public/audio/bgm/battle_johto_gym.mp3 differ diff --git a/public/audio/bgm/battle_kalos_champion.mp3 b/public/audio/bgm/battle_kalos_champion.mp3 index c9dd6b801332..eab36818e27a 100644 Binary files a/public/audio/bgm/battle_kalos_champion.mp3 and b/public/audio/bgm/battle_kalos_champion.mp3 differ diff --git a/public/audio/bgm/battle_kalos_elite.mp3 b/public/audio/bgm/battle_kalos_elite.mp3 index f4a0181544de..3c4d2dfed020 100644 Binary files a/public/audio/bgm/battle_kalos_elite.mp3 and b/public/audio/bgm/battle_kalos_elite.mp3 differ diff --git a/public/audio/bgm/battle_kalos_gym.mp3 b/public/audio/bgm/battle_kalos_gym.mp3 index 9031274519f9..46c3fd04eb75 100644 Binary files a/public/audio/bgm/battle_kalos_gym.mp3 and b/public/audio/bgm/battle_kalos_gym.mp3 differ diff --git a/public/audio/bgm/battle_kanto_champion.mp3 b/public/audio/bgm/battle_kanto_champion.mp3 index c084453287cb..a98c3a3c0dae 100644 Binary files a/public/audio/bgm/battle_kanto_champion.mp3 and b/public/audio/bgm/battle_kanto_champion.mp3 differ diff --git a/public/audio/bgm/battle_kanto_gym.mp3 b/public/audio/bgm/battle_kanto_gym.mp3 index 3d9a9c30e194..82c705fc05a8 100644 Binary files a/public/audio/bgm/battle_kanto_gym.mp3 and b/public/audio/bgm/battle_kanto_gym.mp3 differ diff --git a/public/audio/bgm/battle_legendary_arceus.mp3 b/public/audio/bgm/battle_legendary_arceus.mp3 index 03dab3878f27..ee060912ddfa 100644 Binary files a/public/audio/bgm/battle_legendary_arceus.mp3 and b/public/audio/bgm/battle_legendary_arceus.mp3 differ diff --git a/public/audio/bgm/battle_legendary_birds_galar.mp3 b/public/audio/bgm/battle_legendary_birds_galar.mp3 index 79bedb5c5007..807a38fe0957 100644 Binary files a/public/audio/bgm/battle_legendary_birds_galar.mp3 and b/public/audio/bgm/battle_legendary_birds_galar.mp3 differ diff --git a/public/audio/bgm/battle_legendary_calyrex.mp3 b/public/audio/bgm/battle_legendary_calyrex.mp3 index 8d22a5df9638..7fd44b5e9c64 100644 Binary files a/public/audio/bgm/battle_legendary_calyrex.mp3 and b/public/audio/bgm/battle_legendary_calyrex.mp3 differ diff --git a/public/audio/bgm/battle_legendary_deoxys.mp3 b/public/audio/bgm/battle_legendary_deoxys.mp3 index da91a5f76bc9..351b4bb02b41 100644 Binary files a/public/audio/bgm/battle_legendary_deoxys.mp3 and b/public/audio/bgm/battle_legendary_deoxys.mp3 differ diff --git a/public/audio/bgm/battle_legendary_dia_pal.mp3 b/public/audio/bgm/battle_legendary_dia_pal.mp3 index 07998098afe5..4cb361933fc0 100644 Binary files a/public/audio/bgm/battle_legendary_dia_pal.mp3 and b/public/audio/bgm/battle_legendary_dia_pal.mp3 differ diff --git a/public/audio/bgm/battle_legendary_dusk_dawn.mp3 b/public/audio/bgm/battle_legendary_dusk_dawn.mp3 index 20b883a4ca7b..b7340af5d4be 100644 Binary files a/public/audio/bgm/battle_legendary_dusk_dawn.mp3 and b/public/audio/bgm/battle_legendary_dusk_dawn.mp3 differ diff --git a/public/audio/bgm/battle_legendary_entei.mp3 b/public/audio/bgm/battle_legendary_entei.mp3 index 30d1f87748cb..993a513689ec 100644 Binary files a/public/audio/bgm/battle_legendary_entei.mp3 and b/public/audio/bgm/battle_legendary_entei.mp3 differ diff --git a/public/audio/bgm/battle_legendary_giratina.mp3 b/public/audio/bgm/battle_legendary_giratina.mp3 index 87674e003caa..5b9894fc3462 100644 Binary files a/public/audio/bgm/battle_legendary_giratina.mp3 and b/public/audio/bgm/battle_legendary_giratina.mp3 differ diff --git a/public/audio/bgm/battle_legendary_glas_spec.mp3 b/public/audio/bgm/battle_legendary_glas_spec.mp3 index 52988510ea62..a11e9c0dc1b3 100644 Binary files a/public/audio/bgm/battle_legendary_glas_spec.mp3 and b/public/audio/bgm/battle_legendary_glas_spec.mp3 differ diff --git a/public/audio/bgm/battle_legendary_gro_kyo.mp3 b/public/audio/bgm/battle_legendary_gro_kyo.mp3 index b3401da3f6e0..49ecc6b04967 100644 Binary files a/public/audio/bgm/battle_legendary_gro_kyo.mp3 and b/public/audio/bgm/battle_legendary_gro_kyo.mp3 differ diff --git a/public/audio/bgm/battle_legendary_ho_oh.mp3 b/public/audio/bgm/battle_legendary_ho_oh.mp3 index 46740297f772..ae41e2196be6 100644 Binary files a/public/audio/bgm/battle_legendary_ho_oh.mp3 and b/public/audio/bgm/battle_legendary_ho_oh.mp3 differ diff --git a/public/audio/bgm/battle_legendary_kanto.mp3 b/public/audio/bgm/battle_legendary_kanto.mp3 index 0b9946ec9fe1..aa7cfdec1c5c 100644 Binary files a/public/audio/bgm/battle_legendary_kanto.mp3 and b/public/audio/bgm/battle_legendary_kanto.mp3 differ diff --git a/public/audio/bgm/battle_legendary_kor_mir.mp3 b/public/audio/bgm/battle_legendary_kor_mir.mp3 index 681e26a75b78..4b18a94d4230 100644 Binary files a/public/audio/bgm/battle_legendary_kor_mir.mp3 and b/public/audio/bgm/battle_legendary_kor_mir.mp3 differ diff --git a/public/audio/bgm/battle_legendary_kyurem.mp3 b/public/audio/bgm/battle_legendary_kyurem.mp3 index f2a325d427c3..d7ad96300317 100644 Binary files a/public/audio/bgm/battle_legendary_kyurem.mp3 and b/public/audio/bgm/battle_legendary_kyurem.mp3 differ diff --git a/public/audio/bgm/battle_legendary_lake_trio.mp3 b/public/audio/bgm/battle_legendary_lake_trio.mp3 index dc6bb08d13f5..dddcc34712fc 100644 Binary files a/public/audio/bgm/battle_legendary_lake_trio.mp3 and b/public/audio/bgm/battle_legendary_lake_trio.mp3 differ diff --git a/public/audio/bgm/battle_legendary_loyal_three.mp3 b/public/audio/bgm/battle_legendary_loyal_three.mp3 index d753e58a0a75..d37930b33bf7 100644 Binary files a/public/audio/bgm/battle_legendary_loyal_three.mp3 and b/public/audio/bgm/battle_legendary_loyal_three.mp3 differ diff --git a/public/audio/bgm/battle_legendary_lugia.mp3 b/public/audio/bgm/battle_legendary_lugia.mp3 index 37031c8a642c..a68f3df65578 100644 Binary files a/public/audio/bgm/battle_legendary_lugia.mp3 and b/public/audio/bgm/battle_legendary_lugia.mp3 differ diff --git a/public/audio/bgm/battle_legendary_ogerpon.mp3 b/public/audio/bgm/battle_legendary_ogerpon.mp3 index 2ac0d9756a82..0e26dafb5aa6 100644 Binary files a/public/audio/bgm/battle_legendary_ogerpon.mp3 and b/public/audio/bgm/battle_legendary_ogerpon.mp3 differ diff --git a/public/audio/bgm/battle_legendary_pecharunt.mp3 b/public/audio/bgm/battle_legendary_pecharunt.mp3 index 48f205d97d10..21383c2ea0e9 100644 Binary files a/public/audio/bgm/battle_legendary_pecharunt.mp3 and b/public/audio/bgm/battle_legendary_pecharunt.mp3 differ diff --git a/public/audio/bgm/battle_legendary_raikou.mp3 b/public/audio/bgm/battle_legendary_raikou.mp3 index 8daa7083faa8..e89ac31d678f 100644 Binary files a/public/audio/bgm/battle_legendary_raikou.mp3 and b/public/audio/bgm/battle_legendary_raikou.mp3 differ diff --git a/public/audio/bgm/battle_legendary_rayquaza.mp3 b/public/audio/bgm/battle_legendary_rayquaza.mp3 index 843596779bd9..3747edef71b8 100644 Binary files a/public/audio/bgm/battle_legendary_rayquaza.mp3 and b/public/audio/bgm/battle_legendary_rayquaza.mp3 differ diff --git a/public/audio/bgm/battle_legendary_regis_g5.mp3 b/public/audio/bgm/battle_legendary_regis_g5.mp3 index 227d544d91bc..f7b18dc91700 100644 Binary files a/public/audio/bgm/battle_legendary_regis_g5.mp3 and b/public/audio/bgm/battle_legendary_regis_g5.mp3 differ diff --git a/public/audio/bgm/battle_legendary_regis_g6.mp3 b/public/audio/bgm/battle_legendary_regis_g6.mp3 index ebe1a44d18ad..c87d61d0b799 100644 Binary files a/public/audio/bgm/battle_legendary_regis_g6.mp3 and b/public/audio/bgm/battle_legendary_regis_g6.mp3 differ diff --git a/public/audio/bgm/battle_legendary_res_zek.mp3 b/public/audio/bgm/battle_legendary_res_zek.mp3 index 4df08c10df8f..5e26b7822ff3 100644 Binary files a/public/audio/bgm/battle_legendary_res_zek.mp3 and b/public/audio/bgm/battle_legendary_res_zek.mp3 differ diff --git a/public/audio/bgm/battle_legendary_ruinous.mp3 b/public/audio/bgm/battle_legendary_ruinous.mp3 index dc1aeeaee269..804b0f39a6f0 100644 Binary files a/public/audio/bgm/battle_legendary_ruinous.mp3 and b/public/audio/bgm/battle_legendary_ruinous.mp3 differ diff --git a/public/audio/bgm/battle_legendary_sinnoh.mp3 b/public/audio/bgm/battle_legendary_sinnoh.mp3 index 6332a3e1cc20..6345689ebb31 100644 Binary files a/public/audio/bgm/battle_legendary_sinnoh.mp3 and b/public/audio/bgm/battle_legendary_sinnoh.mp3 differ diff --git a/public/audio/bgm/battle_legendary_sol_lun.mp3 b/public/audio/bgm/battle_legendary_sol_lun.mp3 index 4aa9d5111b84..9793c1b65604 100644 Binary files a/public/audio/bgm/battle_legendary_sol_lun.mp3 and b/public/audio/bgm/battle_legendary_sol_lun.mp3 differ diff --git a/public/audio/bgm/battle_legendary_suicune.mp3 b/public/audio/bgm/battle_legendary_suicune.mp3 index 7e7e49013864..4df599bbbc14 100644 Binary files a/public/audio/bgm/battle_legendary_suicune.mp3 and b/public/audio/bgm/battle_legendary_suicune.mp3 differ diff --git a/public/audio/bgm/battle_legendary_tapu.mp3 b/public/audio/bgm/battle_legendary_tapu.mp3 index 7f251a387a22..7536065ddfb0 100644 Binary files a/public/audio/bgm/battle_legendary_tapu.mp3 and b/public/audio/bgm/battle_legendary_tapu.mp3 differ diff --git a/public/audio/bgm/battle_legendary_terapagos.mp3 b/public/audio/bgm/battle_legendary_terapagos.mp3 index b820d7dba6ad..3cfea3472242 100644 Binary files a/public/audio/bgm/battle_legendary_terapagos.mp3 and b/public/audio/bgm/battle_legendary_terapagos.mp3 differ diff --git a/public/audio/bgm/battle_legendary_ub.mp3 b/public/audio/bgm/battle_legendary_ub.mp3 index 7a6bdb3a678d..3aefc7134411 100644 Binary files a/public/audio/bgm/battle_legendary_ub.mp3 and b/public/audio/bgm/battle_legendary_ub.mp3 differ diff --git a/public/audio/bgm/battle_legendary_ultra_nec.mp3 b/public/audio/bgm/battle_legendary_ultra_nec.mp3 index 63d8b0fa505a..e24c93cd4c24 100644 Binary files a/public/audio/bgm/battle_legendary_ultra_nec.mp3 and b/public/audio/bgm/battle_legendary_ultra_nec.mp3 differ diff --git a/public/audio/bgm/battle_legendary_unova.mp3 b/public/audio/bgm/battle_legendary_unova.mp3 index e4977d5b3b3a..3bae8a6a49fb 100644 Binary files a/public/audio/bgm/battle_legendary_unova.mp3 and b/public/audio/bgm/battle_legendary_unova.mp3 differ diff --git a/public/audio/bgm/battle_legendary_xern_yvel.mp3 b/public/audio/bgm/battle_legendary_xern_yvel.mp3 index 856bebb0f619..2487f60b28bf 100644 Binary files a/public/audio/bgm/battle_legendary_xern_yvel.mp3 and b/public/audio/bgm/battle_legendary_xern_yvel.mp3 differ diff --git a/public/audio/bgm/battle_legendary_zac_zam.mp3 b/public/audio/bgm/battle_legendary_zac_zam.mp3 index 6725625bedf8..5a8b8471c5b9 100644 Binary files a/public/audio/bgm/battle_legendary_zac_zam.mp3 and b/public/audio/bgm/battle_legendary_zac_zam.mp3 differ diff --git a/public/audio/bgm/battle_paldea_elite.mp3 b/public/audio/bgm/battle_paldea_elite.mp3 index 9a598dfaf646..f3a71ee83402 100644 Binary files a/public/audio/bgm/battle_paldea_elite.mp3 and b/public/audio/bgm/battle_paldea_elite.mp3 differ diff --git a/public/audio/bgm/battle_paldea_gym.mp3 b/public/audio/bgm/battle_paldea_gym.mp3 index eb9a19bacfe8..2cef63209fb4 100644 Binary files a/public/audio/bgm/battle_paldea_gym.mp3 and b/public/audio/bgm/battle_paldea_gym.mp3 differ diff --git a/public/audio/bgm/battle_plasma_boss.mp3 b/public/audio/bgm/battle_plasma_boss.mp3 index 5bfd024e09d2..124b8f4a2300 100644 Binary files a/public/audio/bgm/battle_plasma_boss.mp3 and b/public/audio/bgm/battle_plasma_boss.mp3 differ diff --git a/public/audio/bgm/battle_plasma_grunt.mp3 b/public/audio/bgm/battle_plasma_grunt.mp3 index fe371f21f9fd..7d1bf710bc54 100644 Binary files a/public/audio/bgm/battle_plasma_grunt.mp3 and b/public/audio/bgm/battle_plasma_grunt.mp3 differ diff --git a/public/audio/bgm/battle_rival.mp3 b/public/audio/bgm/battle_rival.mp3 index 3ccf48984910..82ff586576ae 100644 Binary files a/public/audio/bgm/battle_rival.mp3 and b/public/audio/bgm/battle_rival.mp3 differ diff --git a/public/audio/bgm/battle_rival_2.mp3 b/public/audio/bgm/battle_rival_2.mp3 index 3f19f990dce6..7f063ed5fd0b 100644 Binary files a/public/audio/bgm/battle_rival_2.mp3 and b/public/audio/bgm/battle_rival_2.mp3 differ diff --git a/public/audio/bgm/battle_rival_3.mp3 b/public/audio/bgm/battle_rival_3.mp3 index f6254c24cf4e..911438b4f831 100644 Binary files a/public/audio/bgm/battle_rival_3.mp3 and b/public/audio/bgm/battle_rival_3.mp3 differ diff --git a/public/audio/bgm/battle_rocket_boss.mp3 b/public/audio/bgm/battle_rocket_boss.mp3 index 2a966e20fb7e..757eaa38c70b 100644 Binary files a/public/audio/bgm/battle_rocket_boss.mp3 and b/public/audio/bgm/battle_rocket_boss.mp3 differ diff --git a/public/audio/bgm/battle_rocket_grunt.mp3 b/public/audio/bgm/battle_rocket_grunt.mp3 index 178141a13df9..e8f5faf86d78 100644 Binary files a/public/audio/bgm/battle_rocket_grunt.mp3 and b/public/audio/bgm/battle_rocket_grunt.mp3 differ diff --git a/public/audio/bgm/battle_sinnoh_champion.mp3 b/public/audio/bgm/battle_sinnoh_champion.mp3 index e6240c5a02af..a662ca20cbbc 100644 Binary files a/public/audio/bgm/battle_sinnoh_champion.mp3 and b/public/audio/bgm/battle_sinnoh_champion.mp3 differ diff --git a/public/audio/bgm/battle_sinnoh_gym.mp3 b/public/audio/bgm/battle_sinnoh_gym.mp3 index 3bf7e96f77fb..280c33a09e59 100644 Binary files a/public/audio/bgm/battle_sinnoh_gym.mp3 and b/public/audio/bgm/battle_sinnoh_gym.mp3 differ diff --git a/public/audio/bgm/battle_trainer.mp3 b/public/audio/bgm/battle_trainer.mp3 index 1155d72a53c6..d90c7bd845f9 100644 Binary files a/public/audio/bgm/battle_trainer.mp3 and b/public/audio/bgm/battle_trainer.mp3 differ diff --git a/public/audio/bgm/battle_unova_elite.mp3 b/public/audio/bgm/battle_unova_elite.mp3 index cab27a0de59a..8c150acb9e3c 100644 Binary files a/public/audio/bgm/battle_unova_elite.mp3 and b/public/audio/bgm/battle_unova_elite.mp3 differ diff --git a/public/audio/bgm/battle_unova_gym.mp3 b/public/audio/bgm/battle_unova_gym.mp3 index 3995e675bfe6..46a4600bbcae 100644 Binary files a/public/audio/bgm/battle_unova_gym.mp3 and b/public/audio/bgm/battle_unova_gym.mp3 differ diff --git a/public/audio/bgm/battle_wild.mp3 b/public/audio/bgm/battle_wild.mp3 index 98f7fe201504..f8d484ab51eb 100644 Binary files a/public/audio/bgm/battle_wild.mp3 and b/public/audio/bgm/battle_wild.mp3 differ diff --git a/public/audio/bgm/battle_wild_strong.mp3 b/public/audio/bgm/battle_wild_strong.mp3 index 166ac3825c5f..cf02ef8d1d5f 100644 Binary files a/public/audio/bgm/battle_wild_strong.mp3 and b/public/audio/bgm/battle_wild_strong.mp3 differ diff --git a/public/audio/bgm/beach.mp3 b/public/audio/bgm/beach.mp3 index a22386a9dc31..af0486a0c78e 100644 Binary files a/public/audio/bgm/beach.mp3 and b/public/audio/bgm/beach.mp3 differ diff --git a/public/audio/bgm/bw/evolution.mp3 b/public/audio/bgm/bw/evolution.mp3 index 0d7ae190bda5..ecfd085da269 100644 Binary files a/public/audio/bgm/bw/evolution.mp3 and b/public/audio/bgm/bw/evolution.mp3 differ diff --git a/public/audio/bgm/bw/evolution_fanfare.mp3 b/public/audio/bgm/bw/evolution_fanfare.mp3 index cb394470f1f9..6f554a4189ee 100644 Binary files a/public/audio/bgm/bw/evolution_fanfare.mp3 and b/public/audio/bgm/bw/evolution_fanfare.mp3 differ diff --git a/public/audio/bgm/bw/heal.mp3 b/public/audio/bgm/bw/heal.mp3 index 22b2d9fb8a30..9300bf350996 100644 Binary files a/public/audio/bgm/bw/heal.mp3 and b/public/audio/bgm/bw/heal.mp3 differ diff --git a/public/audio/bgm/bw/item_fanfare.mp3 b/public/audio/bgm/bw/item_fanfare.mp3 index 336a12dc1a6b..7f128ff1c224 100644 Binary files a/public/audio/bgm/bw/item_fanfare.mp3 and b/public/audio/bgm/bw/item_fanfare.mp3 differ diff --git a/public/audio/bgm/bw/level_up_fanfare.mp3 b/public/audio/bgm/bw/level_up_fanfare.mp3 index 3e4bdbdc9472..9501092f9dde 100644 Binary files a/public/audio/bgm/bw/level_up_fanfare.mp3 and b/public/audio/bgm/bw/level_up_fanfare.mp3 differ diff --git a/public/audio/bgm/bw/minor_fanfare.mp3 b/public/audio/bgm/bw/minor_fanfare.mp3 index 464a579a38f9..2e6104022f1b 100644 Binary files a/public/audio/bgm/bw/minor_fanfare.mp3 and b/public/audio/bgm/bw/minor_fanfare.mp3 differ diff --git a/public/audio/bgm/bw/victory_champion.mp3 b/public/audio/bgm/bw/victory_champion.mp3 index 2f6e6096bcbc..3711aadcc53e 100644 Binary files a/public/audio/bgm/bw/victory_champion.mp3 and b/public/audio/bgm/bw/victory_champion.mp3 differ diff --git a/public/audio/bgm/bw/victory_gym.mp3 b/public/audio/bgm/bw/victory_gym.mp3 index 5968b154ed65..9b93a90dd5d8 100644 Binary files a/public/audio/bgm/bw/victory_gym.mp3 and b/public/audio/bgm/bw/victory_gym.mp3 differ diff --git a/public/audio/bgm/bw/victory_team_plasma.mp3 b/public/audio/bgm/bw/victory_team_plasma.mp3 index ee498b8bb915..1f2c6229f5d8 100644 Binary files a/public/audio/bgm/bw/victory_team_plasma.mp3 and b/public/audio/bgm/bw/victory_team_plasma.mp3 differ diff --git a/public/audio/bgm/bw/victory_trainer.mp3 b/public/audio/bgm/bw/victory_trainer.mp3 index c8ab465a7b94..f5adb6deacc9 100644 Binary files a/public/audio/bgm/bw/victory_trainer.mp3 and b/public/audio/bgm/bw/victory_trainer.mp3 differ diff --git a/public/audio/bgm/cave.mp3 b/public/audio/bgm/cave.mp3 index f27d110d3417..59f4063867c4 100644 Binary files a/public/audio/bgm/cave.mp3 and b/public/audio/bgm/cave.mp3 differ diff --git a/public/audio/bgm/construction_site.mp3 b/public/audio/bgm/construction_site.mp3 index 841f623a2d5d..a5c5f5b1879f 100644 Binary files a/public/audio/bgm/construction_site.mp3 and b/public/audio/bgm/construction_site.mp3 differ diff --git a/public/audio/bgm/desert.mp3 b/public/audio/bgm/desert.mp3 index 546cc0c3377a..febbacc01006 100644 Binary files a/public/audio/bgm/desert.mp3 and b/public/audio/bgm/desert.mp3 differ diff --git a/public/audio/bgm/dojo.mp3 b/public/audio/bgm/dojo.mp3 index cb4a67b831c5..d8621b5b7fc2 100644 Binary files a/public/audio/bgm/dojo.mp3 and b/public/audio/bgm/dojo.mp3 differ diff --git a/public/audio/bgm/encounter_ace_trainer.mp3 b/public/audio/bgm/encounter_ace_trainer.mp3 index 835d7fbb56d0..ea507898900b 100644 Binary files a/public/audio/bgm/encounter_ace_trainer.mp3 and b/public/audio/bgm/encounter_ace_trainer.mp3 differ diff --git a/public/audio/bgm/encounter_backpacker.mp3 b/public/audio/bgm/encounter_backpacker.mp3 index c1e3d7f0ad57..1b95c48c1f88 100644 Binary files a/public/audio/bgm/encounter_backpacker.mp3 and b/public/audio/bgm/encounter_backpacker.mp3 differ diff --git a/public/audio/bgm/encounter_clerk.mp3 b/public/audio/bgm/encounter_clerk.mp3 index 8542a641edc4..8e1a45f43d2e 100644 Binary files a/public/audio/bgm/encounter_clerk.mp3 and b/public/audio/bgm/encounter_clerk.mp3 differ diff --git a/public/audio/bgm/encounter_cyclist.mp3 b/public/audio/bgm/encounter_cyclist.mp3 index 3603947d999a..dda81f48b71e 100644 Binary files a/public/audio/bgm/encounter_cyclist.mp3 and b/public/audio/bgm/encounter_cyclist.mp3 differ diff --git a/public/audio/bgm/encounter_final.mp3 b/public/audio/bgm/encounter_final.mp3 index 34e37132e904..ea47aa4bea4c 100644 Binary files a/public/audio/bgm/encounter_final.mp3 and b/public/audio/bgm/encounter_final.mp3 differ diff --git a/public/audio/bgm/encounter_lass.mp3 b/public/audio/bgm/encounter_lass.mp3 index 2f8be45c5eab..31ea20e3c023 100644 Binary files a/public/audio/bgm/encounter_lass.mp3 and b/public/audio/bgm/encounter_lass.mp3 differ diff --git a/public/audio/bgm/encounter_parasol_lady.mp3 b/public/audio/bgm/encounter_parasol_lady.mp3 index 1eb632a403c1..1fca7bae31a8 100644 Binary files a/public/audio/bgm/encounter_parasol_lady.mp3 and b/public/audio/bgm/encounter_parasol_lady.mp3 differ diff --git a/public/audio/bgm/encounter_plasma_grunt.mp3 b/public/audio/bgm/encounter_plasma_grunt.mp3 index 478d3f8edc5f..53e73cc01067 100644 Binary files a/public/audio/bgm/encounter_plasma_grunt.mp3 and b/public/audio/bgm/encounter_plasma_grunt.mp3 differ diff --git a/public/audio/bgm/encounter_pokefan.mp3 b/public/audio/bgm/encounter_pokefan.mp3 index 9c8f60aac0fb..cc3fafb158b5 100644 Binary files a/public/audio/bgm/encounter_pokefan.mp3 and b/public/audio/bgm/encounter_pokefan.mp3 differ diff --git a/public/audio/bgm/encounter_psychic.mp3 b/public/audio/bgm/encounter_psychic.mp3 index 75a2808569be..111e41833a2f 100644 Binary files a/public/audio/bgm/encounter_psychic.mp3 and b/public/audio/bgm/encounter_psychic.mp3 differ diff --git a/public/audio/bgm/encounter_rich.mp3 b/public/audio/bgm/encounter_rich.mp3 index cca97e6188e4..2df9dfcceab5 100644 Binary files a/public/audio/bgm/encounter_rich.mp3 and b/public/audio/bgm/encounter_rich.mp3 differ diff --git a/public/audio/bgm/encounter_rival.mp3 b/public/audio/bgm/encounter_rival.mp3 index 613c1b552cff..b814879b70e1 100644 Binary files a/public/audio/bgm/encounter_rival.mp3 and b/public/audio/bgm/encounter_rival.mp3 differ diff --git a/public/audio/bgm/encounter_roughneck.mp3 b/public/audio/bgm/encounter_roughneck.mp3 index 9e239191133e..630e1d0263d9 100644 Binary files a/public/audio/bgm/encounter_roughneck.mp3 and b/public/audio/bgm/encounter_roughneck.mp3 differ diff --git a/public/audio/bgm/encounter_scientist.mp3 b/public/audio/bgm/encounter_scientist.mp3 index 8cb180cd6abe..a2d2ce7754d6 100644 Binary files a/public/audio/bgm/encounter_scientist.mp3 and b/public/audio/bgm/encounter_scientist.mp3 differ diff --git a/public/audio/bgm/encounter_twins.mp3 b/public/audio/bgm/encounter_twins.mp3 index cb6b0ef8a264..8564a101dbe2 100644 Binary files a/public/audio/bgm/encounter_twins.mp3 and b/public/audio/bgm/encounter_twins.mp3 differ diff --git a/public/audio/bgm/encounter_youngster.mp3 b/public/audio/bgm/encounter_youngster.mp3 index 33e900b28d0b..8ad8bd158e9e 100644 Binary files a/public/audio/bgm/encounter_youngster.mp3 and b/public/audio/bgm/encounter_youngster.mp3 differ diff --git a/public/audio/bgm/end.mp3 b/public/audio/bgm/end.mp3 index 83b1273627a1..c37973fd9ccd 100644 Binary files a/public/audio/bgm/end.mp3 and b/public/audio/bgm/end.mp3 differ diff --git a/public/audio/bgm/end_summit.mp3 b/public/audio/bgm/end_summit.mp3 index 840d888bdd5d..413fb4af384a 100644 Binary files a/public/audio/bgm/end_summit.mp3 and b/public/audio/bgm/end_summit.mp3 differ diff --git a/public/audio/bgm/factory.mp3 b/public/audio/bgm/factory.mp3 index 78f21dc44d67..723041683067 100644 Binary files a/public/audio/bgm/factory.mp3 and b/public/audio/bgm/factory.mp3 differ diff --git a/public/audio/bgm/fairy_cave.mp3 b/public/audio/bgm/fairy_cave.mp3 index 5de3f702b217..4e1c9ea0eb48 100644 Binary files a/public/audio/bgm/fairy_cave.mp3 and b/public/audio/bgm/fairy_cave.mp3 differ diff --git a/public/audio/bgm/forest.mp3 b/public/audio/bgm/forest.mp3 index 0f5af3b56f30..a1d9ecb4b284 100644 Binary files a/public/audio/bgm/forest.mp3 and b/public/audio/bgm/forest.mp3 differ diff --git a/public/audio/bgm/grass.mp3 b/public/audio/bgm/grass.mp3 index f9555ec2a7d0..898da6d42c56 100644 Binary files a/public/audio/bgm/grass.mp3 and b/public/audio/bgm/grass.mp3 differ diff --git a/public/audio/bgm/graveyard.mp3 b/public/audio/bgm/graveyard.mp3 index 343ad3eda984..48092fa3ec27 100644 Binary files a/public/audio/bgm/graveyard.mp3 and b/public/audio/bgm/graveyard.mp3 differ diff --git a/public/audio/bgm/heal.mp3 b/public/audio/bgm/heal.mp3 index 22b2d9fb8a30..9300bf350996 100644 Binary files a/public/audio/bgm/heal.mp3 and b/public/audio/bgm/heal.mp3 differ diff --git a/public/audio/bgm/ice_cave.mp3 b/public/audio/bgm/ice_cave.mp3 index bc23973b9eec..5d1b9e9e3542 100644 Binary files a/public/audio/bgm/ice_cave.mp3 and b/public/audio/bgm/ice_cave.mp3 differ diff --git a/public/audio/bgm/island.mp3 b/public/audio/bgm/island.mp3 index 08aecab84a92..27d5ff645621 100644 Binary files a/public/audio/bgm/island.mp3 and b/public/audio/bgm/island.mp3 differ diff --git a/public/audio/bgm/jungle.mp3 b/public/audio/bgm/jungle.mp3 index 5db42ba8d0d4..3a21c9bdb413 100644 Binary files a/public/audio/bgm/jungle.mp3 and b/public/audio/bgm/jungle.mp3 differ diff --git a/public/audio/bgm/laboratory.mp3 b/public/audio/bgm/laboratory.mp3 index 38b2b71b62a0..e2b617e590ac 100644 Binary files a/public/audio/bgm/laboratory.mp3 and b/public/audio/bgm/laboratory.mp3 differ diff --git a/public/audio/bgm/lake.mp3 b/public/audio/bgm/lake.mp3 index e93228ba5659..c61fef15e42d 100644 Binary files a/public/audio/bgm/lake.mp3 and b/public/audio/bgm/lake.mp3 differ diff --git a/public/audio/bgm/meadow.mp3 b/public/audio/bgm/meadow.mp3 index 5990f79e5da1..1c9b6c47325d 100644 Binary files a/public/audio/bgm/meadow.mp3 and b/public/audio/bgm/meadow.mp3 differ diff --git a/public/audio/bgm/menu.mp3 b/public/audio/bgm/menu.mp3 index a57ba45bd14b..286e986d5705 100644 Binary files a/public/audio/bgm/menu.mp3 and b/public/audio/bgm/menu.mp3 differ diff --git a/public/audio/bgm/metropolis.mp3 b/public/audio/bgm/metropolis.mp3 index 7c8b19123460..98c2eb396b61 100644 Binary files a/public/audio/bgm/metropolis.mp3 and b/public/audio/bgm/metropolis.mp3 differ diff --git a/public/audio/bgm/mountain.mp3 b/public/audio/bgm/mountain.mp3 index d71cd6870573..e4ca51cf4fde 100644 Binary files a/public/audio/bgm/mountain.mp3 and b/public/audio/bgm/mountain.mp3 differ diff --git a/public/audio/bgm/plains.mp3 b/public/audio/bgm/plains.mp3 index 3deb8f4b27d5..6c7a008bce63 100644 Binary files a/public/audio/bgm/plains.mp3 and b/public/audio/bgm/plains.mp3 differ diff --git a/public/audio/bgm/power_plant.mp3 b/public/audio/bgm/power_plant.mp3 index a7ab54305c28..9813ad40a111 100644 Binary files a/public/audio/bgm/power_plant.mp3 and b/public/audio/bgm/power_plant.mp3 differ diff --git a/public/audio/bgm/rse/evolution.mp3 b/public/audio/bgm/rse/evolution.mp3 index 5f1b739f14f5..a74cbedb5947 100644 Binary files a/public/audio/bgm/rse/evolution.mp3 and b/public/audio/bgm/rse/evolution.mp3 differ diff --git a/public/audio/bgm/rse/evolution_fanfare.mp3 b/public/audio/bgm/rse/evolution_fanfare.mp3 index 165d1d2d8eb4..8acfb2f3a95f 100644 Binary files a/public/audio/bgm/rse/evolution_fanfare.mp3 and b/public/audio/bgm/rse/evolution_fanfare.mp3 differ diff --git a/public/audio/bgm/rse/level_up_fanfare.mp3 b/public/audio/bgm/rse/level_up_fanfare.mp3 index bc85163c15e2..78aea15156d5 100644 Binary files a/public/audio/bgm/rse/level_up_fanfare.mp3 and b/public/audio/bgm/rse/level_up_fanfare.mp3 differ diff --git a/public/audio/bgm/rse/victory.mp3 b/public/audio/bgm/rse/victory.mp3 index 871889af615e..7bf1d7a52827 100644 Binary files a/public/audio/bgm/rse/victory.mp3 and b/public/audio/bgm/rse/victory.mp3 differ diff --git a/public/audio/bgm/ruins.mp3 b/public/audio/bgm/ruins.mp3 index 096161d8bef8..62f31893423b 100644 Binary files a/public/audio/bgm/ruins.mp3 and b/public/audio/bgm/ruins.mp3 differ diff --git a/public/audio/bgm/sea.mp3 b/public/audio/bgm/sea.mp3 index 0bf44bcc3e4d..8bdaaa696f1d 100644 Binary files a/public/audio/bgm/sea.mp3 and b/public/audio/bgm/sea.mp3 differ diff --git a/public/audio/bgm/seabed.mp3 b/public/audio/bgm/seabed.mp3 index afa282cb4db3..d0c405b4e1df 100644 Binary files a/public/audio/bgm/seabed.mp3 and b/public/audio/bgm/seabed.mp3 differ diff --git a/public/audio/bgm/slum.mp3 b/public/audio/bgm/slum.mp3 index 2df06608e644..1315c7838fcd 100644 Binary files a/public/audio/bgm/slum.mp3 and b/public/audio/bgm/slum.mp3 differ diff --git a/public/audio/bgm/snowy_forest.mp3 b/public/audio/bgm/snowy_forest.mp3 index c0e945389104..1469ef56bde0 100644 Binary files a/public/audio/bgm/snowy_forest.mp3 and b/public/audio/bgm/snowy_forest.mp3 differ diff --git a/public/audio/bgm/space.mp3 b/public/audio/bgm/space.mp3 index 9585351c9af0..87a53fb84ff7 100644 Binary files a/public/audio/bgm/space.mp3 and b/public/audio/bgm/space.mp3 differ diff --git a/public/audio/bgm/swamp.mp3 b/public/audio/bgm/swamp.mp3 index e92045d18d20..eb42c8a7a468 100644 Binary files a/public/audio/bgm/swamp.mp3 and b/public/audio/bgm/swamp.mp3 differ diff --git a/public/audio/bgm/tall_grass.mp3 b/public/audio/bgm/tall_grass.mp3 index 68c587547cf7..ba2200b64fcd 100644 Binary files a/public/audio/bgm/tall_grass.mp3 and b/public/audio/bgm/tall_grass.mp3 differ diff --git a/public/audio/bgm/temple.mp3 b/public/audio/bgm/temple.mp3 index 810b9f973116..81fa4416575a 100644 Binary files a/public/audio/bgm/temple.mp3 and b/public/audio/bgm/temple.mp3 differ diff --git a/public/audio/bgm/title.mp3 b/public/audio/bgm/title.mp3 index 373b56e3acd6..86d4be0da356 100644 Binary files a/public/audio/bgm/title.mp3 and b/public/audio/bgm/title.mp3 differ diff --git a/public/audio/bgm/town.mp3 b/public/audio/bgm/town.mp3 index dd8d3fa66667..fb197ade121a 100644 Binary files a/public/audio/bgm/town.mp3 and b/public/audio/bgm/town.mp3 differ diff --git a/public/audio/bgm/volcano.mp3 b/public/audio/bgm/volcano.mp3 index 8e5a6ff8d953..093bb86813b2 100644 Binary files a/public/audio/bgm/volcano.mp3 and b/public/audio/bgm/volcano.mp3 differ diff --git a/public/audio/bgm/wasteland.mp3 b/public/audio/bgm/wasteland.mp3 index ee068ac2eac2..646cbd89a1f5 100644 Binary files a/public/audio/bgm/wasteland.mp3 and b/public/audio/bgm/wasteland.mp3 differ diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 5ba36aee4e3c..d514814d3f61 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -621,7 +621,7 @@ "777", "778-busted", "778-busted", - "778", + "778-disguised", "778", "779", "779", @@ -1753,7 +1753,7 @@ "777b", "778b-busted", "778b-busted", - "778b", + "778b-disguised", "778b", "779b", "779b", @@ -2885,7 +2885,7 @@ "777sb", "778sb-busted", "778sb-busted", - "778sb", + "778sb-disguised", "778sb", "779sb", "779sb", @@ -4024,7 +4024,7 @@ "777s", "778s-busted", "778s-busted", - "778s", + "778s-disguised", "778s", "779s", "779s", diff --git a/public/images/pokemon/778-busted.png b/public/images/pokemon/778-busted.png index 689da7643984..dbc478381cd0 100644 Binary files a/public/images/pokemon/778-busted.png and b/public/images/pokemon/778-busted.png differ diff --git a/public/images/pokemon/778.json b/public/images/pokemon/778-disguised.json similarity index 95% rename from public/images/pokemon/778.json rename to public/images/pokemon/778-disguised.json index fb77b7834afb..fb56a6612d04 100644 --- a/public/images/pokemon/778.json +++ b/public/images/pokemon/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 48, diff --git a/public/images/pokemon/778.png b/public/images/pokemon/778-disguised.png similarity index 100% rename from public/images/pokemon/778.png rename to public/images/pokemon/778-disguised.png diff --git a/public/images/pokemon/back/778.json b/public/images/pokemon/back/778-disguised.json similarity index 95% rename from public/images/pokemon/back/778.json rename to public/images/pokemon/back/778-disguised.json index 7e7176217f0b..a5818c08d03c 100644 --- a/public/images/pokemon/back/778.json +++ b/public/images/pokemon/back/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 51, diff --git a/public/images/pokemon/back/778.png b/public/images/pokemon/back/778-disguised.png similarity index 100% rename from public/images/pokemon/back/778.png rename to public/images/pokemon/back/778-disguised.png diff --git a/public/images/pokemon/back/shiny/778.json b/public/images/pokemon/back/shiny/778-disguised.json similarity index 95% rename from public/images/pokemon/back/shiny/778.json rename to public/images/pokemon/back/shiny/778-disguised.json index b4a769a5fcc2..5e6ab6129035 100644 --- a/public/images/pokemon/back/shiny/778.json +++ b/public/images/pokemon/back/shiny/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 51, diff --git a/public/images/pokemon/back/shiny/778.png b/public/images/pokemon/back/shiny/778-disguised.png similarity index 100% rename from public/images/pokemon/back/shiny/778.png rename to public/images/pokemon/back/shiny/778-disguised.png diff --git a/public/images/pokemon/exp/778-busted.png b/public/images/pokemon/exp/778-busted.png index 98a02bdad69e..67740699c021 100644 Binary files a/public/images/pokemon/exp/778-busted.png and b/public/images/pokemon/exp/778-busted.png differ diff --git a/public/images/pokemon/exp/778.json b/public/images/pokemon/exp/778-disguised.json similarity index 99% rename from public/images/pokemon/exp/778.json rename to public/images/pokemon/exp/778-disguised.json index d3e2f8680b0d..9668c6d8d592 100644 --- a/public/images/pokemon/exp/778.json +++ b/public/images/pokemon/exp/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 219, diff --git a/public/images/pokemon/exp/778-disguised.png b/public/images/pokemon/exp/778-disguised.png new file mode 100644 index 000000000000..ba26b8db9975 Binary files /dev/null and b/public/images/pokemon/exp/778-disguised.png differ diff --git a/public/images/pokemon/exp/778.png b/public/images/pokemon/exp/778.png deleted file mode 100644 index 7830266be070..000000000000 Binary files a/public/images/pokemon/exp/778.png and /dev/null differ diff --git a/public/images/pokemon/exp/back/778.json b/public/images/pokemon/exp/back/778-disguised.json similarity index 99% rename from public/images/pokemon/exp/back/778.json rename to public/images/pokemon/exp/back/778-disguised.json index 72555e22d19a..04d18782d0dd 100644 --- a/public/images/pokemon/exp/back/778.json +++ b/public/images/pokemon/exp/back/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 210, diff --git a/public/images/pokemon/exp/back/778.png b/public/images/pokemon/exp/back/778-disguised.png similarity index 100% rename from public/images/pokemon/exp/back/778.png rename to public/images/pokemon/exp/back/778-disguised.png diff --git a/public/images/pokemon/exp/back/shiny/4555.json b/public/images/pokemon/exp/back/shiny/4555.json index 233067000453..24b0847bc3cb 100644 --- a/public/images/pokemon/exp/back/shiny/4555.json +++ b/public/images/pokemon/exp/back/shiny/4555.json @@ -1,1091 +1,230 @@ -{ - "textures": [ - { - "image": "4555.png", - "format": "RGBA8888", - "size": { - "w": 159, - "h": 159 - }, - "scale": 1, - "frames": [ - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 38 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 38 - }, - "frame": { - "x": 0, - "y": 0, - "w": 40, - "h": 38 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 39 - }, - "frame": { - "x": 40, - "y": 0, - "w": 40, - "h": 39 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 80, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 39, - "h": 39 - }, - "frame": { - "x": 0, - "y": 38, - "w": 39, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 39, - "y": 39, - "w": 41, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 80, - "y": 39, - "w": 40, - "h": 40 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 39, - "h": 40 - }, - "frame": { - "x": 120, - "y": 39, - "w": 39, - "h": 40 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 39, - "h": 40 - }, - "frame": { - "x": 0, - "y": 77, - "w": 39, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 39, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 79, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 79, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 79, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 40, - "h": 40 - }, - "frame": { - "x": 79, - "y": 79, - "w": 40, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 39, - "h": 40 - }, - "frame": { - "x": 119, - "y": 79, - "w": 39, - "h": 40 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 0, - "y": 119, - "w": 41, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 41, - "h": 40 - }, - "frame": { - "x": 0, - "y": 119, - "w": 41, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 42, - "h": 40 - }, - "frame": { - "x": 41, - "y": 119, - "w": 42, - "h": 40 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 47 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 42, - "h": 40 - }, - "frame": { - "x": 83, - "y": 119, - "w": 42, - "h": 40 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3a0b5f67665759f212123a47de22e79d:d133311823cafabf0f343822a0a0197f:b1fe411cd93ff8f39d0ba407d084a2a9$" - } -} +{ + "textures": [ + { + "image": "4555.png", + "format": "RGBA8888", + "size": { + "w": 162, + "h": 162 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 54, + "h": 66 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 66 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 54, + "h": 66 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 66 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 54, + "h": 66 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 66 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 54, + "h": 64 + }, + "frame": { + "x": 108, + "y": 0, + "w": 54, + "h": 64 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 54, + "h": 64 + }, + "frame": { + "x": 108, + "y": 0, + "w": 54, + "h": 64 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 63 + }, + "frame": { + "x": 108, + "y": 64, + "w": 54, + "h": 63 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 63 + }, + "frame": { + "x": 108, + "y": 64, + "w": 54, + "h": 63 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 62 + }, + "frame": { + "x": 0, + "y": 66, + "w": 54, + "h": 62 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 62 + }, + "frame": { + "x": 0, + "y": 66, + "w": 54, + "h": 62 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 66 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 54, + "h": 61 + }, + "frame": { + "x": 54, + "y": 66, + "w": 54, + "h": 61 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:ebbf6c9db863403fcc56899bb963c8fe:60a7f95a9e0afed849e5735b36d1ca41:b1fe411cd93ff8f39d0ba407d084a2a9$" + } +} diff --git a/public/images/pokemon/exp/back/shiny/4555.png b/public/images/pokemon/exp/back/shiny/4555.png index 1b06edcaada6..3ce57019abea 100644 Binary files a/public/images/pokemon/exp/back/shiny/4555.png and b/public/images/pokemon/exp/back/shiny/4555.png differ diff --git a/public/images/pokemon/exp/back/shiny/778.json b/public/images/pokemon/exp/back/shiny/778-disguised.json similarity index 99% rename from public/images/pokemon/exp/back/shiny/778.json rename to public/images/pokemon/exp/back/shiny/778-disguised.json index 77ae7d76ba7c..53684eb62dc1 100644 --- a/public/images/pokemon/exp/back/shiny/778.json +++ b/public/images/pokemon/exp/back/shiny/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 210, diff --git a/public/images/pokemon/exp/back/shiny/778.png b/public/images/pokemon/exp/back/shiny/778-disguised.png similarity index 100% rename from public/images/pokemon/exp/back/shiny/778.png rename to public/images/pokemon/exp/back/shiny/778-disguised.png diff --git a/public/images/pokemon/exp/shiny/4555.json b/public/images/pokemon/exp/shiny/4555.json index f6f5dae33e7f..8a1e29346874 100644 --- a/public/images/pokemon/exp/shiny/4555.json +++ b/public/images/pokemon/exp/shiny/4555.json @@ -1,1427 +1,272 @@ -{ - "textures": [ - { - "image": "4555.png", - "format": "RGBA8888", - "size": { - "w": 167, - "h": 167 - }, - "scale": 1, - "frames": [ - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 45, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 42 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 45, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 44, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 44, - "h": 42 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 45, - "h": 41 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 41 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 45, - "h": 41 - }, - "frame": { - "x": 90, - "y": 0, - "w": 45, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 43, - "h": 42 - }, - "frame": { - "x": 0, - "y": 84, - "w": 43, - "h": 42 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 43, - "h": 41 - }, - "frame": { - "x": 0, - "y": 126, - "w": 43, - "h": 41 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 45, - "y": 41, - "w": 44, - "h": 40 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 40 - }, - "frame": { - "x": 89, - "y": 41, - "w": 43, - "h": 40 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 40 - }, - "frame": { - "x": 89, - "y": 41, - "w": 43, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 7, - "w": 42, - "h": 41 - }, - "frame": { - "x": 44, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 41, - "h": 41 - }, - "frame": { - "x": 86, - "y": 81, - "w": 41, - "h": 41 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 41, - "h": 41 - }, - "frame": { - "x": 86, - "y": 81, - "w": 41, - "h": 41 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 41, - "h": 41 - }, - "frame": { - "x": 86, - "y": 81, - "w": 41, - "h": 41 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 41, - "h": 41 - }, - "frame": { - "x": 86, - "y": 81, - "w": 41, - "h": 41 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 41, - "h": 41 - }, - "frame": { - "x": 86, - "y": 81, - "w": 41, - "h": 41 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 41, - "h": 41 - }, - "frame": { - "x": 86, - "y": 81, - "w": 41, - "h": 41 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 40, - "h": 42 - }, - "frame": { - "x": 127, - "y": 81, - "w": 40, - "h": 42 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 2, - "y": 6, - "w": 41, - "h": 42 - }, - "frame": { - "x": 43, - "y": 122, - "w": 41, - "h": 42 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 41, - "h": 42 - }, - "frame": { - "x": 84, - "y": 122, - "w": 41, - "h": 42 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 49 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 41, - "h": 41 - }, - "frame": { - "x": 125, - "y": 123, - "w": 41, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:265fdf7e226496ba08465dfaf7110126:d3c7e5104ff35ad1a1d1e07ba8a2af96:b1fe411cd93ff8f39d0ba407d084a2a9$" - } -} +{ + "textures": [ + { + "image": "4555.png", + "format": "RGBA8888", + "size": { + "w": 218, + "h": 218 + }, + "scale": 1, + "frames": [ + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 75 + }, + "frame": { + "x": 0, + "y": 0, + "w": 60, + "h": 75 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 75 + }, + "frame": { + "x": 0, + "y": 0, + "w": 60, + "h": 75 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 58, + "h": 75 + }, + "frame": { + "x": 0, + "y": 75, + "w": 58, + "h": 75 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 58, + "h": 75 + }, + "frame": { + "x": 0, + "y": 75, + "w": 58, + "h": 75 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 58, + "h": 75 + }, + "frame": { + "x": 58, + "y": 75, + "w": 58, + "h": 75 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 58, + "h": 75 + }, + "frame": { + "x": 58, + "y": 75, + "w": 58, + "h": 75 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 4, + "y": 0, + "w": 57, + "h": 75 + }, + "frame": { + "x": 60, + "y": 0, + "w": 57, + "h": 75 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 59, + "h": 74 + }, + "frame": { + "x": 117, + "y": 0, + "w": 59, + "h": 74 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 59, + "h": 74 + }, + "frame": { + "x": 117, + "y": 0, + "w": 59, + "h": 74 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 59, + "h": 73 + }, + "frame": { + "x": 117, + "y": 74, + "w": 59, + "h": 73 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 59, + "h": 73 + }, + "frame": { + "x": 117, + "y": 74, + "w": 59, + "h": 73 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 61, + "h": 75 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 59, + "h": 71 + }, + "frame": { + "x": 116, + "y": 147, + "w": 59, + "h": 71 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:8c03d5a85bd38061e1546639fec46360:c82e507fba00c56a331f2f65db25d979:b1fe411cd93ff8f39d0ba407d084a2a9$" + } +} diff --git a/public/images/pokemon/exp/shiny/4555.png b/public/images/pokemon/exp/shiny/4555.png index c5da9b8ec1e7..1fc84012eed6 100644 Binary files a/public/images/pokemon/exp/shiny/4555.png and b/public/images/pokemon/exp/shiny/4555.png differ diff --git a/public/images/pokemon/exp/shiny/778.json b/public/images/pokemon/exp/shiny/778-disguised.json similarity index 99% rename from public/images/pokemon/exp/shiny/778.json rename to public/images/pokemon/exp/shiny/778-disguised.json index 44a236b129dd..1ba5c6899c44 100644 --- a/public/images/pokemon/exp/shiny/778.json +++ b/public/images/pokemon/exp/shiny/778-disguised.json @@ -1,7 +1,7 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { "w": 219, diff --git a/public/images/pokemon/exp/shiny/778.png b/public/images/pokemon/exp/shiny/778-disguised.png similarity index 100% rename from public/images/pokemon/exp/shiny/778.png rename to public/images/pokemon/exp/shiny/778-disguised.png diff --git a/public/images/pokemon/icons/7/778.png b/public/images/pokemon/icons/7/778-disguised.png similarity index 100% rename from public/images/pokemon/icons/7/778.png rename to public/images/pokemon/icons/7/778-disguised.png diff --git a/public/images/pokemon/icons/7/778s.png b/public/images/pokemon/icons/7/778s-disguised.png similarity index 100% rename from public/images/pokemon/icons/7/778s.png rename to public/images/pokemon/icons/7/778s-disguised.png diff --git a/public/images/pokemon/icons/variant/7/778_2.png b/public/images/pokemon/icons/variant/7/778-disguised_2.png similarity index 100% rename from public/images/pokemon/icons/variant/7/778_2.png rename to public/images/pokemon/icons/variant/7/778-disguised_2.png diff --git a/public/images/pokemon/icons/variant/7/778_3.png b/public/images/pokemon/icons/variant/7/778-disguised_3.png similarity index 100% rename from public/images/pokemon/icons/variant/7/778_3.png rename to public/images/pokemon/icons/variant/7/778-disguised_3.png diff --git a/public/images/pokemon/shiny/778.json b/public/images/pokemon/shiny/778-disguised.json similarity index 93% rename from public/images/pokemon/shiny/778.json rename to public/images/pokemon/shiny/778-disguised.json index 0d4975c4ec71..eafdd271342b 100644 --- a/public/images/pokemon/shiny/778.json +++ b/public/images/pokemon/shiny/778-disguised.json @@ -1,10 +1,10 @@ { "textures": [ { - "image": "778.png", + "image": "778-disguised.png", "format": "RGBA8888", "size": { - "w": 48, + "w": 39, "h": 48 }, "scale": 1, diff --git a/public/images/pokemon/shiny/778-disguised.png b/public/images/pokemon/shiny/778-disguised.png new file mode 100644 index 000000000000..941fc6c284e3 Binary files /dev/null and b/public/images/pokemon/shiny/778-disguised.png differ diff --git a/public/images/pokemon/shiny/778.png b/public/images/pokemon/shiny/778.png deleted file mode 100644 index f6c14926a12b..000000000000 Binary files a/public/images/pokemon/shiny/778.png and /dev/null differ diff --git a/public/images/pokemon/variant/778-busted.json b/public/images/pokemon/variant/778-busted.json new file mode 100644 index 000000000000..c3f379146676 --- /dev/null +++ b/public/images/pokemon/variant/778-busted.json @@ -0,0 +1,26 @@ +{ + "1": { + "101010": "000000", + "404040": "3a200c", + "b3a76b": "8d4f3d", + "f2e291": "aa6f46", + "665f3d": "542c21", + "f28b24": "d9ae6c", + "a55c18": "c58850", + "4d361f": "a0561d", + "b37d47": "fabc5f", + "404039": "381a15" + }, + "2": { + "101010": "000000", + "404040": "0c123a", + "b3a76b": "3d2e4f", + "f2e291": "5b496b", + "665f3d": "1b1031", + "f28b24": "69a3cb", + "a55c18": "5b8abd", + "4d361f": "3e5075", + "b37d47": "8eb5cd", + "404039": "ff766e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/778.json b/public/images/pokemon/variant/778-disguised.json similarity index 99% rename from public/images/pokemon/variant/778.json rename to public/images/pokemon/variant/778-disguised.json index 3b8eca6ee7fc..3fb6d0c98c26 100644 --- a/public/images/pokemon/variant/778.json +++ b/public/images/pokemon/variant/778-disguised.json @@ -31,4 +31,4 @@ "805933": "6d80a4", "3c3838": "ff766e" } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 9be4a71316d9..0c48fed625bf 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -2464,7 +2464,12 @@ 1, 1 ], - "778": [ + "778-busted": [ + 0, + 1, + 1 + ], + "778-disguised": [ 0, 1, 1 @@ -5832,7 +5837,12 @@ 1, 1 ], - "778": [ + "778-busted": [ + 0, + 1, + 1 + ], + "778-disguised": [ 0, 1, 1 @@ -7371,10 +7381,15 @@ 1, 1 ], - "778": [ + "778-busted": [ 0, 1, - 2 + 1 + ], + "778-disguised": [ + 0, + 1, + 1 ], "779": [ 0, @@ -8653,7 +8668,12 @@ 1, 1 ], - "778": [ + "778-busted": [ + 0, + 1, + 1 + ], + "778-disguised": [ 0, 1, 1 @@ -9320,4 +9340,4 @@ 1 ] } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/back/778-busted.json b/public/images/pokemon/variant/back/778-busted.json new file mode 100644 index 000000000000..70c365d1ff78 --- /dev/null +++ b/public/images/pokemon/variant/back/778-busted.json @@ -0,0 +1,22 @@ +{ + "1": { + "101010": "101010", + "404040": "2d1818", + "b3a76b": "8d4f3d", + "f2e291": "aa6f46", + "665f3d": "542c21", + "4d361f": "844b20", + "b37d47": "fabc5f", + "805933": "b97d2c" + }, + "2": { + "101010": "000000", + "404040": "0c123a", + "b3a76b": "3d2e4f", + "f2e291": "5b496b", + "665f3d": "1b1031", + "4d361f": "3e5075", + "b37d47": "8eb5cd", + "805933": "6d80a4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/778.json b/public/images/pokemon/variant/back/778-disguised.json similarity index 99% rename from public/images/pokemon/variant/back/778.json rename to public/images/pokemon/variant/back/778-disguised.json index 2c6ce68a2999..9b8340c7562c 100644 --- a/public/images/pokemon/variant/back/778.json +++ b/public/images/pokemon/variant/back/778-disguised.json @@ -19,4 +19,4 @@ "b37d47": "8eb5cd", "805933": "6d80a4" } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/back/982-three-segment_3.png b/public/images/pokemon/variant/back/982-three-segment_3.png index b6b0ef0c2f40..3286d3331a59 100644 Binary files a/public/images/pokemon/variant/back/982-three-segment_3.png and b/public/images/pokemon/variant/back/982-three-segment_3.png differ diff --git a/public/images/pokemon/variant/back/982_3.png b/public/images/pokemon/variant/back/982_3.png index 3286d3331a59..b6b0ef0c2f40 100644 Binary files a/public/images/pokemon/variant/back/982_3.png and b/public/images/pokemon/variant/back/982_3.png differ diff --git a/public/images/pokemon/variant/exp/778-busted.json b/public/images/pokemon/variant/exp/778-busted.json new file mode 100644 index 000000000000..679ebbb5f319 --- /dev/null +++ b/public/images/pokemon/variant/exp/778-busted.json @@ -0,0 +1,30 @@ +{ + "1": { + "000000": "000000", + "101010": "101010", + "404040": "180c05", + "b3a76b": "8d4f3d", + "f2e291": "aa6f46", + "665f3d": "382313", + "f28b24": "d9ae6c", + "b3671b": "c58850", + "4d361f": "a0561d", + "b37d47": "fabc5f", + "805933": "d18e33", + "404039": "180c05" + }, + "2": { + "000000": "000000", + "101010": "000000", + "404040": "0b1231", + "b3a76b": "3d2e4f", + "f2e291": "5b496b", + "665f3d": "25213a", + "f28b24": "69a3cb", + "b3671b": "5b8abd", + "4d361f": "3e5075", + "b37d47": "8eb5cd", + "805933": "6d80a4", + "404039": "ff766e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/778-disguised.json b/public/images/pokemon/variant/exp/778-disguised.json new file mode 100644 index 000000000000..7dfb153ed7e4 --- /dev/null +++ b/public/images/pokemon/variant/exp/778-disguised.json @@ -0,0 +1,28 @@ +{ + "1": { + "000000": "000000", + "404040": "180c05", + "b3a76b": "8d4f3d", + "f2e291": "aa6f46", + "665f3d": "382313", + "f28b24": "d9ae6c", + "b3671b": "c58850", + "4d361f": "a0561d", + "b37d47": "fabc5f", + "805933": "d18e33", + "404039": "180c05" + }, + "2": { + "000000": "000000", + "404040": "0b1231", + "b3a76b": "3d2e4f", + "f2e291": "5b496b", + "665f3d": "25213a", + "f28b24": "69a3cb", + "b3671b": "5b8abd", + "4d361f": "3e5075", + "b37d47": "8eb5cd", + "805933": "6d80a4", + "404039": "ff766e" + } +} diff --git a/public/images/pokemon/variant/exp/778.json b/public/images/pokemon/variant/exp/778.json deleted file mode 100644 index 5b4d0baa5054..000000000000 --- a/public/images/pokemon/variant/exp/778.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "1": { - "000000": "000000", - "404040": "180c05", - "b3a76b": "8d4f3d", - "f2e291": "aa6f46", - "665f3d": "382313", - "f28b24": "d9ae6c", - "b3671b": "c58850", - "4d361f": "a0561d", - "b37d47": "fabc5f", - "805933": "d18e33" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/778_3.json b/public/images/pokemon/variant/exp/778_3.json deleted file mode 100644 index a51f14647c19..000000000000 --- a/public/images/pokemon/variant/exp/778_3.json +++ /dev/null @@ -1,1343 +0,0 @@ -{ - "textures": [ - { - "image": "778_3.png", - "format": "RGBA8888", - "size": { - "w": 219, - "h": 219 - }, - "scale": 1, - "frames": [ - { - "filename": "0056.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 48 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 48 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 47 - }, - "frame": { - "x": 0, - "y": 48, - "w": 60, - "h": 47 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 57, - "h": 48 - }, - "frame": { - "x": 60, - "y": 0, - "w": 57, - "h": 48 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 54, - "h": 48 - }, - "frame": { - "x": 0, - "y": 95, - "w": 54, - "h": 48 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 52, - "h": 48 - }, - "frame": { - "x": 117, - "y": 0, - "w": 52, - "h": 48 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 48, - "h": 48 - }, - "frame": { - "x": 0, - "y": 143, - "w": 48, - "h": 48 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 47, - "h": 48 - }, - "frame": { - "x": 169, - "y": 0, - "w": 47, - "h": 48 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 16, - "y": 1, - "w": 44, - "h": 47 - }, - "frame": { - "x": 60, - "y": 48, - "w": 44, - "h": 47 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 15, - "y": 0, - "w": 44, - "h": 48 - }, - "frame": { - "x": 54, - "y": 95, - "w": 44, - "h": 48 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 15, - "y": 0, - "w": 44, - "h": 48 - }, - "frame": { - "x": 48, - "y": 143, - "w": 44, - "h": 48 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 43, - "h": 48 - }, - "frame": { - "x": 104, - "y": 48, - "w": 43, - "h": 48 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 42, - "h": 48 - }, - "frame": { - "x": 147, - "y": 48, - "w": 42, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 98, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 17, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 139, - "y": 96, - "w": 41, - "h": 48 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 92, - "y": 144, - "w": 41, - "h": 48 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 92, - "y": 144, - "w": 41, - "h": 48 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 41, - "h": 48 - }, - "frame": { - "x": 133, - "y": 144, - "w": 41, - "h": 48 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 180, - "y": 96, - "w": 39, - "h": 48 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 48 - }, - "spriteSourceSize": { - "x": 18, - "y": 0, - "w": 39, - "h": 48 - }, - "frame": { - "x": 174, - "y": 144, - "w": 39, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cf70bf2fa66c37035eb9b4da1a4c93ff:11ac0c3ddb365960d306dba5909a72c7:92ecadef6e0cb53020b8cd41fbeaf2cd$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/778_3.png b/public/images/pokemon/variant/exp/778_3.png deleted file mode 100644 index 87a4cbefc8d2..000000000000 Binary files a/public/images/pokemon/variant/exp/778_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/778-busted.json b/public/images/pokemon/variant/exp/back/778-busted.json new file mode 100644 index 000000000000..21f796f0657b --- /dev/null +++ b/public/images/pokemon/variant/exp/back/778-busted.json @@ -0,0 +1,26 @@ +{ + "1": { + "000000": "000000", + "101010": "101010", + "404040": "2d1818", + "b3a76b": "8d4f3d", + "f2e291": "aa6f46", + "665f3d": "542c21", + "000000": "101010", + "4d361f": "844b20", + "b37d47": "fabc5f", + "805933": "b97d2c" + }, + "2": { + "000000": "000000", + "101010": "000000", + "404040": "0c123a", + "b3a76b": "3d2e4f", + "f2e291": "5b496b", + "665f3d": "1b1031", + "000000": "000000", + "4d361f": "3e5075", + "b37d47": "8eb5cd", + "805933": "6d80a4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/778.json b/public/images/pokemon/variant/exp/back/778-disguised.json similarity index 99% rename from public/images/pokemon/variant/exp/back/778.json rename to public/images/pokemon/variant/exp/back/778-disguised.json index d1171e221734..3ebf48117fb0 100644 --- a/public/images/pokemon/variant/exp/back/778.json +++ b/public/images/pokemon/variant/exp/back/778-disguised.json @@ -21,4 +21,4 @@ "b37d47": "8eb5cd", "805933": "6d80a4" } -} \ No newline at end of file +} diff --git a/public/images/pokemon_icons_7.json b/public/images/pokemon_icons_7.json index bd9f404eb268..0523a232d796 100644 --- a/public/images/pokemon_icons_7.json +++ b/public/images/pokemon_icons_7.json @@ -5260,7 +5260,7 @@ } }, { - "filename": "778", + "filename": "778-disguised", "rotated": false, "trimmed": true, "sourceSize": { @@ -5281,7 +5281,7 @@ } }, { - "filename": "778s", + "filename": "778s-disguised", "rotated": false, "trimmed": true, "sourceSize": { diff --git a/src/data/ability.ts b/src/data/ability.ts index b7a8295ee89d..d10f48c4c8b6 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2837,7 +2837,7 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { } if (this.target?.status) { - this.target.scene.queueMessage(getPokemonMessage(this.target, getStatusEffectHealText(this.target.status?.effect))); + this.target.scene.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); this.target.resetStatus(false); this.target.updateInfo(); return true; diff --git a/src/data/berry.ts b/src/data/berry.ts index 4e0d1dbd85f5..2f0f466d8a90 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -1,5 +1,5 @@ import { PokemonHealPhase, StatChangePhase } from "../phases"; -import { getPokemonMessage } from "../messages"; +import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; import Pokemon, { HitResult } from "../field/pokemon"; import { BattleStat } from "./battle-stat"; import { getStatusEffectHealText } from "./status-effect"; @@ -80,7 +80,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { pokemon.battleData.berriesEaten.push(berryType); } if (pokemon.status) { - pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); + pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); } pokemon.resetStatus(true, true); pokemon.updateInfo(); diff --git a/src/data/move.ts b/src/data/move.ts index 3161dec0c608..9964665c12a6 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1,5 +1,5 @@ import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; -import { BattleEndPhase, MoveEffectPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; +import { BattleEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; import { BattleStat, getBattleStatName } from "./battle-stat"; import { EncoreTag, SemiInvulnerableTag } from "./battler-tags"; import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; @@ -813,12 +813,15 @@ export class MoveEffectAttr extends MoveAttr { public firstHitOnly: boolean; /** Should this effect only apply on the last hit? */ public lastHitOnly: boolean; + /** Should this effect only apply on the first target hit? */ + public firstTargetOnly: boolean; - constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false, lastHitOnly: boolean = false) { + constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false, lastHitOnly: boolean = false, firstTargetOnly: boolean = false) { super(selfTarget); this.trigger = trigger !== undefined ? trigger : MoveEffectTrigger.POST_APPLY; this.firstHitOnly = firstHitOnly; this.lastHitOnly = lastHitOnly; + this.firstTargetOnly = firstTargetOnly; } /** @@ -1760,7 +1763,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { if (!target.status || (target.status.effect === statusToApply && move.chance < 0)) { const statusAfflictResult = target.trySetStatus(statusToApply, true, user); if (statusAfflictResult) { - user.scene.queueMessage(getPokemonMessage(user, getStatusEffectHealText(user.status.effect))); + user.scene.queueMessage(getStatusEffectHealText(user.status.effect, getPokemonNameWithAffix(user))); user.resetStatus(); user.updateInfo(); } @@ -1906,7 +1909,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { } /** - * Attribute that causes targets of the move to eat a berry. If chosenBerry is not overridden, a random berry will be picked from the target's inventory. + * Attribute that causes targets of the move to eat a berry. Used for Teatime, Stuff Cheeks */ export class EatBerryAttr extends MoveEffectAttr { protected chosenBerry: BerryModifier; @@ -1915,42 +1918,29 @@ export class EatBerryAttr extends MoveEffectAttr { this.chosenBerry = undefined; } /** - * Causes the target to eat a berry. - * @param user {@linkcode Pokemon} Pokemon that used the move - * @param target {@linkcode Pokemon} Pokemon that will eat a berry - * @param move {@linkcode Move} The move being used - * @param args Unused - * @returns {boolean} true if the function succeeds - */ + * Causes the target to eat a berry. + * @param user {@linkcode Pokemon} Pokemon that used the move + * @param target {@linkcode Pokemon} Pokemon that will eat a berry + * @param move {@linkcode Move} The move being used + * @param args Unused + * @returns {boolean} true if the function succeeds + */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) { return false; } - if (this.chosenBerry === undefined) { // if no berry has been provided, pick a random berry from their inventory - const heldBerries = this.getTargetHeldBerries(target); - if (heldBerries.length <= 0) { - return false; - } - this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; + const heldBerries = this.getTargetHeldBerries(target); + if (heldBerries.length <= 0) { + return false; } - - getBerryEffectFunc(this.chosenBerry.berryType)(target); // target eats the berry - + this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; const preserve = new Utils.BooleanHolder(false); - target.scene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); - - if (!preserve.value) { // remove the eaten berry if not preserved - if (!--this.chosenBerry.stackCount) { - target.scene.removeModifier(this.chosenBerry, !target.isPlayer()); - } - target.scene.updateModifiers(target.isPlayer()); + target.scene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); // check for berry pouch preservation + if (!preserve.value) { + this.reduceBerryModifier(target); } - - this.chosenBerry = undefined; - - applyAbAttrs(HealFromBerryUseAbAttr, target, new Utils.BooleanHolder(false)); - + this.eatBerry(target); return true; } @@ -1959,7 +1949,21 @@ export class EatBerryAttr extends MoveEffectAttr { && (m as BerryModifier).pokemonId === target.id, target.isPlayer()) as BerryModifier[]; } + reduceBerryModifier(target: Pokemon) { + if (this.chosenBerry.stackCount === 1) { + target.scene.removeModifier(this.chosenBerry, !target.isPlayer()); + } else { + this.chosenBerry.stackCount--; + } + target.scene.updateModifiers(target.isPlayer()); + } + + eatBerry(consumer: Pokemon) { + getBerryEffectFunc(this.chosenBerry.berryType)(consumer); // consumer eats the berry + applyAbAttrs(HealFromBerryUseAbAttr, consumer, new Utils.BooleanHolder(false)); + } } + /** * Attribute used for moves that steal a random berry from the target. The user then eats the stolen berry. * Used for Pluck & Bug Bite. @@ -1969,36 +1973,30 @@ export class StealEatBerryAttr extends EatBerryAttr { super(); } /** - * User steals a random berry from the target and then eats it. - * @param {Pokemon} user Pokemon that used the move and will eat the stolen berry - * @param {Pokemon} target Pokemon that will have its berry stolen - * @param {Move} move Move being used - * @param {any[]} args Unused - * @returns {boolean} true if the function succeeds - */ + * User steals a random berry from the target and then eats it. + * @param {Pokemon} user Pokemon that used the move and will eat the stolen berry + * @param {Pokemon} target Pokemon that will have its berry stolen + * @param {Move} move Move being used + * @param {any[]} args Unused + * @returns {boolean} true if the function succeeds + */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const cancelled = new Utils.BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // check for abilities that block item theft if (cancelled.value === true) { return false; } - const heldBerries = this.getTargetHeldBerries(target).filter(i => i.getTransferrable(false)); - - if (heldBerries.length) { // if the target has berries, pick a random berry and steal it - this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; - - if (this.chosenBerry.stackCount === 1) { // remove modifier if its the last berry - target.scene.removeModifier(this.chosenBerry, !target.isPlayer()); - } - target.scene.updateModifiers(target.isPlayer()); - - user.scene.queueMessage(getPokemonMessage(user, ` stole and ate\n${target.name}'s ${this.chosenBerry.type.name}!`)); - return super.apply(user, user, move, args); + if (heldBerries.length <= 0) { + return false; } - - return false; + // if the target has berries, pick a random berry and steal it + this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; + const message = i18next.t("battle:stealEatBerry", {pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name}); + user.scene.queueMessage(message); + this.reduceBerryModifier(target); + this.eatBerry(user); + return true; } } @@ -2034,7 +2032,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { const pokemon = this.selfTarget ? user : target; if (pokemon.status && this.effects.includes(pokemon.status.effect)) { - pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); + pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); pokemon.resetStatus(); pokemon.updateInfo(); @@ -2330,8 +2328,8 @@ export class StatChangeAttr extends MoveEffectAttr { private condition: MoveConditionFunc; private showMessage: boolean; - constructor(stats: BattleStat | BattleStat[], levels: integer, selfTarget?: boolean, condition?: MoveConditionFunc, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT) { - super(selfTarget, moveEffectTrigger, firstHitOnly); + constructor(stats: BattleStat | BattleStat[], levels: integer, selfTarget?: boolean, condition?: MoveConditionFunc, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT, firstTargetOnly: boolean = false) { + super(selfTarget, moveEffectTrigger, firstHitOnly, false, firstTargetOnly); this.stats = typeof(stats) === "number" ? [ stats as BattleStat ] : stats as BattleStat[]; @@ -5513,25 +5511,6 @@ const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(Abilities.COMATOSE); -/** - * Condition to apply effects only upon applying the move to its last target. - * Currently only used for Make It Rain. - * @param {Pokemon} user The user of the move. - * @param {Pokemon} target The current target of the move. - * @param {Move} move The move to which this condition applies. - * @returns true if the target is the last target to which the move applies. - */ -const lastTargetOnlyCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => { - const effectPhase = user.scene.getCurrentPhase(); - const targetIndex = target.getFieldIndex() + (target.isPlayer() ? 0 : BattlerIndex.ENEMY); - - if (effectPhase instanceof MoveEffectPhase) { - const activeTargets = effectPhase.getTargets(); - return (activeTargets.length === 0 || targetIndex >= activeTargets.at(-1).getBattlerIndex()); - } - return false; -}; - export type MoveAttrFilter = (attr: MoveAttr) => boolean; function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { @@ -7577,9 +7556,9 @@ export function initMoves() { new AttackMove(Moves.SMART_STRIKE, Type.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 7), new StatusMove(Moves.PURIFY, Type.POISON, -1, 20, -1, 0, 7) .condition( - (user: Pokemon, target: Pokemon, move: Move) => isNonVolatileStatusEffect(user.status?.effect)) + (user: Pokemon, target: Pokemon, move: Move) => isNonVolatileStatusEffect(target.status?.effect)) .attr(HealAttr, 0.5) - .attr(HealStatusEffectAttr, true, ...getNonVolatileStatusEffects()) + .attr(HealStatusEffectAttr, false, ...getNonVolatileStatusEffects()) .triageMove(), new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() @@ -8279,7 +8258,7 @@ export function initMoves() { .attr(RemoveScreensAttr), new AttackMove(Moves.MAKE_IT_RAIN, Type.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(MoneyAttr) - .attr(StatChangeAttr, BattleStat.SPATK, -1, true, lastTargetOnlyCondition, true, false) + .attr(StatChangeAttr, BattleStat.SPATK, -1, true, null, true, false, MoveEffectTrigger.HIT, true) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.PSYBLADE, Type.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && user.isGrounded() ? 1.5 : 1) diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index 0399e383820c..5964884d967c 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -10,6 +10,8 @@ export enum PokeballType { LUXURY_BALL } +export const MAX_PER_TYPE_POKEBALLS: integer = 99; + export function getPokeballAtlasKey(type: PokeballType): string { switch (type) { case PokeballType.POKEBALL: diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index b2cdeac6b452..962772d6e785 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -319,6 +319,7 @@ export abstract class PokemonSpeciesForm { case Species.UNFEZANT: case Species.FRILLISH: case Species.JELLICENT: + case Species.PYROAR: ret += female ? "-f" : ""; break; } @@ -2157,7 +2158,7 @@ export function initSpecies() { new PokemonSpecies(Species.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", Type.FIRE, Type.DRAGON, 2, 212, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.TOGEDEMARU, 7, false, false, false, "Roly-Poly Pokémon", Type.ELECTRIC, Type.STEEL, 0.3, 3.3, Abilities.IRON_BARBS, Abilities.LIGHTNING_ROD, Abilities.STURDY, 435, 65, 98, 63, 40, 73, 96, 180, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.MIMIKYU, 7, false, false, false, "Disguise Pokémon", Type.GHOST, Type.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, GrowthRate.MEDIUM_FAST, 50, false, false, - new PokemonForm("Disguised Form", "disguised", Type.GHOST, Type.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, false, "", true), + new PokemonForm("Disguised Form", "disguised", Type.GHOST, Type.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167, false, null, true), new PokemonForm("Busted Form", "busted", Type.GHOST, Type.FAIRY, 0.2, 0.7, Abilities.DISGUISE, Abilities.NONE, Abilities.NONE, 476, 55, 90, 80, 50, 105, 96, 45, 50, 167), ), new PokemonSpecies(Species.BRUXISH, 7, false, false, false, "Gnash Teeth Pokémon", Type.WATER, Type.PSYCHIC, 0.9, 19, Abilities.DAZZLING, Abilities.STRONG_JAW, Abilities.WONDER_SKIN, 475, 68, 105, 70, 70, 70, 92, 80, 70, 166, GrowthRate.MEDIUM_FAST, 50, false), diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index 810bd4d94824..5949fb2f1301 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -1,4 +1,5 @@ import * as Utils from "../utils"; +import i18next, { ParseKeys } from "i18next"; export enum StatusEffect { NONE, @@ -31,94 +32,52 @@ export class Status { } } -export function getStatusEffectObtainText(statusEffect: StatusEffect, sourceText?: string): string { - const sourceClause = sourceText ? ` ${statusEffect !== StatusEffect.SLEEP ? "by" : "from"} ${sourceText}` : ""; +function getStatusEffectMessageKey(statusEffect: StatusEffect): string { switch (statusEffect) { case StatusEffect.POISON: - return `\nwas poisoned${sourceClause}!`; + return "statusEffect:poison"; case StatusEffect.TOXIC: - return `\nwas badly poisoned${sourceClause}!`; + return "statusEffect:toxic"; case StatusEffect.PARALYSIS: - return ` was paralyzed${sourceClause}!\nIt may be unable to move!`; + return "statusEffect:paralysis"; case StatusEffect.SLEEP: - return `\nfell asleep${sourceClause}!`; + return "statusEffect:sleep"; case StatusEffect.FREEZE: - return `\nwas frozen solid${sourceClause}!`; + return "statusEffect:freeze"; case StatusEffect.BURN: - return `\nwas burned${sourceClause}!`; + return "statusEffect:burn"; + default: + return "statusEffect:none"; } - - return ""; } -export function getStatusEffectActivationText(statusEffect: StatusEffect): string { - switch (statusEffect) { - case StatusEffect.POISON: - case StatusEffect.TOXIC: - return " is hurt\nby poison!"; - case StatusEffect.PARALYSIS: - return " is paralyzed!\nIt can't move!"; - case StatusEffect.SLEEP: - return " is fast asleep."; - case StatusEffect.FREEZE: - return " is\nfrozen solid!"; - case StatusEffect.BURN: - return " is hurt\nby its burn!"; +export function getStatusEffectObtainText(statusEffect: StatusEffect, pokemonNameWithAffix: string, sourceText?: string): string { + if (!sourceText) { + const i18nKey = `${getStatusEffectMessageKey(statusEffect)}.obtain`as ParseKeys; + return i18next.t(i18nKey, { pokemonNameWithAffix: pokemonNameWithAffix }); } - - return ""; + const i18nKey = `${getStatusEffectMessageKey(statusEffect)}.obtainSource`as ParseKeys; + return i18next.t(i18nKey, { pokemonNameWithAffix: pokemonNameWithAffix, sourceText: sourceText }); } -export function getStatusEffectOverlapText(statusEffect: StatusEffect): string { - switch (statusEffect) { - case StatusEffect.POISON: - case StatusEffect.TOXIC: - return " is\nalready poisoned!"; - case StatusEffect.PARALYSIS: - return " is\nalready paralyzed!"; - case StatusEffect.SLEEP: - return " is\nalready asleep!"; - case StatusEffect.FREEZE: - return " is\nalready frozen!"; - case StatusEffect.BURN: - return " is\nalready burned!"; - } - - return ""; +export function getStatusEffectActivationText(statusEffect: StatusEffect, pokemonNameWithAffix: string): string { + const i18nKey = `${getStatusEffectMessageKey(statusEffect)}.activation` as ParseKeys; + return i18next.t(i18nKey, { pokemonNameWithAffix: pokemonNameWithAffix }); } -export function getStatusEffectHealText(statusEffect: StatusEffect): string { - switch (statusEffect) { - case StatusEffect.POISON: - case StatusEffect.TOXIC: - return " was\ncured of its poison!"; - case StatusEffect.PARALYSIS: - return " was\nhealed of paralysis!"; - case StatusEffect.SLEEP: - return " woke up!"; - case StatusEffect.FREEZE: - return " was\ndefrosted!"; - case StatusEffect.BURN: - return " was\nhealed of its burn!"; - } +export function getStatusEffectOverlapText(statusEffect: StatusEffect, pokemonNameWithAffix: string): string { + const i18nKey = `${getStatusEffectMessageKey(statusEffect)}.overlap` as ParseKeys; + return i18next.t(i18nKey, { pokemonNameWithAffix: pokemonNameWithAffix }); +} - return ""; +export function getStatusEffectHealText(statusEffect: StatusEffect, pokemonNameWithAffix: string): string { + const i18nKey = `${getStatusEffectMessageKey(statusEffect)}.heal` as ParseKeys; + return i18next.t(i18nKey, { pokemonNameWithAffix: pokemonNameWithAffix }); } export function getStatusEffectDescriptor(statusEffect: StatusEffect): string { - switch (statusEffect) { - case StatusEffect.POISON: - case StatusEffect.TOXIC: - return "poisoning"; - case StatusEffect.PARALYSIS: - return "paralysis"; - case StatusEffect.SLEEP: - return "sleep"; - case StatusEffect.FREEZE: - return "freezing"; - case StatusEffect.BURN: - return "burn"; - } + const i18nKey = `${getStatusEffectMessageKey(statusEffect)}.description` as ParseKeys; + return i18next.t(i18nKey); } export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect): number { diff --git a/src/field/arena.ts b/src/field/arena.ts index a5e62872152d..2d20abeedd17 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -661,7 +661,7 @@ export class Arena { case Biome.LAKE: return 5.350; case Biome.SEABED: - return 2.629; + return 2.600; case Biome.MOUNTAIN: return 4.018; case Biome.BADLANDS: @@ -691,7 +691,7 @@ export class Arena { case Biome.ABYSS: return 5.130; case Biome.SPACE: - return 21.347; + return 20.036; case Biome.CONSTRUCTION_SITE: return 1.222; case Biome.JUNGLE: diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0de3da949cfc..88d7f6b73a81 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1155,7 +1155,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyPreDefendAbAttrs(MoveImmunityAbAttr, this, source, move, cancelled, typeMultiplier, true); } - return (!cancelled.value ? typeMultiplier.value : 0) as TypeDamageMultiplier; + return (!cancelled.value ? Number(typeMultiplier.value) : 0) as TypeDamageMultiplier; } getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false): TypeDamageMultiplier { @@ -2262,11 +2262,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * If this Pokemon is using a multi-hit move, cancels all subsequent strikes - * @param {Pokemon} target If specified, this only cancels subsequent strikes against this Pokemon + * @param {Pokemon} target If specified, this only cancels subsequent strikes against the given target */ stopMultiHit(target?: Pokemon): void { const effectPhase = this.scene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase) { + if (effectPhase instanceof MoveEffectPhase && effectPhase.getUserPokemon() === this) { effectPhase.stopMultiHit(target); } } @@ -2545,6 +2545,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } + /** + * If this Pokemon falls asleep or freezes in the middle of a multi-hit attack, + * cancel the attack's subsequent hits. + */ + if (effect === StatusEffect.SLEEP || effect === StatusEffect.FREEZE) { + this.stopMultiHit(); + } + if (asPhase) { this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, cureTurn, sourceText, sourcePokemon)); return true; diff --git a/src/interfaces/locales.ts b/src/interfaces/locales.ts index 76dc76058aa8..5f7c52100c10 100644 --- a/src/interfaces/locales.ts +++ b/src/interfaces/locales.ts @@ -58,6 +58,20 @@ export interface BerryTranslationEntries { [key: string]: BerryTranslationEntry } +export interface StatusEffectTranslationEntries { + [key: string]: StatusEffectTranslationEntry +} + +export interface StatusEffectTranslationEntry { + name: string, + obtain: string, + obtainSource: string, + activation: string, + overlap: string, + heal: string + description: string, +} + export interface AchievementTranslationEntry { name?: string, description?: string, diff --git a/src/locales/de/ability-trigger.ts b/src/locales/de/ability-trigger.ts index 1ce7d98817b7..55021cf93c67 100644 --- a/src/locales/de/ability-trigger.ts +++ b/src/locales/de/ability-trigger.ts @@ -7,6 +7,6 @@ export const abilityTriggers: SimpleTranslationEntries = { "iceFaceAvoidedDamage": "{{pokemonName}} wehrt Schaden mit {{abilityName}} ab!", "trace": "{{pokemonName}} kopiert {{abilityName}} von {{targetName}}!", "windPowerCharged": "Der Treffer durch {{moveName}} läd die Stärke von {{pokemonName}} auf!", - "quickDraw": "{{pokemonName}} can act faster than normal, thanks to its Quick Draw!", + "quickDraw": "Durch Schnellschuss kann {{pokemonName}} schneller handeln als sonst!", "disguiseAvoidedDamage" : "{{pokemonName}}'s disguise was busted!", } as const; diff --git a/src/locales/de/battle.ts b/src/locales/de/battle.ts index a042a997afe4..67c2cd9a6b09 100644 --- a/src/locales/de/battle.ts +++ b/src/locales/de/battle.ts @@ -39,7 +39,7 @@ export const battle: SimpleTranslationEntries = { "learnMoveForgetSuccess": "{{pokemonName}} hat\n{{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!", "learnMoveAnd": "Und…", - "levelCapUp": "Das Levelbeschränkung\nwurde auf {{levelCap}} erhöht!", + "levelCapUp": "Die Levelbeschränkung\nwurde auf {{levelCap}} erhöht!", "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", "moveNoPP": "Es sind keine AP für\ndiese Attacke mehr übrig!", "moveDisabled": "{{moveName}} ist deaktiviert!", @@ -56,8 +56,8 @@ export const battle: SimpleTranslationEntries = { "escapeVerbFlee": "flucht", "skipItemQuestion": "Bist du sicher, dass du kein Item nehmen willst?", "notDisabled": "{{pokemonName}}'s {{moveName}} ist\nnicht mehr deaktiviert!", - "turnEndHpRestore": "{{pokemonName}}'s HP was restored.", - "hpIsFull": "{{pokemonName}}'s\nHP is full!", + "turnEndHpRestore": "Die KP von {{pokemonName}} wurden wiederhergestellt.", + "hpIsFull": "Die KP von {{pokemonName}} sind voll!", "eggHatching": "Oh?", "ivScannerUseQuestion": "IV-Scanner auf {{pokemonName}} benutzen?", "wildPokemonWithAffix": "{{pokemonName}} (wild)", @@ -65,6 +65,7 @@ export const battle: SimpleTranslationEntries = { "useMove": "{{pokemonNameWithAffix}} setzt {{moveName}} ein!", "drainMessage": "{{pokemonName}} wurde Energie abgesaugt", "regainHealth": "KP von {{pokemonName}} wurden wieder aufgefrischt!", + "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "fainted": "{{pokemonNameWithAffix}} wurde besiegt!", "statRose": "{{stats}} von {{pokemonNameWithAffix}} steigt!", "statSharplyRose": "{{stats}} von {{pokemonNameWithAffix}} steigt stark!", @@ -74,7 +75,7 @@ export const battle: SimpleTranslationEntries = { "statHarshlyFell": "{{stats}} von {{pokemonNameWithAffix}} sinkt stark!", "statSeverelyFell": "{{stats}} von {{pokemonNameWithAffix}} sinkt drastisch!", "statWontGoAnyLower": "{{stats}} von {{pokemonNameWithAffix}} kann nicht weiter sinken!", - "ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!", + "ppReduced": "{{moveName}} von {{targetName}} wird um {{reduction}} AP reduziert!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} kann sich wegen des Rückstoßes durch den Angriff nicht bewegen!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} kann nicht mehr fliehen!", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} wurde von {{moveName}} befreit.", diff --git a/src/locales/de/bgm-name.ts b/src/locales/de/bgm-name.ts index 70698942c8bd..71e775c8846c 100644 --- a/src/locales/de/bgm-name.ts +++ b/src/locales/de/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PMD Erkundungsteam Himmel Verwirrwald", "ice_cave": "PMD Erkundungsteam Himmel Rieseneisberg", "island": "PMD Erkundungsteam Himmel Schroffküste", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PMD Erkundungsteam Himmel Kristallhöhle", "meadow": "PMD Erkundungsteam Himmel Himmelsgipfel-Wald", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PMD Erkundungsteam Himmel Hornberg", "plains": "PMD Erkundungsteam Himmel Himmelsgipfel-Prärie", "power_plant": "PMD Erkundungsteam Himmel Weite Ampere-Ebene", "ruins": "PMD Erkundungsteam Himmel Tiefes Ruinenverlies", "sea": "PMD Erkundungsteam Himmel Salzwasserhöhle", - "seabed": "PMD Erkundungsteam Himmel Untere Salzwasserhöhle", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PMD Erkundungsteam Himmel Himmelsgipfel-Küste", "snowy_forest": "PMD Erkundungsteam Himmel Himmelsgipfel-Schneefeld", - "space": "PMD Erkundungsteam Himmel Schicksalsschlucht", + "space": "Firel - Aether", "swamp": "PMD Erkundungsteam Himmel Ringmeer", "tall_grass": "PMD Erkundungsteam Himmel Nebelwald", "temple": "PMD Erkundungsteam Himmel Ägishöhle", diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index b7bb827d8d38..77834849d2f5 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/de/settings.js"; -import { common } from "#app/locales/de/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const deConfig = { ability: ability, @@ -82,6 +83,7 @@ export const deConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/de/menu-ui-handler.ts b/src/locales/de/menu-ui-handler.ts index 3b0764bf2613..0338ba6f3993 100644 --- a/src/locales/de/menu-ui-handler.ts +++ b/src/locales/de/menu-ui-handler.ts @@ -20,5 +20,5 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportData": "Daten exportieren", "cancel": "Abbrechen", "losingProgressionWarning": "Du wirst jeglichen Fortschritt seit Anfang dieses Kampfes verlieren. Fortfahren?", - "noEggs": "You are not hatching\nany eggs at the moment!" + "noEggs": "Du brütest aktuell keine Eier aus!" } as const; diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index 5bbd19be8513..bffcdeb1c3e7 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -53,6 +53,6 @@ export const menu: SimpleTranslationEntries = { "no":"Nein", "disclaimer": "HAFTUNGSAUSSCHLUSS", "disclaimerDescription": "Dieses Spiel ist ein unfertiges Produkt. Es kann spielbeinträchtigende Fehler (bis hin zum Verlust des Speicherstandes)\n aufweisen, sich ohne Vorankündigung ändern und es gibt keine Garantie dass es weiterentwickelt oder fertiggestellt wird.", - "choosePokemon": "Choose a Pokémon.", + "choosePokemon": "Wähle ein Pokémon.", "errorServerDown": "Ups! Es gab einen Fehler beim Versuch\nden Server zu kontaktieren\nLasse dieses Fenster offen\nDu wirst automatisch neu verbunden.", } as const; diff --git a/src/locales/de/status-effect.ts b/src/locales/de/status-effect.ts new file mode 100644 index 000000000000..997d005987e8 --- /dev/null +++ b/src/locales/de/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "None", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Gift", + description: "Vergiftungen", + obtain: "{{pokemonNameWithAffix}} wurde vergiftet!", + obtainSource: "{{pokemonNameWithAffix}} wurde durch {{sourceText}} vergiftet!", + activation: "{{pokemonNameWithAffix}} wird durch Gift verletzt!", + overlap: "{{pokemonNameWithAffix}} ist bereits vergiftet!", + heal: "Die Vergiftung von {{pokemonNameWithAffix}} wurde geheilt!" + }, + toxic: { + name: "Gift", + description: "Vergiftungen", + obtain: "{{pokemonNameWithAffix}} wurde schwer vergiftet!", + obtainSource: "{{pokemonNameWithAffix}} wurde durch {{sourceText}} schwer vergiftet!", + activation: "{{pokemonNameWithAffix}} wird durch Gift verletzt!", + overlap: "{{pokemonNameWithAffix}} ist bereits vergiftet!", + heal: "Die Vergiftung von {{pokemonNameWithAffix}} wurde geheilt!" + }, + paralysis: { + name: "Paralyse", + description: "Paralyse", + obtain: "{{pokemonNameWithAffix}} wurde paralysiert!\nEs kann eventuell nicht handeln!", + obtainSource: "{{pokemonNameWithAffix}} wurde durch {{sourceText}} paralysiert,\nEs kann eventuell nicht handeln!", + activation: "{{pokemonNameWithAffix}}ist paralysiert!\nEs kann nicht angreifen!", + overlap: "{{pokemonNameWithAffix}} ist bereits paralysiert!", + heal: "Die Paralyse von {{pokemonNameWithAffix}} wurde aufgehoben!" + }, + sleep: { + name: "Schlaf", + description: "Einschlafen", + obtain: "{{pokemonNameWithAffix}} ist eingeschlafen!", + obtainSource: "{{pokemonNameWithAffix}}ist durch {{sourceText}} eingeschlafen!", + activation: "{{pokemonNameWithAffix}} schläft tief und fest!", + overlap: "{{pokemonNameWithAffix}} schläft bereits!", + heal: "{{pokemonNameWithAffix}} ist aufgewacht!" + }, + freeze: { + name: "Gefroren", + description: "Einfrieren", + obtain: "{{pokemonNameWithAffix}} erstarrt zu Eis!", + obtainSource: "{{pokemonNameWithAffix}} erstarrt durch {{sourceText}} zu Eis!", + activation: "{{pokemonNameWithAffix}} ist eingefroren und kann nicht handeln!", + overlap: "{{pokemonNameWithAffix}} ist bereits eingefroren!", + heal: "{{pokemonNameWithAffix}} wurde aufgetaut!" + }, + burn: { + name: "Verbrennung ", + description: "Verbrennungen", + obtain: "{{pokemonNameWithAffix}} erleidet Verbrennungen!", + obtainSource: "{{pokemonNameWithAffix}} erleidet durch {{sourceText}} Verbrennungen!", + activation: "Die Verbrennungen schaden {{pokemonNameWithAffix}}!", + overlap: "{{pokemonNameWithAffix}} leidet bereits unter Verbrennungen!", + heal: "Die Verbrennungen von {{pokemonNameWithAffix}} wurden geheilt!" + }, +} as const; diff --git a/src/locales/en/battle.ts b/src/locales/en/battle.ts index 263a48e8f0a3..d41ffc373dcb 100644 --- a/src/locales/en/battle.ts +++ b/src/locales/en/battle.ts @@ -65,6 +65,7 @@ export const battle: SimpleTranslationEntries = { "useMove": "{{pokemonNameWithAffix}} used {{moveName}}!", "drainMessage": "{{pokemonName}} had its\nenergy drained!", "regainHealth": "{{pokemonName}} regained\nhealth!", + "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "fainted": "{{pokemonNameWithAffix}} fainted!", "statRose": "{{pokemonNameWithAffix}}'s {{stats}} rose!", "statSharplyRose": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!", diff --git a/src/locales/en/bgm-name.ts b/src/locales/en/bgm-name.ts index 77ebb69df326..ef15c6c6dcb6 100644 --- a/src/locales/en/bgm-name.ts +++ b/src/locales/en/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PMD EoS Mystifying Forest", "ice_cave": "PMD EoS Vast Ice Mountain", "island": "PMD EoS Craggy Coast", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PMD EoS Crystal Cave", "meadow": "PMD EoS Sky Peak Forest", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PMD EoS Mt. Horn", "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", "sea": "PMD EoS Brine Cave", - "seabed": "PMD EoS Lower Brine Cave", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PMD EoS Sky Peak Coast", "snowy_forest": "PMD EoS Sky Peak Snowfield", - "space": "PMD EoS Fortune Ravine", + "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", "tall_grass": "PMD EoS Foggy Forest", "temple": "PMD EoS Aegis Cave", diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index fbbae3df329a..1d40e61bbadd 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -1,5 +1,5 @@ -import { common } from "#app/locales/en/common.js"; -import { settings } from "#app/locales/en/settings.js"; +import { common } from "./common.js"; +import { settings } from "./settings.js"; import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; import { PGFachv, PGMachv } from "./achv"; @@ -38,6 +38,7 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; @@ -83,6 +84,7 @@ export const enConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/en/status-effect.ts b/src/locales/en/status-effect.ts new file mode 100644 index 000000000000..162b2ada281d --- /dev/null +++ b/src/locales/en/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "None", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Poison", + description: "poisoning", + obtain: "{{pokemonNameWithAffix}}\nwas poisoned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas poisoned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby poison!", + overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!", + heal: "{{pokemonNameWithAffix}} was\ncured of its poison!" + }, + toxic: { + name: "Toxic", + description: "poisoning", + obtain: "{{pokemonNameWithAffix}}\nwas badly poisoned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas badly poisoned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby poison!", + overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!", + heal: "{{pokemonNameWithAffix}} was\ncured of its poison!" + }, + paralysis: { + name: "Paralysis", + description: "paralysis", + obtain: "{{pokemonNameWithAffix}} was paralyzed,\nIt may be unable to move!", + obtainSource: "{{pokemonNameWithAffix}} was paralyzed by {{sourceText}}!\nIt may be unable to move!", + activation: "{{pokemonNameWithAffix}} is paralyzed!\nIt can't move!", + overlap: "{{pokemonNameWithAffix}} is\nalready paralyzed!", + heal: "{{pokemonNameWithAffix}} was\nhealed of paralysis!" + }, + sleep: { + name: "Sleep", + description: "sleep", + obtain: "{{pokemonNameWithAffix}}\nfell asleep!", + obtainSource: "{{pokemonNameWithAffix}}\nfell asleep from {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is fast asleep.", + overlap: "{{pokemonNameWithAffix}} is\nalready asleep!", + heal: "{{pokemonNameWithAffix}} woke up!" + }, + freeze: { + name: "Freeze", + description: "freezing", + obtain: "{{pokemonNameWithAffix}}\nwas frozen solid!", + obtainSource: "{{pokemonNameWithAffix}}\nwas frozen solid by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is\nfrozen solid!", + overlap: "{{pokemonNameWithAffix}} is\nalready frozen!", + heal: "{{pokemonNameWithAffix}} was\ndefrosted!" + }, + burn: { + name: "Burn", + description: "burn", + obtain: "{{pokemonNameWithAffix}}\nwas burned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas burned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby its burn!", + overlap: "{{pokemonNameWithAffix}} is\nalready burned!", + heal: "{{pokemonNameWithAffix}} was\nhealed of its burn!" + }, +} as const; diff --git a/src/locales/es/battle.ts b/src/locales/es/battle.ts index c1a85ffe267c..7f5832d069d1 100644 --- a/src/locales/es/battle.ts +++ b/src/locales/es/battle.ts @@ -65,6 +65,7 @@ export const battle: SimpleTranslationEntries = { "useMove": "¡{{pokemonNameWithAffix}} usó {{moveName}}!", "drainMessage": "¡{{pokemonName}} tuvo su\nenergía absorbida!", "regainHealth": "¡{{pokemonName}} recuperó\nPS!", + "stealEatBerry": "¡{{pokemonName}} robó la {{berryName}}\nde {{targetName}} y se la comió!", "fainted": "¡{{pokemonNameWithAffix}} se debilitó!", "statRose": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido!", "statSharplyRose": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido mucho!", diff --git a/src/locales/es/bgm-name.ts b/src/locales/es/bgm-name.ts index 383a495b7ed6..cda6fba84f44 100644 --- a/src/locales/es/bgm-name.ts +++ b/src/locales/es/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PMD EoS - Bosque Misterio", "ice_cave": "PMD EoS - Gran Iceberg", "island": "PMD EoS - Costa Escarpada", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PMD EoS - Cueva Cristal", "meadow": "PMD EoS - Bosque de la Cumbre del Cielo", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PMD EoS - Monte Cuerno", "plains": "PMD EoS - Pradera de la Cumbre del Cielo", "power_plant": "PMD EoS - Pradera Destello", "ruins": "PMD EoS - Sima Hermética", "sea": "PMD EoS - Cueva Aguamar", - "seabed": "PMD EoS - Fosa Aguamar", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PMD EoS - Costa de la Cumbre del Cielo", "snowy_forest": "PMD EoS - Campo nevado de la Cumbre del Cielo", - "space": "PMD EoS - Risco Fortuna", + "space": "Firel - Aether", "swamp": "PMD EoS - Mar Circundante", "tall_grass": "PMD EoS - Bosque Niebla", "temple": "PMD EoS - Cueva Regia", diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index e09224ce85ea..551c7a2f6dc8 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/es/settings.js"; -import { common } from "#app/locales/es/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const esConfig = { ability: ability, @@ -82,6 +83,7 @@ export const esConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/es/status-effect.ts b/src/locales/es/status-effect.ts new file mode 100644 index 000000000000..975288fc451a --- /dev/null +++ b/src/locales/es/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "Ninguno", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Envenenamiento", + description: "envenenamiento", + obtain: "¡{{pokemonNameWithAffix}}\nha sido envenenado!", + obtainSource: "¡{{pokemonNameWithAffix}}\nha sido envenenado por {{sourceText}}!", + activation: "¡El veneno resta PS a {{pokemonNameWithAffix}}!", + overlap: "¡{{pokemonNameWithAffix}} ya\nestá envenenado!", + heal: "¡{{pokemonNameWithAffix}} ya no\nestá envenenado!" + }, + toxic: { + name: "Envenenamiento grave", + description: "envenenamiento grave", + obtain: "¡{{pokemonNameWithAffix}}\nha sido gravemente envenenado!", + obtainSource: "¡{{pokemonNameWithAffix}}\nha sido gravemente envenenado por {{sourceText}}!", + activation: "¡El veneno resta PS a {{pokemonNameWithAffix}}!", + overlap: "¡{{pokemonNameWithAffix}} ya\nestá envenenado!", + heal: "¡{{pokemonNameWithAffix}} ya no\nestá envenenado!" + }, + paralysis: { + name: "Parálisis", + description: "parálisis", + obtain: "¡{{pokemonNameWithAffix}} sufre parálisis!\nQuizás no se pueda mover.", + obtainSource: "¡{{pokemonNameWithAffix}} sufre parálisis por {{sourceText}}!\nQuizás no se pueda mover.", + activation: "¡{{pokemonNameWithAffix}} está paralizado!\n¡No se puede mover!", + overlap: "¡{{pokemonNameWithAffix}} ya\nestá paralizado!", + heal: "¡{{pokemonNameWithAffix}} ya no\nestá paralizado!" + }, + sleep: { + name: "Dormir", + description: "dormir", + obtain: "¡{{pokemonNameWithAffix}}\nse ha dormido!", + obtainSource: "¡{{pokemonNameWithAffix}}\nse ha dormido\npor culpa de {{sourceText}}!", + activation: "¡{{pokemonNameWithAffix}} está/ndormido como un tronco.", + overlap: "¡{{pokemonNameWithAffix}} ya\nestá dormido!", + heal: "¡{{pokemonNameWithAffix}} se despertó!" + }, + freeze: { + name: "Congelamiento", + description: "congelamiento", + obtain: "¡{{pokemonNameWithAffix}}\nha sido congelado!", + obtainSource: "¡{{pokemonNameWithAffix}}\nha sido congelado por {{sourceText}}!", + activation: "¡{{pokemonNameWithAffix}} está\ncongelado!", + overlap: "¡{{pokemonNameWithAffix}} ya\nestá congelado!", + heal: "¡{{pokemonNameWithAffix}} se\nha descongelado!" + }, + burn: { + name: "Quemadura", + description: "quemadura", + obtain: "¡{{pokemonNameWithAffix}}\nse ha quemado!", + obtainSource: "¡{{pokemonNameWithAffix}}\nse ha quemado por {{sourceText}}!", + activation: "¡{{pokemonNameWithAffix}} se resiente\nde las quemaduras!", + overlap: "¡{{pokemonNameWithAffix}} ya\nestá quemado!", + heal: "¡{{pokemonNameWithAffix}} ya no\nestá quemado!" + }, +} as const; diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts index 3d86c5f84f1e..539b7c990944 100644 --- a/src/locales/fr/battle.ts +++ b/src/locales/fr/battle.ts @@ -63,6 +63,7 @@ export const battle: SimpleTranslationEntries = { "wildPokemonWithAffix": "{{pokemonName}} sauvage", "foePokemonWithAffix": "{{pokemonName}} ennemi", "useMove": "{{pokemonNameWithAffix}} utilise\n{{moveName}} !", + "stealEatBerry": "{{pokemonName}} vole et mange\nla {{berryName}} de {{targetName}} !", "drainMessage": "L’énergie de {{pokemonName}}\nest drainée !", "regainHealth": "{{pokemonName}} récupère\ndes PV !", "fainted": "{{pokemonNameWithAffix}}\nest K.O. !", diff --git a/src/locales/fr/bgm-name.ts b/src/locales/fr/bgm-name.ts index 156cedabbfc8..025f339ee869 100644 --- a/src/locales/fr/bgm-name.ts +++ b/src/locales/fr/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PDM EdS - Forêt Trompeuse", "ice_cave": "PDM EdS - Montagne Glacier", "island": "PDM EdS - Côte Escarpée", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PDM EdS - Caverne Cristal", "meadow": "PDM EdS - Pic Céleste (forêt)", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PDM EdS - Mt Corne", "plains": "PDM EdS - Pic Céleste (prairie)", "power_plant": "PDM EdS - Plaines Élek", "ruins": "PDM EdS - Ruine Scellée", "sea": "PDM EdS - Caverne Saline", - "seabed": "PDM EdS - Caverne Saline profondeurs", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PDM EdS - Pic Céleste (côte)", "snowy_forest": "PDM EdS - Pic Céleste (plaine enneigée)", - "space": "PDM EdS - Ravin Aubaine", + "space": "Firel - Aether", "swamp": "PDM EdS - Mer Fermée", "tall_grass": "PDM EdS - Forêt Brumeuse", "temple": "PDM EdS - Grotte Égide", diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index 6bc5a53a376c..04af81adf525 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/fr/settings.js"; -import { common } from "#app/locales/fr/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const frConfig = { ability: ability, @@ -82,6 +83,7 @@ export const frConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/fr/status-effect.ts b/src/locales/fr/status-effect.ts new file mode 100644 index 000000000000..f4f210406c6b --- /dev/null +++ b/src/locales/fr/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "Aucun", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Empoisonnement", + description: "empoisonné", + obtain: "{{pokemonNameWithAffix}} est\nempoisonné !", + obtainSource: "{{pokemonNameWithAffix}} est\nempoisonné par {{sourceText}} !", + activation: "{{pokemonNameWithAffix}}\nsouffre du poison !", + overlap: "{{pokemonNameWithAffix}} est\ndéjà empoisonné.", + heal: "{{pokemonNameWithAffix}} n’est\nplus empoisonné !" + }, + toxic: { + name: "Empoisonnement grave", + description: "gravement empoisonné", + obtain: "{{pokemonNameWithAffix}} est\ngravement empoisonné !", + obtainSource: "{{pokemonNameWithAffix}} est\ngravement empoisonné par {{sourceText}} !", + activation: "{{pokemonNameWithAffix}}\nsouffre du poison !", + overlap: "{{pokemonNameWithAffix}} est\ndéjà empoisonné.", + heal: "{{pokemonNameWithAffix}} n’est\nplus empoisonné !" + }, + paralysis: { + name: "Paralysie", + description: "paralysé", + obtain: "{{pokemonNameWithAffix}} est paralysé !\nIl aura du mal à attaquer !", + obtainSource: "{{pokemonNameWithAffix}} est paralysé\npar {{sourceText}} ! Il aura du mal à attaquer !", + activation: "{{pokemonNameWithAffix}} est paralysé !\nIl n’a pas pu attaquer !", + overlap: "{{pokemonNameWithAffix}} est\ndéjà paralysé.", + heal: "{{pokemonNameWithAffix}} n’est\nplus paralysé !" + }, + sleep: { + name: "Sommeil", + description: "endormi", + obtain: "{{pokemonNameWithAffix}}\ns’est endormi !", + obtainSource: "{{pokemonNameWithAffix}} est\nendormi par {{sourceText}} !", + activation: "{{pokemonNameWithAffix}}\ndort profondément.", + overlap: "{{pokemonNameWithAffix}}\ndort déjà.", + heal: "{{pokemonNameWithAffix}}\nse réveille !" + }, + freeze: { + name: "Gelé", + description: "gelé", + obtain: "{{pokemonNameWithAffix}} est\ngelé !", + obtainSource: "{{pokemonNameWithAffix}} est\ngelé par {{sourceText}} !", + activation: "{{pokemonNameWithAffix}}est gelé !\nIl ne peut plus attaquer !", + overlap: "{{pokemonNameWithAffix}} est\ndéjà gelé.", + heal: "{{pokemonNameWithAffix}} n’est\nplus gelé !" + }, + burn: { + name: "Brulure", + description: "brulé", + obtain: "{{pokemonNameWithAffix}} est\nbrulé !", + obtainSource: "{{pokemonNameWithAffix}} est\nbrulé par {{sourceText}} !", + activation: "{{pokemonNameWithAffix}}\nsouffre de sa brulure !", + overlap: "{{pokemonNameWithAffix}} est\ndéjà brulé.", + heal: "{{pokemonNameWithAffix}} n’est\nplus brulé !" + }, +} as const; diff --git a/src/locales/it/battle.ts b/src/locales/it/battle.ts index 2052dc49cfcf..d9af58893e5b 100644 --- a/src/locales/it/battle.ts +++ b/src/locales/it/battle.ts @@ -60,6 +60,7 @@ export const battle: SimpleTranslationEntries = { "skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?", "eggHatching": "Oh!", "ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?", + "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "wildPokemonWithAffix": "{{pokemonName}} selvatico", "foePokemonWithAffix": "{{pokemonName}} avversario", "useMove": "{{pokemonNameWithAffix}} usa {{moveName}}!", diff --git a/src/locales/it/bgm-name.ts b/src/locales/it/bgm-name.ts index 77ebb69df326..ef15c6c6dcb6 100644 --- a/src/locales/it/bgm-name.ts +++ b/src/locales/it/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PMD EoS Mystifying Forest", "ice_cave": "PMD EoS Vast Ice Mountain", "island": "PMD EoS Craggy Coast", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PMD EoS Crystal Cave", "meadow": "PMD EoS Sky Peak Forest", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PMD EoS Mt. Horn", "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", "sea": "PMD EoS Brine Cave", - "seabed": "PMD EoS Lower Brine Cave", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PMD EoS Sky Peak Coast", "snowy_forest": "PMD EoS Sky Peak Snowfield", - "space": "PMD EoS Fortune Ravine", + "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", "tall_grass": "PMD EoS Foggy Forest", "temple": "PMD EoS Aegis Cave", diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index fa0ddb5add26..ac2e37c2df52 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/it/settings.js"; -import { common } from "#app/locales/it/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const itConfig = { ability: ability, @@ -82,6 +83,7 @@ export const itConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/it/status-effect.ts b/src/locales/it/status-effect.ts new file mode 100644 index 000000000000..1a402ac30fda --- /dev/null +++ b/src/locales/it/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "None", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Poison", + description: "poisoning", + obtain: "{{pokemonNameWithAffix}}\nwas poisoned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas poisoned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby poison!", + overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!", + heal: "{{pokemonNameWithAffix}} was\ncured of its poison!" + }, + toxic: { + name: "Toxic", + description: "poisoning", + obtain: "{{pokemonNameWithAffix}}\nwas badly poisoned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas badly poisoned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby poison!", + overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!", + heal: "{{pokemonNameWithAffix}} was\ncured of its poison!" + }, + paralysis: { + name: "Paralysis", + description: "paralysis", + obtain: "{{pokemonNameWithAffix}} was paralyzed,\nIt may be unable to move!", + obtainSource: "{{pokemonNameWithAffix}} was paralyzed by {{sourceText}},\nIt may be unable to move!", + activation: "{{pokemonNameWithAffix}} is paralyzed!\nIt can't move!", + overlap: "{{pokemonNameWithAffix}} is\nalready paralyzed!", + heal: "{{pokemonNameWithAffix}} was\nhealed of paralysis!" + }, + sleep: { + name: "Sleep", + description: "sleep", + obtain: "{{pokemonNameWithAffix}}\nfell asleep!", + obtainSource: "{{pokemonNameWithAffix}}\nfell asleep from {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is fast asleep.", + overlap: "{{pokemonNameWithAffix}} is\nalready asleep!", + heal: "{{pokemonNameWithAffix}} woke up!" + }, + freeze: { + name: "Freeze", + description: "freezing", + obtain: "{{pokemonNameWithAffix}}\nwas frozen solid!", + obtainSource: "{{pokemonNameWithAffix}}\nwas frozen solid by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is\nfrozen solid!", + overlap: "{{pokemonNameWithAffix}} is\nalready frozen!", + heal: "{{pokemonNameWithAffix}} was\ndefrosted!" + }, + burn: { + name: "Burn", + description: "burn", + obtain: "{{pokemonNameWithAffix}}\nwas burned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas burned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby its burn!", + overlap: "{{pokemonNameWithAffix}} is\nalready burned!", + heal: "{{pokemonNameWithAffix}} was\nhealed of its burn!" + }, +} as const; diff --git a/src/locales/ko/battle.ts b/src/locales/ko/battle.ts index bf32bbe08e76..e9bfb7cb307f 100644 --- a/src/locales/ko/battle.ts +++ b/src/locales/ko/battle.ts @@ -64,6 +64,7 @@ export const battle: SimpleTranslationEntries = { "foePokemonWithAffix": "상대 {{pokemonName}}", "useMove": "{{pokemonNameWithAffix}}의 {{moveName}}!", "drainMessage": "{{pokemonName}}[[로]]부터\n체력을 흡수했다!", + "stealEatBerry": "{{pokemonName}}[[가]]\n{{targetName}}의 {{berryName}}[[를]] 빼앗아 먹었다!", "regainHealth": "{{pokemonName}}[[는]]\n체력을 회복했다!", "fainted": "{{pokemonNameWithAffix}}[[는]] 쓰러졌다!", "statRose": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 올라갔다!", @@ -131,5 +132,5 @@ export const battle: SimpleTranslationEntries = { "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}[[는]]\n소금에 절여졌다!", "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}[[는]] 소금절이의\n데미지를 입고 있다.", "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n자신의 체력을 깎아서\n{{pokemonName}}에게 저주를 걸었다!", - "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}[[는]]\n저주받고 있다!" + "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}[[는]]\n저주받고 있다!", } as const; diff --git a/src/locales/ko/bgm-name.ts b/src/locales/ko/bgm-name.ts index 4e59e35f14c2..c133a93450e2 100644 --- a/src/locales/ko/bgm-name.ts +++ b/src/locales/ko/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "불가사의 던전 하늘의 탐험대 신비의 숲", "ice_cave": "불가사의 던전 하늘의 탐험대 광대한 얼음산", "island": "불가사의 던전 하늘의 탐험대 연안의 암반", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "불가사의 던전 하늘의 탐험대 수정 동굴", "meadow": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 숲", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "불가사의 던전 하늘의 탐험대 뿔산", "plains": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 초원", "power_plant": "불가사의 던전 하늘의 탐험대 일렉트릭 평원", "ruins": "불가사의 던전 하늘의 탐험대 봉인의 암반", "sea": "불가사의 던전 하늘의 탐험대 바닷가 동굴", - "seabed": "불가사의 던전 하늘의 탐험대 바닷가 동굴(저층)", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 해변", "snowy_forest": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 설원", - "space": "불가사의 던전 하늘의 탐험대 행운 협곡", + "space": "Firel - Aether", "swamp": "불가사의 던전 하늘의 탐험대 폐쇄되어진 바다", "tall_grass": "불가사의 던전 하늘의 탐험대 짙은 안개의 숲", "temple": "불가사의 던전 하늘의 탐험대 파수꾼의 동굴", diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 10fa5cb9a3db..59603c8519d1 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/ko/settings.js"; -import { common } from "#app/locales/ko/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const koConfig = { ability: ability, @@ -82,6 +83,7 @@ export const koConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/ko/status-effect.ts b/src/locales/ko/status-effect.ts new file mode 100644 index 000000000000..c4e0ab527221 --- /dev/null +++ b/src/locales/ko/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "없음", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "독", + description: "독", + obtain: "{{pokemonNameWithAffix}}의\n몸에 독이 퍼졌다!", + obtainSource: "{{pokemonNameWithAffix}}[[는]]\n{{sourceText}} 때문에 몸에 독이 퍼졌다!", + activation: "{{pokemonNameWithAffix}}[[는]]\n독에 의한 데미지를 입었다!", + overlap: "{{pokemonNameWithAffix}}[[는]] 이미\n몸에 독이 퍼진 상태다.", + heal: "{{pokemonNameWithAffix}}의 독은\n말끔하게 해독됐다!" + }, + toxic: { + name: "맹독", + description: "독", + obtain: "{{pokemonNameWithAffix}}의\n몸에 맹독이 퍼졌다!", + obtainSource: "{{pokemonNameWithAffix}}[[는]]\n{{sourceText}} 때문에 몸에 맹독이 퍼졌다!", + activation: "{{pokemonNameWithAffix}}[[는]]\n독에 의한 데미지를 입었다!", + overlap: "{{pokemonNameWithAffix}}[[는]] 이미\n몸에 독이 퍼진 상태다.", + heal: "{{pokemonNameWithAffix}}의 독은\n말끔하게 해독됐다!" + }, + paralysis: { + name: "마비", + description: "마비", + obtain: "{{pokemonNameWithAffix}}[[는]] 마비되어\n기술이 나오기 어려워졌다!", + obtainSource: "{{pokemonNameWithAffix}}[[는]] {{sourceText}} 때문에\n마비되어 기술이 나오기 어려워졌다!", + activation: "{{pokemonNameWithAffix}}[[는]]\n몸이 저려서 움직일 수 없다!", + overlap: "{{pokemonNameWithAffix}}[[는]]\n이미 마비되어 있다!", + heal: "{{pokemonNameWithAffix}}의\n몸저림이 풀렸다!" + }, + sleep: { + name: "잠듦", + description: "잠듦", + obtain: "{{pokemonNameWithAffix}}[[는]]\n잠들어 버렸다!", + obtainSource: "{{pokemonNameWithAffix}}[[는]]\n{{sourceText}} 때문에 잠들어 버렸다!", + activation: "{{pokemonNameWithAffix}}[[는]]\n쿨쿨 잠들어 있다.", + overlap: "{{pokemonNameWithAffix}}[[는]]\n이미 잠들어 있다.", + heal: "{{pokemonNameWithAffix}}[[는]]\n눈을 떴다!" + }, + freeze: { + name: "얼음", + description: "얼음", + obtain: "{{pokemonNameWithAffix}}[[는]]\n얼어붙었다!", + obtainSource: "{{pokemonNameWithAffix}}[[는]]\n{{sourceText}} 때문에 얼어붙었다!", + activation: "{{pokemonNameWithAffix}}[[는]]\n얼어 버려서 움직일 수 없다!", + overlap: "{{pokemonNameWithAffix}}[[는]]\n이미 얼어 있다.", + heal: "{{pokemonNameWithAffix}}의\n얼음 상태가 나았다!" + }, + burn: { + name: "화상", + description: "화상", + obtain: "{{pokemonNameWithAffix}}[[는]]\n화상을 입었다!", + obtainSource: "{{pokemonNameWithAffix}}[[는]]\n{{sourceText}} 때문에 화상을 입었다!", + activation: "{{pokemonNameWithAffix}}[[는]]\n화상 데미지를 입었다!", + overlap: "{{pokemonNameWithAffix}}[[는]] 이미\n화상을 입은 상태다.", + heal: "{{pokemonNameWithAffix}}의\n화상이 나았다!" + }, +} as const; diff --git a/src/locales/pt_BR/ability-trigger.ts b/src/locales/pt_BR/ability-trigger.ts index 13b4d6c471c8..12b518e5b23f 100644 --- a/src/locales/pt_BR/ability-trigger.ts +++ b/src/locales/pt_BR/ability-trigger.ts @@ -9,6 +9,6 @@ export const abilityTriggers: SimpleTranslationEntries = { "poisonHeal": "{{abilityName}} de {{pokemonName}}\nrestaurou seus PS um pouco!", "trace": "{{pokemonName}} copiou {{abilityName}}\nde {{targetName}}!", "windPowerCharged": "Ser atingido por {{moveName}} carregou {{pokemonName}} com poder!", - "quickDraw":"{{pokemonName}} can act faster than normal, thanks to its Quick Draw!", + "quickDraw":"{{pokemonName}} pode agir mais rápido que o normal\ngraças ao seu Quick Draw!", "disguiseAvoidedDamage" : "O disfarce de {{pokemonName}} foi descoberto!", } as const; diff --git a/src/locales/pt_BR/ability.ts b/src/locales/pt_BR/ability.ts index 05592f3fe1e7..2dd4550aabda 100644 --- a/src/locales/pt_BR/ability.ts +++ b/src/locales/pt_BR/ability.ts @@ -331,7 +331,7 @@ export const ability: AbilityTranslationEntries = { }, angerPoint: { name: "Anger Point", - description: "Quando recebe um golpe crítico se enraivece, e com isso, aumenta seu Ataque.", + description: "Quando recebe um acerto crítico se enraivece, e com isso, aumenta seu Ataque.", }, unburden: { name: "Unburden", diff --git a/src/locales/pt_BR/battle.ts b/src/locales/pt_BR/battle.ts index 9ab6f91996d6..15f1d83c3c98 100644 --- a/src/locales/pt_BR/battle.ts +++ b/src/locales/pt_BR/battle.ts @@ -19,7 +19,7 @@ export const battle: SimpleTranslationEntries = { "partyFull": "Sua equipe está cheia.\nSolte um Pokémon para ter espaço para {{pokemonName}}?", "pokemon": "Pokémon", "sendOutPokemon": "{{pokemonName}}, eu escolho você!!", - "hitResultCriticalHit": "Um golpe crítico!", + "hitResultCriticalHit": "Foi um acerto crítico!", "hitResultSuperEffective": "É supereficaz!", "hitResultNotVeryEffective": "É pouco eficaz...", "hitResultNoEffect": "Isso não afeta {{pokemonName}}!", @@ -65,6 +65,7 @@ export const battle: SimpleTranslationEntries = { "useMove": "{{pokemonNameWithAffix}} usou {{moveName}}!", "drainMessage": "{{pokemonName}} teve sua\nenergia drenada!", "regainHealth": "{{pokemonName}} recuperou\npontos de saúde!", + "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "fainted": "{{pokemonNameWithAffix}} desmaiou!", "statRose": "{{stats}} de {{pokemonNameWithAffix}} aumentou!", "statSharplyRose": "{{stats}} de {{pokemonNameWithAffix}} aumentou bruscamente!", diff --git a/src/locales/pt_BR/bgm-name.ts b/src/locales/pt_BR/bgm-name.ts index 77ebb69df326..ef15c6c6dcb6 100644 --- a/src/locales/pt_BR/bgm-name.ts +++ b/src/locales/pt_BR/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PMD EoS Mystifying Forest", "ice_cave": "PMD EoS Vast Ice Mountain", "island": "PMD EoS Craggy Coast", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PMD EoS Crystal Cave", "meadow": "PMD EoS Sky Peak Forest", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PMD EoS Mt. Horn", "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", "sea": "PMD EoS Brine Cave", - "seabed": "PMD EoS Lower Brine Cave", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PMD EoS Sky Peak Coast", "snowy_forest": "PMD EoS Sky Peak Snowfield", - "space": "PMD EoS Fortune Ravine", + "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", "tall_grass": "PMD EoS Foggy Forest", "temple": "PMD EoS Aegis Cave", diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index 53195fbc32e4..ac4176144c65 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -1,5 +1,3 @@ -import { common } from "#app/locales/pt_BR/common.js"; -import { settings } from "#app/locales/pt_BR/settings.js"; import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; import { PGFachv, PGMachv } from "./achv"; @@ -30,7 +28,6 @@ import { menuUiHandler } from "./menu-ui-handler"; import { modifierType } from "./modifier-type"; import { move } from "./move"; import { nature } from "./nature"; -import { partyUiHandler } from "./party-ui-handler"; import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; @@ -38,10 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; +import { partyUiHandler } from "./party-ui-handler"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const ptBrConfig = { ability: ability, @@ -80,6 +81,7 @@ export const ptBrConfig = { pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, saveSlotSelectUiHandler: saveSlotSelectUiHandler, + statusEffect: statusEffect, settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, diff --git a/src/locales/pt_BR/menu-ui-handler.ts b/src/locales/pt_BR/menu-ui-handler.ts index 258433d72c63..75e5adcfd87c 100644 --- a/src/locales/pt_BR/menu-ui-handler.ts +++ b/src/locales/pt_BR/menu-ui-handler.ts @@ -20,5 +20,5 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportData": "Exportar dados", "cancel": "Cancelar", "losingProgressionWarning": "Você vai perder todo o progresso desde o início da batalha. Confirmar?", - "noEggs": "You are not hatching\nany eggs at the moment!" + "noEggs": "Você não está chocando\nnenhum ovo no momento!" } as const; diff --git a/src/locales/pt_BR/move.ts b/src/locales/pt_BR/move.ts index 092cc0583adb..0008cc55416b 100644 --- a/src/locales/pt_BR/move.ts +++ b/src/locales/pt_BR/move.ts @@ -2095,7 +2095,7 @@ export const move: MoveTranslationEntries = { }, "frostBreath": { name: "Frost Breath", - effect: "O usuário sopra sua respiração gelada no alvo. Esse ataque sempre resulta em um golpe crítico." + effect: "O usuário sopra sua respiração gelada no alvo. Esse ataque sempre resulta em um acerto crítico." }, "dragonTail": { name: "Dragon Tail", @@ -2691,7 +2691,7 @@ export const move: MoveTranslationEntries = { }, "laserFocus": { name: "Laser Focus", - effect: "O usuário se concentra intensamente. O ataque no próximo turno sempre resultará em um golpe crítico." + effect: "O usuário se concentra intensamente. O ataque no próximo turno sempre resultará em um acerto crítico." }, "gearUp": { name: "Gear Up", @@ -3267,11 +3267,11 @@ export const move: MoveTranslationEntries = { }, wickedBlow: { name: "Wicked Blow", - effect: "O usuário, tendo dominado o estilo Sombrio, atinge o alvo com um golpe feroz. Este ataque sempre resulta em um golpe crítico." + effect: "O usuário, tendo dominado o estilo Sombrio, atinge o alvo com um golpe feroz. Este ataque sempre resulta em um acerto crítico." }, surgingStrikes: { name: "Surging Strikes", - effect: "O usuário, tendo dominado o estilo Água, atinge o alvo com um movimento fluido três vezes seguidas. Este ataque sempre resulta em um golpe crítico." + effect: "O usuário, tendo dominado o estilo Água, atinge o alvo com um movimento fluido três vezes seguidas. Estes ataques sempre resultam em acertos críticos." }, thunderCage: { name: "Thunder Cage", @@ -3359,7 +3359,7 @@ export const move: MoveTranslationEntries = { }, esperWing: { name: "Esper Wing", - effect: "O usuário corta o alvo com asas enriquecidas com aura. Isso também aumenta o atributo de Velocidade do usuário. Este movimento tem uma chance aumentada de causar um golpe crítico." + effect: "O usuário corta o alvo com asas enriquecidas com aura. Isso também aumenta o atributo de Velocidade do usuário. Este movimento tem uma chance aumentada de causar um acerto crítico." }, bitterMalice: { name: "Bitter Malice", @@ -3371,7 +3371,7 @@ export const move: MoveTranslationEntries = { }, tripleArrows: { name: "Triple Arrows", - effect: "O usuário chuta e depois dispara três flechas. Este movimento tem uma chance aumentada de causar um golpe crítico e também pode diminuir o atributo de Defesa do alvo ou fazê-lo hesitar." + effect: "O usuário chuta e depois dispara três flechas. Este movimento tem uma chance aumentada de causar um acerto crítico e também pode diminuir o atributo de Defesa do alvo ou fazê-lo hesitar." }, infernalParade: { name: "Infernal Parade", @@ -3611,7 +3611,7 @@ export const move: MoveTranslationEntries = { }, "flowerTrick": { name: "Flower Trick", - effect: "O usuário lança um buquê de flores armado no alvo. Este ataque nunca erra e sempre resulta em um golpe crítico." + effect: "O usuário lança um buquê de flores armado no alvo. Este ataque nunca erra e sempre resulta em um acerto crítico." }, "torchSong": { name: "Torch Song", @@ -3711,7 +3711,7 @@ export const move: MoveTranslationEntries = { }, "aquaCutter": { name: "Aqua Cutter", - effect: "O usuário expele água pressurizada para cortar o alvo como uma lâmina. Este movimento tem uma chance aumentada de resultar em um golpe crítico." + effect: "O usuário expele água pressurizada para cortar o alvo como uma lâmina. Este movimento tem uma chance aumentada de resultar em um acerto crítico." }, "blazingTorque": { name: "Blazing Torque", @@ -3747,7 +3747,7 @@ export const move: MoveTranslationEntries = { }, "ivyCudgel": { name: "Ivy Cudgel", - effect: "O usuário golpeia com um porrete envolto em hera. O tipo deste movimento muda dependendo da máscara usada pelo usuário, e tem uma chance aumentada de resultar em um golpe crítico." + effect: "O usuário golpeia com um porrete envolto em hera. O tipo deste movimento muda dependendo da máscara usada pelo usuário, e tem uma chance aumentada de resultar em um acerto crítico." }, "electroShot": { name: "Electro Shot", diff --git a/src/locales/pt_BR/status-effect.ts b/src/locales/pt_BR/status-effect.ts new file mode 100644 index 000000000000..d99e2bd5ec1b --- /dev/null +++ b/src/locales/pt_BR/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "Nenhum", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Envenenamento", + description: "envenenamento", + obtain: "{{pokemonNameWithAffix}}\nfoi envenenado!", + obtainSource: "{{pokemonNameWithAffix}}\nfoi envenenado por {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} foi ferido\ncom o veneno!", + overlap: "{{pokemonNameWithAffix}} já\nestá envenenado!", + heal: "{{pokemonNameWithAffix}} se\ncurou do envenenamento!" + }, + toxic: { + name: "Toxic", + description: "envenenamento", + obtain: "{{pokemonNameWithAffix}}\nfoi seriamente envenenado!", + obtainSource: "{{pokemonNameWithAffix}} foi seriamente\nenvenenado por {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} foi ferido\ncom o veneno!", + overlap: "{{pokemonNameWithAffix}} já\nestá envenenado!", + heal: "{{pokemonNameWithAffix}} se\ncurou do envenenamento!" + }, + paralysis: { + name: "Paralisia", + description: "paralisia", + obtain: "{{pokemonNameWithAffix}} foi paralisado,\nTalvez ele não consiga se mover!", + obtainSource: "{{pokemonNameWithAffix}} foi paralisado por {{sourceText}},\nTalvez ele não consiga se mover!", + activation: "{{pokemonNameWithAffix}} está paralisado!\nEle não consegue se mover!", + overlap: "{{pokemonNameWithAffix}} já\nestá paralisado!", + heal: "{{pokemonNameWithAffix}} foi\ncurado da paralisia!" + }, + sleep: { + name: "Dormindo", + description: "dormindo", + obtain: "{{pokemonNameWithAffix}}\nadormeceu!", + obtainSource: "{{pokemonNameWithAffix}}\ndormiu devido a {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} está dormindo profundamente.", + overlap: "{{pokemonNameWithAffix}} já\nestá dormindo!", + heal: "{{pokemonNameWithAffix}} acordou!" + }, + freeze: { + name: "Congelamento", + description: "congelando", + obtain: "{{pokemonNameWithAffix}}\nfoi congelado!", + obtainSource: "{{pokemonNameWithAffix}}\nfoi congelado por {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} está\ncongelado!", + overlap: "{{pokemonNameWithAffix}} já\nestá congelado!", + heal: "{{pokemonNameWithAffix}} foi\ndescongelado!" + }, + burn: { + name: "Queimadura", + description: "queimadura", + obtain: "{{pokemonNameWithAffix}}\nfoi queimado!", + obtainSource: "{{pokemonNameWithAffix}}\nfoi queimado por {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} foi ferido\npor sua queimadura!", + overlap: "{{pokemonNameWithAffix}} já\nestá queimado!", + heal: "{{pokemonNameWithAffix}} foi\ncurado de sua queimadura!" + }, +} as const; diff --git a/src/locales/zh_CN/ability-trigger.ts b/src/locales/zh_CN/ability-trigger.ts index acce82b5957d..9215542ef1f9 100644 --- a/src/locales/zh_CN/ability-trigger.ts +++ b/src/locales/zh_CN/ability-trigger.ts @@ -1,12 +1,12 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const abilityTriggers: SimpleTranslationEntries = { - "blockRecoilDamage" : "{{pokemonName}} 的 {{abilityName}}\n抵消了反作用力!", - "badDreams": "{{pokemonName}} 被折磨着!", - "costar": "{{pokemonName}} copied {{allyName}}'s stat changes!", - "iceFaceAvoidedDamage": "{{pokemonName}} 因为 {{abilityName}}\n避免了伤害!", - "trace": "{{pokemonName}} copied {{targetName}}'s\n{{abilityName}}!", - "windPowerCharged": "受 {{moveName}} 的影响, {{pokemonName}} 提升了能力!", + "blockRecoilDamage" : "{{pokemonName}}的{{abilityName}}\n抵消了反作用力!", + "badDreams": "{{pokemonName}}被折磨着!", + "costar": "{{pokemonName}}复制了{{allyName}}的能力变化!", + "iceFaceAvoidedDamage": "{{pokemonName}}因为{{abilityName}}\n避免了伤害!", + "trace": "{{pokemonName}}复制了{{targetName}}的\n{{abilityName}}!", + "windPowerCharged": "受{{moveName}}的影响,{{pokemonName}}提升了能力!", "quickDraw":"因为速击效果发动,\n{{pokemonName}}比平常出招更快了!", "disguiseAvoidedDamage" : "{{pokemonName}}的画皮脱落了!", } as const; diff --git a/src/locales/zh_CN/ability.ts b/src/locales/zh_CN/ability.ts index 9fe6b41ae31d..82bc403ad84c 100644 --- a/src/locales/zh_CN/ability.ts +++ b/src/locales/zh_CN/ability.ts @@ -3,11 +3,11 @@ import { AbilityTranslationEntries } from "#app/interfaces/locales.js"; export const ability: AbilityTranslationEntries = { stench: { name: "恶臭", - description: "通过释放臭臭的气味,在攻\n击的时候,有时会使对手畏\n缩。", + description: "通过释放臭臭的气味,在攻击的时\n候,有时会使对手畏缩。", }, drizzle: { name: "降雨", - description: "出场时,会将天气变为下雨\n。", + description: "出场时,会将天气变为下雨。", }, speedBoost: { name: "加速", @@ -15,39 +15,39 @@ export const ability: AbilityTranslationEntries = { }, battleArmor: { name: "战斗盔甲", - description: "被坚硬的甲壳守护着,不会\n被对手的攻击击中要害。", + description: "被坚硬的甲壳守护着,不会被对手\n的攻击击中要害。", }, sturdy: { name: "结实", - description: "在HP全满时,即使受到招\n式攻击,也不会被一击打倒\n。一击必杀的招式也没有效\n果。", + description: "在HP全满时,即使受到招式攻击\n,也不会被一击打倒。一击必杀的\n招式也没有效果。", }, damp: { name: "湿气", - description: "通过把周围都弄湿,使谁都\n无法使用自爆等爆炸类的招\n式。", + description: "通过把周围都弄湿,使谁都无法使\n用自爆等爆炸类的招式。", }, limber: { name: "柔软", - description: "因为身体柔软,不会变为麻\n痹状态。", + description: "因为身体柔软,不会变为麻痹状态\n。", }, sandVeil: { name: "沙隐", - description: "在沙暴的时候,闪避率会提\n高。", + description: "在沙暴的时候,闪避率会提高。", }, static: { name: "静电", - description: "身上带有静电,有时会让接\n触到的对手麻痹。", + description: "身上带有静电,有时会让接触到的\n对手麻痹。", }, voltAbsorb: { name: "蓄电", - description: "受到电属性的招式攻击时,\n不会受到伤害,而是会回复。", + description: "受到电属性的招式攻击时,不会受\n到伤害,而是会回复。", }, waterAbsorb: { name: "储水", - description: "受到水属性的招式攻击时,\n不会受到伤害,而是会回复。", + description: "受到水属性的招式攻击时,不会受\n到伤害,而是会回复。", }, oblivious: { name: "迟钝", - description: "因为感觉迟钝,不会变为着\n迷和被挑衅状态。对威吓也\n毫不动摇。", + description: "因为感觉迟钝,不会变为着迷和被\n挑衅状态。对威吓也毫不动摇。", }, cloudNine: { name: "无关天气", @@ -55,79 +55,79 @@ export const ability: AbilityTranslationEntries = { }, compoundEyes: { name: "复眼", - description: "因为拥有复眼,招式的命中\n率会提高。", + description: "因为拥有复眼,招式的命中率会提\n高。", }, insomnia: { name: "不眠", - description: "因为有着睡不着的体质,所\n以不会陷入睡眠状态。", + description: "因为有着睡不着的体质,所以不会\n陷入睡眠状态。", }, colorChange: { name: "变色", - description: "自己的属性会变为从对手处\n所受招式的属性。", + description: "自己的属性会变为从对手处所受招\n式的属性。", }, immunity: { name: "免疫", - description: "因为体内拥有免疫能力,不\n会变为中毒状态。", + description: "因为体内拥有免疫能力,不会变为\n中毒状态。", }, flashFire: { name: "引火", - description: "受到火属性的招式攻击时,\n吸收火焰,自己使出的火属\n性招式会变强。", + description: "受到火属性的招式攻击时,吸收火\n焰,自己使出的火属性招式会变强\n。", }, shieldDust: { name: "鳞粉", - description: "被鳞粉守护着,不会受到招\n式的追加效果影响。", + description: "被鳞粉守护着,不会受到招式的追\n加效果影响。", }, ownTempo: { name: "我行我素", - description: "因为我行我素,不会变为混\n乱状态。对威吓也毫不动摇。", + description: "因为我行我素,不会变为混乱状态\n。对威吓也毫不动摇。", }, suctionCups: { name: "吸盘", - description: "用吸盘牢牢贴在地面上,让\n替换宝可梦的招式和道具无\n效。", + description: "用吸盘牢牢贴在地面上,让替换宝\n可梦的招式和道具无效。", }, intimidate: { name: "威吓", - description: "出场时威吓对手,让其退缩\n,降低对手的攻击。", + description: "出场时威吓对手,让其退缩,降低\n对手的攻击。", }, shadowTag: { name: "踩影", - description: "踩住对手的影子使其无法逃\n走或替换。", + description: "踩住对手的影子使其无法逃走或替\n换。", }, roughSkin: { name: "粗糙皮肤", - description: "受到攻击时,用粗糙的皮肤\n弄伤接触到自己的对手。", + description: "受到攻击时,用粗糙的皮肤弄伤接\n触到自己的对手。", }, wonderGuard: { name: "神奇守护", - description: "不可思议的力量,只有效果\n绝佳的招式才能击中。", + description: "不可思议的力量,只有效果绝佳的\n招式才能击中。", }, levitate: { name: "飘浮", - description: "从地面浮起,从而不会受到\n地面属性招式的攻击。", + description: "从地面浮起,从而不会受到地面属\n性招式的攻击。", }, effectSpore: { name: "孢子", - description: "受到攻击时,有时会把接触\n到自己的对手变为中毒、麻\n痹或睡眠状态。", + description: "受到攻击时,有时会把接触到自己\n的对手变为中毒、麻痹或睡眠状态\n。", }, synchronize: { name: "同步", - description: "将自己的中毒、麻痹或灼伤\n状态传染给对手。", + description: "将自己的中毒、麻痹或灼伤状态传\n染给对手。", }, clearBody: { name: "恒净之躯", - description: "不会因为对手的招式或特性\n而被降低能力。", + description: "不会因为对手的招式或特性而被降\n低能力。", }, naturalCure: { name: "自然回复", - description: "回到同行队伍后,异常状态\n就会被治愈。", + description: "回到同行队伍后,异常状态就会被\n治愈。", }, lightningRod: { name: "避雷针", - description: "将电属性的招式吸引到自己\n身上,不会受到伤害,而是\n会提高特攻。", + description: "将电属性的招式吸引到自己身上,\n不会受到伤害,而是会提高特攻。", }, sereneGrace: { name: "天恩", - description: "托天恩的福,招式的追加效\n果容易出现。", + description: "托天恩的福,招式的追加效果容易\n出现。", }, swiftSwim: { name: "悠游自如", @@ -139,43 +139,43 @@ export const ability: AbilityTranslationEntries = { }, illuminate: { name: "发光", - description: "通过让周围变亮来保持命中\n率不会被降低。", + description: "通过让周围变亮来保持命中率不会\n被降低。", }, trace: { name: "复制", - description: "出场时,复制对手的特性,\n变为与之相同的特性。", + description: "出场时,复制对手的特性,变为与\n之相同的特性。", }, hugePower: { name: "大力士", - description: "物理攻击的威力会变为2倍\n。", + description: "物理攻击的威力会变为2倍。", }, poisonPoint: { name: "毒刺", - description: "有时会让接触到自己的对手\n变为中毒状态。", + description: "有时会让接触到自己的对手变为中\n毒状态。", }, innerFocus: { name: "精神力", - description: "拥有经过锻炼的精神,而不\n会因对手的攻击而畏缩。对\n威吓也毫不动摇。", + description: "拥有经过锻炼的精神,而不会因对\n手的攻击而畏缩。对威吓也毫不动\n摇。", }, magmaArmor: { name: "熔岩铠甲", - description: "将炽热的熔岩覆盖在身上,\n不会变为冰冻状态。", + description: "将炽热的熔岩覆盖在身上,不会变\n为冰冻状态。", }, waterVeil: { name: "水幕", - description: "将水幕裹在身上,不会变为\n灼伤状态。", + description: "将水幕裹在身上,不会变为灼伤状\n态。", }, magnetPull: { name: "磁力", - description: "用磁力吸住钢属性的宝可梦\n,使其无法逃走。", + description: "用磁力吸住钢属性的宝可梦,使其\n无法逃走。", }, soundproof: { name: "隔音", - description: "通过屏蔽声音,不受到声音\n招式的影响。", + description: "通过屏蔽声音,不受到声音招式的\n影响。", }, rainDish: { name: "雨盘", - description: "下雨天气时,会缓缓回复\nHP。", + description: "下雨天气时,会缓缓回复HP。", }, sandStream: { name: "扬沙", @@ -183,99 +183,99 @@ export const ability: AbilityTranslationEntries = { }, pressure: { name: "压迫感", - description: "给予对手压迫感,大量减少\n其使用招式的PP。", + description: "给予对手压迫感,大量减少其使用\n招式的PP。", }, thickFat: { name: "厚脂肪", - description: "因为被厚厚的脂肪保护着,\n会让火属性和冰属性的招式\n伤害减半。", + description: "因为被厚厚的脂肪保护着,会让火\n属性和冰属性的招式伤害减半。", }, earlyBird: { name: "早起", - description: "即使变为睡眠状态,也能以\n2倍的速度提早醒来。", + description: "即使变为睡眠状态,也能以2倍的\n速度提早醒来。", }, flameBody: { name: "火焰之躯", - description: "有时会让接触到自己的对手\n变为灼伤状态。", + description: "有时会让接触到自己的对手变为灼\n伤状态。", }, runAway: { name: "逃跑", - description: "一定能从野生宝可梦那儿逃\n走。", + description: "一定能从野生宝可梦那儿逃走。", }, keenEye: { name: "锐利目光", - description: "多亏了锐利的目光,命中率\n不会被降低。", + description: "多亏了锐利的目光,命中率不会被\n降低。", }, hyperCutter: { name: "怪力钳", - description: "因为拥有以力量自豪的钳子,\n不会被对手降低攻击。", + description: "因为拥有以力量自豪的钳子,不会\n被对手降低攻击。", }, pickup: { name: "捡拾", - description: "有时会捡来对手用过的道具,\n冒险过程中也会捡到。", + description: "有时会捡来对手用过的道具,冒险\n过程中也会捡到。", }, truant: { name: "懒惰", - description: "如果使出招式,下一回合就\n会休息。", + description: "如果使出招式,下一回合就会休息\n。", }, hustle: { name: "活力", - description: "自己的攻击变高,但命中率\n会降低。", + description: "自己的攻击变高,但命中率会降低\n。", }, cuteCharm: { name: "迷人之躯", - description: "有时会让接触到自己的对手\n着迷。", + description: "有时会让接触到自己的对手着迷。", }, plus: { name: "正电", - description: "出场的伙伴之间如果有正电\n或负电特性的宝可梦,自己\n的特攻会提高。", + description: "出场的伙伴之间如果有正电或负电\n特性的宝可梦,自己的特攻会提高\n。", }, minus: { name: "负电", - description: "出场的伙伴之间如果有正电\n或负电特性的宝可梦,自己\n的特攻会提高。", + description: "出场的伙伴之间如果有正电或负电\n特性的宝可梦,自己的特攻会提高\n。", }, forecast: { name: "阴晴不定", - description: "受天气的影响,会变为水属\n性、火属性或冰属性中的某\n一个。", + description: "受天气的影响,会变为水属性、火\n属性或冰属性中的某一个。", }, stickyHold: { name: "黏着", - description: "因为道具是粘在黏性身体上\n的,所以不会被对手夺走。", + description: "因为道具是粘在黏性身体上的,所\n以不会被对手夺走。", }, shedSkin: { name: "蜕皮", - description: "通过蜕去身上的皮,有时会\n治愈异常状态。", + description: "通过蜕去身上的皮,有时会治愈异\n常状态。", }, guts: { name: "毅力", - description: "如果变为异常状态,会拿出\n毅力,攻击会提高。", + description: "如果变为异常状态,会拿出毅力,\n攻击会提高。", }, marvelScale: { name: "神奇鳞片", - description: "如果变为异常状态,神奇鳞\n片会发生反应,防御会提高。", + description: "如果变为异常状态,神奇鳞片会发\n生反应,防御会提高。", }, liquidOoze: { name: "污泥浆", - description: "吸收了污泥浆的对手会因强\n烈的恶臭而受到伤害,减少\nHP。", + description: "吸收了污泥浆的对手会因强烈的恶\n臭而受到伤害,减少HP。", }, overgrow: { name: "茂盛", - description: "HP减少的时候,草属性的\n招式威力会提高。", + description: "HP减少的时候,草属性的招式威\n力会提高。", }, blaze: { name: "猛火", - description: "HP减少的时候,火属性的\n招式威力会提高。", + description: "HP减少的时候,火属性的招式威\n力会提高。", }, torrent: { name: "激流", - description: "HP减少的时候,水属性的\n招式威力会提高。", + description: "HP减少的时候,水属性的招式威\n力会提高。", }, swarm: { name: "虫之预感", - description: "HP减少的时候,虫属性的\n招式威力会提高。", + description: "HP减少的时候,虫属性的招式威\n力会提高。", }, rockHead: { name: "坚硬脑袋", - description: "即使使出会受反作用力伤害\n的招式,HP也不会减少。", + description: "即使使出会受反作用力伤害的招式\n,HP也不会减少。", }, drought: { name: "日照", @@ -287,19 +287,19 @@ export const ability: AbilityTranslationEntries = { }, vitalSpirit: { name: "干劲", - description: "通过激发出干劲,不会变为\n睡眠状态。", + description: "通过激发出干劲,不会变为睡眠状\n态。", }, whiteSmoke: { name: "白色烟雾", - description: "被白色烟雾保护着,不会被\n对手降低能力。", + description: "被白色烟雾保护着,不会被对手降\n低能力。", }, purePower: { name: "瑜伽之力", - description: "因瑜伽的力量,物理攻击的\n威力会变为2倍。", + description: "因瑜伽的力量,物理攻击的威力会\n变为2倍。", }, shellArmor: { name: "硬壳盔甲", - description: "被坚硬的壳保护着,对手的\n攻击不会击中要害。", + description: "被坚硬的壳保护着,对手的攻击不\n会击中要害。", }, airLock: { name: "气闸", @@ -307,19 +307,19 @@ export const ability: AbilityTranslationEntries = { }, tangledFeet: { name: "蹒跚", - description: "在混乱状态时,闪避率会提\n高。", + description: "在混乱状态时,闪避率会提高。", }, motorDrive: { name: "电气引擎", - description: "受到电属性的招式攻击时,\n不会受到伤害,而是速度会\n提高。", + description: "受到电属性的招式攻击时,不会受\n到伤害,而是速度会提高。", }, rivalry: { name: "斗争心", - description: "面对性别相同的对手,会燃\n起斗争心,变得更强。而面\n对性别不同的,则会变弱。", + description: "面对性别相同的对手,会燃起斗争\n心,变得更强。而面对性别不同的\n,则会变弱。", }, steadfast: { name: "不屈之心", - description: "每次畏缩时,不屈之心就会\n燃起,速度也会提高。", + description: "每次畏缩时,不屈之心就会燃起,\n速度也会提高。", }, snowCloak: { name: "雪隐", @@ -327,19 +327,19 @@ export const ability: AbilityTranslationEntries = { }, gluttony: { name: "贪吃鬼", - description: "原本HP变得很少时才会吃\n树果,在HP还有一半时就\n会把它吃掉。", + description: "原本HP变得很少时才会吃树果,\n在HP还有一半时就会把它吃掉。", }, angerPoint: { name: "愤怒穴位", - description: "要害被击中时,会大发雷霆\n,攻击力变为最大。", + description: "要害被击中时,会大发雷霆,攻击\n力变为最大。", }, unburden: { name: "轻装", - description: "失去所持有的道具时,速度\n会提高。", + description: "失去所持有的道具时,速度会提高\n。", }, heatproof: { name: "耐热", - description: "耐热的体质会让火属性的招\n式伤害减半。", + description: "耐热的体质会让火属性的招式伤害\n减半。", }, simple: { name: "单纯", @@ -347,11 +347,11 @@ export const ability: AbilityTranslationEntries = { }, drySkin: { name: "干燥皮肤", - description: "下雨天气时和受到水属性的\n招式时,HP会回复。晴朗\n天气时和受到火属性的招式\n时,HP会减少。", + description: "下雨天气时和受到水属性的招式时\n,HP会回复。晴朗天气时和受到\n火属性的招式时,HP会减少。", }, download: { name: "下载", - description: "比较对手的防御和特防,根\n据较低的那项能力相应地提\n高自己的攻击或特攻。", + description: "比较对手的防御和特防,根据较低\n的那项能力相应地提高自己的攻击\n或特攻。", }, ironFist: { name: "铁拳", @@ -359,35 +359,35 @@ export const ability: AbilityTranslationEntries = { }, poisonHeal: { name: "毒疗", - description: "变为中毒状态时,HP不会\n减少,反而会增加起来。", + description: "变为中毒状态时,HP不会减少,\n反而会增加起来。", }, adaptability: { name: "适应力", - description: "与自身同属性的招式威力会\n提高。", + description: "与自身同属性的招式威力会提高。", }, skillLink: { name: "连续攻击", - description: "如果使用连续招式,总是能\n使出最高次数。", + description: "如果使用连续招式,总是能使出最\n高次数。", }, hydration: { name: "湿润之躯", - description: "下雨天气时,异常状态会治\n愈。", + description: "下雨天气时,异常状态会治愈。", }, solarPower: { name: "太阳之力", - description: "晴朗天气时,特攻会提高,\n而每回合HP会减少。", + description: "晴朗天气时,特攻会提高,而每回\n合HP会减少。", }, quickFeet: { name: "飞毛腿", - description: "变为异常状态时,速度会提\n高。", + description: "变为异常状态时,速度会提高。", }, normalize: { name: "一般皮肤", - description: "无论是什么属性的招式,全\n部会变为一般属性。威力会\n少量提高。", + description: "无论是什么属性的招式,全部会变\n为一般属性。威力会少量提高。", }, sniper: { name: "狙击手", - description: "击中要害时,威力会变得更\n强。", + description: "击中要害时,威力会变得更强。", }, magicGuard: { name: "魔法防守", @@ -395,19 +395,19 @@ export const ability: AbilityTranslationEntries = { }, noGuard: { name: "无防守", - description: "由于无防守战术,双方使出\n的招式都必定会击中。", + description: "由于无防守战术,双方使出的招式\n都必定会击中。", }, stall: { name: "慢出", - description: "使出招式的顺序必定会变为\n最后。", + description: "使出招式的顺序必定会变为最后。", }, technician: { name: "技术高手", - description: "攻击时可以将低威力招式的\n威力提高。", + description: "攻击时可以将低威力招式的威力提\n高。", }, leafGuard: { name: "叶子防守", - description: "晴朗天气时,不会变为异常\n状态。", + description: "晴朗天气时,不会变为异常状态。", }, klutz: { name: "笨拙", @@ -415,55 +415,55 @@ export const ability: AbilityTranslationEntries = { }, moldBreaker: { name: "破格", - description: "可以不受对手特性的干扰,\n向对手使出招式。", + description: "可以不受对手特性的干扰,向对手\n使出招式。", }, superLuck: { name: "超幸运", - description: "因为拥有超幸运,攻击容易\n击中对手的要害。", + description: "因为拥有超幸运,攻击容易击中对\n手的要害。", }, aftermath: { name: "引爆", - description: "变为濒死时,会对接触到自\n己的对手造成伤害。", + description: "变为濒死时,会对接触到自己的对\n手造成伤害。", }, anticipation: { name: "危险预知", - description: "可以察觉到对手拥有的危险\n招式。", + description: "可以察觉到对手拥有的危险招式。", }, forewarn: { name: "预知梦", - description: "出场时,只读取1个对手拥\n有的招式。", + description: "出场时,只读取1个对手拥有的招\n式。", }, unaware: { name: "纯朴", - description: "可以无视对手能力的变化,\n进行攻击。", + description: "可以无视对手能力的变化,进行攻\n击。", }, tintedLens: { name: "有色眼镜", - description: "可以将效果不好的招式以通\n常的威力使出。", + description: "可以将效果不好的招式以通常的威\n力使出。", }, filter: { name: "过滤", - description: "受到效果绝佳的攻击时,可\n以减弱其威力。", + description: "受到效果绝佳的攻击时,可以减弱\n其威力。", }, slowStart: { name: "慢启动", - description: "在5回合内,攻击和速度减\n半。", + description: "在5回合内,攻击和速度减半。", }, scrappy: { name: "胆量", - description: "一般属性和格斗属性的招式\n可以击中幽灵属性的宝可梦\n。对威吓也毫不动摇。", + description: "一般属性和格斗属性的招式可以击\n中幽灵属性的宝可梦。对威吓也毫\n不动摇。", }, stormDrain: { name: "引水", - description: "将水属性的招式引到自己身\n上,不会受到伤害,而是会\n提高特攻。", + description: "将水属性的招式引到自己身上,不\n会受到伤害,而是会提高特攻。", }, iceBody: { name: "冰冻之躯", - description: "下雪天气时,会缓缓回复\nHP。", + description: "下雪天气时,会缓缓回复HP。", }, solidRock: { name: "坚硬岩石", - description: "受到效果绝佳的攻击时,可\n以减弱其威力。", + description: "受到效果绝佳的攻击时,可以减弱\n其威力。", }, snowWarning: { name: "降雪", @@ -471,7 +471,7 @@ export const ability: AbilityTranslationEntries = { }, honeyGather: { name: "采蜜", - description: "The Pokémon gathers Honey after a battle. The Honey is then sold for money.", + description: "The Pokémon gat\nhers Honey afte\nr a battle. The\n Honey is then \nsold for money.", }, frisk: { name: "察觉", @@ -479,15 +479,15 @@ export const ability: AbilityTranslationEntries = { }, reckless: { name: "舍身", - description: "自己会因反作用力受伤的招\n式,其威力会提高。", + description: "自己会因反作用力受伤的招式,其\n威力会提高。", }, multitype: { name: "多属性", - description: "自己的属性会根据持有的石\n板而改变。", + description: "自己的属性会根据持有的石板而改\n变。", }, flowerGift: { name: "花之礼", - description: "晴朗天气时,自己与同伴的\n攻击和特防能力会提高。", + description: "晴朗天气时,自己与同伴的攻击和\n特防能力会提高。", }, badDreams: { name: "梦魇", @@ -495,31 +495,31 @@ export const ability: AbilityTranslationEntries = { }, pickpocket: { name: "顺手牵羊", - description: "盗取接触到自己的对手的道\n具。", + description: "盗取接触到自己的对手的道具。", }, sheerForce: { name: "强行", - description: "招式的追加效果消失,但因\n此能以更高的威力使出招式\n。", + description: "招式的追加效果消失,但因此能以\n更高的威力使出招式。", }, contrary: { name: "唱反调", - description: "能力的变化发生逆转,原本\n提高时会降低,而原本降低\n时会提高。", + description: "能力的变化发生逆转,原本提高时\n会降低,而原本降低时会提高。", }, unnerve: { name: "紧张感", - description: "让对手紧张,使其无法食用\n树果。", + description: "让对手紧张,使其无法食用树果。", }, defiant: { name: "不服输", - description: "被对手降低能力时,攻击会\n大幅提高。", + description: "被对手降低能力时,攻击会大幅提\n高。", }, defeatist: { name: "软弱", - description: "HP减半时,会变得软弱,\n攻击和特攻会减半。", + description: "HP减半时,会变得软弱,攻击和\n特攻会减半。", }, cursedBody: { name: "诅咒之躯", - description: "受到攻击时,有时会把对手\n的招式变为定身法状态。", + description: "受到攻击时,有时会把对手的招式\n变为定身法状态。", }, healer: { name: "治愈之心", @@ -531,7 +531,7 @@ export const ability: AbilityTranslationEntries = { }, weakArmor: { name: "碎裂铠甲", - description: "受到物理招式的伤害时,防\n御会降低,速度会大幅提高。", + description: "受到物理招式的伤害时,防御会降\n低,速度会大幅提高。", }, heavyMetal: { name: "重金属", @@ -543,39 +543,39 @@ export const ability: AbilityTranslationEntries = { }, multiscale: { name: "多重鳞片", - description: "HP全满时,受到的伤害会\n变少。", + description: "HP全满时,受到的伤害会变少。", }, toxicBoost: { name: "中毒激升", - description: "变为中毒状态时,物理招式\n的威力会提高。", + description: "变为中毒状态时,物理招式的威力\n会提高。", }, flareBoost: { name: "受热激升", - description: "变为灼伤状态时,特殊招式\n的威力会提高。", + description: "变为灼伤状态时,特殊招式的威力\n会提高。", }, harvest: { name: "收获", - description: "可以多次制作出已被使用掉\n的树果。", + description: "可以多次制作出已被使用掉的树果\n。", }, telepathy: { name: "心灵感应", - description: "读取我方的攻击,并闪避其\n招式伤害。", + description: "读取我方的攻击,并闪避其招式伤\n害。", }, moody: { name: "心情不定", - description: "每一回合,能力中的某项会\n大幅提高,而某项会降低。", + description: "每一回合,能力中的某项会大幅提\n高,而某项会降低。", }, overcoat: { name: "防尘", - description: "不会受到沙暴的伤害。也不\n会受到粉末类和孢子类招式\n的影响。", + description: "不会受到沙暴的伤害。也不会受到\n粉末类和孢子类招式的影响。", }, poisonTouch: { name: "毒手", - description: "只通过接触就有可能让对手\n变为中毒状态。", + description: "只通过接触就有可能让对手变为中\n毒状态。", }, regenerator: { name: "再生力", - description: "退回同行队伍后,HP会少\n量回复。", + description: "退回同行队伍后,HP会少量回复\n。", }, bigPecks: { name: "健壮胸肌", @@ -587,15 +587,15 @@ export const ability: AbilityTranslationEntries = { }, wonderSkin: { name: "奇迹皮肤", - description: "成为不易受到变化招式攻击\n的身体。", + description: "成为不易受到变化招式攻击的身体\n。", }, analytic: { name: "分析", - description: "如果在最后使出招式,招式\n的威力会提高。", + description: "如果在最后使出招式,招式的威力\n会提高。", }, illusion: { name: "幻觉", - description: "假扮成同行队伍中的最后一\n只宝可梦出场,迷惑对手。", + description: "假扮成同行队伍中的最后一只宝可\n梦出场,迷惑对手。", }, imposter: { name: "变身者", @@ -603,31 +603,31 @@ export const ability: AbilityTranslationEntries = { }, infiltrator: { name: "穿透", - description: "可以穿透对手的壁障或替身\n进行攻击。", + description: "可以穿透对手的壁障或替身进行攻\n击。", }, mummy: { name: "木乃伊", - description: "被对手接触到后,会将对手\n变为木乃伊。", + description: "被对手接触到后,会将对手变为木\n乃伊。", }, moxie: { name: "自信过度", - description: "如果打倒对手,就会充满自\n信,攻击会提高。", + description: "如果打倒对手,就会充满自信,攻\n击会提高。", }, justified: { name: "正义之心", - description: "受到恶属性的招式攻击时,\n因为正义感,攻击会提高。", + description: "受到恶属性的招式攻击时,因为正\n义感,攻击会提高。", }, rattled: { name: "胆怯", - description: "受到恶属性、幽灵属性和虫\n属性的攻击或威吓时,会因\n胆怯而速度提高。", + description: "受到恶属性、幽灵属性和虫属性的\n攻击或威吓时,会因胆怯而速度提\n高。", }, magicBounce: { name: "魔法镜", - description: "可以不受到由对手使出的变\n化招式影响,并将其反弹。", + description: "可以不受到由对手使出的变化招式\n影响,并将其反弹。", }, sapSipper: { name: "食草", - description: "受到草属性的招式攻击时,\n不会受到伤害,而是攻击会\n提高。", + description: "受到草属性的招式攻击时,不会受\n到伤害,而是攻击会提高。", }, prankster: { name: "恶作剧之心", @@ -635,15 +635,15 @@ export const ability: AbilityTranslationEntries = { }, sandForce: { name: "沙之力", - description: "沙暴天气时,岩石属性、地\n面属性和钢属性的招式威力\n会提高。", + description: "沙暴天气时,岩石属性、地面属性\n和钢属性的招式威力会提高。", }, ironBarbs: { name: "铁刺", - description: "用铁刺给予接触到自己的对\n手伤害。", + description: "用铁刺给予接触到自己的对手伤害\n。", }, zenMode: { name: "达摩模式", - description: "HP变为一半以下时,样子\n会改变。", + description: "HP变为一半以下时,样子会改变\n。", }, victoryStar: { name: "胜利之星", @@ -651,67 +651,67 @@ export const ability: AbilityTranslationEntries = { }, turboblaze: { name: "涡轮火焰", - description: "可以不受对手特性的干扰,\n向对手使出招式。", + description: "可以不受对手特性的干扰,向对手\n使出招式。", }, teravolt: { name: "兆级电压", - description: "可以不受对手特性的干扰,\n向对手使出招式。", + description: "可以不受对手特性的干扰,向对手\n使出招式。", }, aromaVeil: { name: "芳香幕", - description: "可以防住向自己和同伴发出\n的心灵攻击。", + description: "可以防住向自己和同伴发出的心灵\n攻击。", }, flowerVeil: { name: "花幕", - description: "我方的草属性宝可梦能力不\n会降低,也不会变为异常状\n态。", + description: "我方的草属性宝可梦能力不会降低\n,也不会变为异常状态。", }, cheekPouch: { name: "颊囊", - description: "无论是哪种树果,食用后,\nHP都会回复。", + description: "无论是哪种树果,食用后,HP都\n会回复。", }, protean: { name: "变幻自如", - description: "变为与自己使出的招式相同\n的属性。每次出场战斗仅生\n效一次。", + description: "变为与自己使出的招式相同的属性\n。每次出场战斗仅生效一次。", }, furCoat: { name: "毛皮大衣", - description: "对手给予的物理招式的伤害\n会减半。", + description: "对手给予的物理招式的伤害会减半\n。", }, magician: { name: "魔术师", - description: "夺走被自己的招式击中的对\n手的道具。", + description: "夺走被自己的招式击中的对手的道\n具。", }, bulletproof: { name: "防弹", - description: "可以防住对手的球和弹类招\n式。", + description: "可以防住对手的球和弹类招式。", }, competitive: { name: "好胜", - description: "如果被对手降低能力,特攻\n会大幅提高。", + description: "如果被对手降低能力,特攻会大幅\n提高。", }, strongJaw: { name: "强壮之颚", - description: "因为颚部强壮,啃咬类招式\n的威力会提高。", + description: "因为颚部强壮,啃咬类招式的威力\n会提高。", }, refrigerate: { name: "冰冻皮肤", - description: "一般属性的招式会变为冰属\n性。威力会少量提高。", + description: "一般属性的招式会变为冰属性。威\n力会少量提高。", }, sweetVeil: { name: "甜幕", - description: "自己和同伴的宝可梦不会变\n为睡眠状态。", + description: "自己和同伴的宝可梦不会变为睡眠\n状态。", }, stanceChange: { name: "战斗切换", - description: "如果使出攻击招式,会变为\n刀剑形态,如果使出招式“\n王者盾牌”,会变为盾牌形\n态。", + description: "如果使出攻击招式,会变为刀剑形\n态,如果使出招式“王者盾牌”,\n会变为盾牌形态。", }, galeWings: { name: "疾风之翼", - description: "HP全满时,飞行属性的招\n式可以率先使出。", + description: "HP全满时,飞行属性的招式可以\n率先使出。", }, megaLauncher: { name: "超级发射器", - description: "波动和波导类招式的威力会\n提高。", + description: "波动和波导类招式的威力会提高。", }, grassPelt: { name: "草之毛皮", @@ -719,23 +719,23 @@ export const ability: AbilityTranslationEntries = { }, symbiosis: { name: "共生", - description: "同伴使用道具时,会把自己\n持有的道具传递给同伴。", + description: "同伴使用道具时,会把自己持有的\n道具传递给同伴。", }, toughClaws: { name: "硬爪", - description: "接触到对手的招式威力会提\n高。", + description: "接触到对手的招式威力会提高。", }, pixilate: { name: "妖精皮肤", - description: "一般属性的招式会变为妖精\n属性。威力会少量提高。", + description: "一般属性的招式会变为妖精属性。\n威力会少量提高。", }, gooey: { name: "黏滑", - description: "对于用攻击接触到自己的对\n手,会降低其速度。", + description: "对于用攻击接触到自己的对手,会\n降低其速度。", }, aerilate: { name: "飞行皮肤", - description: "一般属性的招式会变为飞行\n属性。威力会少量提高。", + description: "一般属性的招式会变为飞行属性。\n威力会少量提高。", }, parentalBond: { name: "亲子爱", @@ -751,19 +751,19 @@ export const ability: AbilityTranslationEntries = { }, auraBreak: { name: "气场破坏", - description: "让气场的效果发生逆转,降\n低威力。", + description: "让气场的效果发生逆转,降低威力\n。", }, primordialSea: { name: "始源之海", - description: "变为不会受到火属性攻击的\n天气。", + description: "变为不会受到火属性攻击的天气。", }, desolateLand: { name: "终结之地", - description: "变为不会受到水属性攻击的\n天气。", + description: "变为不会受到水属性攻击的天气。", }, deltaStream: { name: "德尔塔气流", - description: "变为令飞行属性的弱点消失\n的天气。", + description: "变为令飞行属性的弱点消失的天气\n。", }, stamina: { name: "持久力", @@ -771,31 +771,31 @@ export const ability: AbilityTranslationEntries = { }, wimpOut: { name: "跃跃欲逃", - description: "HP变为一半时,会慌慌张\n张逃走,退回同行队伍中。", + description: "HP变为一半时,会慌慌张张逃走\n,退回同行队伍中。", }, emergencyExit: { name: "危险回避", - description: "HP变为一半时,为了回避\n危险,会退回到同行队伍中。", + description: "HP变为一半时,为了回避危险,\n会退回到同行队伍中。", }, waterCompaction: { name: "遇水凝固", - description: "受到水属性的招式攻击时,\n防御会大幅提高。", + description: "受到水属性的招式攻击时,防御会\n大幅提高。", }, merciless: { name: "不仁不义", - description: "攻击中毒状态的对手时,\n必定会击中要害。", + description: "攻击中毒状态的对手时,必定会击\n中要害。", }, shieldsDown: { name: "界限盾壳", - description: "HP变为一半时,壳会坏掉,\n变得有攻击性。", + description: "HP变为一半时,壳会坏掉,变得\n有攻击性。", }, stakeout: { name: "蹲守", - description: "可以对替换出场的对手以2\n倍的伤害进行攻击。", + description: "可以对替换出场的对手以2倍的伤\n害进行攻击。", }, waterBubble: { name: "水泡", - description: "降低自己受到的火属性招式\n的威力,不会灼伤。", + description: "降低自己受到的火属性招式的威力\n,不会灼伤。", }, steelworker: { name: "钢能力者", @@ -803,7 +803,7 @@ export const ability: AbilityTranslationEntries = { }, berserk: { name: "怒火冲天", - description: "因对手的攻击HP变为一半\n时,特攻会提高。", + description: "因对手的攻击HP变为一半时,特\n攻会提高。", }, slushRush: { name: "拨雪", @@ -811,11 +811,11 @@ export const ability: AbilityTranslationEntries = { }, longReach: { name: "远隔", - description: "可以不接触对手就使出所有\n的招式。", + description: "可以不接触对手就使出所有的招式\n。", }, liquidVoice: { name: "湿润之声", - description: "所有的声音招式都变为水属\n性。", + description: "所有的声音招式都变为水属性。", }, triage: { name: "先行治疗", @@ -823,83 +823,83 @@ export const ability: AbilityTranslationEntries = { }, galvanize: { name: "电气皮肤", - description: "一般属性的招式会变为电属\n性。威力会少量提高。", + description: "一般属性的招式会变为电属性。威\n力会少量提高。", }, surgeSurfer: { name: "冲浪之尾", - description: "电气场地时,速度会变为2\n倍。", + description: "电气场地时,速度会变为2倍。", }, schooling: { name: "鱼群", - description: "HP多的时候会聚起来变强。\nHP剩余量变少时,群体\n会分崩离析。", + description: "HP多的时候会聚起来变强。HP\n剩余量变少时,群体会分崩离析。", }, disguise: { name: "画皮", - description: "通过画皮覆盖住身体,可以\n防住1次攻击。", + description: "通过画皮覆盖住身体,可以防住1\n次攻击。", }, battleBond: { name: "牵绊变身", - description: "打倒对手时,与训练家的牵\n绊会增强,自己的攻击、特\n攻、速度会提高。", + description: "打倒对手时,与训练家的牵绊会增\n强,自己的攻击、特攻、速度会提\n高。", }, powerConstruct: { name: "群聚变形", - description: "HP变为一半时,细胞们会\n赶来支援,变为完全体形态。", + description: "HP变为一半时,细胞们会赶来支\n援,变为完全体形态。", }, corrosion: { name: "腐蚀", - description: "可以使钢属性和毒属性的宝\n可梦也陷入中毒状态。", + description: "可以使钢属性和毒属性的宝可梦也\n陷入中毒状态。", }, comatose: { name: "绝对睡眠", - description: "总是半梦半醒的状态,绝对\n不会醒来。可以就这么睡着\n进行攻击。", + description: "总是半梦半醒的状态,绝对不会醒\n来。可以就这么睡着进行攻击。", }, queenlyMajesty: { name: "女王的威严", - description: "向对手施加威慑力,使其无\n法对我方使出先制招式。", + description: "向对手施加威慑力,使其无法对我\n方使出先制招式。", }, innardsOut: { name: "飞出的内在物", - description: "被对手打倒的时候,会给予\n对手相当于HP剩余量的伤\n害。", + description: "被对手打倒的时候,会给予对手相\n当于HP剩余量的伤害。", }, dancer: { name: "舞者", - description: "有谁使出跳舞招式时,自己\n也能就这么接着使出跳舞招\n式。", + description: "有谁使出跳舞招式时,自己也能就\n这么接着使出跳舞招式。", }, battery: { name: "蓄电池", - description: "会提高我方的特殊招式的威\n力。", + description: "会提高我方的特殊招式的威力。", }, fluffy: { name: "毛茸茸", - description: "会将对手所给予的接触类招\n式的伤害减半,但火属性招\n式的伤害会变为2倍。", + description: "会将对手所给予的接触类招式的伤\n害减半,但火属性招式的伤害会变\n为2倍。", }, dazzling: { name: "鲜艳之躯", - description: "让对手吓一跳,使其无法对\n我方使出先制招式。", + description: "让对手吓一跳,使其无法对我方使\n出先制招式。", }, soulHeart: { name: "魂心", - description: "宝可梦每次变为濒死状态时\n,特攻会提高。", + description: "宝可梦每次变为濒死状态时,特攻\n会提高。", }, tanglingHair: { name: "卷发", - description: "对于用攻击接触到自己的对\n手,会降低其速度。", + description: "对于用攻击接触到自己的对手,会\n降低其速度。", }, receiver: { name: "接球手", - description: "继承被打倒的同伴的特性,\n变为相同的特性。", + description: "继承被打倒的同伴的特性,变为相\n同的特性。", }, powerOfAlchemy: { name: "化学之力", - description: "继承被打倒的同伴的特性,\n变为相同的特性。", + description: "继承被打倒的同伴的特性,变为相\n同的特性。", }, beastBoost: { name: "异兽提升", - description: "打倒对手的时候,自己最高\n的那项能力会提高。", + description: "打倒对手的时候,自己最高的那项\n能力会提高。", }, rksSystem: { name: "AR系统", - description: "根据持有的存储碟,自己的\n属性会改变。", + description: "根据持有的存储碟,自己的属性会\n改变。", }, electricSurge: { name: "电气制造者", @@ -919,19 +919,19 @@ export const ability: AbilityTranslationEntries = { }, fullMetalBody: { name: "金属防护", - description: "不会因为对手的招式或特性\n而被降低能力。", + description: "不会因为对手的招式或特性而被降\n低能力。", }, shadowShield: { name: "幻影防守", - description: "HP全满时,受到的伤害会\n变少。", + description: "HP全满时,受到的伤害会变少。", }, prismArmor: { name: "棱镜装甲", - description: "受到效果绝佳的攻击时,可\n以减弱其威力。", + description: "受到效果绝佳的攻击时,可以减弱\n其威力。", }, neuroforce: { name: "脑核之力", - description: "效果绝佳的攻击,威力会变\n得更强。", + description: "效果绝佳的攻击,威力会变得更强\n。", }, intrepidSword: { name: "不挠之剑", @@ -943,39 +943,39 @@ export const ability: AbilityTranslationEntries = { }, libero: { name: "自由者", - description: "变为与自己使出的招式相同\n的属性。每次出场战斗仅生\n效一次。", + description: "变为与自己使出的招式相同的属性\n。每次出场战斗仅生效一次。", }, ballFetch: { name: "捡球", - description: "没有携带道具时,会拾取第\n1个投出后捕捉失败的精灵\n球。", + description: "没有携带道具时,会拾取第1个投\n出后捕捉失败的精灵球。", }, cottonDown: { name: "棉絮", - description: "受到攻击后撒下棉絮,降低\n除自己以外的所有宝可梦的\n速度。", + description: "受到攻击后撒下棉絮,降低除自己\n以外的所有宝可梦的速度。", }, propellerTail: { name: "螺旋尾鳍", - description: "能无视具有吸引对手招式效\n果的特性或招式的影响。", + description: "能无视具有吸引对手招式效果的特\n性或招式的影响。", }, mirrorArmor: { name: "镜甲", - description: "只反弹自己受到的能力降低\n效果。", + description: "只反弹自己受到的能力降低效果。", }, gulpMissile: { name: "一口导弹", - description: "冲浪或潜水时会叼来猎物。\n受到伤害时,会吐出猎物进\n行攻击。", + description: "冲浪或潜水时会叼来猎物。受到伤\n害时,会吐出猎物进行攻击。", }, stalwart: { name: "坚毅", - description: "能无视具有吸引对手招式效\n果的特性或招式的影响。", + description: "能无视具有吸引对手招式效果的特\n性或招式的影响。", }, steamEngine: { name: "蒸汽机", - description: "受到水属性或火属性的招式\n攻击时,速度会巨幅提高。", + description: "受到水属性或火属性的招式攻击时\n,速度会巨幅提高。", }, punkRock: { name: "庞克摇滚", - description: "声音招式的威力会提高。受\n到的声音招式伤害会减半。", + description: "声音招式的威力会提高。受到的声\n音招式伤害会减半。", }, sandSpit: { name: "吐沙", @@ -983,7 +983,7 @@ export const ability: AbilityTranslationEntries = { }, iceScales: { name: "冰鳞粉", - description: "由于有冰鳞粉的守护,受到\n的特殊攻击伤害会减半。", + description: "由于有冰鳞粉的守护,受到的特殊\n攻击伤害会减半。", }, ripen: { name: "熟成", @@ -991,47 +991,47 @@ export const ability: AbilityTranslationEntries = { }, iceFace: { name: "结冻头", - description: "头部的冰会代替自己承受物\n理攻击,但是样子会改变。\n下雪时,冰会恢复原状。", + description: "头部的冰会代替自己承受物理攻击\n,但是样子会改变。下雪时,冰会\n恢复原状。", }, powerSpot: { name: "能量点", - description: "只要处在相邻位置,招式的\n威力就会提高。", + description: "只要处在相邻位置,招式的威力就\n会提高。", }, mimicry: { name: "拟态", - description: "宝可梦的属性会根据场地的\n状态而变化。", + description: "宝可梦的属性会根据场地的状态而\n变化。", }, screenCleaner: { name: "除障", - description: "出场时,敌方和我方的光墙\n、反射壁和极光幕的效果会\n消失。", + description: "出场时,敌方和我方的光墙、反射\n壁和极光幕的效果会消失。", }, steelySpirit: { name: "钢之意志", - description: "我方的钢属性攻击威力会提\n高。", + description: "我方的钢属性攻击威力会提高。", }, perishBody: { name: "灭亡之躯", - description: "受到接触类招式攻击时,双\n方都会在3回合后变为濒死\n状态。替换后效果消失。", + description: "受到接触类招式攻击时,双方都会\n在3回合后变为濒死状态。替换后\n效果消失。", }, wanderingSpirit: { name: "游魂", - description: "与使用接触类招式攻击自己\n的宝可梦互换特性。", + description: "与使用接触类招式攻击自己的宝可\n梦互换特性。", }, gorillaTactics: { name: "一猩一意", - description: "虽然攻击会提高,但是只能\n使出一开始所选的招式。", + description: "虽然攻击会提高,但是只能使出一\n开始所选的招式。", }, neutralizingGas: { name: "化学变化气体", - description: "特性为化学变化气体的宝可\n梦在场时,场上所有宝可梦\n的特性效果都会消失或者无\n法生效。", + description: "特性为化学变化气体的宝可梦在场\n时,场上所有宝可梦的特性效果都\n会消失或者无法生效。", }, pastelVeil: { name: "粉彩护幕", - description: "自己和同伴都不会陷入中毒\n的异常状态。", + description: "自己和同伴都不会陷入中毒的异常\n状态。", }, hungerSwitch: { name: "饱了又饿", - description: "每回合结束时会在满腹花纹\n与空腹花纹之间交替改变样\n子。", + description: "每回合结束时会在满腹花纹与空腹\n花纹之间交替改变样子。", }, quickDraw: { name: "速击", @@ -1039,11 +1039,11 @@ export const ability: AbilityTranslationEntries = { }, unseenFist: { name: "无形拳", - description: "如果使出的是接触到对手的\n招式,就可以无视守护效果\n进行攻击。", + description: "如果使出的是接触到对手的招式,\n就可以无视守护效果进行攻击。", }, curiousMedicine: { name: "怪药", - description: "出场时会从贝壳撒药,将我\n方的能力变化复原。", + description: "出场时会从贝壳撒药,将我方的能\n力变化复原。", }, transistor: { name: "电晶体", @@ -1055,51 +1055,51 @@ export const ability: AbilityTranslationEntries = { }, chillingNeigh: { name: "苍白嘶鸣", - description: "打倒对手时会用冰冷的声音\n嘶鸣并提高攻击。", + description: "打倒对手时会用冰冷的声音嘶鸣并\n提高攻击。", }, grimNeigh: { name: "漆黑嘶鸣", - description: "打倒对手时会用恐怖的声音\n嘶鸣并提高特攻。", + description: "打倒对手时会用恐怖的声音嘶鸣并\n提高特攻。", }, asOneGlastrier: { name: "人马一体", - description: "兼备蕾冠王的紧张感和雪暴\n马的苍白嘶鸣这两种特性。", + description: "兼备蕾冠王的紧张感和雪暴马的苍\n白嘶鸣这两种特性。", }, asOneSpectrier: { name: "人马一体", - description: "兼备蕾冠王的紧张感和灵幽\n马的漆黑嘶鸣这两种特性。", + description: "兼备蕾冠王的紧张感和灵幽马的漆\n黑嘶鸣这两种特性。", }, lingeringAroma: { name: "甩不掉的气味", - description: "被对手接触到后,甩不掉的\n气味会沾上对手。", + description: "被对手接触到后,甩不掉的气味会\n沾上对手。", }, seedSower: { name: "掉出种子", - description: "受到攻击时,会将脚下变成\n青草场地。", + description: "受到攻击时,会将脚下变成青草场\n地。", }, thermalExchange: { name: "热交换", - description: "受到火属性的招式攻击时,\n攻击会提高,且不会陷入灼\n伤状态。", + description: "受到火属性的招式攻击时,攻击会\n提高,且不会陷入灼伤状态。", }, angerShell: { name: "愤怒甲壳", - description: "因被对手攻击而HP变为一\n半时,会因愤怒降低防御和\n特防。但攻击、特攻、速度\n会提高。", + description: "因被对手攻击而HP变为一半时,\n会因愤怒降低防御和特防。但攻击\n、特攻、速度会提高。", }, purifyingSalt: { name: "洁净之盐", - description: "因洁净的盐而不会陷入异常\n状态。会让幽灵属性的招式\n伤害减半。", + description: "因洁净的盐而不会陷入异常状态。\n会让幽灵属性的招式伤害减半。", }, wellBakedBody: { name: "焦香之躯", - description: "受到火属性的招式攻击时,\n不会受到伤害,而是会大幅\n提高防御。", + description: "受到火属性的招式攻击时,不会受\n到伤害,而是会大幅提高防御。", }, windRider: { name: "乘风", - description: "吹起了顺风或受到风的招式\n攻击时,不会受到伤害,而\n是会提高攻击。", + description: "吹起了顺风或受到风的招式攻击时\n,不会受到伤害,而是会提高攻击\n。", }, guardDog: { name: "看门犬", - description: "受到威吓时,攻击会提高。\n让替换宝可梦的招式和道具\n无效。", + description: "受到威吓时,攻击会提高。让替换\n宝可梦的招式和道具无效。", }, rockyPayload: { name: "搬岩", @@ -1107,63 +1107,63 @@ export const ability: AbilityTranslationEntries = { }, windPower: { name: "风力发电", - description: "受到风的招式攻击时,会变\n为充电状态。", + description: "受到风的招式攻击时,会变为充电\n状态。", }, zeroToHero: { name: "全能变身", - description: "回到同行队伍后,会变为全\n能形态。", + description: "回到同行队伍后,会变为全能形态\n。", }, commander: { name: "发号施令", - description: "出场时,若我方当中有吃吼\n霸,就会进入其口中,并从\n其口中发出指令。", + description: "出场时,若我方当中有吃吼霸,就\n会进入其口中,并从其口中发出指\n令。", }, electromorphosis: { name: "电力转换", - description: "受到伤害时,会变为充电状\n态。", + description: "受到伤害时,会变为充电状态。", }, protosynthesis: { name: "古代活性", - description: "携带着驱劲能量或天气为晴\n朗时,数值最高的能力会提\n高。", + description: "携带着驱劲能量或天气为晴朗时,\n数值最高的能力会提高。", }, quarkDrive: { name: "夸克充能", - description: "携带着驱劲能量或在电气场\n地上时,数值最高的能力会\n提高。", + description: "携带着驱劲能量或在电气场地上时\n,数值最高的能力会提高。", }, goodAsGold: { name: "黄金之躯", - description: "不会氧化的坚固黄金身躯不\n会受到对手的变化招式的影\n响。", + description: "不会氧化的坚固黄金身躯不会受到\n对手的变化招式的影响。", }, vesselOfRuin: { name: "灾祸之鼎", - description: "以能呼唤灾厄的鼎的力量降\n低除自己以外的宝可梦的特\n攻。", + description: "以能呼唤灾厄的鼎的力量降低除自\n己以外的宝可梦的特攻。", }, swordOfRuin: { name: "灾祸之剑", - description: "以能呼唤灾厄的剑的力量降\n低除自己以外的宝可梦的防\n御。", + description: "以能呼唤灾厄的剑的力量降低除自\n己以外的宝可梦的防御。", }, tabletsOfRuin: { name: "灾祸之简", - description: "以能呼唤灾厄的简的力量降\n低除自己以外的宝可梦的攻\n击。", + description: "以能呼唤灾厄的简的力量降低除自\n己以外的宝可梦的攻击。", }, beadsOfRuin: { name: "灾祸之玉", - description: "以能呼唤灾厄的勾玉的力量\n降低除自己以外的宝可梦的\n特防。", + description: "以能呼唤灾厄的勾玉的力量降低除\n自己以外的宝可梦的特防。", }, orichalcumPulse: { name: "绯红脉动", - description: "出场时,会将天气变为晴朗\n。日照强烈时,会通过古代\n的脉动升高攻击。", + description: "出场时,会将天气变为晴朗。日照\n强烈时,会通过古代的脉动升高攻\n击。", }, hadronEngine: { name: "强子引擎", - description: "出场时,会布下电气场地。\n处于电气场地时,会通过未\n来的机关升高特攻。", + description: "出场时,会布下电气场地。处于电\n气场地时,会通过未来的机关升高\n特攻。", }, opportunist: { name: "跟风", - description: "对手的能力提高时,自己也\n会趁机同样地提高能力。", + description: "对手的能力提高时,自己也会趁机\n同样地提高能力。", }, cudChew: { name: "反刍", - description: "吃了树果后,会在下一回合\n结束时从胃反刍出来再吃1\n次。", + description: "吃了树果后,会在下一回合结束时\n从胃反刍出来再吃1次。", }, sharpness: { name: "锋锐", @@ -1171,74 +1171,74 @@ export const ability: AbilityTranslationEntries = { }, supremeOverlord: { name: "大将", - description: "出场时,攻击和特攻会按照\n目前被打倒的同伴数量逐渐\n提升,被打倒越多,提升越\n多。", + description: "出场时,攻击和特攻会按照目前被\n打倒的同伴数量逐渐提升,被打倒\n越多,提升越多。", }, costar: { name: "同台共演", - description: "出场时,复制同伴的能力变\n化。", + description: "出场时,复制同伴的能力变化。", }, toxicDebris: { name: "毒满地", - description: "受到物理招式的伤害时,会\n在对手脚下散布毒菱。", + description: "受到物理招式的伤害时,会在对手\n脚下散布毒菱。", }, armorTail: { name: "尾甲", - description: "包裹头部的神秘尾巴使对手\n无法对我方使出先制招式。", + description: "包裹头部的神秘尾巴使对手无法对\n我方使出先制招式。", }, earthEater: { name: "食土", - description: "受到地面属性的招式攻击时\n,不会受到伤害,而是会得\n到回复。", + description: "受到地面属性的招式攻击时,不会\n受到伤害,而是会得到回复。", }, myceliumMight: { name: "菌丝之力", - description: "使出变化招式时,虽然行动\n必定会变慢,但能不受对手\n的特性妨碍。", + description: "使出变化招式时,虽然行动必定会\n变慢,但能不受对手的特性妨碍。", }, mindsEye: { name: "心眼", - description: "一般属性和格斗属性的招式\n可以击中幽灵属性的宝可梦。\n无视对手的闪避率的变化,\n且命中率不会被降低。", + description: "一般属性和格斗属性的招式可以击\n中幽灵属性的宝可梦。无视对手的\n闪避率的变化,且命中率不会被降\n低。", }, supersweetSyrup: { name: "甘露之蜜", - description: "首次出场时,会散发出甜腻\n的蜜的香味来降低对手的闪\n避率。", + description: "首次出场时,会散发出甜腻的蜜的\n香味来降低对手的闪避率。", }, hospitality: { name: "款待", - description: "出场时款待同伴,回复其少\n量HP。", + description: "出场时款待同伴,回复其少量HP\n。", }, toxicChain: { name: "毒锁链", - description: "凭借含有毒素的锁链的力量,\n有时能让被招式击中的对\n手陷入剧毒状态。", + description: "凭借含有毒素的锁链的力量,有时\n能让被招式击中的对手陷入剧毒状\n态。", }, embodyAspectTeal: { name: "面影辉映", - description: "将回忆映于心中,让碧草面\n具发出光辉,提高自己的速\n度。", + description: "将回忆映于心中,让碧草面具发出\n光辉,提高自己的速度。", }, embodyAspectWellspring: { name: "面影辉映", - description: "将回忆映于心中,让水井面\n具发出光辉,提高自己的特\n防。", + description: "将回忆映于心中,让水井面具发出\n光辉,提高自己的特防。", }, embodyAspectHearthflame: { name: "面影辉映", - description: "将回忆映于心中,让火灶面\n具发出光辉,提高自己的攻\n击。", + description: "将回忆映于心中,让火灶面具发出\n光辉,提高自己的攻击。", }, embodyAspectCornerstone: { name: "面影辉映", - description: "将回忆映于心中,让础石面\n具发出光辉,提高自己的防\n御。", + description: "将回忆映于心中,让础石面具发出\n光辉,提高自己的防御。", }, teraShift: { name: "太晶变形", - description: "出场时,会吸收周围的能量\n,变为太晶形态。", + description: "出场时,会吸收周围的能量,变为\n太晶形态。", }, teraShell: { name: "太晶甲壳", - description: "甲壳蕴藏着全部属性的力量\n,会将自己HP全满时受到\n的伤害全都变为效果不好。", + description: "甲壳蕴藏着全部属性的力量,会将\n自己HP全满时受到的伤害全都变\n为效果不好。", }, teraformZero: { name: "归零化境", - description: "太乐巴戈斯变为星晶形态时\n,蕴藏在它身上的力量会将\n天气和场地的影响全部归零。", + description: "太乐巴戈斯变为星晶形态时,蕴藏\n在它身上的力量会将天气和场地的\n影响全部归零。", }, poisonPuppeteer: { name: "毒傀儡", - description: "因桃歹郎的招式而陷入中毒\n状态的对手同时也会陷入混\n乱状态。", + description: "因桃歹郎的招式而陷入中毒状态的\n对手同时也会陷入混乱状态。", }, } as const; diff --git a/src/locales/zh_CN/battle.ts b/src/locales/zh_CN/battle.ts index f944a534b6c8..3fde016d5cc8 100644 --- a/src/locales/zh_CN/battle.ts +++ b/src/locales/zh_CN/battle.ts @@ -4,132 +4,133 @@ export const battle: SimpleTranslationEntries = { "bossAppeared": "{{bossName}} 出现了。", "trainerAppeared": "{{trainerName}}\n想要和你对战!", "trainerAppearedDouble": "{{trainerName}}\n想要和你对战!", - "trainerSendOut": "{{trainerName}} 派出了\n{{pokemonName}}!", - "singleWildAppeared": "一只野生 {{pokemonName}} 出现了!", - "multiWildAppeared": "野生的 {{pokemonName1}}\n和 {{pokemonName2}} 出现了!", - "playerComeBack": "回来吧, {{pokemonName}}!", - "trainerComeBack": "{{trainerName}} 收回了 {{pokemonName}}!", - "playerGo": "去吧! {{pokemonName}}!", - "trainerGo": "{{trainerName}} 派出了\n{{pokemonName}}!", + "trainerSendOut": "{{trainerName}}派出了\n{{pokemonName}}!", + "singleWildAppeared": "一只野生的{{pokemonName}}出现了!", + "multiWildAppeared": "野生的{{pokemonName1}}\n和{{pokemonName2}}出现了!", + "playerComeBack": "回来吧,{{pokemonName}}!", + "trainerComeBack": "{{trainerName}}收回了{{pokemonName}}!", + "playerGo": "去吧!{{pokemonName}}!", + "trainerGo": "{{trainerName}}派出了\n{{pokemonName}}!", "switchQuestion": "要更换\n{{pokemonName}}吗?", "trainerDefeated": "你击败了\n{{trainerName}}!", "moneyWon": "你赢得了\n₽{{moneyAmount}}!", - "pokemonCaught": "{{pokemonName}} 被抓住了!", + "pokemonCaught": "{{pokemonName}}被抓住了!", "addedAsAStarter": "增加了{{pokemonName}}作为\n一个新的基础宝可梦!", - "partyFull": "你的队伍已满员.是否放生其他宝可梦\n为 {{pokemonName}} 腾出空间?", + "partyFull": "你的队伍已满员。是否放生其他宝可梦\n为{{pokemonName}}腾出空间?", "pokemon": "宝可梦", "sendOutPokemon": "上吧!\n{{pokemonName}}!", "hitResultCriticalHit": "击中了要害!", "hitResultSuperEffective": "效果拔群!", "hitResultNotVeryEffective": "收效甚微…", - "hitResultNoEffect": "对 {{pokemonName}} 没有效果!!", + "hitResultNoEffect": "对{{pokemonName}}没有效果!!", "hitResultOneHitKO": "一击必杀!", "attackFailed": "但是失败了!", - "attackHitsCount": "击中 {{count}} 次!", + "attackHitsCount": "击中{{count}}次!", "rewardGain": "你获得了\n{{modifierName}}!", - "expGain": "{{pokemonName}} 获得了 {{exp}} 经验值!", - "levelUp": "{{pokemonName}} 升级到 Lv.{{level}}!", + "expGain": "{{pokemonName}}获得了 {{exp}} 点经验值!", + "levelUp": "{{pokemonName}}升级到 Lv.{{level}}!", "learnMove": "{{pokemonName}} 学会了 {{moveName}}!", - "learnMovePrompt": "{{pokemonName}} 想要学习 {{moveName}}。", - "learnMoveLimitReached": "但是,{{pokemonName}} 已经学会了\n四个技能", - "learnMoveReplaceQuestion": "要忘记一个技能并学习 {{moveName}} 吗?", - "learnMoveStopTeaching": "不再尝试学习 {{moveName}}?", - "learnMoveNotLearned": "{{pokemonName}} 没有学会 {{moveName}}。", + "learnMovePrompt": "{{pokemonName}}想要学习{{moveName}}。", + "learnMoveLimitReached": "但是,{{pokemonName}}已经学会了\n四个技能", + "learnMoveReplaceQuestion": "要忘记一个技能并学习{{moveName}}吗?", + "learnMoveStopTeaching": "不再尝试学习{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}}没有学会{{moveName}}。", "learnMoveForgetQuestion": "要忘记哪个技能?", - "learnMoveForgetSuccess": "{{pokemonName}} 忘记了\n如何使用 {{moveName}}。", + "learnMoveForgetSuccess": "{{pokemonName}}忘记了\n如何使用{{moveName}}。", "countdownPoof": "@d{32}1, @d{15}2 @d{15}… @d{15}… @d{15}@s{pb_bounce_1}空!", - "learnMoveAnd": "然后...", - "levelCapUp": "等级上限提升到 {{levelCap}}!", - "moveNotImplemented": "{{moveName}} 尚未实装,无法选择。", - "moveNoPP": "这个技能的 PP 用完了", - "moveDisabled": "{{moveName}} 被禁用!", + "learnMoveAnd": "然后……", + "levelCapUp": "等级上限提升到{{levelCap}}!", + "moveNotImplemented": "{{moveName}}尚未实装,无法选择。", + "moveNoPP": "这个技能的PP用完了", + "moveDisabled": "{{moveName}}被禁用!", "noPokeballForce": "一股无形的力量阻止了你使用精灵球。", "noPokeballTrainer": "你不能捕捉其他训练家的宝可梦!", "noPokeballMulti": "只能在剩下一只宝可梦时才能扔出精灵球!", - "noPokeballStrong": "目标宝可梦太强了,无法捕捉!你需要先\n削弱它!", + "noPokeballStrong": "目标宝可梦太强了,无法捕捉!\n你需要先削弱它!", "noEscapeForce": "一股无形的力量阻止你逃跑。", - "noEscapeTrainer": "你不能从训练家战斗中逃跑!", - "noEscapePokemon": "{{pokemonName}} 的 {{moveName}} 阻止了你 {{escapeVerb}}!", - "runAwaySuccess": "你成功逃脱了!", - "runAwayCannotEscape": "你无法逃脱!", + "noEscapeTrainer": "你不能从与训练家的战斗中逃跑!", + "noEscapePokemon": "{{pokemonName}}的{{moveName}}\n阻止了你{{escapeVerb}}!", + "runAwaySuccess": "成功逃走了!", + "runAwayCannotEscape": "无法逃走!", "escapeVerbSwitch": "切换", "escapeVerbFlee": "逃跑", - "notDisabled": "{{moveName}} 不再被禁用!", + "notDisabled": "{{moveName}}不再被禁用!", "turnEndHpRestore": "{{pokemonName}}的体力恢复了。", "hpIsFull": "{{pokemonName}}的体力已满!", "skipItemQuestion": "你确定要跳过拾取道具吗?", "eggHatching": "咦?", - "ivScannerUseQuestion": "对 {{pokemonName}} 使用个体值扫描仪?", - "wildPokemonWithAffix": "野生的 {{pokemonName}}", + "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "ivScannerUseQuestion": "对{{pokemonName}}使用个体值扫描仪?", + "wildPokemonWithAffix": "野生的{{pokemonName}}", "foePokemonWithAffix": "对手 {{pokemonName}}", - "useMove": "{{pokemonNameWithAffix}} 使用了 {{moveName}}!", - "drainMessage": "{{pokemonName}} 吸取了体力!", - "regainHealth": "{{pokemonName}} 回复了体力!", - "fainted": "{{pokemonNameWithAffix}} 倒下了!", - "statRose": "{{pokemonNameWithAffix}} 的 {{stats}} 提高了!", - "statSharplyRose": "{{pokemonNameWithAffix}} 的 {{stats}} 大幅提高了!", - "statRoseDrastically": "{{pokemonNameWithAffix}} 的 {{stats}} 极大幅提高了!", - "statWontGoAnyHigher": "{{pokemonNameWithAffix}} 的 {{stats}} 已经无法再提高了!", - "statFell": "{{pokemonNameWithAffix}} 的 {{stats}} 降低了!", - "statHarshlyFell": "{{pokemonNameWithAffix}} 的 {{stats}} 大幅降低了!", - "statSeverelyFell": "{{pokemonNameWithAffix}} 的 {{stats}} 极大幅降低了!", - "statWontGoAnyLower": "{{pokemonNameWithAffix}} 的 {{stats}} 已经无法再降低了!", - "ppReduced": "降低了 {{targetName}} 的\n{{moveName}} 的PP{{reduction}}点!", - "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}因攻击的反作用力而无法动弹!", + "useMove": "{{pokemonNameWithAffix}}使用了\n{{moveName}}!", + "drainMessage": "{{pokemonName}}\n吸取了体力!", + "regainHealth": "{{pokemonName}}\n回复了体力!", + "fainted": "{{pokemonNameWithAffix}}\n倒下了!", + "statRose": "{{pokemonNameWithAffix}}\n的{{stats}}提高了!", + "statSharplyRose": "{{pokemonNameWithAffix}}\n的{{stats}}大幅提高了!", + "statRoseDrastically": "{{pokemonNameWithAffix}}\n的{{stats}}极大幅提高了!", + "statWontGoAnyHigher": "{{pokemonNameWithAffix}}\n的{{stats}}已经无法再提高了!", + "statFell": "{{pokemonNameWithAffix}}\n的{{stats}}降低了!", + "statHarshlyFell": "{{pokemonNameWithAffix}}\n的{{stats}}大幅降低了!", + "statSeverelyFell": "{{pokemonNameWithAffix}}\n的{{stats}}极大幅降低了!", + "statWontGoAnyLower": "{{pokemonNameWithAffix}}\n的{{stats}}已经无法再降低了!", + "ppReduced": "降低了{{targetName}}的\n{{moveName}}的PP{{reduction}}点!", + "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}\n因攻击的反作用力而无法动弹!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!", - "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}摆脱了{{moveName}}!", - "battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}畏缩了!", - "battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}混乱了!", - "battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}的混乱解除了!", - "battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}已经混乱了。", - "battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}正在混乱中!", + "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}\n摆脱了{{moveName}}!", + "battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}\n畏缩了,无法使出招式!", + "battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}\n混乱了!", + "battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}\n的混乱解除了!", + "battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}\n已经混乱了。", + "battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}\n正在混乱中!", "battlerTagsConfusedLapseHurtItself": "不知所以地攻击了自己!", - "battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}不再受到同命的影响", - "battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} 和{{pokemonNameWithAffix2}} 同归于尽了!", - "battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}对{{sourcePokemonName}}着迷了!", - "battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}已经着迷了!", - "battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}对{{sourcePokemonName}}着迷中!", - "battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} 不会着迷!", - "battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} 治愈了着迷状态!", - "battlerTagsSeededOnAdd": "将种子种植在了{{pokemonNameWithAffix}}身上!", - "battlerTagsSeededLapse": "{{pokemonNameWithAffix}}被寄生种子吸取了体力!", - "battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}吸到了污泥浆!", - "battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}开始做恶梦了!", - "battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}已经被恶梦缠身!", - "battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}正被恶梦缠身!", - "battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}接受了再来一次!", - "battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}的再来一次状态解除了!", - "battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}摆出了帮助{{pokemonName}} 的架势!", - "battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}用扎根回复了体力!", - "battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}扎根了!", - "battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}用水流环包裹了自己!", - "battlerTagsAquaRingLapse": "{{moveName}}回复了{{pokemonName}}的体力!", - "battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}}产生睡意了!", - "battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}受到了{{moveName}}的伤害!", - "battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}被{{sourcePokemonName}}的 {{moveName}}紧紧束缚住了!", - "battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}被{{sourcePokemonName}}绑紧了!", - "battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}被困在了旋涡之中!", - "battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}}用贝壳夹住了{{pokemonName}}!", - "battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}被{{moveName}}困住了!", - "battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}被困在了熔岩风暴之中!", - "battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}被捕兽夹困住了!", - "battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}困住了{{pokemonNameWithAffix}}!", - "battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}受到了{{sourcePokemonNameWithAffix}}的死缠烂打!", - "battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}摆出了防守的架势!", - "battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}在攻击中保护了自己!", - "battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}摆出了挺住攻击的架势!", - "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}挺住了攻击!", - "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}挺住了攻击!", - "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}} 的灭亡计时变成{{turnCount}}了!", - "battlerTagsTruantLapse": "{{pokemonNameWithAffix}}正在偷懒!", - "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}无法拿出平时的水平!", - "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}恢复了平时的水平!", - "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}的{{statName}}升高了!", - "battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}的{{abilityName}}效果解除了!", - "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}现在干劲十足!", - "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}如释重负似地放松了下来。", - "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} 陷入了盐腌状态!", - "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} 受到了{{moveName}}的伤害!", - "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削减了自己的体力,并诅咒了{{pokemonName}}!", - "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}正受到诅咒!" + "battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}\n不再受到同命的影响", + "battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}}\n和{{pokemonNameWithAffix2}}同归于尽了!", + "battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}\n对{{sourcePokemonName}}着迷了!", + "battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}\n已经着迷了!", + "battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}\n对{{sourcePokemonName}}着迷中!", + "battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}}\n不会着迷!", + "battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}}\n治愈了着迷状态!", + "battlerTagsSeededOnAdd": "将种子种植在了\n{{pokemonNameWithAffix}}的身上!", + "battlerTagsSeededLapse": "{{pokemonNameWithAffix}}\n被寄生种子吸取了体力!", + "battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}\n吸到了污泥浆!", + "battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}\n开始做恶梦了!", + "battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}\n已经被恶梦缠身!", + "battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}\n正被恶梦缠身!", + "battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}\n接受了再来一次!", + "battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}\n的再来一次状态解除了!", + "battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}\n摆出了帮助{{pokemonName}}的架势!", + "battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}\n用扎根回复了体力!", + "battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}\n扎根了!", + "battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}\n用水流环包裹了自己!", + "battlerTagsAquaRingLapse": "{{moveName}}回复了\n{{pokemonName}}的体力!", + "battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}}\n产生睡意了!", + "battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}受到了\n{{moveName}}的伤害!", + "battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}被\n{{sourcePokemonName}}的{{moveName}}紧紧束缚住了!", + "battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}被\n{{sourcePokemonName}}绑紧了!", + "battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}\n被困在了旋涡之中!", + "battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}}用贝壳\n夹住了{{pokemonName}}!", + "battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}\n被{{moveName}}困住了!", + "battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}\n被困在了熔岩风暴之中!", + "battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}\n被捕兽夹困住了!", + "battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}困住了\n{{pokemonNameWithAffix}}!", + "battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}受到了\n{{sourcePokemonNameWithAffix}}的死缠烂打!", + "battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\n摆出了防守的架势!", + "battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\n在攻击中保护了自己!", + "battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}\n摆出了挺住攻击的架势!", + "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!", + "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!", + "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}\n的灭亡计时变成{{turnCount}}了!", + "battlerTagsTruantLapse": "{{pokemonNameWithAffix}}\n正在偷懒!", + "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}\n无法拿出平时的水平!", + "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}\n恢复了平时的水平!", + "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}的\n{{statName}}提高了!", + "battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}的\n{{abilityName}}效果解除了!", + "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}\n现在干劲十足!", + "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}\n如释重负似地放松了下来。", + "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}\n陷入了盐腌状态!", + "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}\n受到了{{moveName}}的伤害!", + "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削减了自己的体力,\n并诅咒了{{pokemonName}}!", + "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}\n正受到诅咒!" } as const; diff --git a/src/locales/zh_CN/bgm-name.ts b/src/locales/zh_CN/bgm-name.ts index 9b60449dff4a..70e969d7b5eb 100644 --- a/src/locales/zh_CN/bgm-name.ts +++ b/src/locales/zh_CN/bgm-name.ts @@ -62,7 +62,7 @@ export const bgmName: SimpleTranslationEntries = { "battle_legendary_calyrex": "剑盾「战斗!蕾冠王」", "battle_legendary_birds_galar": "剑盾「战斗!传说的鸟宝可梦」", "battle_legendary_ruinous": "朱紫「战斗!灾厄宝可梦」", - "battle_legendary_kor_mir": "SV Depths of Area Zero Battle", + "battle_legendary_kor_mir": "朱紫「战斗!第零区的宝可梦2」", "battle_legendary_loyal_three": "朱紫「战斗!宝伴」", "battle_legendary_ogerpon": "朱紫「战斗!厄鬼椪」", "battle_legendary_terapagos": "朱紫「战斗!太乐巴戈斯」", @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "空之探险队「神秘森林」", "ice_cave": "空之探险队「大冰山」", "island": "空之探险队「沿岸岩地」", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - 丛林", // The composer thinks about a more creative name + "laboratory": "Firel - 研究所", // The composer thinks about a more creative name "lake": "空之探险队「水晶洞窟」", "meadow": "空之探险队「天空顶端(森林)」", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - 城市", // The composer thinks about a more creative name "mountain": "空之探险队「角山」", "plains": "空之探险队「天空顶端(草原)」", "power_plant": "空之探险队「电气平原 深处」", "ruins": "空之探险队「封印岩地 深处」", "sea": "空之探险队「石滩洞窟」", - "seabed": "空之探险队「石滩洞窟 下层」", + "seabed": "Firel - 海底", // The composer thinks about a more creative name "slum": "空之探险队「天空顶端(岩场)」", "snowy_forest": "空之探险队「天空顶端(雪山)」", - "space": "空之探险队「财宝岩地」", + "space": "Firel - 太空", "swamp": "空之探险队「封闭之海」", "tall_grass": "空之探险队「浓雾森林」", "temple": "空之探险队「守护洞穴」", diff --git a/src/locales/zh_CN/challenges.ts b/src/locales/zh_CN/challenges.ts index 0a7156b2b8c8..4c1b523ef168 100644 --- a/src/locales/zh_CN/challenges.ts +++ b/src/locales/zh_CN/challenges.ts @@ -2,7 +2,7 @@ import { TranslationEntries } from "#app/interfaces/locales"; export const challenges: TranslationEntries = { "title": "适用挑战条件", - "illegalEvolution": "{{pokemon}} changed into an ineligble pokémon\nfor this challenge!", + "illegalEvolution": "{{pokemon}}变成了\n不符合此挑战条件的宝可梦!", "singleGeneration": { "name": "单一世代", "desc": "你只能使用第{{gen}}\n世代的宝可梦", diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 169c91535ed8..1d987eaec160 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/zh_CN/settings.js"; -import { common } from "#app/locales/zh_CN/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const zhCnConfig = { ability: ability, @@ -82,6 +83,7 @@ export const zhCnConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/zh_CN/dialogue.ts b/src/locales/zh_CN/dialogue.ts index 4db591fab9b1..6afbcd710640 100644 --- a/src/locales/zh_CN/dialogue.ts +++ b/src/locales/zh_CN/dialogue.ts @@ -2175,16 +2175,16 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "raihan_elite": { "encounter": { - 1: "风暴来临!你能挺过这场战斗吗!", - 2: "准备好面对风暴之眼!", + 1: "虽然没法打败丹帝夺冠,\n让我觉得很遗憾……$但是有你这家伙当对手,\b倒是也还不赖啊!", + 2: "准备好面对龙之风暴!", }, "victory": { - 1: "你战胜了风暴...难以置信!", - 2: "你完美地驾驭了风……打得好!", + 1: "你的气势就像暴风一样,\n连我都甘拜下风了!", + 2: "你完美地驾驭了我的风暴……打得好!", }, "defeat": { - 1: "又一场风暴袭来,又一场胜利!打得好!", - 2: "你被我的风暴卷入了!祝你下次好运!", + 1: "又一场龙之风暴袭来,又一场胜利!打得好!", + 2: "你被我的龙之风暴卷入了!祝你下次好运!", } }, "alder": { diff --git a/src/locales/zh_CN/modifier-type.ts b/src/locales/zh_CN/modifier-type.ts index c6322991a937..3ac9ac196cd5 100644 --- a/src/locales/zh_CN/modifier-type.ts +++ b/src/locales/zh_CN/modifier-type.ts @@ -17,7 +17,7 @@ export const modifierType: ModifierTypeTranslationEntries = { } }, "PokemonHpRestoreModifierType": { - description: "为一只宝可梦回复 {{restorePoints}} HP 或 {{restorePercent}}% HP,取较大值。", + description: "为一只宝可梦回复{{restorePoints}}HP或{{restorePercent}}%HP,取较大值。", extra: { "fully": "为一只宝可梦回复全部HP。", "fullyWithStatus": "为一只宝可梦回复全部HP并消除所有负面\n状态。", @@ -42,11 +42,11 @@ export const modifierType: ModifierTypeTranslationEntries = { } }, "PokemonPpUpModifierType": { - description: "为一只宝可梦的一个招式永久增加{{upPoints}}点\nPP每5点当前最大PP (最多3点)。", + description: "选择一只宝可梦的一个招式使用\n使其PP最大值提升基础的20% (最多3次)。", }, "PokemonNatureChangeModifierType": { name: "{{natureName}}薄荷", - description: "将一只宝可梦的性格改为{{natureName}}并为该宝可\n梦永久解锁该性格。", + description: "将一只宝可梦的性格改为{{natureName}}并为\n该宝可梦永久解锁该性格。", }, "DoubleBattleChanceBoosterModifierType": { description: "接下来的{{battleCount}}场战斗是双打的概率翻倍。", @@ -64,16 +64,16 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "所有成员宝可梦等级提升1级。", }, "PokemonBaseStatBoosterModifierType": { - description: "增加持有者的{{statName}}10%,个体值越高堆叠\n上限越高。", + description: "增加10%持有者的{{statName}},\n个体值越高堆叠上限越高。", }, "AllPokemonFullHpRestoreModifierType": { description: "所有宝可梦完全回复HP。", }, "AllPokemonFullReviveModifierType": { - description: "复活所有濒死宝可梦,完全回复HP。", + description: "复活所有濒死的宝可梦,\n并完全回复HP。", }, "MoneyRewardModifierType": { - description: "获得{{moneyMultiplier}}金钱 (₽{{moneyAmount}})。", + description: "获得{{moneyMultiplier}}金钱(₽{{moneyAmount}})。", extra: { "small": "少量", "moderate": "中等", @@ -90,7 +90,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "每场战斗获得的好感度提升50%。", }, "PokemonMoveAccuracyBoosterModifierType": { - description: "招式命中率增加{{accuracyAmount}} (最大100)。", + description: "招式命中率增加{{accuracyAmount}}(最大100)。", }, "PokemonMultiHitModifierType": { description: "攻击以40/25/12.5%的伤害造成2/3/4次伤害", @@ -114,29 +114,29 @@ export const modifierType: ModifierTypeTranslationEntries = { }, "TerastallizeModifierType": { name: "{{teraType}}太晶碎块", - description: "持有者获得{{teraType}}太晶化10场战斗。", + description: "持有者获得{{teraType}}太晶化,\n持续10场战斗。", }, "ContactHeldItemTransferChanceModifierType": { - description: "攻击时{{chancePercent}}%概率偷取对手物品。", + description: "攻击时{{chancePercent}}%概率\n偷取对手物品。", }, "TurnHeldItemTransferModifierType": { - description: "持有者每回合从对手那里获得一个持有的物品。", + description: "持有者每回合从对手那里\n获得一个持有的物品。", }, "EnemyAttackStatusEffectChanceModifierType": { description: "攻击时{{chancePercent}}%概率造成{{statusEffect}}。", }, "EnemyEndureChanceModifierType": { - description: "敌方增加{{chancePercent}}%的概率在本回合不会倒下。", + description: "敌方增加{{chancePercent}}%的概率\n在本回合不会倒下。", }, "RARE_CANDY": { name: "神奇糖果" }, "RARER_CANDY": { name: "超神奇糖果" }, - "MEGA_BRACELET": { name: "超级手镯", description: "能让携带着超级石战斗的宝可梦进行\n超级进化。" }, - "DYNAMAX_BAND": { name: "极巨腕带", description: "能让携带着极巨菇菇战斗的宝可梦进行\n极巨化。" }, - "TERA_ORB": { name: "太晶珠", description: "能让携带着太晶碎块战斗的宝可梦进行\n太晶化。" }, + "MEGA_BRACELET": { name: "MEGA手镯", description: "能让携带着MEGA石战斗的宝可梦\n进行MEGA进化。" }, + "DYNAMAX_BAND": { name: "极巨腕带", description: "能让携带着极巨菇菇战斗的宝可梦\n进行超极巨化。" }, + "TERA_ORB": { name: "太晶珠", description: "能让携带着太晶碎块战斗的宝可梦\n进行太晶化。" }, - "MAP": { name: "地图", description: "允许你在切换宝可梦群落时选择目的地。"}, + "MAP": { name: "地图", description: "有概率允许你在切换地区时\n选择目的地。"}, "POTION": { name: "伤药" }, "SUPER_POTION": { name: "好伤药" }, @@ -169,7 +169,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "MEMORY_MUSHROOM": { name: "回忆蘑菇", description: "回忆一个宝可梦已经遗忘的招式。" }, "EXP_SHARE": { name: "学习装置", description: "未参加对战的宝可梦获得20%的经验值。" }, - "EXP_BALANCE": { name: "均衡型学习装置", description: "队伍中的低级宝可梦获得更多经验值。" }, + "EXP_BALANCE": { name: "均衡型学习装置", description: "经验值会更多分给队伍中等级最低的宝可梦。" }, "OVAL_CHARM": { name: "圆形护符", description: "当多只宝可梦参与战斗,分别获得总经验值\n10%的额外经验值。" }, @@ -182,19 +182,19 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "安抚之铃" }, - "EVIOLITE": { name: "进化奇石", description: "进化的神奇石块。携带后,还能进化的宝可梦的 防御和特防就会提高。" }, + "EVIOLITE": { name: "进化奇石", description: "携带后,还能进化的宝可梦的\n防御和特防就会提高。" }, - "SOUL_DEW": { name: "心之水滴", description: "增加宝可梦性格影响10% (加算)。" }, + "SOUL_DEW": { name: "心之水滴", description: "增加10%宝可梦性格对数值的影响 (加算)。" }, "NUGGET": { name: "金珠" }, "BIG_NUGGET": { name: "巨大金珠" }, "RELIC_GOLD": { name: "古代金币" }, - "AMULET_COIN": { name: "护符金币", description: "金钱奖励增加20%。" }, + "AMULET_COIN": { name: "护符金币", description: "获得的金钱增加20%。" }, "GOLDEN_PUNCH": { name: "黄金拳头", description: "将50%造成的伤害转换为金钱。" }, - "COIN_CASE": { name: "代币盒", description: "每十场战斗, 获得自己金钱10%的利息。" }, + "COIN_CASE": { name: "代币盒", description: "每10场战斗, 获得自己金钱10%的利息。" }, - "LOCK_CAPSULE": { name: "上锁的容器", description: "允许在刷新物品时锁定物品稀有度。" }, + "LOCK_CAPSULE": { name: "上锁的容器", description: "允许在商店中刷新物品时,\n锁定物品的稀有度。" }, "GRIP_CLAW": { name: "紧缠钩爪" }, "WIDE_LENS": { name: "广角镜" }, @@ -206,14 +206,14 @@ export const modifierType: ModifierTypeTranslationEntries = { "BERRY_POUCH": { name: "树果袋", description: "使用树果时有30%的几率不会消耗树果。" }, - "FOCUS_BAND": { name: "气势头带", description: "携带该道具的宝可梦有10%几率在受到\n攻击而将陷入濒死状态时,保留1点HP不陷入濒死状态。" }, + "FOCUS_BAND": { name: "气势头带", description: "携带该道具的宝可梦有10%几率在受到攻击\n而将陷入濒死状态时,保留1点HP不陷入濒死状态。" }, "QUICK_CLAW": { name: "先制之爪", description: "有10%的几率无视速度优先使出招式\n(先制技能优先)。" }, - "KINGS_ROCK": { name: "王者之证", description: "携带该道具的宝可梦使用任意原本不会造成\n畏缩状态的攻击招式并造成伤害时,有\n10%几率使目标陷入畏缩状态。" }, + "KINGS_ROCK": { name: "王者之证", description: "使用任意原本不会造成畏缩状态的攻击,\n有10%几率使目标陷入畏缩状态。" }, - "LEFTOVERS": { name: "吃剩的东西", description: "携带该道具的宝可梦在每个回合结束时恢复\n最大HP的1/16。" }, - "SHELL_BELL": { name: "贝壳之铃", description: "携带该道具的宝可梦在攻击对方成功造成伤\n害时,携带者的HP会恢复其所造成伤害\n的1/8。" }, + "LEFTOVERS": { name: "吃剩的东西", description: "携带后,在每个回合结束时恢复\n最大HP的1/16。" }, + "SHELL_BELL": { name: "贝壳之铃", description: "携带后,在攻击对方成功造成伤害时,\n携带者的HP会恢复其所造成伤害的1/8。" }, "TOXIC_ORB": { name: "剧毒宝珠", description: "触碰后会放出毒的神奇宝珠。携带后,在战斗时会变成剧毒状态。" }, "FLAME_ORB": { name: "火焰宝珠", description: "触碰后会放出热量的神奇宝珠。携带后,在战斗时会变成灼伤状态。" }, @@ -223,13 +223,13 @@ export const modifierType: ModifierTypeTranslationEntries = { "SHINY_CHARM": { name: "闪耀护符", description: "显著增加野生宝可梦的闪光概率。" }, "ABILITY_CHARM": { name: "特性护符", description: "显著增加野生宝可梦有隐藏特性的概率。" }, - "IV_SCANNER": { name: "个体值探测器", description: "允许扫描野生宝可梦的个体值。可叠加,每多拥有一个多显示\n2项个体值. 最好的个体值优先显示。" }, + "IV_SCANNER": { name: "个体值探测器", description: "允许扫描野生宝可梦的个体值。每多拥有一个\n多显示两项个体值,优先显示最高项。" }, "DNA_SPLICERS": { name: "基因之楔" }, "MINI_BLACK_HOLE": { name: "迷你黑洞" }, - "GOLDEN_POKEBALL": { name: "黄金精灵球", description: "在每场战斗结束后增加一个额外物品选项。" }, + "GOLDEN_POKEBALL": { name: "黄金精灵球", description: "在每场战斗结束后,增加一个额外物品选项。" }, "ENEMY_DAMAGE_BOOSTER": { name: "伤害硬币", description: "造成5%额外伤害(乘算)。" }, "ENEMY_DAMAGE_REDUCTION": { name: "防御硬币", description: "受到2.5%更少伤害(乘算)。" }, @@ -242,7 +242,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "ENEMY_FUSED_CHANCE": { name: "融合硬币", description: "增加1%野生融合宝可梦出现概率。" }, }, SpeciesBoosterItem: { - "LIGHT_BALL": { name: "电气球", description: "让皮卡丘携带后,攻击和特攻就会 提高的神奇之球。" }, + "LIGHT_BALL": { name: "电气球", description: "让皮卡丘携带后,攻击和特攻就会提高的神奇之球。" }, "THICK_CLUB": { name: "粗骨头", description: "某种坚硬的骨头。让卡拉卡拉或嘎啦嘎啦携带后,攻击就会提高。" }, "METAL_POWDER": { name: "金属粉", description: "让百变怪携带后,防御就会提高的神奇粉末。非常细腻坚硬。" }, "QUICK_POWDER": { name: "速度粉", description: "让百变怪携带后,速度就会提高的神奇粉末。非常细腻坚硬。" } diff --git a/src/locales/zh_CN/move.ts b/src/locales/zh_CN/move.ts index e51addd0206b..f75ca001548c 100644 --- a/src/locales/zh_CN/move.ts +++ b/src/locales/zh_CN/move.ts @@ -671,7 +671,7 @@ export const move: MoveTranslationEntries = { }, "thief": { name: "小偷", - effect: "攻击的同时盗取道具。当自\n己携带道具时,不会去盗取", + effect: "攻击的同时盗取对手的道具。", }, "spiderWeb": { name: "蛛网", diff --git a/src/locales/zh_CN/splash-messages.ts b/src/locales/zh_CN/splash-messages.ts index 1cf59635551c..35551cf1163e 100644 --- a/src/locales/zh_CN/splash-messages.ts +++ b/src/locales/zh_CN/splash-messages.ts @@ -1,37 +1,37 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const splashMessages: SimpleTranslationEntries = { - "battlesWon": "胜利场数!", - "joinTheDiscord": "加入Discord!", - "infiniteLevels": "无限等级!", - "everythingStacks": "叠加一切!", - "optionalSaveScumming": "可选SL!", - "biomes": "35种生态!", - "openSource": "开源!", - "playWithSpeed": "五倍速游玩!", - "liveBugTesting": "即时漏洞测试!", - "heavyInfluence": "深受雨中冒险2影响!", - "pokemonRiskAndPokemonRain": "宝可梦雨中冒险!", - "nowWithMoreSalt": "增加33%的盐!", - "infiniteFusionAtHome": "家庭版无限融合!", - "brokenEggMoves": "超模的蛋招式!", - "magnificent": "华丽!", - "mubstitute": "替身!", - "thatsCrazy": "疯狂!", - "oranceJuice": "橙汁!", - "questionableBalancing": "值得质疑的平衡性!", - "coolShaders": "炫酷的着色器!", - "aiFree": "不含AI!", - "suddenDifficultySpikes": "突然上升的难度曲线!", - "basedOnAnUnfinishedFlashGame": "基于未完成的flash游戏!", - "moreAddictiveThanIntended": "比预期的更上瘾!", - "mostlyConsistentSeeds": "多数情况下一致的种子!", - "achievementPointsDontDoAnything": "成就点没有任何用处!", - "youDoNotStartAtLevel": "你不能从2000级开始!", - "dontTalkAboutTheManaphyEggIncident": "禁止谈论玛纳霏蛋事件!", - "alsoTryPokengine": "也试试Pokéngine!", - "alsoTryEmeraldRogue": "也试试绿宝石肉鸽!", - "alsoTryRadicalRed": "也试试激进红!", - "eeveeExpo": "伊布博览会!", - "ynoproject": "YNOproject!", + "battlesWon": "场胜利!", + "joinTheDiscord": "加入Discord!", + "infiniteLevels": "等级无限!", + "everythingStacks": "道具全部叠加!", + "optionalSaveScumming": "可用SL大法!", + "biomes": "35种地区!", + "openSource": "开源!", + "playWithSpeed": "请五倍速游玩!", + "liveBugTesting": "随时修复BUG!", + "heavyInfluence": "深受雨中冒险2影响!", + "pokemonRiskAndPokemonRain": "雨中宝可梦冒险!", + "nowWithMoreSalt": "增加33%的盐!", + "infiniteFusionAtHome": "无限融合家庭版!", + "brokenEggMoves": "超模的蛋招式!", + "magnificent": "华丽!", + "mubstitute": "替身!", + "thatsCrazy": "疯狂!", + "oranceJuice": "橙汁!", + "questionableBalancing": "游戏平衡性存疑!", + "coolShaders": "炫酷的配色!", + "aiFree": "不含AI!", + "suddenDifficultySpikes": "难度会突然飙升!", + "basedOnAnUnfinishedFlashGame": "基于未完成的Flash游戏!", + "moreAddictiveThanIntended": "比你想象的更上瘾!", + "mostlyConsistentSeeds": "随机数种子基本固定!", + "achievementPointsDontDoAnything": "成就点数没有任何用处!", + "youDoNotStartAtLevel": "你不能第一关就改个2000级!", + "dontTalkAboutTheManaphyEggIncident": "别再提玛纳霏蛋事件了!", + "alsoTryPokengine": "也玩玩看Pokéngine!", + "alsoTryEmeraldRogue": "也玩玩看绿宝石肉鸽!", + "alsoTryRadicalRed": "也玩玩看激进红!", + "eeveeExpo": "伊布博览会!", + "ynoproject": "Yume Nikki 页游项目!", } as const; diff --git a/src/locales/zh_CN/starter-select-ui-handler.ts b/src/locales/zh_CN/starter-select-ui-handler.ts index fe9e48be79dd..059358078f43 100644 --- a/src/locales/zh_CN/starter-select-ui-handler.ts +++ b/src/locales/zh_CN/starter-select-ui-handler.ts @@ -22,7 +22,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "nature": "性格:", "eggMoves": "蛋招式", "addToParty": "加入队伍", - "toggleIVs": "切换个体值", + "toggleIVs": "显示个体", "manageMoves": "管理招式", "manageNature": "管理性格", "useCandies": "使用糖果", diff --git a/src/locales/zh_CN/status-effect.ts b/src/locales/zh_CN/status-effect.ts new file mode 100644 index 000000000000..b9df1733bc1f --- /dev/null +++ b/src/locales/zh_CN/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "无", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "中毒", + description: "中毒", + obtain: "{{pokemonNameWithAffix}}中毒了!", + obtainSource: "{{pokemonNameWithAffix}}因{{sourceText}}中毒了!", + activation: "{{pokemonNameWithAffix}}受到了毒的伤害!", + overlap: "{{pokemonNameWithAffix}}已经中毒了!", + heal: "{{pokemonNameWithAffix}}中的毒彻底清除了!" + }, + toxic: { + name: "剧毒", + description: "中毒", + obtain: "{{pokemonNameWithAffix}}中了剧毒!", + obtainSource: "{{pokemonNameWithAffix}}因{{sourceText}}中了剧毒!", + activation: "{{pokemonNameWithAffix}}受到了毒的伤害!", + overlap: "{{pokemonNameWithAffix}}已经中毒了!", + heal: "{{pokemonNameWithAffix}}中的毒彻底清除了!" + }, + paralysis: { + name: "麻痹", + description: "麻痹", + obtain: "{{pokemonNameWithAffix}}麻痹了,很难使出招式!", + obtainSource: "{{pokemonNameWithAffix}}被{{sourceText}}麻痹了,很难使出招式!", + activation: "{{pokemonNameWithAffix}}因身体麻痹而无法行动!", + overlap: "{{pokemonNameWithAffix}}已经麻痹了!", + heal: "{{pokemonNameWithAffix}}的麻痹治愈了!" + }, + sleep: { + name: "睡眠", + description: "睡眠", + obtain: "{{pokemonNameWithAffix}}睡着了!", + obtainSource: "{{pokemonNameWithAffix}}因{{sourceText}}睡着了!", + activation: "{{pokemonNameWithAffix}}正在呼呼大睡。", + overlap: "{{pokemonNameWithAffix}}已经睡着了!", + heal: "{{pokemonNameWithAffix}}醒了!" + }, + freeze: { + name: "冰冻", + description: "冰冻", + obtain: "{{pokemonNameWithAffix}}冻住了!", + obtainSource: "{{pokemonNameWithAffix}}因{{sourceText}}冻住了!", + activation: "{{pokemonNameWithAffix}}因冻住了而无法行动!", + overlap: "{{pokemonNameWithAffix}}已经冻住了!", + heal: "{{pokemonNameWithAffix}}治愈了冰冻状态!" + }, + burn: { + name: "灼伤", + description: "灼伤", + obtain: "{{pokemonNameWithAffix}}被灼伤了!", + obtainSource: "{{pokemonNameWithAffix}}因{{sourceText}}被灼伤了!", + activation: "{{pokemonNameWithAffix}}受到了灼伤的伤害!", + overlap: "{{pokemonNameWithAffix}}已经被灼伤了!", + heal: "{{pokemonNameWithAffix}}的灼伤治愈了!" + }, +} as const; diff --git a/src/locales/zh_TW/battle.ts b/src/locales/zh_TW/battle.ts index 553e37dbab6a..077933c46d6c 100644 --- a/src/locales/zh_TW/battle.ts +++ b/src/locales/zh_TW/battle.ts @@ -51,6 +51,7 @@ export const battle: SimpleTranslationEntries = { "runAwayCannotEscape": "你無法逃脫!", "escapeVerbSwitch": "切換", "escapeVerbFlee": "逃跑", + "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "notDisabled": "{{moveName}} 不再被禁用!", "turnEndHpRestore": "{{pokemonName}}'s HP was restored.", "hpIsFull": "{{pokemonName}}'s\nHP is full!", @@ -128,5 +129,5 @@ export const battle: SimpleTranslationEntries = { "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} 陷入了鹽腌狀態!", "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} 受到了{{moveName}}的傷害!", "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削減了自己的體力,並詛咒了{{pokemonName}}!", - "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}正受到詛咒!" + "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}正受到詛咒!", } as const; diff --git a/src/locales/zh_TW/bgm-name.ts b/src/locales/zh_TW/bgm-name.ts index 77ebb69df326..ef15c6c6dcb6 100644 --- a/src/locales/zh_TW/bgm-name.ts +++ b/src/locales/zh_TW/bgm-name.ts @@ -101,20 +101,20 @@ export const bgmName: SimpleTranslationEntries = { "graveyard": "PMD EoS Mystifying Forest", "ice_cave": "PMD EoS Vast Ice Mountain", "island": "PMD EoS Craggy Coast", - //"jungle": "jungle", // The composer thinks about a more creative name - //"labratory": "labratory", // The composer thinks about a more creative name + "jungle": "Lmz - Jungle", // The composer thinks about a more creative name + "laboratory": "Firel - Laboratory", // The composer thinks about a more creative name "lake": "PMD EoS Crystal Cave", "meadow": "PMD EoS Sky Peak Forest", - //"metropolis": "metropolis", // The composer thinks about a more creative name + "metropolis": "Firel - Metropolis", // The composer thinks about a more creative name "mountain": "PMD EoS Mt. Horn", "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", "sea": "PMD EoS Brine Cave", - "seabed": "PMD EoS Lower Brine Cave", + "seabed": "Firel - Seabed", // The composer thinks about a more creative name "slum": "PMD EoS Sky Peak Coast", "snowy_forest": "PMD EoS Sky Peak Snowfield", - "space": "PMD EoS Fortune Ravine", + "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", "tall_grass": "PMD EoS Foggy Forest", "temple": "PMD EoS Aegis Cave", diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index 1cbb4e6e2c1f..688f3b47033b 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -35,13 +35,14 @@ import { pokemonInfoContainer } from "./pokemon-info-container"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; +import { statusEffect } from "./status-effect"; import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; -import { settings } from "#app/locales/zh_TW/settings.js"; -import { common } from "#app/locales/zh_TW/common.js"; +import { settings } from "./settings.js"; +import { common } from "./common.js"; export const zhTwConfig = { ability: ability, @@ -82,6 +83,7 @@ export const zhTwConfig = { settings: settings, splashMessages: splashMessages, starterSelectUiHandler: starterSelectUiHandler, + statusEffect: statusEffect, titles: titles, trainerClasses: trainerClasses, trainerNames: trainerNames, diff --git a/src/locales/zh_TW/status-effect.ts b/src/locales/zh_TW/status-effect.ts new file mode 100644 index 000000000000..1a402ac30fda --- /dev/null +++ b/src/locales/zh_TW/status-effect.ts @@ -0,0 +1,67 @@ +import { StatusEffectTranslationEntries } from "#app/interfaces/locales.js"; + +export const statusEffect: StatusEffectTranslationEntries = { + none: { + name: "None", + description: "", + obtain: "", + obtainSource: "", + activation: "", + overlap: "", + heal: "" + }, + poison: { + name: "Poison", + description: "poisoning", + obtain: "{{pokemonNameWithAffix}}\nwas poisoned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas poisoned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby poison!", + overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!", + heal: "{{pokemonNameWithAffix}} was\ncured of its poison!" + }, + toxic: { + name: "Toxic", + description: "poisoning", + obtain: "{{pokemonNameWithAffix}}\nwas badly poisoned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas badly poisoned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby poison!", + overlap: "{{pokemonNameWithAffix}} is\nalready poisoned!", + heal: "{{pokemonNameWithAffix}} was\ncured of its poison!" + }, + paralysis: { + name: "Paralysis", + description: "paralysis", + obtain: "{{pokemonNameWithAffix}} was paralyzed,\nIt may be unable to move!", + obtainSource: "{{pokemonNameWithAffix}} was paralyzed by {{sourceText}},\nIt may be unable to move!", + activation: "{{pokemonNameWithAffix}} is paralyzed!\nIt can't move!", + overlap: "{{pokemonNameWithAffix}} is\nalready paralyzed!", + heal: "{{pokemonNameWithAffix}} was\nhealed of paralysis!" + }, + sleep: { + name: "Sleep", + description: "sleep", + obtain: "{{pokemonNameWithAffix}}\nfell asleep!", + obtainSource: "{{pokemonNameWithAffix}}\nfell asleep from {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is fast asleep.", + overlap: "{{pokemonNameWithAffix}} is\nalready asleep!", + heal: "{{pokemonNameWithAffix}} woke up!" + }, + freeze: { + name: "Freeze", + description: "freezing", + obtain: "{{pokemonNameWithAffix}}\nwas frozen solid!", + obtainSource: "{{pokemonNameWithAffix}}\nwas frozen solid by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is\nfrozen solid!", + overlap: "{{pokemonNameWithAffix}} is\nalready frozen!", + heal: "{{pokemonNameWithAffix}} was\ndefrosted!" + }, + burn: { + name: "Burn", + description: "burn", + obtain: "{{pokemonNameWithAffix}}\nwas burned!", + obtainSource: "{{pokemonNameWithAffix}}\nwas burned by {{sourceText}}!", + activation: "{{pokemonNameWithAffix}} is hurt\nby its burn!", + overlap: "{{pokemonNameWithAffix}} is\nalready burned!", + heal: "{{pokemonNameWithAffix}} was\nhealed of its burn!" + }, +} as const; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index d8deee2b797e..d8ec0072bd4c 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1,6 +1,6 @@ import * as Modifiers from "./modifier"; import { AttackMove, allMoves } from "../data/move"; -import { PokeballType, getPokeballCatchMultiplier, getPokeballName } from "../data/pokeball"; +import { MAX_PER_TYPE_POKEBALLS, PokeballType, getPokeballCatchMultiplier, getPokeballName } from "../data/pokeball"; import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "../field/pokemon"; import { EvolutionItem, pokemonEvolutions } from "../data/pokemon-evolutions"; import { Stat, getStatName } from "../data/pokemon-stat"; @@ -45,7 +45,6 @@ type NewModifierFunc = (type: ModifierType, args: any[]) => Modifier; export class ModifierType { public id: string; - public generatorId: string; public localeKey: string; public iconImage: string; public group: string; @@ -102,7 +101,7 @@ export class ModifierType { if (!pool.hasOwnProperty(tier)) { continue; } - if (pool[tier].find(m => (m as WeightedModifierType).modifierType.id === (this.generatorId || this.id))) { + if (pool[tier].find(m => (m as WeightedModifierType).modifierType.id === this.id)) { return (this.tier = tier); } } @@ -133,7 +132,6 @@ export class ModifierTypeGenerator extends ModifierType { generateType(party: Pokemon[], pregenArgs?: any[]) { const ret = this.genTypeFunc(party, pregenArgs); if (ret) { - ret.generatorId = ret.id; ret.id = this.id; ret.setTier(this.tier); } @@ -554,7 +552,7 @@ export class SpeciesStatBoosterModifierType extends PokemonHeldItemModifierType const item = SpeciesStatBoosterModifierTypeGenerator.items[key]; super(`modifierType:SpeciesBoosterItem.${key}`, key.toLowerCase(), (type, args) => new Modifiers.SpeciesStatBoosterModifier(type, (args[0] as Pokemon).id, item.stats, item.multiplier, item.species)); - this.id = this.key = key; + this.key = key; } getPregenArgs(): any[] { @@ -1362,9 +1360,19 @@ interface ModifierPool { [tier: string]: WeightedModifierType[] } +/** + * Used to check if the player has max of a given ball type in Classic + * @param party The player's party, just used to access the scene + * @param ballType The {@linkcode PokeballType} being checked + * @returns boolean: true if the player has the maximum of a given ball type + */ +function hasMaximumBalls(party: Pokemon[], ballType: PokeballType): boolean { + return (party[0].scene.gameMode.isClassic && party[0].scene.pokeballCounts[ballType] >= MAX_PER_TYPE_POKEBALLS); +} + const modifierPool: ModifierPool = { [ModifierTier.COMMON]: [ - new WeightedModifierType(modifierTypes.POKEBALL, 6), + new WeightedModifierType(modifierTypes.POKEBALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.POKEBALL)) ? 0 : 6, 6), new WeightedModifierType(modifierTypes.RARE_CANDY, 2), new WeightedModifierType(modifierTypes.POTION, (party: Pokemon[]) => { const thresholdPartyMemberCount = Math.min(party.filter(p => (p.getInverseHp() >= 10 || p.getHpRatio() <= 0.875) && !p.isFainted()).length, 3); @@ -1390,7 +1398,7 @@ const modifierPool: ModifierPool = { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ - new WeightedModifierType(modifierTypes.GREAT_BALL, 6), + new WeightedModifierType(modifierTypes.GREAT_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.GREAT_BALL)) ? 0 : 6, 6), new WeightedModifierType(modifierTypes.PP_UP, 2), new WeightedModifierType(modifierTypes.FULL_HEAL, (party: Pokemon[]) => { const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { @@ -1461,13 +1469,13 @@ const modifierPool: ModifierPool = { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ - new WeightedModifierType(modifierTypes.ULTRA_BALL, 15), + new WeightedModifierType(modifierTypes.ULTRA_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.ULTRA_BALL)) ? 0 : 15, 15), new WeightedModifierType(modifierTypes.MAX_LURE, 4), new WeightedModifierType(modifierTypes.BIG_NUGGET, skipInLastClassicWaveOrDefault(12)), new WeightedModifierType(modifierTypes.PP_MAX, 3), new WeightedModifierType(modifierTypes.MINT, 4), new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * 4, 32), 32), - new WeightedModifierType(modifierTypes.AMULET_COIN, 3), + new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)), //new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => party.some(p => ((p.getSpeciesForm(true).speciesId in pokemonEvolutions) || (p.isFusion() && (p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))) && !p.getHeldItems().some(i => i instanceof Modifiers.EvolutionStatBoosterModifier)) ? 10 : 0), new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 12), new WeightedModifierType(modifierTypes.TOXIC_ORB, (party: Pokemon[]) => { @@ -1487,7 +1495,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), new WeightedModifierType(modifierTypes.TM_ULTRA, 11), new WeightedModifierType(modifierTypes.RARER_CANDY, 4), - new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2), + new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, skipInLastClassicWaveOrDefault(2)), new WeightedModifierType(modifierTypes.IV_SCANNER, 4), new WeightedModifierType(modifierTypes.EXP_CHARM, 8), new WeightedModifierType(modifierTypes.EXP_SHARE, 10), @@ -1499,7 +1507,7 @@ const modifierPool: ModifierPool = { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.ROGUE]: [ - new WeightedModifierType(modifierTypes.ROGUE_BALL, 16), + new WeightedModifierType(modifierTypes.ROGUE_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.ROGUE_BALL)) ? 0 : 16, 16), new WeightedModifierType(modifierTypes.RELIC_GOLD, skipInLastClassicWaveOrDefault(2)), new WeightedModifierType(modifierTypes.LEFTOVERS, 3), new WeightedModifierType(modifierTypes.SHELL_BELL, 3), @@ -1522,7 +1530,7 @@ const modifierPool: ModifierPool = { m.setTier(ModifierTier.ROGUE); return m; }), [ModifierTier.MASTER]: [ - new WeightedModifierType(modifierTypes.MASTER_BALL, 24), + new WeightedModifierType(modifierTypes.MASTER_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.MASTER_BALL)) ? 0 : 24, 24), new WeightedModifierType(modifierTypes.SHINY_CHARM, 14), new WeightedModifierType(modifierTypes.HEALING_CHARM, 18), new WeightedModifierType(modifierTypes.MULTI_LENS, 18), @@ -1732,7 +1740,7 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod let i = 0; pool[t].reduce((total: integer, modifierType: WeightedModifierType) => { const weightedModifierType = modifierType as WeightedModifierType; - const existingModifiers = party[0].scene.findModifiers(m => (m.type.generatorId || m.type.id) === weightedModifierType.modifierType.id, poolType === ModifierPoolType.PLAYER); + const existingModifiers = party[0].scene.findModifiers(m => m.type.id === weightedModifierType.modifierType.id, poolType === ModifierPoolType.PLAYER); const itemModifierType = weightedModifierType.modifierType instanceof ModifierTypeGenerator ? weightedModifierType.modifierType.generateType(party) : weightedModifierType.modifierType; @@ -1745,7 +1753,7 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod : weightedModifierType.weight as integer : 0; if (weightedModifierType.maxWeight) { - const modifierId = weightedModifierType.modifierType.generatorId || weightedModifierType.modifierType.id; + const modifierId = weightedModifierType.modifierType.id; tierModifierIds.push(modifierId); const outputWeight = useMaxWeightForOutput ? weightedModifierType.maxWeight : weight; modifierTableData[modifierId] = { weight: outputWeight, tier: parseInt(t), tierPercent: 0, totalPercent: 0 }; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 946b381b7f81..f7c234061793 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2,14 +2,14 @@ import * as ModifierTypes from "./modifier-type"; import { LearnMovePhase, LevelUpPhase, PokemonHealPhase } from "../phases"; import BattleScene from "../battle-scene"; import { getLevelTotalExp } from "../data/exp"; -import { PokeballType } from "../data/pokeball"; +import { MAX_PER_TYPE_POKEBALLS, PokeballType } from "../data/pokeball"; import Pokemon, { PlayerPokemon } from "../field/pokemon"; import { Stat } from "../data/pokemon-stat"; import { addTextObject, TextStyle } from "../ui/text"; import { Type } from "../data/type"; import { EvolutionPhase } from "../evolution-phase"; import { FusionSpeciesFormEvolution, pokemonEvolutions, pokemonPrevolutions } from "../data/pokemon-evolutions"; -import { getPokemonMessage } from "../messages"; +import {getPokemonMessage, getPokemonNameWithAffix} from "../messages"; import * as Utils from "../utils"; import { TempBattleStat } from "../data/temp-battle-stat"; import { getBerryEffectFunc, getBerryPredicate } from "../data/berry"; @@ -263,7 +263,7 @@ export class AddPokeballModifier extends ConsumableModifier { apply(args: any[]): boolean { const pokeballCounts = (args[0] as BattleScene).pokeballCounts; - pokeballCounts[this.pokeballType] = Math.min(pokeballCounts[this.pokeballType] + this.count, 99); + pokeballCounts[this.pokeballType] = Math.min(pokeballCounts[this.pokeballType] + this.count, MAX_PER_TYPE_POKEBALLS); return true; } @@ -2469,7 +2469,7 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier apply(args: any[]): boolean { const target = (args[0] as Pokemon); if (target.status && Phaser.Math.RND.realInRange(0, 1) < (this.chance * this.getStackCount())) { - target.scene.queueMessage(getPokemonMessage(target, getStatusEffectHealText(target.status.effect))); + target.scene.queueMessage(getStatusEffectHealText(target.status.effect, getPokemonNameWithAffix(target))); target.resetStatus(); target.updateInfo(); return true; diff --git a/src/phases.ts b/src/phases.ts index 263a16736710..9f069a60dc57 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2781,12 +2781,12 @@ export class MovePhase extends BattlePhase { } if (activated) { - this.scene.queueMessage(getPokemonMessage(this.pokemon, getStatusEffectActivationText(this.pokemon.status.effect))); + this.scene.queueMessage(getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); this.scene.unshiftPhase(new CommonAnimPhase(this.scene, this.pokemon.getBattlerIndex(), undefined, CommonAnim.POISON + (this.pokemon.status.effect - 1))); doMove(); } else { if (healed) { - this.scene.queueMessage(getPokemonMessage(this.pokemon, getStatusEffectHealText(this.pokemon.status.effect))); + this.scene.queueMessage(getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); this.pokemon.resetStatus(); this.pokemon.updateInfo(); } @@ -2923,6 +2923,7 @@ export class MoveEffectPhase extends PokemonPhase { const isProtected = !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target) && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType)); const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount); + const firstTarget = (moveHistoryEntry.result === MoveResult.PENDING); if (firstHit) { user.pushMoveHistory(moveHistoryEntry); @@ -2956,8 +2957,8 @@ export class MoveEffectPhase extends PokemonPhase { target.addTag(BattlerTagType.FLINCHED, undefined, this.move.moveId, user.id); } } - Utils.executeIf(!isProtected && !chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.HIT && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), - user, target, this.move.getMove()).then(() => { + Utils.executeIf(!isProtected && !chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.HIT + && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit) && (!attr.firstTargetOnly || firstTarget), user, target, this.move.getMove()).then(() => { return Utils.executeIf(!target.isFainted() || target.canApplyAbility(), () => applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult).then(() => { if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { user.scene.applyShuffledModifiers(this.scene, EnemyAttackStatusEffectChanceModifier, false, target); @@ -3505,7 +3506,7 @@ export class ObtainStatusEffectPhase extends PokemonPhase { } pokemon.updateInfo(true); new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect - 1), pokemon).play(this.scene, () => { - this.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectObtainText(this.statusEffect, this.sourceText))); + this.scene.queueMessage(getStatusEffectObtainText(this.statusEffect, getPokemonNameWithAffix(pokemon), this.sourceText)); if (pokemon.status.isPostTurn()) { this.scene.pushPhase(new PostTurnStatusEffectPhase(this.scene, this.battlerIndex)); } @@ -3514,7 +3515,7 @@ export class ObtainStatusEffectPhase extends PokemonPhase { return; } } else if (pokemon.status.effect === this.statusEffect) { - this.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectOverlapText(this.statusEffect))); + this.scene.queueMessage(getStatusEffectOverlapText(this.statusEffect, getPokemonNameWithAffix(pokemon))); } this.end(); } @@ -3534,7 +3535,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { applyAbAttrs(BlockStatusDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - this.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectActivationText(pokemon.status.effect))); + this.scene.queueMessage(getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); let damage: integer = 0; switch (pokemon.status.effect) { case StatusEffect.POISON: @@ -4756,7 +4757,7 @@ export class PokemonHealPhase extends CommonAnimPhase { } if (this.healStatus && lastStatusEffect && !hasMessage) { - this.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(lastStatusEffect))); + this.scene.queueMessage(getStatusEffectHealText(lastStatusEffect, getPokemonNameWithAffix(pokemon))); } if (!healOrDamage && !lastStatusEffect) { diff --git a/src/system/modifier-data.ts b/src/system/modifier-data.ts index d79206d89dfd..6f169280da1b 100644 --- a/src/system/modifier-data.ts +++ b/src/system/modifier-data.ts @@ -5,7 +5,6 @@ import { GeneratedPersistentModifierType, ModifierTypeGenerator, getModifierType export default class ModifierData { private player: boolean; private typeId: string; - private typeGeneratorId: string; private typePregenArgs: any[]; private args: any[]; private stackCount: integer; @@ -16,7 +15,6 @@ export default class ModifierData { const sourceModifier = source instanceof PersistentModifier ? source as PersistentModifier : null; this.player = player; this.typeId = sourceModifier ? sourceModifier.type.id : source.typeId; - this.typeGeneratorId = sourceModifier ? sourceModifier.type.generatorId : source.typeGeneratorId; if (sourceModifier) { if ("getPregenArgs" in source.type) { this.typePregenArgs = (source.type as GeneratedPersistentModifierType).getPregenArgs(); @@ -38,7 +36,6 @@ export default class ModifierData { try { let type = typeFunc(); type.id = this.typeId; - type.generatorId = this.typeGeneratorId; if (type instanceof ModifierTypeGenerator) { type = (type as ModifierTypeGenerator).generateType(this.player ? scene.getParty() : scene.getEnemyField(), this.typePregenArgs); diff --git a/src/test/abilities/parental_bond.test.ts b/src/test/abilities/parental_bond.test.ts index c4f8126d7a01..4401ee0d40a6 100644 --- a/src/test/abilities/parental_bond.test.ts +++ b/src/test/abilities/parental_bond.test.ts @@ -6,7 +6,7 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { getMovePosition } from "../utils/gameManagerUtils"; -import { CommandPhase, DamagePhase, MoveEffectPhase, MoveEndPhase, TurnEndPhase } from "#app/phases.js"; +import { BerryPhase, CommandPhase, DamagePhase, MoveEffectPhase, MoveEndPhase, TurnEndPhase } from "#app/phases.js"; import { BattleStat } from "#app/data/battle-stat.js"; import { Type } from "#app/data/type.js"; import { BattlerTagType } from "#app/enums/battler-tag-type.js"; @@ -63,7 +63,7 @@ describe("Abilities - Parental Bond", () => { const firstStrikeDamage = enemyStartingHp - enemyPokemon.hp; enemyStartingHp = enemyPokemon.hp; - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); const secondStrikeDamage = enemyStartingHp - enemyPokemon.hp; @@ -88,7 +88,7 @@ describe("Abilities - Parental Bond", () => { game.doAttack(getMovePosition(game.scene, 0, Moves.POWER_UP_PUNCH)); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.turnData.hitCount).toBe(2); expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(2); @@ -109,7 +109,7 @@ describe("Abilities - Parental Bond", () => { expect(enemyPokemon).not.toBe(undefined); game.doAttack(getMovePosition(game.scene, 0, Moves.BABY_DOLL_EYES)); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.summonData.battleStats[BattleStat.ATK]).toBe(-1); }, TIMEOUT @@ -134,7 +134,7 @@ describe("Abilities - Parental Bond", () => { vi.spyOn(game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.turnData.hitCount).toBe(2); }, TIMEOUT @@ -201,7 +201,7 @@ describe("Abilities - Parental Bond", () => { const enemyStartingHp = enemyPokemon.hp; game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.hp).toBe(enemyStartingHp - 80); }, TIMEOUT @@ -229,7 +229,7 @@ describe("Abilities - Parental Bond", () => { const playerDamage = playerStartingHp - leadPokemon.hp; - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.hp).toBe(enemyStartingHp - 4*playerDamage); }, TIMEOUT @@ -256,7 +256,7 @@ describe("Abilities - Parental Bond", () => { await game.phaseInterceptor.to(CommandPhase); game.doAttack(getMovePosition(game.scene, 1, Moves.EARTHQUAKE)); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); playerPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1)); }, TIMEOUT @@ -302,7 +302,7 @@ describe("Abilities - Parental Bond", () => { expect(leadPokemon.turnData.hitCount).toBe(2); // This test will time out if the user faints - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.hp).toBe(Math.floor(leadPokemon.getMaxHp()/2)); }, TIMEOUT @@ -329,7 +329,7 @@ describe("Abilities - Parental Bond", () => { expect(enemyPokemon.hp).toBeGreaterThan(0); expect(leadPokemon.isOfType(Type.FIRE)).toBe(true); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.isOfType(Type.FIRE)).toBe(false); }, TIMEOUT @@ -560,7 +560,7 @@ describe("Abilities - Parental Bond", () => { expect(leadPokemon.turnData.hitCount).toBe(2); expect(enemyPokemon.status?.effect).toBe(StatusEffect.SLEEP); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.status?.effect).toBeUndefined(); }, TIMEOUT @@ -582,7 +582,7 @@ describe("Abilities - Parental Bond", () => { game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.summonData.battleStats[BattleStat.ATK]).toBe(-1); }, TIMEOUT @@ -604,7 +604,7 @@ describe("Abilities - Parental Bond", () => { game.doAttack(getMovePosition(game.scene, 0, Moves.WATER_GUN)); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(1); }, TIMEOUT @@ -641,7 +641,7 @@ describe("Abilities - Parental Bond", () => { await game.phaseInterceptor.to(DamagePhase); const enemyFirstHitDamage = enemyStartingHp.map((hp, i) => hp - enemyPokemon[i].hp); - await game.phaseInterceptor.to(TurnEndPhase, false); + await game.phaseInterceptor.to(BerryPhase, false); enemyPokemon.forEach((p, i) => expect(enemyStartingHp[i] - p.hp).toBe(2*enemyFirstHitDamage[i])); diff --git a/src/test/abilities/volt_absorb.test.ts b/src/test/abilities/volt_absorb.test.ts index 8c629d8d771e..86efd1a9d93a 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/src/test/abilities/volt_absorb.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Volt Absorb", () => { vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(ability); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.DUSKULL); - vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NONE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); await game.startBattle(); diff --git a/src/test/account.spec.ts b/src/test/account.spec.ts new file mode 100644 index 000000000000..28e48ce9933e --- /dev/null +++ b/src/test/account.spec.ts @@ -0,0 +1,74 @@ +import * as battleScene from "#app/battle-scene.js"; +import { describe, expect, it, vi } from "vitest"; +import { initLoggedInUser, loggedInUser, updateUserInfo } from "../account"; +import * as utils from "../utils"; + +describe("account", () => { + describe("initLoggedInUser", () => { + it("should set loggedInUser to Guest and lastSessionSlot to -1", () => { + initLoggedInUser(); + + expect(loggedInUser.username).toBe("Guest"); + expect(loggedInUser.lastSessionSlot).toBe(-1); + }); + }); + + describe("updateUserInfo", () => { + it("should set loggedInUser to Guest if bypassLogin is true", async () => { + vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(true); + + const [success, status] = await updateUserInfo(); + + expect(success).toBe(true); + expect(status).toBe(200); + expect(loggedInUser.username).toBe("Guest"); + expect(loggedInUser.lastSessionSlot).toBe(-1); + }); + + it("should fetch user info from the API if bypassLogin is false", async () => { + vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(utils, "apiFetch").mockResolvedValue( + new Response( + JSON.stringify({ + username: "test", + lastSessionSlot: 99, + }), + { + status: 200, + } + ) + ); + + const [success, status] = await updateUserInfo(); + + expect(success).toBe(true); + expect(status).toBe(200); + expect(loggedInUser.username).toBe("test"); + expect(loggedInUser.lastSessionSlot).toBe(99); + }); + + it("should handle resolved API errors", async () => { + vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(utils, "apiFetch").mockResolvedValue( + new Response(null, { status: 401 }) + ); + + const [success, status] = await updateUserInfo(); + + expect(success).toBe(false); + expect(status).toBe(401); + }); + + it("should handle rejected API errors", async () => { + const consoleErrorSpy = vi.spyOn(console, "error"); + vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); + vi.spyOn(utils, "apiFetch").mockRejectedValue(new Error("Api failed!")); + + const [success, status] = await updateUserInfo(); + + expect(success).toBe(false); + expect(status).toBe(500); + expect(consoleErrorSpy).toHaveBeenCalled(); + }); + }); +}); diff --git a/src/test/items/toxic_orb.test.ts b/src/test/items/toxic_orb.test.ts index 6aacfd0e5e73..64dc3191d88a 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/src/test/items/toxic_orb.test.ts @@ -15,6 +15,7 @@ import {StatusEffect} from "#app/data/status-effect"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import i18next, { initI18n } from "#app/plugins/i18n"; describe("Items - Toxic orb", () => { @@ -48,6 +49,8 @@ describe("Items - Toxic orb", () => { }); it("TOXIC ORB", async() => { + initI18n(); + i18next.changeLanguage("en"); const moveToUse = Moves.GROWTH; await game.startBattle([ Species.MIGHTYENA, diff --git a/src/test/lokalisation/status-effect.test.ts b/src/test/lokalisation/status-effect.test.ts new file mode 100644 index 000000000000..4c79dacbff7d --- /dev/null +++ b/src/test/lokalisation/status-effect.test.ts @@ -0,0 +1,301 @@ +import { beforeAll, describe, expect, it, vi } from "vitest"; +import { + StatusEffect, + getStatusEffectActivationText, + getStatusEffectDescriptor, + getStatusEffectHealText, + getStatusEffectObtainText, + getStatusEffectOverlapText, +} from "#app/data/status-effect"; +import i18next, { ParseKeys } from "i18next"; +import { afterEach } from "node:test"; + +const tMock = (key: ParseKeys) => key; +const pokemonName = "PKM"; +const sourceText = "SOURCE"; + +describe("status-effect", () => { + beforeAll(() => { + i18next.init(); + }); + + describe("NONE", () => { + const statusEffect = StatusEffect.NONE; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:none.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:none.obtain"); + }); + + it("should return the source-obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName, sourceText); + expect(text).toBe("statusEffect:none.obtainSource"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).not.toBe("statusEffect:none.obtainSource"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:none.activation"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:none.overlap"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:none.heal"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:none.description"); + }); + }); + + describe("POISON", () => { + const statusEffect = StatusEffect.POISON; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:poison.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:poison.obtain"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:poison.activation"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:poison.description"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:poison.heal"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:poison.overlap"); + }); + }); + + describe("TOXIC", () => { + const statusEffect = StatusEffect.TOXIC; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:toxic.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:toxic.obtain"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:toxic.activation"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:toxic.description"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:toxic.heal"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:toxic.overlap"); + }); + }); + + describe("PARALYSIS", () => { + const statusEffect = StatusEffect.PARALYSIS; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:paralysis.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:paralysis.obtain"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:paralysis.activation"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:paralysis.description"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:paralysis.heal"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:paralysis.overlap"); + }); + }); + + describe("SLEEP", () => { + const statusEffect = StatusEffect.SLEEP; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:sleep.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:sleep.obtain"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:sleep.activation"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:sleep.description"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:sleep.heal"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:sleep.overlap"); + }); + }); + + describe("FREEZE", () => { + const statusEffect = StatusEffect.FREEZE; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:freeze.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:freeze.obtain"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:freeze.activation"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:freeze.description"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:freeze.heal"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:freeze.overlap"); + }); + }); + + describe("BURN", () => { + const statusEffect = StatusEffect.BURN; + + it("should return the obtain text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + + const text = getStatusEffectObtainText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:burn.obtain"); + + const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); + expect(emptySourceText).toBe("statusEffect:burn.obtain"); + }); + + it("should return the activation text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectActivationText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:burn.activation"); + }); + + it("should return the descriptor", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectDescriptor(statusEffect); + expect(text).toBe("statusEffect:burn.description"); + }); + + it("should return the heal text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectHealText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:burn.heal"); + }); + + it("should return the overlap text", () => { + vi.spyOn(i18next, "t").mockImplementation(tMock); + const text = getStatusEffectOverlapText(statusEffect, pokemonName); + expect(text).toBe("statusEffect:burn.overlap"); + }); + }); + + afterEach(() => { + vi.resetAllMocks(); + }); +}); diff --git a/src/test/moves/make_it_rain.test.ts b/src/test/moves/make_it_rain.test.ts index b46efecab79e..a700ff10aaea 100644 --- a/src/test/moves/make_it_rain.test.ts +++ b/src/test/moves/make_it_rain.test.ts @@ -13,6 +13,8 @@ import { getMovePosition } from "#app/test/utils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; import { BattleStat } from "#app/data/battle-stat.js"; +const TIMEOUT = 20 * 1000; + describe("Moves - Make It Rain", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -57,7 +59,7 @@ describe("Moves - Make It Rain", () => { await game.phaseInterceptor.to(MoveEndPhase); expect(playerPokemon[0].summonData.battleStats[BattleStat.SPATK]).toBe(-1); - }); + }, TIMEOUT); it("should apply effects even if the target faints", async () => { vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(1); // ensures the enemy will faint @@ -78,5 +80,27 @@ describe("Moves - Make It Rain", () => { expect(enemyPokemon.isFainted()).toBe(true); expect(playerPokemon.summonData.battleStats[BattleStat.SPATK]).toBe(-1); - }); + }, TIMEOUT); + + it("should reduce Sp. Atk. once after KOing two enemies", async () => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(1); // ensures the enemy will faint + + await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + + const playerPokemon = game.scene.getPlayerField(); + playerPokemon.forEach(p => expect(p).toBeDefined()); + + const enemyPokemon = game.scene.getEnemyField(); + enemyPokemon.forEach(p => expect(p).toBeDefined()); + + game.doAttack(getMovePosition(game.scene, 0, Moves.MAKE_IT_RAIN)); + + await game.phaseInterceptor.to(CommandPhase); + game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + + await game.phaseInterceptor.to(StatChangePhase); + + enemyPokemon.forEach(p => expect(p.isFainted()).toBe(true)); + expect(playerPokemon[0].summonData.battleStats[BattleStat.SPATK]).toBe(-1); + }, TIMEOUT); }); diff --git a/src/test/moves/purify.test.ts b/src/test/moves/purify.test.ts new file mode 100644 index 000000000000..21ebb3d55152 --- /dev/null +++ b/src/test/moves/purify.test.ts @@ -0,0 +1,81 @@ +import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { + MoveEndPhase, +} from "#app/phases"; +import {getMovePosition} from "#app/test/utils/gameManagerUtils"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon.js"; +import { Status, StatusEffect } from "#app/data/status-effect.js"; + +const TIMEOUT = 20 * 1000; + +describe("Moves - Purify", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.PYUKUMUKU); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(10); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.PURIFY, Moves.SIZZLY_SLIDE]); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(10); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + }); + + test( + "Purify heals opponent status effect and restores user hp", + async () => { + await game.startBattle(); + + const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon: PlayerPokemon = game.scene.getPlayerPokemon(); + + playerPokemon.hp = playerPokemon.getMaxHp() - 1; + enemyPokemon.status = new Status(StatusEffect.BURN); + + game.doAttack(getMovePosition(game.scene, 0, Moves.PURIFY)); + await game.phaseInterceptor.to(MoveEndPhase); + + expect(enemyPokemon.status).toBe(undefined); + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + }, + TIMEOUT + ); + + test( + "Purify does not heal if opponent doesnt have any status effect", + async () => { + await game.startBattle(); + + const playerPokemon: PlayerPokemon = game.scene.getPlayerPokemon(); + + playerPokemon.hp = playerPokemon.getMaxHp() - 1; + const playerInitialHp = playerPokemon.hp; + + game.doAttack(getMovePosition(game.scene, 0, Moves.PURIFY)); + await game.phaseInterceptor.to(MoveEndPhase); + + expect(playerPokemon.hp).toBe(playerInitialHp); + }, + TIMEOUT + ); + +}); diff --git a/src/test/moves/tidy_up.test.ts b/src/test/moves/tidy_up.test.ts new file mode 100644 index 000000000000..78b72492e04f --- /dev/null +++ b/src/test/moves/tidy_up.test.ts @@ -0,0 +1,122 @@ +import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { MoveEndPhase, TurnEndPhase } from "#app/phases"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { ArenaTagType } from "#app/enums/arena-tag-type.js"; +import { BattleStat } from "#app/data/battle-stat.js"; + + +describe("Moves - Tidy Up", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.FEEBAS); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TIDY_UP]); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(50); + }); + + it("spikes are cleared", async() => { + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPIKES, Moves.TIDY_UP]); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPIKES, Moves.SPIKES, Moves.SPIKES, Moves.SPIKES]); + await game.startBattle(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SPIKES)); + await game.phaseInterceptor.to(TurnEndPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.TIDY_UP)); + await game.phaseInterceptor.to(MoveEndPhase); + expect(game.scene.arena.getTag(ArenaTagType.SPIKES)).toBeUndefined(); + + }, 20000); + + it("stealth rocks are cleared", async() => { + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.STEALTH_ROCK, Moves.TIDY_UP]); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK]); + await game.startBattle(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.STEALTH_ROCK)); + await game.phaseInterceptor.to(TurnEndPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.TIDY_UP)); + await game.phaseInterceptor.to(MoveEndPhase); + expect(game.scene.arena.getTag(ArenaTagType.STEALTH_ROCK)).toBeUndefined(); + + }, 20000); + + it("toxic spikes are cleared", async() => { + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TOXIC_SPIKES, Moves.TIDY_UP]); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES]); + await game.startBattle(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.TOXIC_SPIKES)); + await game.phaseInterceptor.to(TurnEndPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.TIDY_UP)); + await game.phaseInterceptor.to(MoveEndPhase); + expect(game.scene.arena.getTag(ArenaTagType.TOXIC_SPIKES)).toBeUndefined(); + + }, 20000); + + it("sticky webs are cleared", async() => { + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.STICKY_WEB, Moves.TIDY_UP]); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB]); + + await game.startBattle(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.STICKY_WEB)); + await game.phaseInterceptor.to(TurnEndPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.TIDY_UP)); + await game.phaseInterceptor.to(MoveEndPhase); + expect(game.scene.arena.getTag(ArenaTagType.STICKY_WEB)).toBeUndefined(); + + }, 20000); + + it.skip("substitutes are cleared", async() => { + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SUBSTITUTE, Moves.TIDY_UP]); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]); + + await game.startBattle(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SUBSTITUTE)); + await game.phaseInterceptor.to(TurnEndPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.TIDY_UP)); + await game.phaseInterceptor.to(MoveEndPhase); + // TODO: check for subs here once the move is implemented + + }, 20000); + + it("user's stats are raised with no traps set", async() => { + await game.startBattle(); + const player = game.scene.getPlayerPokemon().summonData.battleStats; + + expect(player[BattleStat.ATK]).toBe(0); + expect(player[BattleStat.SPD]).toBe(0); + + game.doAttack(getMovePosition(game.scene, 0, Moves.TIDY_UP)); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player[BattleStat.ATK]).toBe(+1); + expect(player[BattleStat.SPD]).toBe(+1); + + }, 20000); + +}); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index db014432b136..687f65281b48 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -2077,9 +2077,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonHatchedIcon, this.pokemonHatchedCountText ].map(c => c.setVisible(false)); - } else if (species.speciesId === Species.ETERNATUS) { - this.pokemonHatchedIcon.setVisible(false); - this.pokemonHatchedCountText.setVisible(false); + this.pokemonFormText.setY(25); } else { this.pokemonCaughtHatchedContainer.setY(25); this.pokemonShinyIcon.setY(117); @@ -2091,6 +2089,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyCountText.setText(`x${this.scene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyCountText.setVisible(true); this.pokemonFormText.setVisible(true); + this.pokemonFormText.setY(42); this.pokemonHatchedIcon.setVisible(true); this.pokemonHatchedCountText.setVisible(true);