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("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true),
new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true),
new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 595, 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.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_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_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_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_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_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_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_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, 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_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_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_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, 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_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),

View File

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

View File

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

View File

@ -1,67 +1,67 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "Challenge Modifiers",
"title": "適用挑戰條件",
"points": "Bad Ideas",
"confirm_start": "Proceed with these challenges?",
"singleGeneration.name": "Mono Gen",
"singleGeneration.value.0": "Off",
"singleGeneration.desc.0": "You can only use pokemon from the chosen generation.",
"singleGeneration.value.1": "Gen 1",
"singleGeneration.desc.1": "You can only use pokemon from generation one.",
"singleGeneration.value.2": "Gen 2",
"singleGeneration.desc.2": "You can only use pokemon from generation two.",
"singleGeneration.value.3": "Gen 3",
"singleGeneration.desc.3": "You can only use pokemon from generation three.",
"singleGeneration.value.4": "Gen 4",
"singleGeneration.desc.4": "You can only use pokemon from generation four.",
"singleGeneration.value.5": "Gen 5",
"singleGeneration.desc.5": "You can only use pokemon from generation five.",
"singleGeneration.value.6": "Gen 6",
"singleGeneration.desc.6": "You can only use pokemon from generation six.",
"singleGeneration.value.7": "Gen 7",
"singleGeneration.desc.7": "You can only use pokemon from generation seven.",
"singleGeneration.value.8": "Gen 8",
"singleGeneration.desc.8": "You can only use pokemon from generation eight.",
"singleGeneration.value.9": "Gen 9",
"singleGeneration.desc.9": "You can only use pokemon from generation nine.",
"singleType.name": "Mono Type",
"singleType.value.0": "Off",
"singleType.desc.0": "You can only use pokemon of the chosen type.",
"singleType.value.1": "Normal",
"singleType.desc.1": "You can only use pokemon with the Normal type.",
"singleType.value.2": "Fighting",
"singleType.desc.2": "You can only use pokemon with the Fighting type.",
"singleType.value.3": "Flying",
"singleType.desc.3": "You can only use pokemon with the Flying type.",
"singleType.value.4": "Poison",
"singleType.desc.4": "You can only use pokemon with the Poison type.",
"singleType.value.5": "Ground",
"singleType.desc.5": "You can only use pokemon with the Ground type.",
"singleType.value.6": "Rock",
"singleType.desc.6": "You can only use pokemon with the Rock type.",
"singleType.value.7": "Bug",
"singleType.desc.7": "You can only use pokemon with the Bug type.",
"singleType.value.8": "Ghost",
"singleType.desc.8": "You can only use pokemon with the Ghost type.",
"singleType.value.9": "Steel",
"singleType.desc.9": "You can only use pokemon with the Steel type.",
"singleType.value.10": "Fire",
"singleType.desc.10": "You can only use pokemon with the Fire type.",
"singleType.value.11": "Water",
"singleType.desc.11": "You can only use pokemon with the Water type.",
"singleType.value.12": "Grass",
"singleType.desc.12": "You can only use pokemon with the Grass type.",
"singleType.value.13": "Electric",
"singleType.desc.13": "You can only use pokemon with the Electric type.",
"singleType.value.14": "Psychic",
"singleType.desc.14": "You can only use pokemon with the Psychic type.",
"singleType.value.15": "Ice",
"singleType.desc.15": "You can only use pokemon with the Ice type.",
"singleType.value.16": "Dragon",
"singleType.desc.16": "You can only use pokemon with the Dragon type.",
"singleType.value.17": "Dark",
"singleType.desc.17": "You can only use pokemon with the Dark type.",
"singleType.value.18": "Fairy",
"singleType.desc.18": "You can only use pokemon with the Fairy type.",
"confirm_start": "要執行這些挑戰嗎?",
"singleGeneration.name": "單一世代",
"singleGeneration.value.0": "關閉",
"singleGeneration.desc.0": "你只能使用所選世代的寶可夢",
"singleGeneration.value.1": "第一世代",
"singleGeneration.desc.1": "你只能使用第一世代的寶可夢",
"singleGeneration.value.2": "第二世代",
"singleGeneration.desc.2": "你只能使用第二世代的寶可夢",
"singleGeneration.value.3": "第三世代",
"singleGeneration.desc.3": "你只能使用第三世代的寶可夢",
"singleGeneration.value.4": "第四世代",
"singleGeneration.desc.4": "你只能使用第四世代的寶可夢",
"singleGeneration.value.5": "第五世代",
"singleGeneration.desc.5": "你只能使用第五世代的寶可夢",
"singleGeneration.value.6": "第六世代",
"singleGeneration.desc.6": "你只能使用第六世代的寶可夢",
"singleGeneration.value.7": "第七世代",
"singleGeneration.desc.7": "你只能使用第七世代的寶可夢",
"singleGeneration.value.8": "第八世代",
"singleGeneration.desc.8": "你只能使用第八世代的寶可夢",
"singleGeneration.value.9": "第九世代",
"singleGeneration.desc.9": "你只能使用第九世代的寶可夢",
"singleType.name": "單屬性",
"singleType.value.0": "關閉",
"singleType.desc.0": "你只能使用所選屬性的寶可夢",
"singleType.value.1": "普通",
"singleType.desc.1": "你只能使用普通屬性的寶可夢",
"singleType.value.2": "格鬥",
"singleType.desc.2": "你只能使用格鬥屬性的寶可夢",
"singleType.value.3": "飛行",
"singleType.desc.3": "你只能使用飛行屬性的寶可夢",
"singleType.value.4": "",
"singleType.desc.4": "你只能使用毒屬性的寶可夢",
"singleType.value.5": "地面",
"singleType.desc.5": "你只能使用地面屬性的寶可夢",
"singleType.value.6": "岩石",
"singleType.desc.6": "你只能使用岩石屬性的寶可夢",
"singleType.value.7": "",
"singleType.desc.7": "你只能使用蟲屬性的寶可夢",
"singleType.value.8": "幽靈",
"singleType.desc.8": "你只能使用幽靈屬性的寶可夢",
"singleType.value.9": "",
"singleType.desc.9": "你只能使用鋼屬性的寶可夢",
"singleType.value.10": "",
"singleType.desc.10": "你只能使用火屬性的寶可夢",
"singleType.value.11": "",
"singleType.desc.11": "你只能使用水屬性的寶可夢",
"singleType.value.12": "",
"singleType.desc.12": "你只能使用草屬性的寶可夢",
"singleType.value.13": "",
"singleType.desc.13": "你只能使用電屬性的寶可夢",
"singleType.value.14": "超能",
"singleType.desc.14": "你只能使用超能屬性的寶可夢",
"singleType.value.15": "",
"singleType.desc.15": "你只能使用冰屬性的寶可夢",
"singleType.value.16": "",
"singleType.desc.16": "你只能使用龍屬性的寶可夢",
"singleType.value.17": "",
"singleType.desc.17": "你只能使用惡屬性的寶可夢",
"singleType.value.18": "妖精",
"singleType.desc.18": "你只能使用妖精屬性的寶可夢",
} 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
export const titles: SimpleTranslationEntries = {
"elite_four": "四天王",
"elite_four_female": "Elite Four",
"elite_four_female": "四天王",
"gym_leader": "道館館主",
"gym_leader_female": "道館館主",
"gym_leader_double": "Gym Leader Duo",
"gym_leader_double": "道館館主",
"champion": "冠軍",
"champion_female": "Champion",
"champion_double": "Champion Duo",
"champion_female": "冠軍",
"champion_double": "冠軍搭檔",
"rival": "勁敵",
"professor": "博士",
"frontier_brain": "開拓頭腦",
@ -305,14 +305,14 @@ export const trainerNames: SimpleTranslationEntries = {
"rival_female": "艾薇",
// Double Names
"blue_red_double": "Blue & Red",
"red_blue_double": "Red & Blue",
"tate_liza_double": "Tate & Liza",
"liza_tate_double": "Liza & Tate",
"steven_wallace_double": "Steven & Wallace",
"wallace_steven_double": "Wallace & Steven",
"alder_iris_double": "Alder & Iris",
"iris_alder_double": "Iris & Alder",
"marnie_piers_double": "Marnie & Piers",
"piers_marnie_double": "Piers & Marnie",
"blue_red_double": "青綠 & 赤紅",
"red_blue_double": "赤紅 & 青綠",
"tate_liza_double": "小楓 & 小南",
"liza_tate_double": "小南 & 小楓",
"steven_wallace_double": "大吾 & 米可利",
"wallace_steven_double": "米可利 & 大吾",
"alder_iris_double": "阿戴克 & 艾莉絲",
"iris_alder_double": "艾莉絲 & 阿戴克",
"marnie_piers_double": "瑪俐 & 聶梓",
"piers_marnie_double": "聶梓 & 瑪俐",
} as const;

View File

@ -1798,7 +1798,12 @@ export class TurnInitPhase extends FieldPhase {
start() {
super.start();
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 => {
// 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 {Species} from "#app/data/enums/species";
import {
CommandPhase, TurnInitPhase
CommandPhase, DamagePhase,
EnemyCommandPhase,
TurnInitPhase,
} from "#app/phases";
import {Mode} from "#app/ui/ui";
import {BattleStat} from "#app/data/battle-stat";
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", () => {
@ -56,7 +60,7 @@ describe("Abilities - Intimidate", () => {
expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA);
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;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2);
@ -81,7 +85,7 @@ describe("Abilities - Intimidate", () => {
expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA);
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;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2);
@ -106,7 +110,7 @@ describe("Abilities - Intimidate", () => {
expect(game.scene.getParty()[0].species.speciesId).toBe(Species.POOCHYENA);
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;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-2);
@ -186,4 +190,146 @@ describe("Abilities - Intimidate", () => {
const battleStatsPokemon2 = game.scene.getParty()[1].summonData.battleStats;
expect(battleStatsPokemon2[BattleStat.ATK]).toBe(-2);
}, 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 () => {
await game.inputsHandler.pressTouch("dpadUp", 1000);
expect(game.inputsHandler.log.length).toBe(4);
await game.inputsHandler.pressTouch("dpadUp", 1050);
expect(game.inputsHandler.log.length).toBe(5);
});
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() => {
await game.inputsHandler.pressKeyboardKey(cfg_keyboard_qwerty.deviceMapping.KEY_ARROW_UP, 1000);
expect(game.inputsHandler.log.length).toBe(4);
});
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);
await game.inputsHandler.pressKeyboardKey(cfg_keyboard_qwerty.deviceMapping.KEY_ARROW_UP, 1050);
expect(game.inputsHandler.log.length).toBe(5);
});
it("gamepad - test input holding for 1ms - 1 input", async() => {
@ -82,24 +77,14 @@ describe("Inputs", () => {
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() => {
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 300);
expect(game.inputsHandler.log.length).toBe(2);
});
it("gamepad - test input holding for 1000ms - 4 input", async() => {
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 1000);
expect(game.inputsHandler.log.length).toBe(4);
});
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);
await game.inputsHandler.pressGamepadButton(pad_xbox360.deviceMapping.RC_S, 1050);
expect(game.inputsHandler.log.length).toBe(5);
});
});

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.setVisible((newGender & caughtAttr) === BigInt(0));
} else {
this.pokemonGenderNewText.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));
const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0));
this.pokemonShinyNewIcon.setVisible(!!newShinyOrVariant);
} else {
this.pokemonShinyNewIcon.setVisible(false);
}
this.pokemonFusionShinyIcon.setPosition(this.pokemonShinyIcon.x, this.pokemonShinyIcon.y);