Merge branch 'beta' into feature/test--overrides-helper-2

This commit is contained in:
Felix Staud 2024-07-29 13:51:35 -07:00
commit 5ddb9de9b6
24 changed files with 1364 additions and 3281 deletions

View File

@ -206,6 +206,18 @@ input:-internal-autofill-selected {
} }
} }
#tnc-links {
font-size: larger;
position: relative;
bottom: max(calc(92vh - 100vw / 16 * 9), 0%);
}
a {
color: #328cea;
margin-right: 4px;
margin-left: 4px;
}
/* Firefox old*/ /* Firefox old*/
@-moz-keyframes blink { @-moz-keyframes blink {
0% { 0% {

View File

@ -117,12 +117,12 @@
<script type="module" src="./src/main.ts"></script> <script type="module" src="./src/main.ts"></script>
<script src="./src/touch-controls.ts" type="module"></script> <script src="./src/touch-controls.ts" type="module"></script>
<script src="./src/debug.js" type="module"></script> <script src="./src/debug.js" type="module"></script>
<div id="links"> <div id="tnc-links">
<a href="#" class="termly-display-preferences" style="display: none;">Consent Preferences</a> <a href="#" class="termly-display-preferences" style="display: none;" target="_blank" rel="noreferrer noopener">Consent Preferences</a>
<a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=bc96778b-3f04-4d25-bafc-0deba53e8bec">Privacy Policy</a> <a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=bc96778b-3f04-4d25-bafc-0deba53e8bec" target="_blank" rel="noreferrer noopener">Privacy Policy</a>
<a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=8b523c05-7ec2-4646-9534-5bd61b386e2a">Cookie Disclaimer</a> <a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=8b523c05-7ec2-4646-9534-5bd61b386e2a" target="_blank" rel="noreferrer noopener">Cookie Disclaimer</a>
<a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=b01e092a-9721-477f-8356-45576702ff9e">Terms & Conditions</a> <a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=b01e092a-9721-477f-8356-45576702ff9e" target="_blank" rel="noreferrer noopener">Terms & Conditions</a>
<a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=3b5d1928-3f5b-4ee1-b8df-2d6c276b0bcc">Acceptable Use Policy</a> <a href="https://app.termly.io/policy-viewer/policy.html?policyUUID=3b5d1928-3f5b-4ee1-b8df-2d6c276b0bcc" target="_blank" rel="noreferrer noopener">Acceptable Use Policy</a>
</div> </div>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -17,8 +17,6 @@ export function getBiomeName(biome: Biome | -1) {
return i18next.t("biome:GRASS"); return i18next.t("biome:GRASS");
case Biome.RUINS: case Biome.RUINS:
return i18next.t("biome:RUINS"); return i18next.t("biome:RUINS");
case Biome.ABYSS:
return i18next.t("biome:ABYSS");
case Biome.END: case Biome.END:
return i18next.t("biome:END"); return i18next.t("biome:END");
default: default:

View File

@ -172,43 +172,43 @@ export const PGMachv: AchievementTranslationEntries = {
"MONO_GEN_ONE": { "MONO_GEN_ONE": {
name: "最初的劲敌", name: "最初的劲敌",
description: "完成仅限第一世代的挑战.", description: "完成仅限第一世代的挑战",
}, },
"MONO_GEN_TWO": { "MONO_GEN_TWO": {
name: "1.5世代", name: "1.5世代",
description: "完成仅限第二世代的挑战.", description: "完成仅限第二世代的挑战",
}, },
"MONO_GEN_THREE": { "MONO_GEN_THREE": {
name: "“水太多了”", name: "“水太多了”",
description: "完成仅限第三世代的挑战.", description: "完成仅限第三世代的挑战",
}, },
"MONO_GEN_FOUR": { "MONO_GEN_FOUR": {
name: "她真是最强冠军吗?", name: "她真是最强冠军吗?",
description: "完成仅限第四世代的挑战.", description: "完成仅限第四世代的挑战",
}, },
"MONO_GEN_FIVE": { "MONO_GEN_FIVE": {
name: "完全原创", name: "完全原创",
description: "完成仅限第五世代的挑战.", description: "完成仅限第五世代的挑战",
}, },
"MONO_GEN_SIX": { "MONO_GEN_SIX": {
name: "女大公", name: "女大公",
description: "完成仅限第六世代的挑战.", description: "完成仅限第六世代的挑战",
}, },
"MONO_GEN_SEVEN": { "MONO_GEN_SEVEN": {
name: "首届冠军", name: "首届冠军",
description: "完成仅限第七世代的挑战.", description: "完成仅限第七世代的挑战",
}, },
"MONO_GEN_EIGHT": { "MONO_GEN_EIGHT": {
name: "冠军时刻!", name: "冠军时刻!",
description: "完成仅限第八世代的挑战.", description: "完成仅限第八世代的挑战",
}, },
"MONO_GEN_NINE": { "MONO_GEN_NINE": {
name: "她又放水了", name: "她又放水了",
description: "完成仅限第九世代的挑战.", description: "完成仅限第九世代的挑战",
}, },
"MonoType": { "MonoType": {
description: "完成 {{type}} 单属性挑战.", description: "完成 {{type}} 单属性挑战",
}, },
"MONO_NORMAL": { "MONO_NORMAL": {
name: "异乎寻常的寻常", name: "异乎寻常的寻常",
@ -264,6 +264,10 @@ export const PGMachv: AchievementTranslationEntries = {
"MONO_FAIRY": { "MONO_FAIRY": {
name: "林克,醒醒!", name: "林克,醒醒!",
}, },
"FRESH_START": {
name: "初次尝试!",
description: "完成初次尝试挑战"
}
} as const; } as const;
// Achievement translations for the when the player character is female (it for now uses the same translations as the male version) // Achievement translations for the when the player character is female (it for now uses the same translations as the male version)

View File

@ -4,17 +4,17 @@ export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} 出现了。", "bossAppeared": "{{bossName}} 出现了。",
"trainerAppeared": "{{trainerName}}\n想要和你对战", "trainerAppeared": "{{trainerName}}\n想要和你对战",
"trainerAppearedDouble": "{{trainerName}}\n想要和你对战", "trainerAppearedDouble": "{{trainerName}}\n想要和你对战",
"trainerSendOut": "{{trainerName}}派出了\n{{pokemonName}}!", "trainerSendOut": "{{trainerName}}派出了\n{{pokemonName}}",
"singleWildAppeared": "一只野生的{{pokemonName}}出现了!", "singleWildAppeared": "一只野生的{{pokemonName}}出现了!",
"multiWildAppeared": "野生的{{pokemonName1}}\n和{{pokemonName2}}出现了!", "multiWildAppeared": "野生的{{pokemonName1}}\n和{{pokemonName2}}出现了!",
"playerComeBack": "回来吧,{{pokemonName}}", "playerComeBack": "回来吧{{pokemonName}}",
"trainerComeBack": "{{trainerName}}收回了{{pokemonName}}", "trainerComeBack": "{{trainerName}}收回了{{pokemonName}}",
"playerGo": "去吧!{{pokemonName}}", "playerGo": "去吧!{{pokemonName}}",
"trainerGo": "{{trainerName}}派出了\n{{pokemonName}}", "trainerGo": "{{trainerName}}派出了\n{{pokemonName}}",
"switchQuestion": "要更换\n{{pokemonName}}吗?", "switchQuestion": "要更换\n{{pokemonName}}吗?",
"trainerDefeated": "你击败了\n{{trainerName}}", "trainerDefeated": "你击败了\n{{trainerName}}",
"moneyWon": "你赢得了\n₽{{moneyAmount}}", "moneyWon": "你赢得了\n₽{{moneyAmount}}",
"moneyPickedUp": "捡到了 ₽{{moneyAmount}}", "moneyPickedUp": "捡到了₽{{moneyAmount}}",
"pokemonCaught": "{{pokemonName}}被抓住了!", "pokemonCaught": "{{pokemonName}}被抓住了!",
"addedAsAStarter": "增加了{{pokemonName}}作为\n一个新的基础宝可梦", "addedAsAStarter": "增加了{{pokemonName}}作为\n一个新的基础宝可梦",
"partyFull": "你的队伍已满员。是否放生其他宝可梦\n为{{pokemonName}}腾出空间?", "partyFull": "你的队伍已满员。是否放生其他宝可梦\n为{{pokemonName}}腾出空间?",
@ -29,9 +29,9 @@ export const battle: SimpleTranslationEntries = {
"attackMissed": "没有命中{{pokemonNameWithAffix}}", "attackMissed": "没有命中{{pokemonNameWithAffix}}",
"attackHitsCount": "击中{{count}}次!", "attackHitsCount": "击中{{count}}次!",
"rewardGain": "你获得了\n{{modifierName}}", "rewardGain": "你获得了\n{{modifierName}}",
"expGain": "{{pokemonName}}获得了 {{exp}} 点经验值!", "expGain": "{{pokemonName}}获得了{{exp}} 点经验值!",
"levelUp": "{{pokemonName}}升级到 Lv.{{level}}", "levelUp": "{{pokemonName}}升级到Lv.{{level}}",
"learnMove": "{{pokemonName}} 学会了 {{moveName}}", "learnMove": "{{pokemonName}}学会了{{moveName}}",
"learnMovePrompt": "{{pokemonName}}想要学习{{moveName}}。", "learnMovePrompt": "{{pokemonName}}想要学习{{moveName}}。",
"learnMoveLimitReached": "但是,{{pokemonName}}已经学会了\n四个技能", "learnMoveLimitReached": "但是,{{pokemonName}}已经学会了\n四个技能",
"learnMoveReplaceQuestion": "要忘记一个技能并学习{{moveName}}吗?", "learnMoveReplaceQuestion": "要忘记一个技能并学习{{moveName}}吗?",
@ -61,27 +61,27 @@ export const battle: SimpleTranslationEntries = {
"hpIsFull": "{{pokemonName}}的体力已满!", "hpIsFull": "{{pokemonName}}的体力已满!",
"skipItemQuestion": "你确定要跳过拾取道具吗?", "skipItemQuestion": "你确定要跳过拾取道具吗?",
"eggHatching": "咦?", "eggHatching": "咦?",
"stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "stealEatBerry": "{{pokemonName}}夺取并吃掉了\n{{targetName}}的{{berryName}}",
"ppHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回复了{{moveName}}的PP", "ppHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回复了{{moveName}}的PP",
"hpHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回复了体力", "hpHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回复了体力",
"ivScannerUseQuestion": "对{{pokemonName}}使用个体值扫描仪?", "ivScannerUseQuestion": "对{{pokemonName}}使用个体值扫描仪?",
"wildPokemonWithAffix": "野生的{{pokemonName}}", "wildPokemonWithAffix": "野生的{{pokemonName}}",
"foePokemonWithAffix": "对手 {{pokemonName}}", "foePokemonWithAffix": "对手{{pokemonName}}",
"useMove": "{{pokemonNameWithAffix}}使用了\n{{moveName}}", "useMove": "{{pokemonNameWithAffix}}使用了\n{{moveName}}",
"drainMessage": "{{pokemonName}}\n吸取了体力", "drainMessage": "{{pokemonName}}\n吸取了体力",
"regainHealth": "{{pokemonName}}\n回复了体力", "regainHealth": "{{pokemonName}}\n回复了体力",
"fainted": "{{pokemonNameWithAffix}}\n倒下了", "fainted": "{{pokemonNameWithAffix}}\n倒下了",
"statsAnd": "and", "statsAnd": "",
"stats": "Stats", "stats": "能力",
"statRose_other": "{{pokemonNameWithAffix}}的 {{stats}}提高了!", "statRose_other": "{{pokemonNameWithAffix}}的{{stats}}提高了!",
"statSharplyRose_other": "{{pokemonNameWithAffix}}的 {{stats}}大幅提高了!", "statSharplyRose_other": "{{pokemonNameWithAffix}}的{{stats}}大幅提高了!",
"statRoseDrastically_other": "{{pokemonNameWithAffix}}的 {{stats}}极大幅提高了!", "statRoseDrastically_other": "{{pokemonNameWithAffix}}的{{stats}}极大幅提高了!",
"statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}的 {{stats}}已经无法再提高了!", "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}的{{stats}}已经无法再提高了!",
"statFell_other": "{{pokemonNameWithAffix}}的 {{stats}}降低了!", "statFell_other": "{{pokemonNameWithAffix}}的{{stats}}降低了!",
"statHarshlyFell_other": "{{pokemonNameWithAffix}}的 {{stats}}大幅降低了!", "statHarshlyFell_other": "{{pokemonNameWithAffix}}的{{stats}}大幅降低了!",
"statSeverelyFell_other": "{{pokemonNameWithAffix}}的 {{stats}}极大幅降低了!", "statSeverelyFell_other": "{{pokemonNameWithAffix}}的{{stats}}极大幅降低了!",
"statWontGoAnyLower_other": "{{pokemonNameWithAffix}}的 {{stats}}已经无法再降低了!", "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}的{{stats}}已经无法再降低了!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", "transformedIntoType": "{{pokemonName}}变成了\n{{type}}属性!",
"ppReduced": "降低了{{targetName}}的\n{{moveName}}的PP{{reduction}}点!", "ppReduced": "降低了{{targetName}}的\n{{moveName}}的PP{{reduction}}点!",
"retryBattle": "你要从对战开始时重试么?", "retryBattle": "你要从对战开始时重试么?",
"unlockedSomething": "{{unlockedThing}}\n已解锁。", "unlockedSomething": "{{unlockedThing}}\n已解锁。",
@ -147,5 +147,5 @@ export const battle: SimpleTranslationEntries = {
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}\n受到了{{moveName}}的伤害!", "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}\n受到了{{moveName}}的伤害!",
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削减了自己的体力,\n并诅咒了{{pokemonName}}", "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削减了自己的体力,\n并诅咒了{{pokemonName}}",
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}}\n正受到诅咒", "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}\n正受到诅咒",
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!" "battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}}蓄力了{{stockpiledCount}}次!"
} as const; } as const;

View File

@ -22,4 +22,10 @@ export const challenges: TranslationEntries = {
"desc": "你只能使用{{type}}\n属性的宝可梦", "desc": "你只能使用{{type}}\n属性的宝可梦",
"desc_default": "你只能使用所选\n属性的宝可梦" "desc_default": "你只能使用所选\n属性的宝可梦"
}, },
"freshStart": {
"name": "初次尝试",
"desc": "你只能使用御三家,就像是你第一次玩宝可梦肉鸽一样。",
"value.0": "关闭",
"value.1": "开启",
},
} as const; } as const;

View File

@ -18,10 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = {
"exportSlotSelect": "选择要导出的存档位。", "exportSlotSelect": "选择要导出的存档位。",
"importData": "导入数据", "importData": "导入数据",
"exportData": "导出数据", "exportData": "导出数据",
"linkDiscord": "Link Discord", "linkDiscord": "关联Discord",
"unlinkDiscord": "Unlink Discord", "unlinkDiscord": "解除关联Discord",
"linkGoogle": "Link Google", "linkGoogle": "关联Google",
"unlinkGoogle": "Unlink Google", "unlinkGoogle": "解除关联Google",
"cancel": "取消", "cancel": "取消",
"losingProgressionWarning": "你将失去自战斗开始以来的所有进度。\n是否继续", "losingProgressionWarning": "你将失去自战斗开始以来的所有进度。\n是否继续",
"noEggs": "当前没有任何蛋\n正在孵化中" "noEggs": "当前没有任何蛋\n正在孵化中"

View File

@ -17,7 +17,7 @@ export const menu: SimpleTranslationEntries = {
"username": "用户名", "username": "用户名",
"password": "密码", "password": "密码",
"login": "登录", "login": "登录",
"Or use": "Or use", "Or use": "或使用",
"register": "注册", "register": "注册",
"emptyUsername": "用户名不能为空", "emptyUsername": "用户名不能为空",
"invalidLoginUsername": "输入的用户名无效", "invalidLoginUsername": "输入的用户名无效",

View File

@ -153,7 +153,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"REVIVER_SEED": { name: "复活种子", description: "受到技能攻击伤害濒死时,\n恢复该宝可梦的HP至1/2。" }, "REVIVER_SEED": { name: "复活种子", description: "受到技能攻击伤害濒死时,\n恢复该宝可梦的HP至1/2。" },
"WHITE_HERB": { name: "White Herb", description: "An item to be held by a Pokémon. It will restore any lowered stat in battle." }, "WHITE_HERB": { name: "白色香草", description: "当携带它的宝可梦能力降低时,\n仅能回到之前的状态次。" },
"ETHER": { name: "PP单项小补剂" }, "ETHER": { name: "PP单项小补剂" },
"MAX_ETHER": { name: "PP单项全补剂" }, "MAX_ETHER": { name: "PP单项全补剂" },
@ -184,7 +184,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"SOOTHE_BELL": { name: "安抚之铃" }, "SOOTHE_BELL": { name: "安抚之铃" },
"SCOPE_LENS": { name: "焦点镜", description: "能看见弱点的镜片。携带它的宝可梦的招式 会变得容易击中要害。" }, "SCOPE_LENS": { name: "焦点镜", description: "能看见弱点的镜片。携带它的宝可梦的招式\n会变得容易击中要害。" },
"LEEK": { name: "大葱", description: "非常长且坚硬的茎。让大葱鸭携带后,\n招式会变得容易击中要害。" }, "LEEK": { name: "大葱", description: "非常长且坚硬的茎。让大葱鸭携带后,\n招式会变得容易击中要害。" },
"EVIOLITE": { name: "进化奇石", description: "携带后,还能进化的宝可梦的\n防御和特防就会提高。" }, "EVIOLITE": { name: "进化奇石", description: "携带后,还能进化的宝可梦的\n防御和特防就会提高。" },
@ -220,8 +220,8 @@ export const modifierType: ModifierTypeTranslationEntries = {
"LEFTOVERS": { name: "吃剩的东西", description: "携带后,在每个回合结束时恢复\n最大HP的1/16。" }, "LEFTOVERS": { name: "吃剩的东西", description: "携带后,在每个回合结束时恢复\n最大HP的1/16。" },
"SHELL_BELL": { name: "贝壳之铃", description: "携带后,在攻击对方成功造成伤害时,\n携带者的HP会恢复其所造成伤害的1/8。" }, "SHELL_BELL": { name: "贝壳之铃", description: "携带后,在攻击对方成功造成伤害时,\n携带者的HP会恢复其所造成伤害的1/8。" },
"TOXIC_ORB": { name: "剧毒宝珠", description: "触碰后会放出毒的神奇宝珠。携带后,在战斗时会变成剧毒状态。" }, "TOXIC_ORB": { name: "剧毒宝珠", description: "触碰后会放出毒的神奇宝珠。\n携带后,在战斗时会变成剧毒状态。" },
"FLAME_ORB": { name: "火焰宝珠", description: "触碰后会放出热量的神奇宝珠。携带后,在战斗时会变成灼伤状态。" }, "FLAME_ORB": { name: "火焰宝珠", description: "触碰后会放出热量的神奇宝珠。\n携带后,在战斗时会变成灼伤状态。" },
"BATON": { name: "接力棒", description: "允许在切换宝可梦时保留能力变化, 对陷阱\n同样生效。" }, "BATON": { name: "接力棒", description: "允许在切换宝可梦时保留能力变化, 对陷阱\n同样生效。" },
@ -247,10 +247,10 @@ export const modifierType: ModifierTypeTranslationEntries = {
"ENEMY_FUSED_CHANCE": { name: "融合硬币", description: "增加1%野生融合宝可梦出现概率。" }, "ENEMY_FUSED_CHANCE": { name: "融合硬币", description: "增加1%野生融合宝可梦出现概率。" },
}, },
SpeciesBoosterItem: { SpeciesBoosterItem: {
"LIGHT_BALL": { name: "电气球", description: "让皮卡丘携带后,攻击和特攻就会提高的神奇之球。" }, "LIGHT_BALL": { name: "电气球", description: "让皮卡丘携带后,\n攻击和特攻就会提高的神奇之球。" },
"THICK_CLUB": { name: "粗骨头", description: "某种坚硬的骨头。让卡拉卡拉或嘎啦嘎啦携带后,攻击就会提高。" }, "THICK_CLUB": { name: "粗骨头", description: "某种坚硬的骨头。\n让卡拉卡拉或嘎啦嘎啦携带后,攻击就会提高。" },
"METAL_POWDER": { name: "金属粉", description: "让百变怪携带后,防御就会提高的神奇粉末。非常细腻坚硬。" }, "METAL_POWDER": { name: "金属粉", description: "让百变怪携带后,防御就会提高的神奇粉末。\n非常细腻坚硬。" },
"QUICK_POWDER": { name: "速度粉", description: "让百变怪携带后,速度就会提高的神奇粉末。非常细腻坚硬。" } "QUICK_POWDER": { name: "速度粉", description: "让百变怪携带后,速度就会提高的神奇粉末。\n非常细腻坚硬。" }
}, },
TempBattleStatBoosterItem: { TempBattleStatBoosterItem: {
"x_attack": "力量强化", "x_attack": "力量强化",

View File

@ -5,7 +5,7 @@ export const modifier: SimpleTranslationEntries = {
"turnHealApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回复了体力", "turnHealApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回复了体力",
"hitHealApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回复了体力", "hitHealApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回复了体力",
"pokemonInstantReviveApply": "{{pokemonNameWithAffix}}用{{typeName}}\n恢复了活力", "pokemonInstantReviveApply": "{{pokemonNameWithAffix}}用{{typeName}}\n恢复了活力",
"pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}'s lowered stats were restored\nby its {{typeName}}!", "pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}降低的能力被{{typeName}}\复原了!",
"moneyInterestApply": "用{{typeName}}\n获得了 ₽{{moneyAmount}} 利息!", "moneyInterestApply": "用{{typeName}}\n获得了 ₽{{moneyAmount}} 利息!",
"turnHeldItemTransferApply": "{{pokemonNameWithAffix}}的{{itemName}}被\n{{pokemonName}}的{{typeName}}吸收了!", "turnHeldItemTransferApply": "{{pokemonNameWithAffix}}的{{itemName}}被\n{{pokemonName}}的{{typeName}}吸收了!",
"contactHeldItemTransferApply": "{{pokemonNameWithAffix}}的{{itemName}}被\n{{pokemonName}}的{{typeName}}夺取了!", "contactHeldItemTransferApply": "{{pokemonNameWithAffix}}的{{itemName}}被\n{{pokemonName}}的{{typeName}}夺取了!",

View File

@ -5,7 +5,7 @@ export const pokemonForm: SimpleTranslationEntries = {
"mega": "Mega {{pokemonName}}", "mega": "Mega {{pokemonName}}",
"mega-x": "Mega {{pokemonName}} X", "mega-x": "Mega {{pokemonName}} X",
"mega-y": "Mega {{pokemonName}} Y", "mega-y": "Mega {{pokemonName}} Y",
"primal": "原始回归{{pokemonName}}", "primal": "原始{{pokemonName}}",
"gigantamax": "超极巨{{pokemonName}}", "gigantamax": "超极巨{{pokemonName}}",
"eternamax": "无极巨{{pokemonName}}", "eternamax": "无极巨{{pokemonName}}",
@ -53,7 +53,7 @@ export const pokemonForm: SimpleTranslationEntries = {
"castformSunny": "晴天", "castformSunny": "晴天",
"castformRainy": "雨天", "castformRainy": "雨天",
"castformSnowy": "雪天", "castformSnowy": "雪天",
"deoxysNormal": "Normal", "deoxysNormal": "普通",
// 4G // 4G
"burmyPlant": "草木蓑衣", "burmyPlant": "草木蓑衣",
"burmySandy": "砂土蓑衣", "burmySandy": "砂土蓑衣",
@ -65,8 +65,8 @@ export const pokemonForm: SimpleTranslationEntries = {
"rotomFrost": "结冰", "rotomFrost": "结冰",
"rotomFan": "旋转", "rotomFan": "旋转",
"rotomMow": "切割", "rotomMow": "切割",
"giratinaAltered": "Altered", "giratinaAltered": "别种",
"shayminLand": "Land", "shayminLand": "陆上",
// 5G // 5G
"basculinRedStriped": "红条纹", "basculinRedStriped": "红条纹",
"basculinBlueStriped": "蓝条纹", "basculinBlueStriped": "蓝条纹",
@ -75,11 +75,11 @@ export const pokemonForm: SimpleTranslationEntries = {
"deerlingSummer": "夏天", "deerlingSummer": "夏天",
"deerlingAutumn": "秋天", "deerlingAutumn": "秋天",
"deerlingWinter": "冬天", "deerlingWinter": "冬天",
"tornadusIncarnate": "Incarnate", "tornadusIncarnate": "化身",
"thundurusIncarnate": "Incarnate", "thundurusIncarnate": "化身",
"landorusIncarnate": "Incarnate", "landorusIncarnate": "化身",
"keldeoOrdinary": "Ordinary", "keldeoOrdinary": "通常",
"meloettaAria": "Aria", "meloettaAria": "歌声",
// 6G // 6G
"froakieBattleBond": "牵绊变身", "froakieBattleBond": "牵绊变身",
"scatterbugMeadow": "花园花纹", "scatterbugMeadow": "花园花纹",
@ -156,11 +156,11 @@ export const pokemonForm: SimpleTranslationEntries = {
"eiscueNoIce": "解冻头", "eiscueNoIce": "解冻头",
"indeedeeMale": "雄性", "indeedeeMale": "雄性",
"indeedeeFemale": "雌性", "indeedeeFemale": "雌性",
"morpekoFullBelly": "Full Belly", "morpekoFullBelly": "满腹花纹",
"zacianHeroOfManyBattles": "Hero Of Many Battles", "zacianHeroOfManyBattles": "百战勇者",
"zamazentaHeroOfManyBattles": "Hero Of Many Battles", "zamazentaHeroOfManyBattles": "百战勇者",
"zarudeDada": "老爹", "zarudeDada": "老爹",
"enamorusIncarnate": "Incarnate", "enamorusIncarnate": "化身",
// 9G // 9G
"squawkabillyGreenPlumage": "绿羽毛", "squawkabillyGreenPlumage": "绿羽毛",
"squawkabillyBluePlumage": "蓝羽毛", "squawkabillyBluePlumage": "蓝羽毛",
@ -171,16 +171,16 @@ export const pokemonForm: SimpleTranslationEntries = {
"tatsugiriStretchy": "平挺姿势", "tatsugiriStretchy": "平挺姿势",
"gimmighoulChest": "宝箱形态", "gimmighoulChest": "宝箱形态",
"gimmighoulRoaming": "徒步形态", "gimmighoulRoaming": "徒步形态",
"koraidonApexBuild": "Apex Build", "koraidonApexBuild": "顶尖形态",
"koraidonLimitedBuild":"Limited Build", "koraidonLimitedBuild":"限制形态",
"koraidonSprintingBuild":"Sprinting Build", "koraidonSprintingBuild":"冲刺形态",
"koraidonSwimmingBuild":"Swimming Build", "koraidonSwimmingBuild":"游泳形态",
"koraidonGlidingBuild":"Gliding Build", "koraidonGlidingBuild":"滑翔形态",
"miraidonUltimateMode":"Ultimate Mode", "miraidonUltimateMode":"极限模式",
"miraidonLowPowerMode":"Low Power Mode", "miraidonLowPowerMode":"节能模式",
"miraidonDriveMode":"Drive Mode", "miraidonDriveMode":"驾驶模式",
"miraidonAquaticMode":"Aquatic Mode", "miraidonAquaticMode":"水上模式",
"miraidonGlideMode":"Glide Mode", "miraidonGlideMode":"滑翔模式",
"poltchageistCounterfeit": "冒牌货", "poltchageistCounterfeit": "冒牌货",
"poltchageistArtisan": "高档货", "poltchageistArtisan": "高档货",
"paldeaTaurosCombat": "斗战种", "paldeaTaurosCombat": "斗战种",

View File

@ -7,7 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
*/ */
export const starterSelectUiHandler: SimpleTranslationEntries = { export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam": "使用这些宝可梦开始游戏吗?", "confirmStartTeam": "使用这些宝可梦开始游戏吗?",
"invalidParty": "This is not a valid starting party!", "invalidParty": "初始队伍不可用!",
"gen1": "I", "gen1": "I",
"gen2": "II", "gen2": "II",
"gen3": "III", "gen3": "III",

View File

@ -16,6 +16,7 @@ import {
import { Abilities } from "#enums/abilities"; import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves"; import { Moves } from "#enums/moves";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
import { removeEnemyHeldItems } from "../utils/testUtils";
describe("Abilities - Intimidate", () => { describe("Abilities - Intimidate", () => {
let phaserGame: Phaser.Game; let phaserGame: Phaser.Game;
@ -44,6 +45,7 @@ describe("Abilities - Intimidate", () => {
it("single - wild with switch", async () => { it("single - wild with switch", async () => {
await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
game.onNextPrompt( game.onNextPrompt(
"CheckSwitchPhase", "CheckSwitchPhase",
Mode.CONFIRM, Mode.CONFIRM,
@ -74,6 +76,7 @@ describe("Abilities - Intimidate", () => {
it("single - boss should only trigger once then switch", async () => { it("single - boss should only trigger once then switch", async () => {
game.override.startingWave(10); game.override.startingWave(10);
await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
game.onNextPrompt( game.onNextPrompt(
"CheckSwitchPhase", "CheckSwitchPhase",
Mode.CONFIRM, Mode.CONFIRM,
@ -103,6 +106,7 @@ describe("Abilities - Intimidate", () => {
it("single - trainer should only trigger once with switch", async () => { it("single - trainer should only trigger once with switch", async () => {
game.override.startingWave(5); game.override.startingWave(5);
await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
game.onNextPrompt( game.onNextPrompt(
"CheckSwitchPhase", "CheckSwitchPhase",
Mode.CONFIRM, Mode.CONFIRM,
@ -133,6 +137,7 @@ describe("Abilities - Intimidate", () => {
game.override.battleType("double"); game.override.battleType("double");
game.override.startingWave(5); game.override.startingWave(5);
await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
game.onNextPrompt( game.onNextPrompt(
"CheckSwitchPhase", "CheckSwitchPhase",
Mode.CONFIRM, Mode.CONFIRM,
@ -159,6 +164,7 @@ describe("Abilities - Intimidate", () => {
game.override.battleType("double"); game.override.battleType("double");
game.override.startingWave(3); game.override.startingWave(3);
await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
game.onNextPrompt( game.onNextPrompt(
"CheckSwitchPhase", "CheckSwitchPhase",
Mode.CONFIRM, Mode.CONFIRM,
@ -185,6 +191,7 @@ describe("Abilities - Intimidate", () => {
game.override.battleType("double"); game.override.battleType("double");
game.override.startingWave(10); game.override.startingWave(10);
await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); await game.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
game.onNextPrompt( game.onNextPrompt(
"CheckSwitchPhase", "CheckSwitchPhase",
Mode.CONFIRM, Mode.CONFIRM,
@ -211,6 +218,7 @@ describe("Abilities - Intimidate", () => {
game.override.startingWave(2); game.override.startingWave(2);
game.override.moveset([Moves.AERIAL_ACE]); game.override.moveset([Moves.AERIAL_ACE]);
await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
@ -237,6 +245,7 @@ describe("Abilities - Intimidate", () => {
game.override.startingWave(2); game.override.startingWave(2);
game.override.moveset([Moves.SPLASH]); game.override.moveset([Moves.SPLASH]);
await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
@ -262,6 +271,7 @@ describe("Abilities - Intimidate", () => {
game.override.enemyMoveset([Moves.VOLT_SWITCH, Moves.VOLT_SWITCH, Moves.VOLT_SWITCH, Moves.VOLT_SWITCH]); game.override.enemyMoveset([Moves.VOLT_SWITCH, Moves.VOLT_SWITCH, Moves.VOLT_SWITCH, Moves.VOLT_SWITCH]);
game.override.startingWave(5); game.override.startingWave(5);
await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
@ -301,6 +311,7 @@ describe("Abilities - Intimidate", () => {
game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]);
game.override.startingWave(5); game.override.startingWave(5);
await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]);
removeEnemyHeldItems(game.scene);
let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; let battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats; let battleStatsPokemon = game.scene.getParty()[0].summonData.battleStats;
@ -340,9 +351,7 @@ describe("Abilities - Intimidate", () => {
game.override.startingWave(3); game.override.startingWave(3);
vi.spyOn(Overrides, "OPP_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "COIN_CASE" }]); vi.spyOn(Overrides, "OPP_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "COIN_CASE" }]);
await game.runToSummon([Species.MIGHTYENA]); await game.runToSummon([Species.MIGHTYENA]);
// Get rid of any modifiers that may alter power removeEnemyHeldItems(game.scene);
game.scene.clearEnemyHeldItemModifiers();
game.scene.clearEnemyModifiers();
await game.phaseInterceptor.to(CommandPhase, false); await game.phaseInterceptor.to(CommandPhase, false);
const battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; const battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1); expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
@ -369,6 +378,7 @@ describe("Abilities - Intimidate", () => {
}); });
await game.phaseInterceptor.run(EncounterPhase); await game.phaseInterceptor.run(EncounterPhase);
removeEnemyHeldItems(game.scene);
await game.phaseInterceptor.to(CommandPhase, false); await game.phaseInterceptor.to(CommandPhase, false);
const battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats; const battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;

View File

@ -164,14 +164,16 @@ function leaveOneEnemyPokemon(game: GameManager) {
function beforeTrial(phaserGame: Phaser.Game, single: boolean = false) { function beforeTrial(phaserGame: Phaser.Game, single: boolean = false) {
const game = new GameManager(phaserGame); const game = new GameManager(phaserGame);
game.override.battleType("double"); game.override
game.override.moveset([Moves.EARTHQUAKE, Moves.HYPER_VOICE, Moves.SURF, Moves.SPLASH]); .battleType("double")
game.override.ability(Abilities.BALL_FETCH); .moveset([Moves.EARTHQUAKE, Moves.HYPER_VOICE, Moves.SURF, Moves.SPLASH])
game.override.enemyMoveset(SPLASH_ONLY); .ability(Abilities.BALL_FETCH)
game.override.disableCrits(); .passiveAbility(Abilities.UNNERVE)
game.override.startingLevel(50); .enemyMoveset(SPLASH_ONLY)
game.override.enemyLevel(40); .disableCrits()
game.override.enemySpecies(Species.EEVEE); .startingLevel(50)
.enemyLevel(40)
.enemySpecies(Species.EEVEE);
return game; return game;
} }

View File

@ -1,14 +1,14 @@
// Function to convert Blob to string import { getDailyRunStarters } from "#app/data/daily-run";
import {getDailyRunStarters} from "#app/data/daily-run"; import { Gender } from "#app/data/gender";
import {Gender} from "#app/data/gender"; import { Species } from "#enums/species";
import {Species} from "#enums/species"; import { Starter } from "#app/ui/starter-select-ui-handler";
import {Starter} from "#app/ui/starter-select-ui-handler"; import { GameModes, getGameMode } from "#app/game-mode";
import {GameModes, getGameMode} from "#app/game-mode"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species";
import {getPokemonSpecies, getPokemonSpeciesForm} from "#app/data/pokemon-species"; import { PlayerPokemon } from "#app/field/pokemon";
import {PlayerPokemon} from "#app/field/pokemon";
import { Moves } from "#app/enums/moves"; import { Moves } from "#app/enums/moves";
import BattleScene from "#app/battle-scene"; import BattleScene from "#app/battle-scene";
/** Function to convert Blob to string */
export function blobToString(blob) { export function blobToString(blob) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const reader = new FileReader(); const reader = new FileReader();

View File

@ -1,3 +1,4 @@
import BattleScene from "#app/battle-scene.js";
import { Moves } from "#app/enums/moves.js"; import { Moves } from "#app/enums/moves.js";
import i18next, { type ParseKeys } from "i18next"; import i18next, { type ParseKeys } from "i18next";
import { vi } from "vitest"; import { vi } from "vitest";
@ -26,3 +27,11 @@ export function arrayOfRange(start: integer, end: integer) {
return Array.from({ length: end - start }, (_v, k) => k + start); return Array.from({ length: end - start }, (_v, k) => k + start);
} }
/**
* Removes all held items from enemy pokemon
* @param scene `game.scene`
*/
export function removeEnemyHeldItems(scene: BattleScene) {
scene.clearEnemyHeldItemModifiers();
scene.clearEnemyModifiers();
}