Merge branch 'partingShot_fix' of https://github.com/DustinLin/pokerogue into partingShot_fix

This commit is contained in:
DustinLin 2024-09-06 09:08:25 -07:00
commit 6e7e56acef
28 changed files with 3427 additions and 174 deletions

View File

@ -15,7 +15,7 @@ export const EGG_SEED = 1073741824;
// Rates for specific random properties in 1/x // Rates for specific random properties in 1/x
const DEFAULT_SHINY_RATE = 128; const DEFAULT_SHINY_RATE = 128;
const GACHA_SHINY_UP_SHINY_RATE = 64; const GACHA_SHINY_UP_SHINY_RATE = 64;
const SAME_SPECIES_EGG_SHINY_RATE = 24; const SAME_SPECIES_EGG_SHINY_RATE = 12;
const SAME_SPECIES_EGG_HA_RATE = 8; const SAME_SPECIES_EGG_HA_RATE = 8;
const MANAPHY_EGG_MANAPHY_RATE = 8; const MANAPHY_EGG_MANAPHY_RATE = 8;
const GACHA_EGG_HA_RATE = 192; const GACHA_EGG_HA_RATE = 192;

View File

@ -6270,6 +6270,8 @@ const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target:
const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(Abilities.COMATOSE); const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(Abilities.COMATOSE);
const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => user.scene.phaseQueue.find(phase => phase instanceof MovePhase) !== undefined;
export type MoveAttrFilter = (attr: MoveAttr) => boolean; export type MoveAttrFilter = (attr: MoveAttr) => boolean;
function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null, target: Pokemon | null, move: Move, args: any[]): Promise<void> { function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null, target: Pokemon | null, move: Move, args: any[]): Promise<void> {
@ -7008,7 +7010,8 @@ export function initMoves() {
.attr(StatusEffectAttr, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.FREEZE)
.target(MoveTarget.ALL_NEAR_ENEMIES), .target(MoveTarget.ALL_NEAR_ENEMIES),
new SelfStatusMove(Moves.PROTECT, Type.NORMAL, -1, 10, -1, 4, 2) new SelfStatusMove(Moves.PROTECT, Type.NORMAL, -1, 10, -1, 4, 2)
.attr(ProtectAttr), .attr(ProtectAttr)
.condition(failIfLastCondition),
new AttackMove(Moves.MACH_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) new AttackMove(Moves.MACH_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2)
.punchingMove(), .punchingMove(),
new StatusMove(Moves.SCARY_FACE, Type.NORMAL, 100, 10, -1, 0, 2) new StatusMove(Moves.SCARY_FACE, Type.NORMAL, 100, 10, -1, 0, 2)
@ -7059,7 +7062,8 @@ export function initMoves() {
.windMove() .windMove()
.target(MoveTarget.ALL_NEAR_ENEMIES), .target(MoveTarget.ALL_NEAR_ENEMIES),
new SelfStatusMove(Moves.DETECT, Type.FIGHTING, -1, 5, -1, 4, 2) new SelfStatusMove(Moves.DETECT, Type.FIGHTING, -1, 5, -1, 4, 2)
.attr(ProtectAttr), .attr(ProtectAttr)
.condition(failIfLastCondition),
new AttackMove(Moves.BONE_RUSH, Type.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2) new AttackMove(Moves.BONE_RUSH, Type.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2)
.attr(MultiHitAttr) .attr(MultiHitAttr)
.makesContact(false), .makesContact(false),
@ -7077,7 +7081,8 @@ export function initMoves() {
.attr(HitHealAttr) .attr(HitHealAttr)
.triageMove(), .triageMove(),
new SelfStatusMove(Moves.ENDURE, Type.NORMAL, -1, 10, -1, 4, 2) new SelfStatusMove(Moves.ENDURE, Type.NORMAL, -1, 10, -1, 4, 2)
.attr(ProtectAttr, BattlerTagType.ENDURING), .attr(ProtectAttr, BattlerTagType.ENDURING)
.condition(failIfLastCondition),
new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2) new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2)
.attr(StatStageChangeAttr, [ Stat.ATK ], -2), .attr(StatStageChangeAttr, [ Stat.ATK ], -2),
new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2)
@ -7824,7 +7829,8 @@ export function initMoves() {
.attr(StatStageChangeAttr, [ Stat.ATK, Stat.ACC ], 1, true), .attr(StatStageChangeAttr, [ Stat.ATK, Stat.ACC ], 1, true),
new StatusMove(Moves.WIDE_GUARD, Type.ROCK, -1, 10, -1, 3, 5) new StatusMove(Moves.WIDE_GUARD, Type.ROCK, -1, 10, -1, 3, 5)
.target(MoveTarget.USER_SIDE) .target(MoveTarget.USER_SIDE)
.attr(AddArenaTagAttr, ArenaTagType.WIDE_GUARD, 1, true, true), .attr(AddArenaTagAttr, ArenaTagType.WIDE_GUARD, 1, true, true)
.condition(failIfLastCondition),
new StatusMove(Moves.GUARD_SPLIT, Type.PSYCHIC, -1, 10, -1, 0, 5) new StatusMove(Moves.GUARD_SPLIT, Type.PSYCHIC, -1, 10, -1, 0, 5)
.attr(AverageStatsAttr, [ Stat.DEF, Stat.SPDEF ], "moveTriggers:sharedGuard"), .attr(AverageStatsAttr, [ Stat.DEF, Stat.SPDEF ], "moveTriggers:sharedGuard"),
new StatusMove(Moves.POWER_SPLIT, Type.PSYCHIC, -1, 10, -1, 0, 5) new StatusMove(Moves.POWER_SPLIT, Type.PSYCHIC, -1, 10, -1, 0, 5)
@ -7912,7 +7918,8 @@ export function initMoves() {
.attr(PositiveStatStagePowerAttr), .attr(PositiveStatStagePowerAttr),
new StatusMove(Moves.QUICK_GUARD, Type.FIGHTING, -1, 15, -1, 3, 5) new StatusMove(Moves.QUICK_GUARD, Type.FIGHTING, -1, 15, -1, 3, 5)
.target(MoveTarget.USER_SIDE) .target(MoveTarget.USER_SIDE)
.attr(AddArenaTagAttr, ArenaTagType.QUICK_GUARD, 1, true, true), .attr(AddArenaTagAttr, ArenaTagType.QUICK_GUARD, 1, true, true)
.condition(failIfLastCondition),
new SelfStatusMove(Moves.ALLY_SWITCH, Type.PSYCHIC, -1, 15, -1, 2, 5) new SelfStatusMove(Moves.ALLY_SWITCH, Type.PSYCHIC, -1, 15, -1, 2, 5)
.ignoresProtect() .ignoresProtect()
.unimplemented(), .unimplemented(),
@ -8083,7 +8090,8 @@ export function initMoves() {
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6) new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
.target(MoveTarget.USER_SIDE) .target(MoveTarget.USER_SIDE)
.attr(AddArenaTagAttr, ArenaTagType.MAT_BLOCK, 1, true, true) .attr(AddArenaTagAttr, ArenaTagType.MAT_BLOCK, 1, true, true)
.condition(new FirstMoveCondition()), .condition(new FirstMoveCondition())
.condition(failIfLastCondition),
new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6)
.condition((user, target, move) => user.battleData.berriesEaten.length > 0), .condition((user, target, move) => user.battleData.berriesEaten.length > 0),
new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, -1, 0, 6) new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, -1, 0, 6)
@ -8140,7 +8148,8 @@ export function initMoves() {
.triageMove(), .triageMove(),
new StatusMove(Moves.CRAFTY_SHIELD, Type.FAIRY, -1, 10, -1, 3, 6) new StatusMove(Moves.CRAFTY_SHIELD, Type.FAIRY, -1, 10, -1, 3, 6)
.target(MoveTarget.USER_SIDE) .target(MoveTarget.USER_SIDE)
.attr(AddArenaTagAttr, ArenaTagType.CRAFTY_SHIELD, 1, true, true), .attr(AddArenaTagAttr, ArenaTagType.CRAFTY_SHIELD, 1, true, true)
.condition(failIfLastCondition),
new StatusMove(Moves.FLOWER_SHIELD, Type.FAIRY, -1, 10, -1, 0, 6) new StatusMove(Moves.FLOWER_SHIELD, Type.FAIRY, -1, 10, -1, 0, 6)
.target(MoveTarget.ALL) .target(MoveTarget.ALL)
.attr(StatStageChangeAttr, [ Stat.DEF ], 1, false, (user, target, move) => target.getTypes().includes(Type.GRASS) && !target.getTag(SemiInvulnerableTag)), .attr(StatStageChangeAttr, [ Stat.DEF ], 1, false, (user, target, move) => target.getTypes().includes(Type.GRASS) && !target.getTag(SemiInvulnerableTag)),
@ -8165,7 +8174,8 @@ export function initMoves() {
.target(MoveTarget.BOTH_SIDES) .target(MoveTarget.BOTH_SIDES)
.unimplemented(), .unimplemented(),
new SelfStatusMove(Moves.KINGS_SHIELD, Type.STEEL, -1, 10, -1, 4, 6) new SelfStatusMove(Moves.KINGS_SHIELD, Type.STEEL, -1, 10, -1, 4, 6)
.attr(ProtectAttr, BattlerTagType.KINGS_SHIELD), .attr(ProtectAttr, BattlerTagType.KINGS_SHIELD)
.condition(failIfLastCondition),
new StatusMove(Moves.PLAY_NICE, Type.NORMAL, -1, 20, -1, 0, 6) new StatusMove(Moves.PLAY_NICE, Type.NORMAL, -1, 20, -1, 0, 6)
.attr(StatStageChangeAttr, [ Stat.ATK ], -1), .attr(StatStageChangeAttr, [ Stat.ATK ], -1),
new StatusMove(Moves.CONFIDE, Type.NORMAL, -1, 20, -1, 0, 6) new StatusMove(Moves.CONFIDE, Type.NORMAL, -1, 20, -1, 0, 6)
@ -8188,7 +8198,8 @@ export function initMoves() {
new AttackMove(Moves.MYSTICAL_FIRE, Type.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) new AttackMove(Moves.MYSTICAL_FIRE, Type.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6)
.attr(StatStageChangeAttr, [ Stat.SPATK ], -1), .attr(StatStageChangeAttr, [ Stat.SPATK ], -1),
new SelfStatusMove(Moves.SPIKY_SHIELD, Type.GRASS, -1, 10, -1, 4, 6) new SelfStatusMove(Moves.SPIKY_SHIELD, Type.GRASS, -1, 10, -1, 4, 6)
.attr(ProtectAttr, BattlerTagType.SPIKY_SHIELD), .attr(ProtectAttr, BattlerTagType.SPIKY_SHIELD)
.condition(failIfLastCondition),
new StatusMove(Moves.AROMATIC_MIST, Type.FAIRY, -1, 20, -1, 0, 6) new StatusMove(Moves.AROMATIC_MIST, Type.FAIRY, -1, 20, -1, 0, 6)
.attr(StatStageChangeAttr, [ Stat.SPDEF ], 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1)
.target(MoveTarget.NEAR_ALLY), .target(MoveTarget.NEAR_ALLY),
@ -8384,7 +8395,8 @@ export function initMoves() {
new AttackMove(Moves.FIRST_IMPRESSION, Type.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7) new AttackMove(Moves.FIRST_IMPRESSION, Type.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7)
.condition(new FirstMoveCondition()), .condition(new FirstMoveCondition()),
new SelfStatusMove(Moves.BANEFUL_BUNKER, Type.POISON, -1, 10, -1, 4, 7) new SelfStatusMove(Moves.BANEFUL_BUNKER, Type.POISON, -1, 10, -1, 4, 7)
.attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER), .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER)
.condition(failIfLastCondition),
new AttackMove(Moves.SPIRIT_SHACKLE, Type.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) new AttackMove(Moves.SPIRIT_SHACKLE, Type.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7)
.attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true)
.makesContact(false), .makesContact(false),
@ -8627,6 +8639,7 @@ export function initMoves() {
/* Unused */ /* Unused */
new SelfStatusMove(Moves.MAX_GUARD, Type.NORMAL, -1, 10, -1, 4, 8) new SelfStatusMove(Moves.MAX_GUARD, Type.NORMAL, -1, 10, -1, 4, 8)
.attr(ProtectAttr) .attr(ProtectAttr)
.condition(failIfLastCondition)
.ignoresVirtual(), .ignoresVirtual(),
/* End Unused */ /* End Unused */
new AttackMove(Moves.DYNAMAX_CANNON, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) new AttackMove(Moves.DYNAMAX_CANNON, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8)
@ -8805,7 +8818,8 @@ export function initMoves() {
.target(MoveTarget.USER_AND_ALLIES) .target(MoveTarget.USER_AND_ALLIES)
.ignoresProtect(), .ignoresProtect(),
new SelfStatusMove(Moves.OBSTRUCT, Type.DARK, 100, 10, -1, 4, 8) new SelfStatusMove(Moves.OBSTRUCT, Type.DARK, 100, 10, -1, 4, 8)
.attr(ProtectAttr, BattlerTagType.OBSTRUCT), .attr(ProtectAttr, BattlerTagType.OBSTRUCT)
.condition(failIfLastCondition),
new AttackMove(Moves.FALSE_SURRENDER, Type.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8), new AttackMove(Moves.FALSE_SURRENDER, Type.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8),
new AttackMove(Moves.METEOR_ASSAULT, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8) new AttackMove(Moves.METEOR_ASSAULT, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8)
.attr(RechargeAttr) .attr(RechargeAttr)
@ -9093,10 +9107,10 @@ export function initMoves() {
.attr(TeraBlastCategoryAttr) .attr(TeraBlastCategoryAttr)
.attr(TeraBlastTypeAttr) .attr(TeraBlastTypeAttr)
.attr(TeraBlastPowerAttr) .attr(TeraBlastPowerAttr)
.attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)),
.partial(),
new SelfStatusMove(Moves.SILK_TRAP, Type.BUG, -1, 10, -1, 4, 9) new SelfStatusMove(Moves.SILK_TRAP, Type.BUG, -1, 10, -1, 4, 9)
.attr(ProtectAttr, BattlerTagType.SILK_TRAP), .attr(ProtectAttr, BattlerTagType.SILK_TRAP)
.condition(failIfLastCondition),
new AttackMove(Moves.AXE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9) new AttackMove(Moves.AXE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9)
.attr(MissEffectAttr, crashDamageFunc) .attr(MissEffectAttr, crashDamageFunc)
.attr(NoEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc)
@ -9288,7 +9302,8 @@ export function initMoves() {
.attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc)
.attr(DoublePowerChanceAttr), .attr(DoublePowerChanceAttr),
new SelfStatusMove(Moves.BURNING_BULWARK, Type.FIRE, -1, 10, -1, 4, 9) new SelfStatusMove(Moves.BURNING_BULWARK, Type.FIRE, -1, 10, -1, 4, 9)
.attr(ProtectAttr, BattlerTagType.BURNING_BULWARK), .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK)
.condition(failIfLastCondition),
new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9)
.condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct?
new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9)

View File

@ -37,7 +37,7 @@
"name_female": "ワンパンウーマン" "name_female": "ワンパンウーマン"
}, },
"HealAchv": { "HealAchv": {
"description": "一つの 技や 特性や 持っているアイテムで\n{{healAmount}}{{HP}}を 一気に 回復する" "description": "一つの 技や 特性や 持たせたアイテムで\n{{HP}}{{healAmount}}を 一気に 回復する"
}, },
"250_HEAL": { "250_HEAL": {
"name": "回復発見者" "name": "回復発見者"
@ -52,7 +52,7 @@
"name": "ジョーイさん" "name": "ジョーイさん"
}, },
"LevelAchv": { "LevelAchv": {
"description": "一つの ポケモンを Lv{{level}}まで レベルアップする" "description": "一つの ポケモンを Lv.{{level}}まで 上げる"
}, },
"LV_100": { "LV_100": {
"name": "まだまだだよ" "name": "まだまだだよ"
@ -82,7 +82,7 @@
"name": "マスターリーグチャンピオン" "name": "マスターリーグチャンピオン"
}, },
"TRANSFER_MAX_STAT_STAGE": { "TRANSFER_MAX_STAT_STAGE": {
"name": "同力", "name": "連係プレー",
"description": "少なくとも 一つの 能力を 最大まで あげて\n他の 手持ちポケモンに バトンタッチする" "description": "少なくとも 一つの 能力を 最大まで あげて\n他の 手持ちポケモンに バトンタッチする"
}, },
"MAX_FRIENDSHIP": { "MAX_FRIENDSHIP": {
@ -94,7 +94,7 @@
"description": "一つの 手持ちポケモンを メガシンカさせる" "description": "一つの 手持ちポケモンを メガシンカさせる"
}, },
"GIGANTAMAX": { "GIGANTAMAX": {
"name": "太―くて 堪らない", "name": "太ーくて堪らない",
"description": "一つの 手持ちポケモンを キョダイマックスさせる" "description": "一つの 手持ちポケモンを キョダイマックスさせる"
}, },
"TERASTALLIZE": { "TERASTALLIZE": {
@ -106,7 +106,7 @@
"description": "一つの 手持ちポケモンを ステラ・テラスタルさせる" "description": "一つの 手持ちポケモンを ステラ・テラスタルさせる"
}, },
"SPLICE": { "SPLICE": {
"name": "インフィニット・フュジョン", "name": "インフィニット・フュジョン",
"description": "遺伝子のくさびで 二つの ポケモンを 吸収合体させる" "description": "遺伝子のくさびで 二つの ポケモンを 吸収合体させる"
}, },
"MINI_BLACK_HOLE": { "MINI_BLACK_HOLE": {
@ -205,7 +205,7 @@
"description": "{{type}}タイプの 単一タイプチャレンジを クリアする" "description": "{{type}}タイプの 単一タイプチャレンジを クリアする"
}, },
"MONO_NORMAL": { "MONO_NORMAL": {
"name": "凡人" "name": "凡人"
}, },
"MONO_FIGHTING": { "MONO_FIGHTING": {
"name": "八千以上だ!!" "name": "八千以上だ!!"
@ -223,7 +223,7 @@
"name": "タケシの挑戦状" "name": "タケシの挑戦状"
}, },
"MONO_BUG": { "MONO_BUG": {
"name": "チョウチョウせん者" "name": "チョウチョウ者"
}, },
"MONO_GHOST": { "MONO_GHOST": {
"name": "貞子ちゃん" "name": "貞子ちゃん"

View File

@ -1 +1,43 @@
{} {
"activeBattleEffects": "場の効果",
"player": "味方",
"neutral": "場の全員",
"enemy": "相手",
"sunny": "晴れ",
"rain": "雨",
"sandstorm": "砂あらし",
"hail": "あられ",
"snow": "雪",
"fog": "きり",
"heavyRain": "強い雨",
"harshSun": "大日照り",
"strongWinds": "乱気流",
"misty": "ミストフィールド",
"electric": "エレキフィールド",
"grassy": "グラスフィールド",
"psychic": "サイコフィールド",
"mudSport": "どろあそび",
"waterSport": "みずあそび",
"spikes": "まきびし",
"toxicSpikes": "どくびし",
"mist": "しろいきり",
"futureSight": "みらいよち",
"doomDesire": "はめつのねがい",
"wish": "ねがいごと",
"stealthRock": "ステルスロック",
"stickyWeb": "ねばねばネット",
"trickRoom": "トリックルーム",
"gravity": "じゅうりょく",
"reflect": "リフレクター",
"lightScreen": "ひかりのかべ",
"auroraVeil": "オーロラベール",
"quickGuard": "ファストガード",
"wideGuard": "ワイドガード",
"matBlock": "たたみがえし",
"craftyShield": "トリックガード",
"tailwind": "おいかぜ",
"happyHour": "ハッピータイム"
}

View File

@ -1 +1,150 @@
{} {
"music": "Music: ",
"missing_entries": "{{name}}",
"battle_kanto_champion": "B2W2 Kanto Champion Battle",
"battle_johto_champion": "B2W2 Johto Champion Battle",
"battle_hoenn_champion_g5": "B2W2 Hoenn Champion Battle",
"battle_hoenn_champion_g6": "ORAS Hoenn Champion Battle",
"battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle",
"battle_champion_alder": "BW Unova Champion Battle",
"battle_champion_iris": "B2W2 Unova Champion Battle",
"battle_kalos_champion": "XY Kalos Champion Battle",
"battle_alola_champion": "USUM Alola Champion Battle",
"battle_galar_champion": "SWSH Galar Champion Battle",
"battle_champion_geeta": "SV Champion Geeta Battle",
"battle_champion_nemona": "SV Champion Nemona Battle",
"battle_champion_kieran": "SV Champion Kieran Battle",
"battle_hoenn_elite": "ORAS Elite Four Battle",
"battle_unova_elite": "BW Elite Four Battle",
"battle_kalos_elite": "XY Elite Four Battle",
"battle_alola_elite": "SM Elite Four Battle",
"battle_galar_elite": "SWSH League Tournament Battle",
"battle_paldea_elite": "SV Elite Four Battle",
"battle_bb_elite": "SV BB League Elite Four Battle",
"battle_final_encounter": "PMD RTDX Rayquaza's Domain",
"battle_final": "BW Ghetsis Battle",
"battle_kanto_gym": "B2W2 Kanto Gym Battle",
"battle_johto_gym": "B2W2 Johto Gym Battle",
"battle_hoenn_gym": "B2W2 Hoenn Gym Battle",
"battle_sinnoh_gym": "B2W2 Sinnoh Gym Battle",
"battle_unova_gym": "BW Unova Gym Battle",
"battle_kalos_gym": "XY Kalos Gym Battle",
"battle_galar_gym": "SWSH Galar Gym Battle",
"battle_paldea_gym": "SV Paldea Gym Battle",
"battle_legendary_kanto": "XY Kanto Legendary Battle",
"battle_legendary_raikou": "HGSS Raikou Battle",
"battle_legendary_entei": "HGSS Entei Battle",
"battle_legendary_suicune": "HGSS Suicune Battle",
"battle_legendary_lugia": "HGSS Lugia Battle",
"battle_legendary_ho_oh": "HGSS Ho-oh Battle",
"battle_legendary_regis_g5": "B2W2 Legendary Titan Battle",
"battle_legendary_regis_g6": "ORAS Legendary Titan Battle",
"battle_legendary_gro_kyo": "ORAS Groudon & Kyogre Battle",
"battle_legendary_rayquaza": "ORAS Rayquaza Battle",
"battle_legendary_deoxys": "ORAS Deoxys Battle",
"battle_legendary_lake_trio": "ORAS Lake Guardians Battle",
"battle_legendary_sinnoh": "ORAS Sinnoh Legendary Battle",
"battle_legendary_dia_pal": "ORAS Dialga & Palkia Battle",
"battle_legendary_origin_forme": "LA Origin Dialga & Palkia Battle",
"battle_legendary_giratina": "ORAS Giratina Battle",
"battle_legendary_arceus": "HGSS Arceus Battle",
"battle_legendary_unova": "BW Unova Legendary Battle",
"battle_legendary_kyurem": "BW Kyurem Battle",
"battle_legendary_res_zek": "BW Reshiram & Zekrom Battle",
"battle_legendary_xern_yvel": "XY Xerneas & Yveltal Battle",
"battle_legendary_tapu": "SM Tapu Battle",
"battle_legendary_sol_lun": "SM Solgaleo & Lunala Battle",
"battle_legendary_ub": "SM Ultra Beast Battle",
"battle_legendary_dusk_dawn": "USUM Dusk Mane & Dawn Wings Necrozma Battle",
"battle_legendary_ultra_nec": "USUM Ultra Necrozma Battle",
"battle_legendary_zac_zam": "SWSH Zacian & Zamazenta Battle",
"battle_legendary_glas_spec": "SWSH Glastrier & Spectrier Battle",
"battle_legendary_calyrex": "SWSH Calyrex Battle",
"battle_legendary_riders": "SWSH Ice & Shadow Rider Calyrex Battle",
"battle_legendary_birds_galar": "SWSH Galarian Legendary Birds Battle",
"battle_legendary_ruinous": "SV Treasures of Ruin Battle",
"battle_legendary_kor_mir": "SV Depths of Area Zero Battle",
"battle_legendary_loyal_three": "SV Loyal Three Battle",
"battle_legendary_ogerpon": "SV Ogerpon Battle",
"battle_legendary_terapagos": "SV Terapagos Battle",
"battle_legendary_pecharunt": "SV Pecharunt Battle",
"battle_rival": "BW Rival Battle",
"battle_rival_2": "BW N Battle",
"battle_rival_3": "BW Final N Battle",
"battle_trainer": "BW Trainer Battle",
"battle_wild": "BW Wild Battle",
"battle_wild_strong": "BW Strong Wild Battle",
"end_summit": "PMD RTDX Sky Tower Summit",
"battle_rocket_grunt": "HGSS Team Rocket Battle",
"battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle",
"battle_galactic_grunt": "BDSP Team Galactic Battle",
"battle_plasma_grunt": "BW Team Plasma Battle",
"battle_flare_grunt": "XY Team Flare Battle",
"battle_aether_grunt": "SM Aether Foundation Battle",
"battle_skull_grunt": "SM Team Skull Battle",
"battle_macro_grunt": "SWSH Trainer Battle",
"battle_galactic_admin": "BDSP Team Galactic Admin Battle",
"battle_skull_admin": "SM Team Skull Admin Battle",
"battle_oleana": "SWSH Oleana Battle",
"battle_rocket_boss": "USUM Giovanni Battle",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle",
"battle_galactic_boss": "BDSP Cyrus Battle",
"battle_plasma_boss": "B2W2 Ghetsis Battle",
"battle_flare_boss": "XY Lysandre Battle",
"battle_aether_boss": "SM Lusamine Battle",
"battle_skull_boss": "SM Guzma Battle",
"battle_macro_boss": "SWSH Rose Battle",
"abyss": "PMD EoS Dark Crater",
"badlands": "PMD EoS Barren Valley",
"beach": "PMD EoS Drenched Bluff",
"cave": "PMD EoS Sky Peak Cave",
"construction_site": "PMD EoS Boulder Quarry",
"desert": "PMD EoS Northern Desert",
"dojo": "PMD EoS Marowak Dojo",
"end": "PMD RTDX Sky Tower",
"factory": "PMD EoS Concealed Ruins",
"fairy_cave": "PMD EoS Star Cave",
"forest": "PMD EoS Dusk Forest",
"grass": "PMD EoS Apple Woods",
"graveyard": "PMD EoS Mystifying Forest",
"ice_cave": "PMD EoS Vast Ice Mountain",
"island": "PMD EoS Craggy Coast",
"jungle": "Lmz - Jungle",
"laboratory": "Firel - Laboratory",
"lake": "PMD EoS Crystal Cave",
"meadow": "PMD EoS Sky Peak Forest",
"metropolis": "Firel - Metropolis",
"mountain": "PMD EoS Mt. Horn",
"plains": "PMD EoS Sky Peak Prairie",
"power_plant": "PMD EoS Far Amp Plains",
"ruins": "PMD EoS Deep Sealed Ruin",
"sea": "Andr06 - Marine Mystique",
"seabed": "Firel - Seabed",
"slum": "Andr06 - Sneaky Snom",
"snowy_forest": "PMD EoS Sky Peak Snowfield",
"space": "Firel - Aether",
"swamp": "PMD EoS Surrounded Sea",
"tall_grass": "PMD EoS Foggy Forest",
"temple": "PMD EoS Aegis Cave",
"town": "PMD EoS Random Dungeon Theme 3",
"volcano": "PMD EoS Steam Cave",
"wasteland": "PMD EoS Hidden Highland",
"encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)",
"encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)",
"encounter_clerk": "BW Trainers' Eyes Meet (Clerk)",
"encounter_cyclist": "BW Trainers' Eyes Meet (Cyclist)",
"encounter_lass": "BW Trainers' Eyes Meet (Lass)",
"encounter_parasol_lady": "BW Trainers' Eyes Meet (Parasol Lady)",
"encounter_pokefan": "BW Trainers' Eyes Meet (Poke Fan)",
"encounter_psychic": "BW Trainers' Eyes Meet (Psychic)",
"encounter_rich": "BW Trainers' Eyes Meet (Gentleman)",
"encounter_rival": "BW Cheren",
"encounter_roughneck": "BW Trainers' Eyes Meet (Roughneck)",
"encounter_scientist": "BW Trainers' Eyes Meet (Scientist)",
"encounter_twins": "BW Trainers' Eyes Meet (Twins)",
"encounter_youngster": "BW Trainers' Eyes Meet (Youngster)",
"heal": "BW Pokémon Heal",
"menu": "PMD EoS Welcome to the World of Pokémon!",
"title": "PMD EoS Top Menu Theme"
}

View File

@ -1,5 +1,5 @@
{ {
"title": "チャレンジ設定", "title": "チャレンジ設定",
"illegalEvolution": "{{pokemon}}は このチャレンジで\n対象外の ポケモンに なってしまった", "illegalEvolution": "{{pokemon}}は このチャレンジで\n対象外の ポケモンに なってしまった",
"singleGeneration": { "singleGeneration": {
"name": "単一世代", "name": "単一世代",

View File

@ -1 +1,8 @@
{} {
"start": "スタート",
"luckIndicator": "運:",
"shinyOnHover": "色違い",
"commonShiny": "ふつう",
"rareShiny": "レア",
"epicShiny": "超レア"
}

View File

@ -1 +1,84 @@
{} {
"blue_red_double": {
"encounter": {
"1": "Blue: Hey Red, let's show them what we're made of!\n$Red: ...\n$Blue: This is Pallet Town Power!"
},
"victory": {
"1": "Blue: That was a great battle!\n$Red: ..."
}
},
"red_blue_double": {
"encounter": {
"1": "Red: ...!\n$Blue: He never talks much.\n$Blue: But dont let that fool you! He is a champ after all!"
},
"victory": {
"1": "Red: ...!\n$Blue: Next time we will beat you!"
}
},
"tate_liza_double": {
"encounter": {
"1": "Tate: Are you surprised?\n$Liza: We are two gym leaders at once!\n$Tate: We are twins!\n$Liza: We dont need to talk to understand each other!\n$Tate: Twice the power...\n$Liza: Can you handle it?"
},
"victory": {
"1": "Tate: What? Our combination was perfect!\n$Liza: Looks like we need to train more..."
}
},
"liza_tate_double": {
"encounter": {
"1": "Liza: Hihihi... Are you surprised?\n$Tate: Yes, we are really two gym leaders at once!\n$Liza: This is my twin brother Tate!\n$Tate: And this is my twin sister Liza!\n$Liza: Don't you think we are a perfect combination?"
},
"victory": {
"1": "Liza: Are we...\n$Tate: ...not as strong as we thought?"
}
},
"wallace_steven_double": {
"encounter": {
"1": "Steven: Wallace, let's show them the power of the champions!\n$Wallace: We will show you the power of Hoenn!\n$Steven: Let's go!"
},
"victory": {
"1": "Steven: That was a great battle!\n$Wallace: We will win next time!"
}
},
"steven_wallace_double": {
"encounter": {
"1": "Steven: Do you have any rare Pokémon?\n$Wallace: Steven... We are here for a battle, not to show off our Pokémon.\n$Steven: Oh... I see... Let's go then!"
},
"victory": {
"1": "Steven: Now that we are done with the battle, let's show off our Pokémon!\n$Wallace: Steven..."
}
},
"alder_iris_double": {
"encounter": {
"1": "Alder: We are the strongest trainers in Unova!\n$Iris: Fights against strong trainers are the best!"
},
"victory": {
"1": "Alder: Wow! You are super strong!\n$Iris: We will win next time!"
}
},
"iris_alder_double": {
"encounter": {
"1": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?",
"1_female": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?"
},
"victory": {
"1": "Iris: A loss like this is not easy to take...\n$Alder: But we will only get stronger with every loss!"
}
},
"piers_marnie_double": {
"encounter": {
"1": "Marnie: Brother, let's show them the power of Spikemuth!\n$Piers: We bring darkness!"
},
"victory": {
"1": "Marnie: You brought light to our darkness!\n$Piers: Its too bright..."
}
},
"marnie_piers_double": {
"encounter": {
"1": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing...",
"1_female": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing..."
},
"victory": {
"1": "Piers: Now that was a great concert!\n$Marnie: Brother..."
}
}
}

View File

@ -1 +1,10 @@
{} {
"encounter": "It appears the time has finally come once again.\nYou know why you have come here, do you not?\n$You were drawn here, because you have been here before.\nCountless times.\n$Though, perhaps it can be counted.\nTo be precise, this is in fact your {{cycleCount}} cycle.\n$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.\n$Until now you have yet to succeed, but I sense a different presence in you this time.\n\n$You are the only one here, though it is as if there is… another.\n$Will you finally prove a formidable challenge to me?\nThe challenge I have longed after for millennia?\n$We begin.",
"encounter_female": "It appears the time has finally come once again.\nYou know why you have come here, do you not?\n$You were drawn here, because you have been here before.\nCountless times.\n$Though, perhaps it can be counted.\nTo be precise, this is in fact your {{cycleCount}} cycle.\n$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.\n$Until now you have yet to succeed, but I sense a different presence in you this time.\n\n$You are the only one here, though it is as if there is… another.\n$Will you finally prove a formidable challenge to me?\nThe challenge I have longed after for millennia?\n$We begin.",
"firstStageWin": "I see. The presence I felt was indeed real.\nIt appears I no longer need to hold back.\n$Do not disappoint me.",
"secondStageWin": "…Magnificent.",
"key_ordinal_one": "st",
"key_ordinal_two": "nd",
"key_ordinal_few": "rd",
"key_ordinal_other": "th"
}

View File

@ -1 +1,6 @@
{} {
"ending": "@c{shock}You're back?@d{32} Does that mean…@d{96} you won?!\n@c{smile_ehalf}I should have known you had it in you.\n$@c{smile_eclosed}Of course… I always had that feeling.\n@c{smile}It's over now, right? You ended the loop.\n$@c{smile_ehalf}You fulfilled your dream too, didn't you?\nYou didn't lose even once.\n$I'll be the only one to remember what you did.\n@c{angry_mopen}I'll try not to forget!\n$@c{smile_wave_wink}Just kidding!@d{64} @c{smile}I'd never forget.@d{32}\nYour legend will live on in our hearts.\n$@c{smile_wave}Anyway,@d{64} it's getting late…@d{96} I think?\nIt's hard to tell in this place.\n$Let's go home. @c{smile_wave_wink}Maybe tomorrow, we can have another battle, for old time's sake?",
"ending_female": "@c{smile}Oh? You won?@d{96} @c{smile_eclosed}I guess I should've known.\nBut, you're back now.\n$@c{smile}It's over.@d{64} You ended the loop.\n$@c{serious_smile_fists}You fulfilled your dream too, didn't you?\nYou didn't lose even once.\n$@c{neutral}I'm the only one who'll remember what you did.@d{96}\nI guess that's okay, isn't it?\n$@c{serious_smile_fists}Your legend will always live on in our hearts.\n$@c{smile_eclosed}Anyway, I've had about enough of this place, haven't you? Let's head home.\n$@c{serious_smile_fists}Maybe when we get back, we can have another battle?\nIf you're up to it.",
"ending_endless": "Congratulations on reaching the current end!\nMore content is coming soon.",
"ending_name": "Devs"
}

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{ {
"pp": "PP", "pp": "PP",
"power": "いりょく", "power": "威力",
"accuracy": "めいちゅう", "accuracy": "命中",
"abilityFlyInText": " {{pokemonName}}の {{passive}}{{abilityName}}", "abilityFlyInText": " {{pokemonName}}の\n{{passive}}{{abilityName}}",
"passive": "Passive " "passive": "パッシブ "
} }

View File

@ -32,7 +32,7 @@
"noPokerus": "ポケルス - なし", "noPokerus": "ポケルス - なし",
"sortByNumber": "No.", "sortByNumber": "No.",
"sortByCost": "ポイント", "sortByCost": "ポイント",
"sortByCandies": "の数", "sortByCandies": "アメの数",
"sortByIVs": "個体値", "sortByIVs": "個体値",
"sortByName": "名前" "sortByName": "名前"
} }

View File

@ -12,26 +12,26 @@
"dailyRunAttempts": "デイリーラン", "dailyRunAttempts": "デイリーラン",
"dailyRunWins": "デイリーラン勝利", "dailyRunWins": "デイリーラン勝利",
"endlessRuns": "エンドレスラン", "endlessRuns": "エンドレスラン",
"highestWaveEndless": "エンドレス最高", "highestWaveEndless": "エンドレス最高ラウンド",
"highestMoney": "最大貯金", "highestMoney": "最大貯金",
"highestDamage": "最大ダメージ", "highestDamage": "最大ダメージ",
"highestHPHealed": "最大HP回復", "highestHPHealed": "最大HP回復",
"pokemonEncountered": "遭遇したポケモン", "pokemonEncountered": "遭遇したポケモン",
"pokemonDefeated": "倒したポケモン", "pokemonDefeated": "倒したポケモン",
"pokemonCaught": "捕まえたポケモン", "pokemonCaught": "捕まえたポケモン",
"eggsHatched": "孵化したタマゴ", "eggsHatched": "ふかしたタマゴ",
"subLegendsSeen": "見つけた順伝説ポケモン", "subLegendsSeen": "見つけた順伝説ポケモン",
"subLegendsCaught": "捕まえた準伝説ポケモン", "subLegendsCaught": "捕まえた準伝説ポケモン",
"subLegendsHatched": "孵化した準伝説ポケモン", "subLegendsHatched": "ふかした準伝説ポケモン",
"legendsSeen": "見つけた伝説ポケモン", "legendsSeen": "見つけた伝説ポケモン",
"legendsCaught": "捕まえた伝説ポケモン", "legendsCaught": "捕まえた伝説ポケモン",
"legendsHatched": "孵化した伝説ポケモン", "legendsHatched": "ふかした伝説ポケモン",
"mythicalsSeen": "見つけた幻ポケモン", "mythicalsSeen": "見つけた幻ポケモン",
"mythicalsCaught": "捕まえた幻ポケモン", "mythicalsCaught": "捕まえた幻ポケモン",
"mythicalsHatched": "孵化した幻ポケモン", "mythicalsHatched": "ふかした幻ポケモン",
"shiniesSeen": "見つけた色違いポケモン", "shiniesSeen": "見つけた色違いポケモン",
"shiniesCaught": "捕まえた色違いポケモン", "shiniesCaught": "捕まえた色違いポケモン",
"shiniesHatched": "孵化した色違いポケモン", "shiniesHatched": "ふかした色違いポケモン",
"pokemonFused": "吸収合体したポケモン", "pokemonFused": "吸収合体したポケモン",
"trainersDefeated": "倒したトレーナー", "trainersDefeated": "倒したトレーナー",
"eggsPulled": "引いたタマゴ", "eggsPulled": "引いたタマゴ",

View File

@ -1,8 +1,8 @@
{ {
"Erratic": "60まんタイプ", "Erratic": "60タイプ",
"Fast": "80まんタイプ", "Fast": "80タイプ",
"Medium_Fast": "100まんタイプ", "Medium_Fast": "100タイプ",
"Medium_Slow": "105まんタイプ", "Medium_Slow": "105タイプ",
"Slow": "125まんタイプ", "Slow": "125タイプ",
"Fluctuating": "164まんタイプ" "Fluctuating": "164タイプ"
} }

View File

@ -24,6 +24,6 @@
"linkGoogle": "Google連携", "linkGoogle": "Google連携",
"unlinkGoogle": "Google連携解除", "unlinkGoogle": "Google連携解除",
"cancel": "キャンセル", "cancel": "キャンセル",
"losingProgressionWarning": "戦闘開始からの データが 保存されません。\nよろしいですか", "losingProgressionWarning": "戦闘開始からの データが セーブされません。\nよろしいですか",
"noEggs": "現在は タマゴを 孵化していません!" "noEggs": "現在は タマゴを ふかしていません!"
} }

View File

@ -353,7 +353,7 @@
"description": "やせいのポケモンがかくれとくせいをもつかくりつをおおきくふやす" "description": "やせいのポケモンがかくれとくせいをもつかくりつをおおきくふやす"
}, },
"IV_SCANNER": { "IV_SCANNER": {
"name": "こたいち たんちき", "name": "こたいちスキャナー",
"description": "やせいのポケモンのこたいちをスキャンできる。スタックごとに2つのこたいちがあきらかになる。もっともたかいこたいちがさいしょにひょうじされる" "description": "やせいのポケモンのこたいちをスキャンできる。スタックごとに2つのこたいちがあきらかになる。もっともたかいこたいちがさいしょにひょうじされる"
}, },
"DNA_SPLICERS": { "DNA_SPLICERS": {

View File

@ -1,12 +1,12 @@
{ {
"surviveDamageApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で もちこたえた!", "surviveDamageApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で もちこたえた!",
"turnHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 回復!", "turnHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 体力を 回復した",
"hitHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 回復!", "hitHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 体力を 回復した",
"pokemonInstantReviveApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 復活した!", "pokemonInstantReviveApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 復活した!",
"resetNegativeStatStageApply": "{{pokemonNameWithAffix}}は {{typeName}}で\n下がった能力が 元に戻った", "resetNegativeStatStageApply": "{{pokemonNameWithAffix}}は {{typeName}}で\n下がった能力が 元に戻った",
"moneyInterestApply": "{{typeName}}から {{moneyAmount}}円 取得した!", "moneyInterestApply": "{{typeName}}から {{moneyAmount}}円 取得した!",
"turnHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 吸い取った!", "turnHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 吸い取った!",
"contactHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を うばい取った!", "contactHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 奪い取った!",
"enemyTurnHealApply": "{{pokemonNameWithAffix}}は\n体力を 回復", "enemyTurnHealApply": "{{pokemonNameWithAffix}}は\n体力を 回復",
"bypassSpeedChanceApply": "{{pokemonName}}は {{itemName}}で\n行動が はやくなった" "bypassSpeedChanceApply": "{{pokemonName}}は {{itemName}}で\n行動が はやくなった"
} }

View File

@ -1,64 +1,69 @@
{ {
"hitWithRecoil": "{{pokemonName}}は\nはんどうによる ダメージを うけた", "hitWithRecoil": "{{pokemonName}}は\n反動による ダメージを 受けた",
"cutHpPowerUpMove": "{{pokemonName}}は\nたいりょくを けずって パワーぜんかい", "cutHpPowerUpMove": "{{pokemonName}}は\n体力を 削って 技の 威力を 上がった",
"absorbedElectricity": "{{pokemonName}}は\n でんきを きゅうしゅうした", "absorbedElectricity": "{{pokemonName}}は\n 電気を 吸収した",
"switchedStatChanges": "{{pokemonName}}は あいてと じぶんの\nのうりょくへんかを いれかえた", "switchedStatChanges": "{{pokemonName}}は 相手と 自分の\n能力変化を 入れ替えた",
"sharedGuard": "{{pokemonName}}は\nおたがいのガードを シェアした", "switchedTwoStatChanges": "{{pokemonName}}は 相手と 自分の {{firstStat}}と\n{{secondStat}}の 能力変化を 入れ替えた!",
"sharedPower": "{{pokemonName}}は\nおたがいのパワーを シェアした", "switchedStat": "{{pokemonName}}は 相手と {{stat}}を 入れ替えた!",
"goingAllOutForAttack": "{{pokemonName}}は\nほんきを だした", "sharedGuard": "{{pokemonName}}は\nお互いのガードを シェアした",
"regainedHealth": "{{pokemonName}}は\nたいりょくを かいふくした", "sharedPower": "{{pokemonName}}は\nお互いのパワーを シェアした",
"keptGoingAndCrashed": "いきおいあまって {{pokemonName}}は\nじめんに ぶつかった", "goingAllOutForAttack": "{{pokemonName}}は\n本気を 出した",
"fled": "{{pokemonName}}は にげだした!", "regainedHealth": "{{pokemonName}}は\n体力を 回復した",
"cannotBeSwitchedOut": "{{pokemonName}}を\nもどすことが できない", "keptGoingAndCrashed": "勢い余って {{pokemonName}}は\n地面に ぶつかった",
"swappedAbilitiesWithTarget": "{{pokemonName}}は\nおたがいの とくせいを いれかえた", "fled": "{{pokemonName}}は 逃げ出した!",
"coinsScatteredEverywhere": "こばんが あたりに ちらばった!", "cannotBeSwitchedOut": "{{pokemonName}}を\n戻すことが できない",
"swappedAbilitiesWithTarget": "{{pokemonName}}は\nお互いの 特性を 入れ替えた",
"coinsScatteredEverywhere": "小判が 辺りに 散らばった!",
"attackedByItem": "{{pokemonName}}に\n{{itemName}}が おそいかかる!", "attackedByItem": "{{pokemonName}}に\n{{itemName}}が おそいかかる!",
"whippedUpAWhirlwind": "{{pokemonName}}の まわりで\nくうきが うずをまく", "whippedUpAWhirlwind": "{{pokemonName}}の 周りで\n空気が 渦を巻く",
"flewUpHigh": "{{pokemonName}}は\nそらたかく とびあがった", "flewUpHigh": "{{pokemonName}}は\n空高く 飛び上がった",
"tookInSunlight": "{{pokemonName}}は\nひかりを きゅうしゅうした!", "tookInSunlight": "{{pokemonName}}は\n光を 吸収した!",
"dugAHole": "{{pokemonName}}は\nじめんに もぐった", "dugAHole": "{{pokemonName}}は\n地面に 潜った",
"loweredItsHead": "{{pokemonName}}は\nくびを ひっこめた", "loweredItsHead": "{{pokemonName}}は\n首を 引っ込めた",
"isGlowing": "{{pokemonName}}を\nはげしいひかりが つつむ", "isGlowing": "{{pokemonName}}を\n激しい光が 包む",
"bellChimed": "すずのおとが ひびきわたった!", "bellChimed": "鈴の音が 響き渡った!",
"foresawAnAttack": "{{pokemonName}}は\nみらいに こうげきを よちした", "foresawAnAttack": "{{pokemonName}}は\n未来に 攻撃を 予知した",
"hidUnderwater": "{{pokemonName}}は\nすいちゅうに みをひそめた", "isTighteningFocus": "{{pokemonName}}は\n集中力を 高めている",
"soothingAromaWaftedThroughArea": "ここちよい かおりが ひろがった!", "hidUnderwater": "{{pokemonName}}は\n水中に 身を潜めた",
"sprangUp": "{{pokemonName}}は\nたかく とびはねた", "soothingAromaWaftedThroughArea": "心地よい 香りが 広がった!",
"choseDoomDesireAsDestiny": "{{pokemonName}}は\nはめつのねがいを みらいに たくした", "sprangUp": "{{pokemonName}}は\n高く 飛び跳ねた",
"vanishedInstantly": "{{pokemonName}}の すがたが\nいっしゅんにして きえた", "choseDoomDesireAsDestiny": "{{pokemonName}}は\nはめつのねがいを 未来に 託した",
"tookTargetIntoSky": "{{pokemonName}}は {{targetName}}を\nじょうくうに つれさった", "vanishedInstantly": "{{pokemonName}}の 姿が\n一瞬にして 消えた",
"becameCloakedInFreezingLight": "{{pokemonName}}は\nつめたいひかりに つつまれた", "tookTargetIntoSky": "{{pokemonName}}は {{targetName}}を\n上空に 連れ去った",
"becameCloakedInFreezingAir": "{{pokemonName}}は\nこごえるくうきに つつまれた", "becameCloakedInFreezingLight": "{{pokemonName}}は\n冷たい光に 包まれた",
"isChargingPower": "{{pokemonName}}は\nパワーを ためこんでいる", "becameCloakedInFreezingAir": "{{pokemonName}}は\n凍える空気に 包まれた",
"burnedItselfOut": "{{pokemonName}}の ほのうは\nもえつきた", "isChargingPower": "{{pokemonName}}は\nパワーを 溜め込んでいる",
"startedHeatingUpBeak": "{{pokemonName}}は\nクチバシを かねつしはじめた", "burnedItselfOut": "{{pokemonName}}の 炎は 燃え尽きた!",
"startedHeatingUpBeak": "{{pokemonName}}は\nクチバシを 加熱し始めた",
"setUpShellTrap": "{{pokemonName}}は\nトラップシェルを 仕掛けた", "setUpShellTrap": "{{pokemonName}}は\nトラップシェルを 仕掛けた",
"isOverflowingWithSpacePower": "{{pokemonName}}に\nうちゅうの ちからが あふれだす!", "isOverflowingWithSpacePower": "{{pokemonName}}に\n宇宙の 力が 溢れ出す!",
"usedUpAllElectricity": "{{pokemonName}}は\nでんきを つかいきった!", "usedUpAllElectricity": "{{pokemonName}}は\n電気を 使い切った!",
"stoleItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を ぬすんだ!", "stoleItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を んだ!",
"incineratedItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を やした!", "incineratedItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を やした!",
"knockedOffItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を はたきとした!", "knockedOffItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を はたきとした!",
"tookMoveAttack": "{{pokemonName}}は\n{{moveName}}の こうげきを うけた!", "tookMoveAttack": "{{pokemonName}}は\n{{moveName}}の 攻撃を 受けた!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}}は\nたいりょくを けずって {{statName}}ぜんかい", "cutOwnHpAndMaximizedStat": "{{pokemonName}}は\n体力を 削って {{statName}}全開",
"copiedStatChanges": "{{pokemonName}}は {{targetName}}の\nのうりょくへんかを コピーした!", "copiedStatChanges": "{{pokemonName}}は {{targetName}}の\n能力変化を コピーした!",
"magnitudeMessage": "マグニチュード{{magnitude}}", "magnitudeMessage": "マグニチュード{{magnitude}}",
"tookAimAtTarget": "{{pokemonName}}は {{targetName}}に\nねらいを さだめた!", "tookAimAtTarget": "{{pokemonName}}は {{targetName}}に\n狙いを 定めた!",
"transformedIntoType": "{{pokemonName}}は\n{{typeName}}タイプに なった!", "transformedIntoType": "{{pokemonName}}は\n{{typeName}}タイプに なった!",
"copiedMove": "{{pokemonName}}は\n{{moveName}}を コピーした!", "copiedMove": "{{pokemonName}}は\n{{moveName}}を コピーした!",
"sketchedMove": "{{pokemonName}}は\n{{moveName}}を スケッチした!", "sketchedMove": "{{pokemonName}}は\n{{moveName}}を スケッチした!",
"acquiredAbility": "{{pokemonName}}の とくせいが\n{{abilityName}}に なった!", "acquiredAbility": "{{pokemonName}}の 特性が\n{{abilityName}}に なった!",
"copiedTargetAbility": "{{pokemonName}}は\n{{targetName}}の {{abilityName}}を コピーした!", "copiedTargetAbility": "{{pokemonName}}は\n{{targetName}}の {{abilityName}}を コピーした!",
"transformedIntoTarget": "{{pokemonName}}は\n{{targetName}}に へんしんした!", "transformedIntoTarget": "{{pokemonName}}は\n{{targetName}}に 変身した!",
"tryingToTakeFoeDown": "{{pokemonName}}は あいてを\nみちづれに しようとしている", "tryingToTakeFoeDown": "{{pokemonName}}は 相手を\nみちづれに しようとしている",
"addType": "{{pokemonName}}に\n{{typeName}}タイプが ついかされた!", "addType": "{{pokemonName}}に\n{{typeName}}タイプが 追加された!",
"cannotUseMove": "{{pokemonName}}は\n{{moveName}}を つかえなかった!", "cannotUseMove": "{{pokemonName}}は\n{{moveName}}を 使えなかった!",
"healHp": "{{pokemonName}}の\nたいりょくが かいふくした", "healHp": "{{pokemonName}}の\n体力が 回復した",
"sacrificialFullRestore": "{{pokemonName}}の\nねがいごとが かなった", "sacrificialFullRestore": "{{pokemonName}}の\nいやしのねがいが 叶った",
"invertStats": "{{pokemonName}}の\nのうりょくへんかが ぎゃくてんした", "invertStats": "{{pokemonName}}は\n能力変化が ひっくり返った",
"resetStats": "{{pokemonName}}の\nのうりょくへんかが もとにもどった", "resetStats": "{{pokemonName}}の\n能力変化が 元に戻った",
"faintCountdown": "{{pokemonName}}は\n{{turnCount}}ターンごに ほろびてしまう!", "statEliminated": "全ての 能力変化が 元に戻った!",
"faintCountdown": "{{pokemonName}}は\n{{turnCount}}ターン後に 滅びてしまう!",
"copyType": "{{pokemonName}}は {{targetPokemonName}}と\n同じタイプに なった", "copyType": "{{pokemonName}}は {{targetPokemonName}}と\n同じタイプに なった",
"suppressAbilities": "{{pokemonName}}の とくせいが きかなくなった!", "suppressAbilities": "{{pokemonName}}の 特性が 効かなくなった!",
"revivalBlessing": "{{pokemonName}}は\n復活して 戦えるようになった", "revivalBlessing": "{{pokemonName}}は\n復活して 戦えるようになった",
"swapArenaTags": "{{pokemonName}}は\nおたがいの ばのこうかを いれかえた" "swapArenaTags": "{{pokemonName}}は\nお互いの 場の 効果を 入れ替えた",
"exposedMove": "{{pokemonName}}は {{targetPokemonName}}の\n正体を 見破った"
} }

View File

@ -1,8 +1,8 @@
{ {
"SEND_OUT": "いれかえる", "SEND_OUT": "入れ替える",
"SUMMARY": "つよさをみる", "SUMMARY": "強さを見る",
"CANCEL": "やめる", "CANCEL": "やめる",
"RELEASE": "がす", "RELEASE": "がす",
"APPLY": "つかう", "APPLY": "使う",
"TEACH": "おしえる" "TEACH": "える"
} }

View File

@ -1,7 +1,7 @@
{ {
"moveset": "わざ", "moveset": "",
"gender": "せいべつ:", "gender": "性別:",
"ability": "とくせい:", "ability": "特性:",
"nature": "せいかく:", "nature": "性格:",
"form": "すがた:" "form": "姿:"
} }

View File

@ -1 +1,44 @@
{} {
"pokemonInfo": "ポケモン情報",
"status": "ステータス",
"powerAccuracyCategory": "威力\n命中\n分類",
"type": "タイプ",
"unknownTrainer": "",
"ot": "親",
"nature": "性格",
"expPoints": "経験値",
"nextLv": "次のレベルまで",
"cancel": "キャンセル",
"memoString": "{{natureFragment}}な性格。\n{{metFragment}}",
"metFragment": {
"normal": "{{biome}}で\nLv.{{level}}の時に出会った。",
"apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。"
},
"natureFragment": {
"Hardy": "{{nature}}",
"Lonely": "{{nature}}",
"Brave": "{{nature}}",
"Adamant": "{{nature}}",
"Naughty": "{{nature}}",
"Bold": "{{nature}}",
"Docile": "{{nature}}",
"Relaxed": "{{nature}}",
"Impish": "{{nature}}",
"Lax": "{{nature}}",
"Timid": "{{nature}}",
"Hasty": "{{nature}}",
"Serious": "{{nature}}",
"Jolly": "{{nature}}",
"Naive": "{{nature}}",
"Modest": "{{nature}}",
"Mild": "{{nature}}",
"Quiet": "{{nature}}",
"Bashful": "{{nature}}",
"Rash": "{{nature}}",
"Calm": "{{nature}}",
"Gentle": "{{nature}}",
"Sassy": "{{nature}}",
"Careful": "{{nature}}",
"Quirky": "{{nature}}"
}
}

View File

@ -28,10 +28,10 @@
"SPDshortened": "速さ", "SPDshortened": "速さ",
"runInfo": "ラン情報", "runInfo": "ラン情報",
"money": "お金", "money": "お金",
"runLength": "ラン最高ウェーブ", "runLength": "時間",
"viewHeldItems": "手持ちアイテム", "viewHeldItems": "持たせたアイテム",
"hallofFameText": "殿堂へようこそ", "hallofFameText": "殿堂入り おめでとう",
"hallofFameText_female": "殿堂へようこそ", "hallofFameText_female": "殿堂入り おめでとう",
"viewHallOfFame": "殿堂登録を見る!", "viewHallOfFame": "殿堂登録を見る!",
"viewEndingSplash": "クリア後のアートを見る!" "viewEndingSplash": "クリア後のアートを見る!"
} }

View File

@ -1,7 +1,7 @@
{ {
"overwriteData": "選択した スロットに データを 上書きします?", "overwriteData": "選択した スロットに データを 上書きします?",
"loading": "読込中…", "loading": "読込中…",
"wave": "", "wave": "ラウンド",
"lv": "Lv", "lv": "Lv",
"empty": "なし" "empty": "なし"
} }

View File

@ -1 +1,36 @@
{} {
"battlesWon": "Battles Won!",
"joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Infinite Levels!",
"everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!",
"openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnificent!",
"mubstitute": "Mubstitute!",
"thatsCrazy": "That's Crazy!",
"oranceJuice": "Orance Juice!",
"questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool Shaders!",
"aiFree": "AI-Free!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don't Do Anything!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don't Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
"breedersInSpace": "Breeders in space!"
}

View File

@ -16,17 +16,17 @@
"snowStartMessage": "雪が 降り始めた!", "snowStartMessage": "雪が 降り始めた!",
"snowLapseMessage": "雪が 降っている!", "snowLapseMessage": "雪が 降っている!",
"snowClearMessage": "雪が 止んだ!", "snowClearMessage": "雪が 止んだ!",
"fogStartMessage": "足下に 霧(きり)が立ち込めた!", "fogStartMessage": "足下に 霧 立ち込めた!",
"fogLapseMessage": "足下に 霧(きり)が 立ち込めている!", "fogLapseMessage": "足下に 霧が 立ち込めている!",
"fogClearMessage": "足下の 霧(きり)が消え去った!", "fogClearMessage": "足下の 霧 消え去った!",
"heavyRainStartMessage": "強い雨が 降り始めた!", "heavyRainStartMessage": "強い雨が 降り始めた!",
"heavyRainLapseMessage": "強い雨が 降っている!", "heavyRainLapseMessage": "強い雨が 降っている!",
"heavyRainClearMessage": "強い雨が あがった!", "heavyRainClearMessage": "強い雨が あがった!",
"harshSunStartMessage": "日差しが とても強くなった!", "harshSunStartMessage": "日差しが とても強くなった!",
"harshSunLapseMessage": "日差しが とても強い!", "harshSunLapseMessage": "日差しが とても強い!",
"harshSunClearMessage": "日差しが 元に戻った!", "harshSunClearMessage": "日差しが 元に戻った!",
"strongWindsStartMessage": "謎(なぞ)の 乱気流(らんきりゅう)が\nひこうポケモンを (まも)る!", "strongWindsStartMessage": "謎の 乱気流が\nひこうポケモンを 護る",
"strongWindsLapseMessage": "謎(なぞ)の 乱気流(らんきりゅう)の 勢(いきお)いは 止まらない!", "strongWindsLapseMessage": "謎の 乱気流の 勢いは 止まらない!",
"strongWindsEffectMessage": "謎(なぞ)の 乱気流(らんきりゅう)が 攻撃(こうげき)を 弱(よわ)めた!", "strongWindsEffectMessage": "謎の 乱気流が 攻撃を 弱めた!",
"strongWindsClearMessage": "謎(なぞ)の 乱気流(らんきりゅう)が おさまった!" "strongWindsClearMessage": "謎の 乱気流が おさまった!"
} }

View File

@ -7,7 +7,8 @@ import { Moves } from "#enums/moves";
import { Stat } from "#enums/stat"; import { Stat } from "#enums/stat";
import { allMoves } from "#app/data/move"; import { allMoves } from "#app/data/move";
import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag";
import { BerryPhase } from "#app/phases/berry-phase"; import { BattlerIndex } from "#app/battle";
import { MoveResult } from "#app/field/pokemon";
const TIMEOUT = 20 * 1000; const TIMEOUT = 20 * 1000;
@ -43,13 +44,13 @@ describe("Moves - Protect", () => {
test( test(
"should protect the user from attacks", "should protect the user from attacks",
async () => { async () => {
await game.startBattle([Species.CHARIZARD]); await game.classicMode.startBattle([Species.CHARIZARD]);
const leadPokemon = game.scene.getPlayerPokemon()!; const leadPokemon = game.scene.getPlayerPokemon()!;
game.move.select(Moves.PROTECT); game.move.select(Moves.PROTECT);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT }, TIMEOUT
@ -61,13 +62,13 @@ describe("Moves - Protect", () => {
game.override.enemyMoveset(Array(4).fill(Moves.CEASELESS_EDGE)); game.override.enemyMoveset(Array(4).fill(Moves.CEASELESS_EDGE));
vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100);
await game.startBattle([Species.CHARIZARD]); await game.classicMode.startBattle([Species.CHARIZARD]);
const leadPokemon = game.scene.getPlayerPokemon()!; const leadPokemon = game.scene.getPlayerPokemon()!;
game.move.select(Moves.PROTECT); game.move.select(Moves.PROTECT);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeUndefined(); expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeUndefined();
@ -79,13 +80,13 @@ describe("Moves - Protect", () => {
async () => { async () => {
game.override.enemyMoveset(Array(4).fill(Moves.CHARM)); game.override.enemyMoveset(Array(4).fill(Moves.CHARM));
await game.startBattle([Species.CHARIZARD]); await game.classicMode.startBattle([Species.CHARIZARD]);
const leadPokemon = game.scene.getPlayerPokemon()!; const leadPokemon = game.scene.getPlayerPokemon()!;
game.move.select(Moves.PROTECT); game.move.select(Moves.PROTECT);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0);
}, TIMEOUT }, TIMEOUT
@ -96,18 +97,38 @@ describe("Moves - Protect", () => {
async () => { async () => {
game.override.enemyMoveset(Array(4).fill(Moves.TACHYON_CUTTER)); game.override.enemyMoveset(Array(4).fill(Moves.TACHYON_CUTTER));
await game.startBattle([Species.CHARIZARD]); await game.classicMode.startBattle([Species.CHARIZARD]);
const leadPokemon = game.scene.getPlayerPokemon()!; const leadPokemon = game.scene.getPlayerPokemon()!;
const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.PROTECT); game.move.select(Moves.PROTECT);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(enemyPokemon.turnData.hitCount).toBe(1); expect(enemyPokemon.turnData.hitCount).toBe(1);
}, TIMEOUT }, TIMEOUT
); );
test(
"should fail if the user is the last to move in the turn",
async () => {
game.override.enemyMoveset(Array(4).fill(Moves.PROTECT));
await game.classicMode.startBattle([Species.CHARIZARD]);
const leadPokemon = game.scene.getPlayerPokemon()!;
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.PROTECT);
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS);
expect(leadPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL);
}, TIMEOUT
);
}); });

View File

@ -5,8 +5,8 @@ import { Species } from "#enums/species";
import { Abilities } from "#enums/abilities"; import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves"; import { Moves } from "#enums/moves";
import { Stat } from "#enums/stat"; import { Stat } from "#enums/stat";
import { BerryPhase } from "#app/phases/berry-phase"; import { BattlerIndex } from "#app/battle";
import { CommandPhase } from "#app/phases/command-phase"; import { MoveResult } from "#app/field/pokemon";
const TIMEOUT = 20 * 1000; const TIMEOUT = 20 * 1000;
@ -42,19 +42,16 @@ describe("Moves - Quick Guard", () => {
test( test(
"should protect the user and allies from priority moves", "should protect the user and allies from priority moves",
async () => { async () => {
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
const leadPokemon = game.scene.getPlayerField(); const playerPokemon = game.scene.getPlayerField();
game.move.select(Moves.QUICK_GUARD); game.move.select(Moves.QUICK_GUARD);
await game.phaseInterceptor.to(CommandPhase);
game.move.select(Moves.SPLASH, 1); game.move.select(Moves.SPLASH, 1);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
leadPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); playerPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp()));
}, TIMEOUT }, TIMEOUT
); );
@ -64,19 +61,16 @@ describe("Moves - Quick Guard", () => {
game.override.enemyAbility(Abilities.PRANKSTER); game.override.enemyAbility(Abilities.PRANKSTER);
game.override.enemyMoveset(Array(4).fill(Moves.GROWL)); game.override.enemyMoveset(Array(4).fill(Moves.GROWL));
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
const leadPokemon = game.scene.getPlayerField(); const playerPokemon = game.scene.getPlayerField();
game.move.select(Moves.QUICK_GUARD); game.move.select(Moves.QUICK_GUARD);
await game.phaseInterceptor.to(CommandPhase);
game.move.select(Moves.SPLASH, 1); game.move.select(Moves.SPLASH, 1);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
leadPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); playerPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0));
}, TIMEOUT }, TIMEOUT
); );
@ -85,21 +79,40 @@ describe("Moves - Quick Guard", () => {
async () => { async () => {
game.override.enemyMoveset(Array(4).fill(Moves.WATER_SHURIKEN)); game.override.enemyMoveset(Array(4).fill(Moves.WATER_SHURIKEN));
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
const leadPokemon = game.scene.getPlayerField(); const playerPokemon = game.scene.getPlayerField();
const enemyPokemon = game.scene.getEnemyField(); const enemyPokemon = game.scene.getEnemyField();
game.move.select(Moves.QUICK_GUARD); game.move.select(Moves.QUICK_GUARD);
await game.phaseInterceptor.to(CommandPhase);
game.move.select(Moves.FOLLOW_ME, 1); game.move.select(Moves.FOLLOW_ME, 1);
await game.phaseInterceptor.to(BerryPhase, false); await game.phaseInterceptor.to("BerryPhase", false);
leadPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); playerPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp()));
enemyPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1)); enemyPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1));
} }
); );
test(
"should fail if the user is the last to move in the turn",
async () => {
game.override.battleType("single");
game.override.enemyMoveset(Array(4).fill(Moves.QUICK_GUARD));
await game.classicMode.startBattle([Species.CHARIZARD]);
const playerPokemon = game.scene.getPlayerPokemon()!;
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.QUICK_GUARD);
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS);
expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL);
}, TIMEOUT
);
}); });