Compare commits

...

8 Commits

Author SHA1 Message Date
Lugiad
fb8cf781a5
[Localization] Correction to French ability.ts (#2102) 2024-06-11 16:22:08 -04:00
Tempoanon
64c0f2edb9
[Bug] Fix base stat totals of G-max Alcremie and Hisui mons (#2097) 2024-06-11 14:59:08 -04:00
Greenlamp2
a2d0a9ece3
[CI] Add GitHub Action to Run Silent Tests on PRs to Main (#2100)
* github action to run tests in PR

* fix the CI name

* fix comment

* fix divergent tests + cut some useless long test + fix versions
2024-06-11 19:13:02 +02:00
Xavion3
2aa6ec5031
Fix english names of monotype achievements (#2078) 2024-06-12 02:59:15 +10:00
Ei
a0a42ed2ec
[Localization] Added zh_TW translations for things that already have zh_CN translations (Dialogues, Challenges, Trainers) (#2099)
* Added a newer version of zh_TW dialogue translations

* Fixed several double battle dialogues in zh_TW

* Added missing trainers.ts zh_TW translations

* Added missing challenge.ts zh_TW translations
2024-06-11 12:40:55 -04:00
Opaque02
576bcf7bdb
[Bug] Fixed a bug where genderless and non shiny pokemon could show the new gender or shiny indicator (#2090) 2024-06-11 11:34:11 -04:00
sodam
00aaeb5947
[Localization][ko] #1761 Korean trainer dialogue (villain) (#2091)
* localized villain's dialogue

* Apply suggestions from code review

* Update src/locales/ko/dialogue.ts

Co-authored-by: returntoice <dieandbecome@gmail.com>

---------

Co-authored-by: returntoice <dieandbecome@gmail.com>
2024-06-11 11:15:37 -04:00
Greenlamp2
1263ff3af2
fix opponent triggering abilities each turn (#2094) 2024-06-11 17:13:40 +02:00
12 changed files with 1200 additions and 1242 deletions

31
.github/workflows/tests.yml vendored Normal file
View File

@ -0,0 +1,31 @@
name: Tests
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main # Trigger on push events to the main branch
pull_request:
branches:
- main # Trigger on pull request events targeting the main branch
jobs:
run-tests: # Define a job named "run-tests"
name: Run tests # Human-readable name for the job
runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job
steps:
- name: Check out Git repository # Step to check out the repository
uses: actions/checkout@v4 # Use the checkout action version 4
- name: Set up Node.js # Step to set up Node.js environment
uses: actions/setup-node@v4 # Use the setup-node action version 4
with:
node-version: 20 # Specify Node.js version 20
- name: Install Node.js dependencies # Step to install Node.js dependencies
run: npm ci # Use 'npm ci' to install dependencies
- name: tests # Step to run tests
run: npm run test:silent

View File

@ -2321,7 +2321,7 @@ export function initSpecies() {
new PokemonForm("Ruby Swirl", "ruby-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Ruby Swirl", "ruby-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true),
new PokemonForm("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true),
new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true),
new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 595, 80, 70, 85, 140, 150, 65, 100, 50, 173), new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 595, 85, 70, 85, 140, 150, 65, 100, 50, 173),
), ),
new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", Type.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", Type.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false),
new PokemonSpecies(Species.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", Type.ELECTRIC, null, 0.3, 1, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", Type.ELECTRIC, null, 0.3, 1, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false),
@ -2617,19 +2617,19 @@ export function initSpecies() {
), ),
new PokemonSpecies(Species.GALAR_YAMASK, 8, false, false, false, "Spirit Pokémon", Type.GROUND, Type.GHOST, 0.5, 1.5, Abilities.WANDERING_SPIRIT, Abilities.NONE, Abilities.NONE, 303, 38, 55, 85, 30, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GALAR_YAMASK, 8, false, false, false, "Spirit Pokémon", Type.GROUND, Type.GHOST, 0.5, 1.5, Abilities.WANDERING_SPIRIT, Abilities.NONE, Abilities.NONE, 303, 38, 55, 85, 30, 65, 30, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false),
new PokemonSpecies(Species.GALAR_STUNFISK, 8, false, false, false, "Trap Pokémon", Type.GROUND, Type.STEEL, 0.7, 20.5, Abilities.MIMICRY, Abilities.NONE, Abilities.NONE, 471, 109, 81, 99, 66, 84, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GALAR_STUNFISK, 8, false, false, false, "Trap Pokémon", Type.GROUND, Type.STEEL, 0.7, 20.5, Abilities.MIMICRY, Abilities.NONE, Abilities.NONE, 471, 109, 81, 99, 66, 84, 32, 75, 70, 165, GrowthRate.MEDIUM_FAST, 50, false),
new PokemonSpecies(Species.HISUI_GROWLITHE, 8, false, false, false, "Puppy Pokémon", Type.FIRE, Type.ROCK, 0.8, 22.7, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.ROCK_HEAD, 350, 60, 85, 45, 65, 50, 55, 190, 50, 70, GrowthRate.SLOW, 75, false), new PokemonSpecies(Species.HISUI_GROWLITHE, 8, false, false, false, "Puppy Pokémon", Type.FIRE, Type.ROCK, 0.8, 22.7, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.ROCK_HEAD, 350, 60, 75, 45, 65, 50, 55, 190, 50, 70, GrowthRate.SLOW, 75, false),
new PokemonSpecies(Species.HISUI_ARCANINE, 8, false, false, false, "Legendary Pokémon", Type.FIRE, Type.ROCK, 2, 168, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.ROCK_HEAD, 555, 95, 115, 80, 95, 80, 90, 85, 50, 194, GrowthRate.SLOW, 75, false), new PokemonSpecies(Species.HISUI_ARCANINE, 8, false, false, false, "Legendary Pokémon", Type.FIRE, Type.ROCK, 2, 168, Abilities.INTIMIDATE, Abilities.FLASH_FIRE, Abilities.ROCK_HEAD, 555, 95, 115, 80, 95, 80, 90, 85, 50, 194, GrowthRate.SLOW, 75, false),
new PokemonSpecies(Species.HISUI_VOLTORB, 8, false, false, false, "Ball Pokémon", Type.ELECTRIC, Type.GRASS, 0.5, 13, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 80, 66, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.HISUI_VOLTORB, 8, false, false, false, "Ball Pokémon", Type.ELECTRIC, Type.GRASS, 0.5, 13, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 80, 66, GrowthRate.MEDIUM_FAST, null, false),
new PokemonSpecies(Species.HISUI_ELECTRODE, 8, false, false, false, "Ball Pokémon", Type.ELECTRIC, Type.GRASS, 1.2, 81, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.HISUI_ELECTRODE, 8, false, false, false, "Ball Pokémon", Type.ELECTRIC, Type.GRASS, 1.2, 81, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false),
new PokemonSpecies(Species.HISUI_TYPHLOSION, 8, false, false, false, "Volcano Pokémon", Type.FIRE, Type.GHOST, 1.6, 69.8, Abilities.BLAZE, Abilities.NONE, Abilities.FRISK, 534, 83, 84, 78, 119, 85, 95, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.HISUI_TYPHLOSION, 8, false, false, false, "Volcano Pokémon", Type.FIRE, Type.GHOST, 1.6, 69.8, Abilities.BLAZE, Abilities.NONE, Abilities.FRISK, 534, 73, 84, 78, 119, 85, 95, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.HISUI_QWILFISH, 8, false, false, false, "Balloon Pokémon", Type.DARK, Type.POISON, 0.5, 3.9, Abilities.POISON_POINT, Abilities.SWIFT_SWIM, Abilities.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.HISUI_QWILFISH, 8, false, false, false, "Balloon Pokémon", Type.DARK, Type.POISON, 0.5, 3.9, Abilities.POISON_POINT, Abilities.SWIFT_SWIM, Abilities.INTIMIDATE, 440, 65, 95, 85, 55, 55, 85, 45, 50, 88, GrowthRate.MEDIUM_FAST, 50, false),
new PokemonSpecies(Species.HISUI_SNEASEL, 8, false, false, false, "Sharp Claw Pokémon", Type.FIGHTING, Type.POISON, 0.9, 27, Abilities.INNER_FOCUS, Abilities.KEEN_EYE, Abilities.PICKPOCKET, 430, 55, 95, 55, 35, 85, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true), new PokemonSpecies(Species.HISUI_SNEASEL, 8, false, false, false, "Sharp Claw Pokémon", Type.FIGHTING, Type.POISON, 0.9, 27, Abilities.INNER_FOCUS, Abilities.KEEN_EYE, Abilities.PICKPOCKET, 430, 55, 95, 55, 35, 75, 115, 60, 35, 86, GrowthRate.MEDIUM_SLOW, 50, true),
new PokemonSpecies(Species.HISUI_SAMUROTT, 8, false, false, false, "Formidable Pokémon", Type.WATER, Type.DARK, 1.5, 58.2, Abilities.TORRENT, Abilities.NONE, Abilities.SHARPNESS, 528, 90, 108, 80, 100, 65, 85, 45, 80, 238, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.HISUI_SAMUROTT, 8, false, false, false, "Formidable Pokémon", Type.WATER, Type.DARK, 1.5, 58.2, Abilities.TORRENT, Abilities.NONE, Abilities.SHARPNESS, 528, 90, 108, 80, 100, 65, 85, 45, 80, 238, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.HISUI_LILLIGANT, 8, false, false, false, "Flowering Pokémon", Type.GRASS, Type.FIGHTING, 1.2, 19.2, Abilities.CHLOROPHYLL, Abilities.HUSTLE, Abilities.LEAF_GUARD, 480, 80, 105, 75, 50, 75, 105, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false), new PokemonSpecies(Species.HISUI_LILLIGANT, 8, false, false, false, "Flowering Pokémon", Type.GRASS, Type.FIGHTING, 1.2, 19.2, Abilities.CHLOROPHYLL, Abilities.HUSTLE, Abilities.LEAF_GUARD, 480, 70, 105, 75, 50, 75, 105, 75, 50, 168, GrowthRate.MEDIUM_FAST, 0, false),
new PokemonSpecies(Species.HISUI_ZORUA, 8, false, false, false, "Tricky Fox Pokémon", Type.NORMAL, Type.GHOST, 0.7, 12.5, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 330, 35, 60, 40, 85, 40, 80, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.HISUI_ZORUA, 8, false, false, false, "Tricky Fox Pokémon", Type.NORMAL, Type.GHOST, 0.7, 12.5, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 330, 35, 60, 40, 85, 40, 70, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.HISUI_ZOROARK, 8, false, false, false, "Illusion Fox Pokémon", Type.NORMAL, Type.GHOST, 1.6, 83, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 510, 55, 100, 60, 125, 60, 110, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.HISUI_ZOROARK, 8, false, false, false, "Illusion Fox Pokémon", Type.NORMAL, Type.GHOST, 1.6, 83, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 510, 55, 100, 60, 125, 60, 110, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false),
new PokemonSpecies(Species.HISUI_BRAVIARY, 8, false, false, false, "Valiant Pokémon", Type.PSYCHIC, Type.FLYING, 1.7, 43.4, Abilities.KEEN_EYE, Abilities.SHEER_FORCE, Abilities.TINTED_LENS, 510, 110, 83, 80, 112, 70, 65, 60, 50, 179, GrowthRate.SLOW, 100, false), new PokemonSpecies(Species.HISUI_BRAVIARY, 8, false, false, false, "Valiant Pokémon", Type.PSYCHIC, Type.FLYING, 1.7, 43.4, Abilities.KEEN_EYE, Abilities.SHEER_FORCE, Abilities.TINTED_LENS, 510, 110, 83, 70, 112, 70, 65, 60, 50, 179, GrowthRate.SLOW, 100, false),
new PokemonSpecies(Species.HISUI_SLIGGOO, 8, false, false, false, "Soft Tissue Pokémon", Type.STEEL, Type.DRAGON, 0.7, 68.5, Abilities.SAP_SIPPER, Abilities.SHELL_ARMOR, Abilities.GOOEY, 452, 58, 85, 83, 83, 113, 40, 45, 35, 158, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.HISUI_SLIGGOO, 8, false, false, false, "Soft Tissue Pokémon", Type.STEEL, Type.DRAGON, 0.7, 68.5, Abilities.SAP_SIPPER, Abilities.SHELL_ARMOR, Abilities.GOOEY, 452, 58, 75, 83, 83, 113, 40, 45, 35, 158, GrowthRate.SLOW, 50, false),
new PokemonSpecies(Species.HISUI_GOODRA, 8, false, false, false, "Dragon Pokémon", Type.STEEL, Type.DRAGON, 1.7, 334.1, Abilities.SAP_SIPPER, Abilities.SHELL_ARMOR, Abilities.GOOEY, 600, 80, 100, 100, 110, 150, 60, 45, 35, 270, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.HISUI_GOODRA, 8, false, false, false, "Dragon Pokémon", Type.STEEL, Type.DRAGON, 1.7, 334.1, Abilities.SAP_SIPPER, Abilities.SHELL_ARMOR, Abilities.GOOEY, 600, 80, 100, 100, 110, 150, 60, 45, 35, 270, GrowthRate.SLOW, 50, false),
new PokemonSpecies(Species.HISUI_AVALUGG, 8, false, false, false, "Iceberg Pokémon", Type.ICE, Type.ROCK, 1.4, 262.4, Abilities.STRONG_JAW, Abilities.ICE_BODY, Abilities.STURDY, 514, 95, 127, 184, 34, 36, 38, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.HISUI_AVALUGG, 8, false, false, false, "Iceberg Pokémon", Type.ICE, Type.ROCK, 1.4, 262.4, Abilities.STRONG_JAW, Abilities.ICE_BODY, Abilities.STURDY, 514, 95, 127, 184, 34, 36, 38, 55, 50, 180, GrowthRate.MEDIUM_FAST, 50, false),
new PokemonSpecies(Species.HISUI_DECIDUEYE, 8, false, false, false, "Arrow Quill Pokémon", Type.GRASS, Type.FIGHTING, 1.6, 37, Abilities.OVERGROW, Abilities.NONE, Abilities.SCRAPPY, 530, 88, 112, 80, 95, 95, 60, 45, 50, 239, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.HISUI_DECIDUEYE, 8, false, false, false, "Arrow Quill Pokémon", Type.GRASS, Type.FIGHTING, 1.6, 37, Abilities.OVERGROW, Abilities.NONE, Abilities.SCRAPPY, 530, 88, 112, 80, 95, 95, 60, 45, 50, 239, GrowthRate.MEDIUM_SLOW, 87.5, false),

View File

@ -211,58 +211,58 @@ export const PGMachv: AchievementTranslationEntries = {
description: "Complete the {{type}} monotype challenge.", description: "Complete the {{type}} monotype challenge.",
}, },
"MONO_NORMAL": { "MONO_NORMAL": {
name: "Mono NORMAL", name: "Extra Ordinary",
}, },
"MONO_FIGHTING": { "MONO_FIGHTING": {
name: "I Know Kung Fu", name: "I Know Kung Fu",
}, },
"MONO_FLYING": { "MONO_FLYING": {
name: "Mono FLYING", name: "Angry Birds",
}, },
"MONO_POISON": { "MONO_POISON": {
name: "Kanto's Favourite", name: "Kanto's Favourite",
}, },
"MONO_GROUND": { "MONO_GROUND": {
name: "Mono GROUND", name: "Forecast: Earthquakes",
}, },
"MONO_ROCK": { "MONO_ROCK": {
name: "Brock Hard", name: "Brock Hard",
}, },
"MONO_BUG": { "MONO_BUG": {
name: "Sting Like A Beedrill", name: "You Like Jazz?",
}, },
"MONO_GHOST": { "MONO_GHOST": {
name: "Who you gonna call?", name: "Who You Gonna Call?",
}, },
"MONO_STEEL": { "MONO_STEEL": {
name: "Mono STEEL", name: "Iron Giant",
}, },
"MONO_FIRE": { "MONO_FIRE": {
name: "Mono FIRE", name: "I Cast Fireball!",
}, },
"MONO_WATER": { "MONO_WATER": {
name: "When It Rains, It Pours", name: "When It Rains, It Pours",
}, },
"MONO_GRASS": { "MONO_GRASS": {
name: "Mono GRASS", name: "Can't Touch This",
}, },
"MONO_ELECTRIC": { "MONO_ELECTRIC": {
name: "Mono ELECTRIC", name: "Aim For The Horn!",
}, },
"MONO_PSYCHIC": { "MONO_PSYCHIC": {
name: "Mono PSYCHIC", name: "Big Brain Energy",
}, },
"MONO_ICE": { "MONO_ICE": {
name: "Mono ICE", name: "Walking On Thin Ice",
}, },
"MONO_DRAGON": { "MONO_DRAGON": {
name: "Mono DRAGON", name: "Pseudo-Legend Club",
}, },
"MONO_DARK": { "MONO_DARK": {
name: "It's just a phase", name: "It's Just A Phase",
}, },
"MONO_FAIRY": { "MONO_FAIRY": {
name: "Mono FAIRY", name: "Hey! Listen!",
}, },
} as const; } as const;

View File

@ -897,7 +897,7 @@ export const ability: AbilityTranslationEntries = {
name: "Boost Chimère", name: "Boost Chimère",
description: "Augmente la stat la plus élevée du Pokémon quand il met K.O. un autre Pokémon.", description: "Augmente la stat la plus élevée du Pokémon quand il met K.O. un autre Pokémon.",
}, },
rKSSystem: { rksSystem: {
name: "Système Alpha", name: "Système Alpha",
description: "Change le type du Pokémon en fonction de la ROM équipée.", description: "Change le type du Pokémon en fonction de la ROM équipée.",
}, },

View File

@ -385,182 +385,182 @@ export const PGMdialogue: DialogueTranslationEntries = {
}, },
"rocket_grunt": { "rocket_grunt": {
"encounter": { "encounter": {
1: "Prepare for trouble!" 1: "트러블에 대비하도록!"
}, },
"victory": { "victory": {
1: "Team Rocket blasting off again!" 1: "로켓단은 다시 떠오를 거니까!"
}, },
}, },
"magma_grunt": { "magma_grunt": {
"encounter": { "encounter": {
1: " If you get in the way of Team Magma, dont expect any mercy!" 1: " 마그마단을 방해한다면, 자비는 없닷!"
}, },
"victory": { "victory": {
1: "Huh? I lost?!" 1: "하? 내가 졌어?!"
}, },
}, },
"aqua_grunt": { "aqua_grunt": {
"encounter": { "encounter": {
1: "No one who crosses Team Aqua gets any mercy, not even kids!" 1: "아쿠아단을 넘본 사람에게는 자비는 없다, 꼬마도 마찬가지야!"
}, },
"victory": { "victory": {
1: "You're kidding me!" 1: "말도 안돼!"
}, },
}, },
"galactic_grunt": { "galactic_grunt": {
"encounter": { "encounter": {
1: "Don't mess with Team Galactic!" 1: "갤럭시단을 방해하지 마!"
}, },
"victory": { "victory": {
1: "Shut down..." 1: "사격 중지…… "
}, },
}, },
"plasma_grunt": { "plasma_grunt": {
"encounter": { "encounter": {
1: "We won't tolerate people who have different ideas!" 1: "다른 생각을 가진사람들은 용납하지 않겠다!"
}, },
"victory": { "victory": {
1: "Plasmaaaaaaaaa!" 1: "플라-스마-!"
}, },
}, },
"flare_grunt": { "flare_grunt": {
"encounter": { "encounter": {
1: "Fashion is most important to us!" 1: "패션이 우리한텐 가장 중요하다고!"
}, },
"victory": { "victory": {
1: "The future doesn't look bright for me." 1: "미래가 밝아 보이질 않네."
}, },
}, },
"rocket_boss_giovanni_1": { "rocket_boss_giovanni_1": {
"encounter": { "encounter": {
1: "So! I must say, I am impressed you got here!" 1: "그래서! 여기까지 오다니, 감탄이 절로 나오는군!"
}, },
"victory": { "victory": {
1: "WHAT! This cannot be!" 1: "하! 이럴 순 없어!"
}, },
"defeat": { "defeat": {
1: "Mark my words. Not being able to measure your own strength shows that you are still a child." 1: "자신의 힘을 측정하지 못하는 걸 보아하니, 아직 별볼일 없는 꼬맹이로군. 내 말을 명심하도록. "
} }
}, },
"rocket_boss_giovanni_2": { "rocket_boss_giovanni_2": {
"encounter": { "encounter": {
1: "My old associates need me... Are you going to get in my way?" 1: "옛 친구들이 나를 필요로 하고 있다…… 그런데도 방해하겠다는 건가?"
}, },
"victory": { "victory": {
1: "How is this possible...?\nThe precious dream of Team Rocket has become little more than an illusion..." 1: "어떻게 이런 일이…?\n로켓단의 소중한 꿈이 환상에 불과해졌군…… "
}, },
"defeat": { "defeat": {
1: "Team Rocket will be reborn again, and I will rule the world!" 1: "로켓단은 다시 태어난다, 그리고 세상을 지배할 것이다!"
} }
}, },
"magma_boss_maxie_1": { "magma_boss_maxie_1": {
"encounter": { "encounter": {
1: "I will bury you by my own hand. I hope you appreciate this honor!" 1: "내 손으로 널 파묻어주지. 영광으로 알도록!"
}, },
"victory": { "victory": {
1: "Ugh! You are... quite capable...\nI fell behind, but only by an inch..." 1: "윽! 꽤… 제법이군…\n내가 뒤쳐졌지만, 겨우 한 끝이다…"
}, },
"defeat": { "defeat": {
1: "Team Magma will prevail!" 1: "마그마단이 앞선다!"
} }
}, },
"magma_boss_maxie_2": { "magma_boss_maxie_2": {
"encounter": { "encounter": {
1: "You are the final obstacle remaining between me and my goals.\nBrace yourself for my ultimate attack! Fuhahaha!" 1: "나와 내 목표 사이에 남은 마지막 장애물이로군.\n최후의 공격에 대비하도록! 후하하하!"
}, },
"victory": { "victory": {
1: "This... This is not.. Ngh..." 1: "이런… 이럴 수는… 없어… "
}, },
"defeat": { "defeat": {
1: "And now... I will transform this planet to a land ideal for humanity." 1: "이제부터… 인류의 이상을 위해 대지를 더 늘려가겠다."
} }
}, },
"aqua_boss_archie_1": { "aqua_boss_archie_1": {
"encounter": { "encounter": {
1: "I'm leader of Team Aqua, so I'm afraid it's the rope's end for you." 1: "내가 아쿠아단의 리더다, 유감스럽게도 넌 이게 끝이겠군."
}, },
"victory": { "victory": {
1: "Let's meet again somewhere. I'll be sure to remember that face." 1: "다시 어딘가에서 만나도록하지. 그 얼굴 기억해둘테니까."
}, },
"defeat": { "defeat": {
1: "Brilliant! My team won't hold back now!" 1: "좋군! 이제 아쿠아단을 막아설 것은 없다!"
} }
}, },
"aqua_boss_archie_2": { "aqua_boss_archie_2": {
"encounter": { "encounter": {
1: "I've been waiting so long for this day to come.\nThis is the true power of my team!" 1: "이 날이 오는 것을 너무 오래 기다렸군.\n이것이 우리의 진정한 힘이다!"
}, },
"victory": { "victory": {
1: "Like I figured..." 1: "내가 생각했던 것들이…… "
}, },
"defeat": { "defeat": {
1: "I'll return everything in this world to its original, pure state!!" 1: "이 세상을 원래의 순수한 상태로 되돌리겠다, 그 모든 것을!!"
} }
}, },
"galactic_boss_cyrus_1": { "galactic_boss_cyrus_1": {
"encounter": { "encounter": {
1: "You were compelled to come here by such vacuous sentimentality\nI will make you regret paying heed to your heart!" 1: "넌 공허한 감정에 이끌려 이곳에 오게된 것이다.\n마음에 귀를 기울인 것을 후회하게 해주지!"
}, },
"victory": { "victory": {
1: "Interesting. And quite curious." 1: "흥미롭군. 게다가 꽤 궁금해졌어."
}, },
"defeat": { "defeat": {
1: "I will create my new world..." 1: "새로운 세상을 만들 것이다…"
} }
}, },
"galactic_boss_cyrus_2": { "galactic_boss_cyrus_2": {
"encounter": { "encounter": {
1: "So we meet again. It seems our fates have become intertwined.\nBut here and now, I will finally break that bond!" 1: "이런 우리가 다시 만나게 됐군. 우리의 운명이 얽히게 된 것 같군.\n 하지만 지금 여기서, 나는 마침내 그 끈을 끊을 것이다!"
}, },
"victory": { "victory": {
1: "How? How? HOW?!" 1: "어떻게? 어째서? 어떻게?!"
}, },
"defeat": { "defeat": {
1: "Farewell." 1: "작별이로군."
} }
}, },
"plasma_boss_ghetsis_1": { "plasma_boss_ghetsis_1": {
"encounter": { "encounter": {
1: "I won't allow anyone to stop me! No matter who does what!" 1: "누구도 저를 막을 수 없습니다! 무슨 짓을 하더라도!"
}, },
"victory": { "victory": {
1: "How can this be? I'm the creator of Team Plasma! I'm perfect!" 1: "…어떻게 된 거지? 이 몸은 플라스마단을 만들어낸 완벽한 남자라고! "
}, },
"defeat": { "defeat": {
1: "I am the perfect ruler of a perfect new world! Mwa ha ha!" 1: "세계를 바꿀 완전한 지배자가 아니었단 말인가!? …흐하하!"
} }
}, },
"plasma_boss_ghetsis_2": { "plasma_boss_ghetsis_2": {
"encounter": { "encounter": {
1: "Come now! I want to see your face at the moment you lose all hope!" 1: "오시죠! 당신이 모든 희망을 잃는 순간의 얼굴을 보겠습니다!"
}, },
"victory": { "victory": {
1: "My calculations... No! My careful schemes! The world should be mine!" 1: "내 계산이… 틀려! 내 치밀한 계획이 틀리다니! 세상은 내 것이어야 하는데!"
}, },
"defeat": { "defeat": {
1: "Kyurem! Use Absofusion!" 1: "큐레무! 합체해라!"
} }
}, },
"flare_boss_lysandre_1": { "flare_boss_lysandre_1": {
"encounter": { "encounter": {
1: "Do you want to stop me? Show me in battle." 1: "나를 막겠다고? 배틀로 증명하도록."
}, },
"victory": { "victory": {
1: "You are here to stop me. But I ask you to wait. " 1: "네가 나를 여기서 막았군. 하지만 잠시 기다리도록. "
}, },
"defeat": { "defeat": {
1: "Pokemon...Shall no longer exist." 1: "포켓몬은… 더 이상 존재하지 않는다."
} }
}, },
"flare_boss_lysandre_2": { "flare_boss_lysandre_2": {
"encounter": { "encounter": {
1: "The future you want, or the future I want... Let us see which one is more deserving, shall we?" 1: "너의 미래와 나의 미래… 어느 쪽이 옳은지 서로의 포켓몬에게 묻도록 하지."
}, },
"victory": { "victory": {
1: "Whaugh!" 1: "크윽!"
}, },
"defeat": { "defeat": {
1: "Fools with no vision will continue to befoul this beautiful world." 1: "우매한 자들이 이 아름다운 세상을 계속 더럽히고 있군."
} }
}, },
"brock": { "brock": {

View File

@ -1,67 +1,67 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = { export const challenges: SimpleTranslationEntries = {
"title": "Challenge Modifiers", "title": "適用挑戰條件",
"points": "Bad Ideas", "points": "Bad Ideas",
"confirm_start": "Proceed with these challenges?", "confirm_start": "要執行這些挑戰嗎?",
"singleGeneration.name": "Mono Gen", "singleGeneration.name": "單一世代",
"singleGeneration.value.0": "Off", "singleGeneration.value.0": "關閉",
"singleGeneration.desc.0": "You can only use pokemon from the chosen generation.", "singleGeneration.desc.0": "你只能使用所選世代的寶可夢",
"singleGeneration.value.1": "Gen 1", "singleGeneration.value.1": "第一世代",
"singleGeneration.desc.1": "You can only use pokemon from generation one.", "singleGeneration.desc.1": "你只能使用第一世代的寶可夢",
"singleGeneration.value.2": "Gen 2", "singleGeneration.value.2": "第二世代",
"singleGeneration.desc.2": "You can only use pokemon from generation two.", "singleGeneration.desc.2": "你只能使用第二世代的寶可夢",
"singleGeneration.value.3": "Gen 3", "singleGeneration.value.3": "第三世代",
"singleGeneration.desc.3": "You can only use pokemon from generation three.", "singleGeneration.desc.3": "你只能使用第三世代的寶可夢",
"singleGeneration.value.4": "Gen 4", "singleGeneration.value.4": "第四世代",
"singleGeneration.desc.4": "You can only use pokemon from generation four.", "singleGeneration.desc.4": "你只能使用第四世代的寶可夢",
"singleGeneration.value.5": "Gen 5", "singleGeneration.value.5": "第五世代",
"singleGeneration.desc.5": "You can only use pokemon from generation five.", "singleGeneration.desc.5": "你只能使用第五世代的寶可夢",
"singleGeneration.value.6": "Gen 6", "singleGeneration.value.6": "第六世代",
"singleGeneration.desc.6": "You can only use pokemon from generation six.", "singleGeneration.desc.6": "你只能使用第六世代的寶可夢",
"singleGeneration.value.7": "Gen 7", "singleGeneration.value.7": "第七世代",
"singleGeneration.desc.7": "You can only use pokemon from generation seven.", "singleGeneration.desc.7": "你只能使用第七世代的寶可夢",
"singleGeneration.value.8": "Gen 8", "singleGeneration.value.8": "第八世代",
"singleGeneration.desc.8": "You can only use pokemon from generation eight.", "singleGeneration.desc.8": "你只能使用第八世代的寶可夢",
"singleGeneration.value.9": "Gen 9", "singleGeneration.value.9": "第九世代",
"singleGeneration.desc.9": "You can only use pokemon from generation nine.", "singleGeneration.desc.9": "你只能使用第九世代的寶可夢",
"singleType.name": "Mono Type", "singleType.name": "單屬性",
"singleType.value.0": "Off", "singleType.value.0": "關閉",
"singleType.desc.0": "You can only use pokemon of the chosen type.", "singleType.desc.0": "你只能使用所選屬性的寶可夢",
"singleType.value.1": "Normal", "singleType.value.1": "普通",
"singleType.desc.1": "You can only use pokemon with the Normal type.", "singleType.desc.1": "你只能使用普通屬性的寶可夢",
"singleType.value.2": "Fighting", "singleType.value.2": "格鬥",
"singleType.desc.2": "You can only use pokemon with the Fighting type.", "singleType.desc.2": "你只能使用格鬥屬性的寶可夢",
"singleType.value.3": "Flying", "singleType.value.3": "飛行",
"singleType.desc.3": "You can only use pokemon with the Flying type.", "singleType.desc.3": "你只能使用飛行屬性的寶可夢",
"singleType.value.4": "Poison", "singleType.value.4": "",
"singleType.desc.4": "You can only use pokemon with the Poison type.", "singleType.desc.4": "你只能使用毒屬性的寶可夢",
"singleType.value.5": "Ground", "singleType.value.5": "地面",
"singleType.desc.5": "You can only use pokemon with the Ground type.", "singleType.desc.5": "你只能使用地面屬性的寶可夢",
"singleType.value.6": "Rock", "singleType.value.6": "岩石",
"singleType.desc.6": "You can only use pokemon with the Rock type.", "singleType.desc.6": "你只能使用岩石屬性的寶可夢",
"singleType.value.7": "Bug", "singleType.value.7": "",
"singleType.desc.7": "You can only use pokemon with the Bug type.", "singleType.desc.7": "你只能使用蟲屬性的寶可夢",
"singleType.value.8": "Ghost", "singleType.value.8": "幽靈",
"singleType.desc.8": "You can only use pokemon with the Ghost type.", "singleType.desc.8": "你只能使用幽靈屬性的寶可夢",
"singleType.value.9": "Steel", "singleType.value.9": "",
"singleType.desc.9": "You can only use pokemon with the Steel type.", "singleType.desc.9": "你只能使用鋼屬性的寶可夢",
"singleType.value.10": "Fire", "singleType.value.10": "",
"singleType.desc.10": "You can only use pokemon with the Fire type.", "singleType.desc.10": "你只能使用火屬性的寶可夢",
"singleType.value.11": "Water", "singleType.value.11": "",
"singleType.desc.11": "You can only use pokemon with the Water type.", "singleType.desc.11": "你只能使用水屬性的寶可夢",
"singleType.value.12": "Grass", "singleType.value.12": "",
"singleType.desc.12": "You can only use pokemon with the Grass type.", "singleType.desc.12": "你只能使用草屬性的寶可夢",
"singleType.value.13": "Electric", "singleType.value.13": "",
"singleType.desc.13": "You can only use pokemon with the Electric type.", "singleType.desc.13": "你只能使用電屬性的寶可夢",
"singleType.value.14": "Psychic", "singleType.value.14": "超能",
"singleType.desc.14": "You can only use pokemon with the Psychic type.", "singleType.desc.14": "你只能使用超能屬性的寶可夢",
"singleType.value.15": "Ice", "singleType.value.15": "",
"singleType.desc.15": "You can only use pokemon with the Ice type.", "singleType.desc.15": "你只能使用冰屬性的寶可夢",
"singleType.value.16": "Dragon", "singleType.value.16": "",
"singleType.desc.16": "You can only use pokemon with the Dragon type.", "singleType.desc.16": "你只能使用龍屬性的寶可夢",
"singleType.value.17": "Dark", "singleType.value.17": "",
"singleType.desc.17": "You can only use pokemon with the Dark type.", "singleType.desc.17": "你只能使用惡屬性的寶可夢",
"singleType.value.18": "Fairy", "singleType.value.18": "妖精",
"singleType.desc.18": "You can only use pokemon with the Fairy type.", "singleType.desc.18": "你只能使用妖精屬性的寶可夢",
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -3,13 +3,13 @@ import {SimpleTranslationEntries} from "#app/plugins/i18n";
// Titles of special trainers like gym leaders, elite four, and the champion // Titles of special trainers like gym leaders, elite four, and the champion
export const titles: SimpleTranslationEntries = { export const titles: SimpleTranslationEntries = {
"elite_four": "四天王", "elite_four": "四天王",
"elite_four_female": "Elite Four", "elite_four_female": "四天王",
"gym_leader": "道館館主", "gym_leader": "道館館主",
"gym_leader_female": "道館館主", "gym_leader_female": "道館館主",
"gym_leader_double": "Gym Leader Duo", "gym_leader_double": "道館館主",
"champion": "冠軍", "champion": "冠軍",
"champion_female": "Champion", "champion_female": "冠軍",
"champion_double": "Champion Duo", "champion_double": "冠軍搭檔",
"rival": "勁敵", "rival": "勁敵",
"professor": "博士", "professor": "博士",
"frontier_brain": "開拓頭腦", "frontier_brain": "開拓頭腦",
@ -305,14 +305,14 @@ export const trainerNames: SimpleTranslationEntries = {
"rival_female": "艾薇", "rival_female": "艾薇",
// Double Names // Double Names
"blue_red_double": "Blue & Red", "blue_red_double": "青綠 & 赤紅",
"red_blue_double": "Red & Blue", "red_blue_double": "赤紅 & 青綠",
"tate_liza_double": "Tate & Liza", "tate_liza_double": "小楓 & 小南",
"liza_tate_double": "Liza & Tate", "liza_tate_double": "小南 & 小楓",
"steven_wallace_double": "Steven & Wallace", "steven_wallace_double": "大吾 & 米可利",
"wallace_steven_double": "Wallace & Steven", "wallace_steven_double": "米可利 & 大吾",
"alder_iris_double": "Alder & Iris", "alder_iris_double": "阿戴克 & 艾莉絲",
"iris_alder_double": "Iris & Alder", "iris_alder_double": "艾莉絲 & 阿戴克",
"marnie_piers_double": "Marnie & Piers", "marnie_piers_double": "瑪俐 & 聶梓",
"piers_marnie_double": "Piers & Marnie", "piers_marnie_double": "聶梓 & 瑪俐",
} as const; } as const;

View File

@ -1798,7 +1798,12 @@ export class TurnInitPhase extends FieldPhase {
start() { start() {
super.start(); super.start();
const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[]; const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[];
enemyField.map(p => this.scene.unshiftPhase(new PostSummonPhase(this.scene, p.getBattlerIndex()))); enemyField.map(p => {
if (p.battleSummonData.turnCount !== 1) {
return;
}
return this.scene.unshiftPhase(new PostSummonPhase(this.scene, p.getBattlerIndex()));
});
this.scene.getPlayerField().forEach(p => { this.scene.getPlayerField().forEach(p => {
// If this pokemon is in play and evolved into something illegal under the current challenge, force a switch // If this pokemon is in play and evolved into something illegal under the current challenge, force a switch

View File

@ -5,11 +5,15 @@ import * as overrides from "#app/overrides";
import {Abilities} from "#app/data/enums/abilities"; import {Abilities} from "#app/data/enums/abilities";
import {Species} from "#app/data/enums/species"; import {Species} from "#app/data/enums/species";
import { import {
CommandPhase, TurnInitPhase CommandPhase, DamagePhase,
EnemyCommandPhase,
TurnInitPhase,
} from "#app/phases"; } from "#app/phases";
import {Mode} from "#app/ui/ui"; import {Mode} from "#app/ui/ui";
import {BattleStat} from "#app/data/battle-stat"; import {BattleStat} from "#app/data/battle-stat";
import {Moves} from "#app/data/enums/moves"; import {Moves} from "#app/data/enums/moves";
import {getMovePosition} from "#app/test/utils/gameManagerUtils";
import {Command} from "#app/ui/command-ui-handler";
describe("Abilities - Intimidate", () => { describe("Abilities - Intimidate", () => {
@ -56,7 +60,7 @@ describe("Abilities - Intimidate", () => {
expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA); expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA);
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1); expect(battleStatsPokemon[BattleStat.ATK]).toBe(0);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2);
@ -81,7 +85,7 @@ describe("Abilities - Intimidate", () => {
expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA); expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA);
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1); expect(battleStatsPokemon[BattleStat.ATK]).toBe(0);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2);
@ -106,7 +110,7 @@ describe("Abilities - Intimidate", () => {
expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA); expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA);
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1); expect(battleStatsPokemon[BattleStat.ATK]).toBe(0);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2);
@ -186,4 +190,146 @@ describe("Abilities - Intimidate", () => {
const battleStatsPokemon2 = game.scene.getParty()[1].summonData.battleStats; const battleStatsPokemon2 = game.scene.getParty()[1].summonData.battleStats;
expect(battleStatsPokemon2[BattleStat.ATK]).toBe(-2); expect(battleStatsPokemon2[BattleStat.ATK]).toBe(-2);
}, 20000); }, 20000);
it("single - wild next wave opp triger once, us: none", async() => {
vi.spyOn(overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(2);
vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.AERIAL_ACE]);
await game.startBattle([
Species.MIGHTYENA,
Species.POOCHYENA,
]);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
game.onNextPrompt("CommandPhase", Mode.COMMAND, () => {
game.scene.ui.setMode(Mode.FIGHT, (game.scene.getCurrentPhase() as CommandPhase).getFieldIndex());
});
game.onNextPrompt("CommandPhase", Mode.FIGHT, () => {
const movePosition = getMovePosition(game.scene, 0, Moves.AERIAL_ACE);
(game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false);
});
await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(DamagePhase);
await game.killPokemon(game.scene.currentBattle.enemyParty[0]);
expect(game.scene.currentBattle.enemyParty[0].isFainted()).toBe(true);
await game.toNextWave();
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-2);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
}, 20000);
it("single - wild next turn - no retrigger on next turn", async() => {
vi.spyOn(overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(2);
vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH]);
await game.startBattle([
Species.MIGHTYENA,
Species.POOCHYENA,
]);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
game.onNextPrompt("CommandPhase", Mode.COMMAND, () => {
game.scene.ui.setMode(Mode.FIGHT, (game.scene.getCurrentPhase() as CommandPhase).getFieldIndex());
});
game.onNextPrompt("CommandPhase", Mode.FIGHT, () => {
const movePosition = getMovePosition(game.scene, 0, Moves.AERIAL_ACE);
(game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false);
});
console.log("===to new turn===");
await game.toNextTurn();
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
}, 20000);
it("single - trainer should only trigger once and each time he switch", async() => {
vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH]);
vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.VOLT_SWITCH,Moves.VOLT_SWITCH,Moves.VOLT_SWITCH,Moves.VOLT_SWITCH]);
vi.spyOn(overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(5);
await game.startBattle([
Species.MIGHTYENA,
Species.POOCHYENA,
]);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
game.onNextPrompt("CommandPhase", Mode.COMMAND, () => {
game.scene.ui.setMode(Mode.FIGHT, (game.scene.getCurrentPhase() as CommandPhase).getFieldIndex());
});
game.onNextPrompt("CommandPhase", Mode.FIGHT, () => {
const movePosition = getMovePosition(game.scene, 0, Moves.AERIAL_ACE);
(game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false);
});
console.log("===to new turn===");
await game.toNextTurn();
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-2);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
game.onNextPrompt("CommandPhase", Mode.COMMAND, () => {
game.scene.ui.setMode(Mode.FIGHT, (game.scene.getCurrentPhase() as CommandPhase).getFieldIndex());
});
game.onNextPrompt("CommandPhase", Mode.FIGHT, () => {
const movePosition = getMovePosition(game.scene, 0, Moves.AERIAL_ACE);
(game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false);
});
console.log("===to new turn===");
await game.toNextTurn();
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-3);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
}, 200000);
it("single - trainer should only trigger once whatever turn we are", async() => {
vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH]);
vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH,Moves.SPLASH,Moves.SPLASH,Moves.SPLASH]);
vi.spyOn(overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(5);
await game.startBattle([
Species.MIGHTYENA,
Species.POOCHYENA,
]);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
game.onNextPrompt("CommandPhase", Mode.COMMAND, () => {
game.scene.ui.setMode(Mode.FIGHT, (game.scene.getCurrentPhase() as CommandPhase).getFieldIndex());
});
game.onNextPrompt("CommandPhase", Mode.FIGHT, () => {
const movePosition = getMovePosition(game.scene, 0, Moves.AERIAL_ACE);
(game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false);
});
console.log("===to new turn===");
await game.toNextTurn();
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
game.onNextPrompt("CommandPhase", Mode.COMMAND, () => {
game.scene.ui.setMode(Mode.FIGHT, (game.scene.getCurrentPhase() as CommandPhase).getFieldIndex());
});
game.onNextPrompt("CommandPhase", Mode.FIGHT, () => {
const movePosition = getMovePosition(game.scene, 0, Moves.AERIAL_ACE);
(game.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false);
});
console.log("===to new turn===");
await game.toNextTurn();
battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
expect(battleStatsPokemon[BattleStat.ATK]).toBe(-1);
battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
}, 200000);
}); });

View File

@ -48,8 +48,8 @@ describe("Inputs", () => {
}); });
it("Mobile - test touch holding for 1000ms - 4 input", async () => { it("Mobile - test touch holding for 1000ms - 4 input", async () => {
await game.inputsHandler.pressTouch("dpadUp", 1000); await game.inputsHandler.pressTouch("dpadUp", 1050);
expect(game.inputsHandler.log.length).toBe(4); expect(game.inputsHandler.log.length).toBe(5);
}); });
it("keyboard - test input holding for 200ms - 1 input", async() => { it("keyboard - test input holding for 200ms - 1 input", async() => {
@ -63,13 +63,8 @@ describe("Inputs", () => {
}); });
it("keyboard - test input holding for 1000ms - 4 input", async() => { it("keyboard - test input holding for 1000ms - 4 input", async() => {
await game.inputsHandler.pressKeyboardKey(cfg_keyboard_qwerty.deviceMapping.KEY_ARROW_UP, 1000); await game.inputsHandler.pressKeyboardKey(cfg_keyboard_qwerty.deviceMapping.KEY_ARROW_UP, 1050);
expect(game.inputsHandler.log.length).toBe(4); expect(game.inputsHandler.log.length).toBe(5);
});
it("keyboard - test input holding for 2000ms - 8 input", async() => {
await game.inputsHandler.pressKeyboardKey(cfg_keyboard_qwerty.deviceMapping.KEY_ARROW_UP, 2000);
expect(game.inputsHandler.log.length).toBe(8);
}); });
it("gamepad - test input holding for 1ms - 1 input", async() => { it("gamepad - test input holding for 1ms - 1 input", async() => {
@ -82,24 +77,14 @@ describe("Inputs", () => {
expect(game.inputsHandler.log.length).toBe(1); expect(game.inputsHandler.log.length).toBe(1);
}); });
it("gamepad - test input holding for 249ms - 1 input", async() => {
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 249);
expect(game.inputsHandler.log.length).toBe(1);
});
it("gamepad - test input holding for 300ms - 2 input", async() => { it("gamepad - test input holding for 300ms - 2 input", async() => {
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 300); await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 300);
expect(game.inputsHandler.log.length).toBe(2); expect(game.inputsHandler.log.length).toBe(2);
}); });
it("gamepad - test input holding for 1000ms - 4 input", async() => { it("gamepad - test input holding for 1000ms - 4 input", async() => {
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 1000); await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 1050);
expect(game.inputsHandler.log.length).toBe(4); expect(game.inputsHandler.log.length).toBe(5);
});
it("gamepad - test input holding for 2000ms - 8 input", async() => {
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 2000);
expect(game.inputsHandler.log.length).toBe(8);
}); });
}); });

View File

@ -222,6 +222,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
this.pokemonGenderNewText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); this.pokemonGenderNewText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme));
this.pokemonGenderNewText.setVisible((newGender & caughtAttr) === BigInt(0)); this.pokemonGenderNewText.setVisible((newGender & caughtAttr) === BigInt(0));
} else { } else {
this.pokemonGenderNewText.setVisible(false);
this.pokemonGenderText.setVisible(false); this.pokemonGenderText.setVisible(false);
} }
@ -312,6 +313,8 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme)); this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, this.scene.uiTheme));
const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0)); const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0));
this.pokemonShinyNewIcon.setVisible(!!newShinyOrVariant); this.pokemonShinyNewIcon.setVisible(!!newShinyOrVariant);
} else {
this.pokemonShinyNewIcon.setVisible(false);
} }
this.pokemonFusionShinyIcon.setPosition(this.pokemonShinyIcon.x, this.pokemonShinyIcon.y); this.pokemonFusionShinyIcon.setPosition(this.pokemonShinyIcon.x, this.pokemonShinyIcon.y);