diff --git a/.env.beta b/.env.beta index 88147215258..38888ec3d97 100644 --- a/.env.beta +++ b/.env.beta @@ -1,6 +1,6 @@ VITE_BYPASS_LOGIN=0 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=https://api.beta.pokerogue.net +VITE_SERVER_URL=https://apibeta.pokerogue.net VITE_DISCORD_CLIENT_ID=1248062921129459756 VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com VITE_I18N_DEBUG=1 diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 1afbfc932dc..4cdaef7b1b3 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -527,18 +527,19 @@ interface monotypeOverride { */ export class SingleTypeChallenge extends Challenge { private static TYPE_OVERRIDES: monotypeOverride[] = [ - {species: Species.MELOETTA, type: Type.PSYCHIC, fusion: true}, {species: Species.CASTFORM, type: Type.NORMAL, fusion: false}, ]; + // TODO: Find a solution for all Pokemon with this ssui issue, including Basculin and Burmy + private static SPECIES_OVERRIDES: Species[] = [Species.MELOETTA]; constructor() { super(Challenges.SINGLE_TYPE, 18); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { + override applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { const speciesForm = getPokemonSpeciesForm(pokemon.speciesId, dexAttr.formIndex); const types = [speciesForm.type1, speciesForm.type2]; - if (soft) { + if (soft && !SingleTypeChallenge.SPECIES_OVERRIDES.includes(pokemon.speciesId)) { const speciesToCheck = [pokemon.speciesId]; while (speciesToCheck.length) { const checking = speciesToCheck.pop(); diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 3a80e92918d..827b2c12478 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -595,6 +595,8 @@ function getTrainerConfigForWave(waveIndex: number) { })) .setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_4_POKEMON, TrainerSlot.TRAINER, true)); } else { + pool3Copy = randSeedShuffle(pool3Copy); + const pool3Mon2 = pool3Copy.pop()!; config .setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG))) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BEEDRILL ], TrainerSlot.TRAINER, true, p => { @@ -616,9 +618,9 @@ function getTrainerConfigForWave(waveIndex: number) { p.generateName(); } })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { - if (!isNullOrUndefined(pool3Mon.formIndex)) { - p.formIndex = pool3Mon.formIndex; + .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon2.species], TrainerSlot.TRAINER, true, p => { + if (!isNullOrUndefined(pool3Mon2.formIndex)) { + p.formIndex = pool3Mon2.formIndex; p.generateAndPopulateMoveset(); p.generateName(); } diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 2a1b43aa117..94dbba958b5 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -762,6 +762,13 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali } } + //TODO: Adjust templates and delays so we don't have to hardcode it + /* TEMPORARY! (Most) Trainers shouldn't be using unevolved Pokemon by the third gym leader / wave 80. Exceptions to this include Breeders, whose large teams are balanced by the use of weaker pokemon */ + if (currentWave >= 80 && forTrainer && strength > PartyMemberStrength.WEAKER) { + evolutionChance = 1; + noEvolutionChance = 0; + } + if (evolutionChance > 0) { if (isRegionalEvolution) { evolutionChance /= (evolutionSpecies.isRareRegional() ? 16 : 4); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0fda3d075be..07525e92157 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -952,32 +952,35 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const baseStats = this.calculateBaseStats(); // Using base stats, calculate and store stats one by one for (const s of PERMANENT_STATS) { - let value = Math.floor(((2 * baseStats[s] + this.ivs[s]) * this.level) * 0.01); + const statHolder = new Utils.IntegerHolder(Math.floor(((2 * baseStats[s] + this.ivs[s]) * this.level) * 0.01)); if (s === Stat.HP) { - value = value + this.level + 10; + statHolder.value = statHolder.value + this.level + 10; + this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); if (this.hasAbility(Abilities.WONDER_GUARD, false, true)) { - value = 1; + statHolder.value = 1; } - if (this.hp > value || this.hp === undefined) { - this.hp = value; + if (this.hp > statHolder.value || this.hp === undefined) { + this.hp = statHolder.value; } else if (this.hp) { const lastMaxHp = this.getMaxHp(); - if (lastMaxHp && value > lastMaxHp) { - this.hp += value - lastMaxHp; + if (lastMaxHp && statHolder.value > lastMaxHp) { + this.hp += statHolder.value - lastMaxHp; } } } else { - value += 5; + statHolder.value += 5; const natureStatMultiplier = new Utils.NumberHolder(getNatureStatMultiplier(this.getNature(), s)); this.scene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier); if (natureStatMultiplier.value !== 1) { - value = Math.max(Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"](value * natureStatMultiplier.value), 1); + statHolder.value = Math.max(Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"](statHolder.value * natureStatMultiplier.value), 1); } + this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); } - this.setStat(s, value); + statHolder.value = Utils.clampInt(statHolder.value, 1, Number.MAX_SAFE_INTEGER); + + this.setStat(s, statHolder.value); } - this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, this.stats); } calculateBaseStats(): number[] { diff --git a/src/locales/de/battler-tags.json b/src/locales/de/battler-tags.json index f4b9d71eb49..3a2f1b84e49 100644 --- a/src/locales/de/battler-tags.json +++ b/src/locales/de/battler-tags.json @@ -75,5 +75,5 @@ "substituteOnAdd": "Ein Delegator von {{pokemonNameWithAffix}} ist erschienen!", "substituteOnHit": "Der Delegator steckt den Schlag für {{pokemonNameWithAffix}} ein!", "substituteOnRemove": "Der Delegator von {{pokemonNameWithAffix}} hört auf zu wirken!", - "autotomizeOnAdd": "{{pokemonNameWIthAffix}} ist leichter geworden!" + "autotomizeOnAdd": "{{pokemonNameWithAffix}} ist leichter geworden!" } diff --git a/src/locales/es/modifier-type.json b/src/locales/es/modifier-type.json index 365a8d9bfed..668f08e443d 100644 --- a/src/locales/es/modifier-type.json +++ b/src/locales/es/modifier-type.json @@ -358,6 +358,10 @@ "name": "Llamasfera", "description": "Extraña esfera que causa quemaduras a quien la usa en combate." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "Tesoros", + "description": "¡A este Pokémon le encantan los tesoros! ¡Sigue coleccionandólos y tal vez pase algo!" + }, "BATON": { "name": "Testigo", "description": "Permite pasar los efectos al cambiar de Pokémon, también evita las trampas." @@ -495,6 +499,22 @@ "TART_APPLE": "Manzana ácida", "STRAWBERRY_SWEET": "Confite fresa", "UNREMARKABLE_TEACUP": "Cuenco mediocre", + "UPGRADE": "Mejora", + "DUBIOUS_DISC": "Disco Extraño", + "DRAGON_SCALE": "Escama Dragón", + "PRISM_SCALE": "Escama Bella", + "RAZOR_CLAW": "Garra Afilada", + "RAZOR_FANG": "Colmillo Agudo", + "REAPER_CLOTH": "Tela Terrible", + "ELECTIRIZER": "Electrizador", + "MAGMARIZER": "Magmatizador", + "PROTECTOR": "Protector", + "SACHET": "Saquito Fragante", + "WHIPPED_DREAM": "Dulce de Nata", + "LEADERS_CREST": "Distintivo de Líder", + "SUN_FLUTE": "Flauta Solar", + "MOON_FLUTE": "Flauta Lunar", + "CHIPPED_POT": "Tetera rota", "BLACK_AUGURITE": "Mineral negro", "GALARICA_CUFF": "Brazal galanuez", diff --git a/src/locales/fr/modifier-type.json b/src/locales/fr/modifier-type.json index 74c7599fea7..465ffc82572 100644 --- a/src/locales/fr/modifier-type.json +++ b/src/locales/fr/modifier-type.json @@ -240,6 +240,8 @@ "TOXIC_ORB": { "name": "Orbe Toxique", "description": "Empoisonne gravement son porteur à la fin du tour s’il n’a pas déjà de problème de statut." }, "FLAME_ORB": { "name": "Orbe Flamme", "description": "Brule son porteur à la fin du tour s’il n’a pas déjà de problème de statut." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { "name": "Trésors", "description": "Ce Pokémon adore les trésors ! Ramassez-en le plus possible et voyez ce qu’il se passe !"}, + "BATON": { "name": "Témoin", "description": "Permet de transmettre les effets en cas de changement de Pokémon. Ignore les pièges." }, "SHINY_CHARM": { "name": "Charme Chroma", "description": "Augmente énormément les chances de rencontrer un Pokémon sauvage chromatique." }, @@ -330,6 +332,21 @@ "TART_APPLE": "Pomme Acidulée", "STRAWBERRY_SWEET": "Fraise en Sucre", "UNREMARKABLE_TEACUP": "Bol Médiocre", + "UPGRADE": "Améliorator", + "DUBIOUS_DISC": "CD Douteux", + "DRAGON_SCALE": "Écaille Draco", + "PRISM_SCALE": "Bel’Écaille", + "RAZOR_CLAW": "Griffe Rasoir", + "RAZOR_FANG": "Croc Rasoir", + "REAPER_CLOTH": "Tissu Fauche", + "ELECTIRIZER": "Électriseur", + "MAGMARIZER": "Magmariseur", + "PROTECTOR": "Protecteur", + "SACHET": "Sachet Senteur", + "WHIPPED_DREAM": "Chantibonbon", + "LEADERS_CREST": "Emblème du Général", + "SUN_FLUTE": "Flute du Soleil", + "MOON_FLUTE": "Flute de la Lune", "CHIPPED_POT": "Théière Ébréchée", "BLACK_AUGURITE": "Obsidienne", diff --git a/src/locales/it/modifier-type.json b/src/locales/it/modifier-type.json index 9edf6e5a53a..13b8a62e917 100644 --- a/src/locales/it/modifier-type.json +++ b/src/locales/it/modifier-type.json @@ -358,6 +358,10 @@ "name": "Fiammosfera", "description": "Sfera bizzarra che procura una scottatura a chi l’ha con sé in una lotta." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "Tesori", + "description": "Questo Pokémon adora i tesori! Continua a collezionare i tesori e potrebbe accadere qualcosa!" + }, "BATON": { "name": "Staffetta", "description": "Permette di trasmettere gli effetti quando si cambia Pokémon, aggirando anche le trappole." @@ -495,6 +499,22 @@ "TART_APPLE": "Aspropomo", "STRAWBERRY_SWEET": "Bonbonfragola", "UNREMARKABLE_TEACUP": "Tazza dozzinale", + "UPGRADE": "Upgrade", + "DUBIOUS_DISC": "Dubbiodisco", + "DRAGON_SCALE": "Squama drago", + "PRISM_SCALE": "Squama bella", + "RAZOR_CLAW": "Affilartiglio", + "RAZOR_FANG": "Affilodente", + "REAPER_CLOTH": "Terrorpanno", + "ELECTIRIZER": "Elettritore", + "MAGMARIZER": "Magmatore", + "PROTECTOR": "Copertura", + "SACHET": "Bustina aromi", + "WHIPPED_DREAM": "Dolcespuma", + "LEADERS_CREST": "Simbolo del capo", + "SUN_FLUTE": "Flauto solare", + "MOON_FLUTE": "Flauto lunare", + "CHIPPED_POT": "Teiera crepata", "BLACK_AUGURITE": "Augite nera", "GALARICA_CUFF": "Fascia Galarnoce", diff --git a/src/locales/ja/modifier-type.json b/src/locales/ja/modifier-type.json index b217ab054b7..5562a25f96f 100644 --- a/src/locales/ja/modifier-type.json +++ b/src/locales/ja/modifier-type.json @@ -240,6 +240,11 @@ "TOXIC_ORB": { "name": "どくどくだま", "description": "触ると 毒をだす 不思議な玉。\n持たせると 戦闘中に 猛毒の状態に なる" }, "FLAME_ORB": { "name": "かえんだま", "description": "触ると 熱をだす 不思議な玉。\n持たせると 戦闘中に やけどの状態に なる。" }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "宝物", + "description": "このポケモンは 宝物が 大好き! 宝物を 集め続けると 良いことが 起こる かもしれません!" + }, + "BATON": { "name": "バトン", "description": "持たせると 入れ替えるとき 控えのポケモンが\n能力変化を 受けつげる (逃げられなくする 技や 特性も 回避する)" }, "SHINY_CHARM": { "name": "ひかるおまもり", "description": "色違いの ポケモンと 大きく 出会いやすくなる" }, @@ -330,6 +335,21 @@ "TART_APPLE": "すっぱいりんご", "STRAWBERRY_SWEET": "いちごアメざいく", "UNREMARKABLE_TEACUP": "ボンサクのちゃわん", + "UPGRADE": "アップグレード", + "DUBIOUS_DISC": "あやしいパッチ", + "DRAGON_SCALE": "りゅうのウロコ", + "PRISM_SCALE": "きれいなウロコ", + "RAZOR_CLAW": "するどいツメ", + "RAZOR_FANG": "するどいキバ", + "REAPER_CLOTH": "れいかいのぬの", + "ELECTIRIZER": "エレキブースター", + "MAGMARIZER": "マグマブースター", + "PROTECTOR": "プロテクター", + "SACHET": "においぶくろ", + "WHIPPED_DREAM": "ホイップポップ", + "LEADERS_CREST": "かしらのしるし", + "SUN_FLUTE": "たいようのふえ", + "MOON_FLUTE": "つきのふえ", "CHIPPED_POT": "かけたポット", "BLACK_AUGURITE": "くろのきせき", diff --git a/src/locales/ko/modifier-type.json b/src/locales/ko/modifier-type.json index f9d8fd1a861..d770b5fb068 100644 --- a/src/locales/ko/modifier-type.json +++ b/src/locales/ko/modifier-type.json @@ -358,9 +358,13 @@ "name": "화염구슬", "description": "이 도구를 지닌 포켓몬은 턴이 끝나는 시점에 상태이상에 걸리지 않았다면 화상 상태가 된다." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "보물", + "description": "이 포켓몬은 보물을 좋아한다. 보물을 모으다 보면 어떤 일이 일어날 지도 모른다!" + }, "BATON": { "name": "배턴", - "description": "포켓몬을 교체할 때 효과를 넘겨줄 수 있으며, 함정의 영향을 받지 않게 함" + "description": "포켓몬을 교체할 때 효과를 넘겨줄 수 있으며, 함정의 영향을 받지 않게 한다." }, "SHINY_CHARM": { "name": "빛나는부적", @@ -495,6 +499,22 @@ "TART_APPLE": "새콤한사과", "STRAWBERRY_SWEET": "딸기사탕공예", "UNREMARKABLE_TEACUP": "범작찻잔", + "UPGRADE": "업그레이드", + "DUBIOUS_DISC": "괴상한패치", + "DRAGON_SCALE": "용의비늘", + "PRISM_SCALE": "고운비늘", + "RAZOR_CLAW": "예리한손톱", + "RAZOR_FANG": "예리한이빨", + "REAPER_CLOTH": "영계의천", + "ELECTIRIZER": "에레키부스터", + "MAGMARIZER": "마그마부스터", + "PROTECTOR": "프로텍터", + "SACHET": "향기주머니", + "WHIPPED_DREAM": "휘핑크림", + "LEADERS_CREST": "대장의징표", + "SUN_FLUTE": "태양의피리", + "MOON_FLUTE": "달의피리", + "CHIPPED_POT": "이빠진포트", "BLACK_AUGURITE": "검은휘석", "GALARICA_CUFF": "가라두구팔찌", diff --git a/src/locales/pt_BR/modifier-type.json b/src/locales/pt_BR/modifier-type.json index ae7a2cba93e..a4b27b19fb7 100644 --- a/src/locales/pt_BR/modifier-type.json +++ b/src/locales/pt_BR/modifier-type.json @@ -358,6 +358,10 @@ "name": "Esfera da Chama", "description": "Uma esfera estranha que aquece quando tocada e queima quem a segurar." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "Treasures", + "description": "This Pokémon loves treasure! Keep collecting treasure and something might happen!" + }, "BATON": { "name": "Bastão", "description": "Permite passar mudanças de atributo ao trocar Pokémon, ignorando armadilhas." @@ -507,6 +511,22 @@ "TART_APPLE": "Maçã Azeda", "STRAWBERRY_SWEET": "Doce de Morango", "UNREMARKABLE_TEACUP": "Xícara Comum", + "UPGRADE": "Melhora", + "DUBIOUS_DISC": "Dubious Disc", + "DRAGON_SCALE": "Escama de Dragão", + "PRISM_SCALE": "Prism Scale", + "RAZOR_CLAW": "Garra de Navalha", + "RAZOR_FANG": "Presa Afiada", + "REAPER_CLOTH": "Capa do Ceifador", + "ELECTIRIZER": "Electirizer", + "MAGMARIZER": "Magmarizer", + "PROTECTOR": "Protector", + "SACHET": "Sachet", + "WHIPPED_DREAM": "Whipped Dream", + "LEADERS_CREST": "Leader's Crest", + "SUN_FLUTE": "Sun Flute", + "MOON_FLUTE": "Moon Flute", + "CHIPPED_POT": "Pote Lascado", "BLACK_AUGURITE": "Mineral Negro", "GALARICA_CUFF": "Bracelete de Galar", diff --git a/src/locales/zh_CN/modifier-type.json b/src/locales/zh_CN/modifier-type.json index 61c36078369..b02d74eadb5 100644 --- a/src/locales/zh_CN/modifier-type.json +++ b/src/locales/zh_CN/modifier-type.json @@ -358,6 +358,10 @@ "name": "火焰宝珠", "description": "触碰后会放出热量的神奇宝珠。\n携带后,在战斗时会变成灼伤状态。" }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "金子宝物", + "description": "这个小精靈爱金子! 继续挑金子然后谁知道什么会发生!" + }, "BATON": { "name": "接力棒", "description": "允许在切换宝可梦时保留能力变化, 对陷阱\n同样生效。" @@ -495,6 +499,22 @@ "TART_APPLE": "酸酸苹果", "STRAWBERRY_SWEET": "草莓糖饰", "UNREMARKABLE_TEACUP": "凡作茶碗", + "UPGRADE": "升级数据", + "DUBIOUS_DISC": "可疑补丁", + "DRAGON_SCALE": "龙之鳞片", + "PRISM_SCALE": "美丽鳞片", + "RAZOR_CLAW": "锐利之爪", + "RAZOR_FANG": "锐利之牙", + "REAPER_CLOTH": "灵界之布", + "ELECTIRIZER": "电力增幅器", + "MAGMARIZER": "熔岩增幅器", + "PROTECTOR": "护具", + "SACHET": "香袋", + "WHIPPED_DREAM": "泡沫奶油", + "LEADERS_CREST": "头领凭证", + "SUN_FLUTE": "太阳之笛", + "MOON_FLUTE": "月亮之笛", + "CHIPPED_POT": "缺损的茶壶", "BLACK_AUGURITE": "黑奇石", "GALARICA_CUFF": "伽勒豆蔻手环", diff --git a/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json index ff01386ca59..b26c5d38c03 100644 --- a/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json @@ -12,7 +12,7 @@ "good": "一些不错的工具和物品!", "great": "一些很稀有的工具和物品!!", "amazing": "哇!金色传说!", - "bad": "哦不!@d{32}\n这个箱子实际上是一个伪装的{{gimmighoul Name}}!$你的{{pokeName}}跳到了你面前\n但为了保护你被打倒了!" + "bad": "哦不!@d{32}\n这个箱子实际上是一个伪装的{{gimmighoulName}}!$你的{{pokeName}}跳到了你面前\n但为了保护你被打倒了!" }, "2": { "label": "有诈,走了", diff --git a/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json index 359376eca3d..9412426d794 100644 --- a/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -20,7 +20,7 @@ "tooltip": "(-)无奖励", "selected": "呵呵,没想到你竟然是个懦夫。" }, - "selected": "那人递给你两瓶东西后\n然后很快就消失了。${{selected Pokemon}}获得了{{boost}}和{{boost 2}}提升!" + "selected": "那人递给你两瓶东西后\n然后很快就消失了。${{selectedPokemon}}获得了{{boost1}}和{{boost2}}提升!" }, "cheap_side_effects": "但是药物有一些副作用!$你的{{selectedPokemon}}受到一些伤害,\n并且它的性格变为{{newNature}}!", "no_bad_effects": "看来药物完全没有副作用!" diff --git a/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json index ee3109e3a1f..8ab03382477 100644 --- a/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json @@ -13,7 +13,7 @@ "label": "干等", "tooltip": "(-)漫长的等待\n(+)回复队伍", "selected": ".@d{32}.@d{32}.@d{32}$您等待了好一段时间,但是\n{{snorlaxName}}的哈欠让你的队伍昏昏欲睡…………", - "rest_result": "当你们醒来时,{{snorlax Name}}已无处可寻。\n但你所有的宝可梦都痊愈了!" + "rest_result": "当你们醒来时,{{snorlaxName}}已无处可寻。\n但你所有的宝可梦都痊愈了!" }, "3": { "label": "偷摸", diff --git a/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json b/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json index dab52bef1db..7bb6229d330 100644 --- a/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json @@ -27,7 +27,7 @@ "tooltip": "(-)无奖励", "selected": "你无暇训练\n该动身了。" }, - "selected": "{{selected Pokemon}}穿过空地来到你面前……" + "selected": "{{selectedPokemon}}穿过空地来到你面前……" }, "outro": "这次训练成果不错!" } diff --git a/src/locales/zh_TW/modifier-type.json b/src/locales/zh_TW/modifier-type.json index f305c0e2d62..25c79af821b 100644 --- a/src/locales/zh_TW/modifier-type.json +++ b/src/locales/zh_TW/modifier-type.json @@ -358,6 +358,10 @@ "name": "火焰寶珠", "description": "觸碰後會放出熱量的神奇寶珠。\n攜帶後,在戰鬥時會變成灼傷狀態。" }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "金子寶物", + "description": "這個小精靈愛金子! 繼續挑金子然後誰知道什麼會發生!" + }, "BATON": { "name": "接力棒", "description": "允許在切換寶可夢時保留能力變化, 對陷阱\n同樣生效。" @@ -495,6 +499,22 @@ "TART_APPLE": "酸酸蘋果", "STRAWBERRY_SWEET": "草莓糖飾", "UNREMARKABLE_TEACUP": "凡作茶碗", + "UPGRADE": "升級資料", + "DUBIOUS_DISC": "可疑修正檔", + "DRAGON_SCALE": "龍之鱗片", + "PRISM_SCALE": "美麗鱗片", + "RAZOR_CLAW": "銳利之爪", + "RAZOR_FANG": "銳利之牙", + "REAPER_CLOTH": "靈界之布", + "ELECTIRIZER": "電力增幅器", + "MAGMARIZER": "熔岩增幅器", + "PROTECTOR": "護具", + "SACHET": "香袋", + "WHIPPED_DREAM": "泡沫奶油", + "LEADERS_CREST": "頭領憑證", + "SUN_FLUTE": "太陽之笛", + "MOON_FLUTE": "月亮之笛", + "CHIPPED_POT": "缺損的茶壺", "BLACK_AUGURITE": "黑奇石", "GALARICA_CUFF": "伽勒豆蔻手環", diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index f53a07e8e21..cf9cf78225e 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -998,26 +998,26 @@ export class PokemonIncrementingStatModifier extends PokemonHeldItemModifier { } shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Array; + return super.shouldApply(args) && args.length === 3 && args[2] instanceof Utils.IntegerHolder; } apply(args: any[]): boolean { - // Modifies the passed in stats[] array by +1 per stack for HP, +2 per stack for other stats + // Modifies the passed in stat integer holder by +1 per stack for HP, +2 per stack for other stats // If the Macho Brace is at max stacks (50), adds additional 5% to total HP and 10% to other stats - const targetToApply = args[0] as Pokemon; + const isHp = args[1] === Stat.HP; + const statHolder = args[2] as Utils.IntegerHolder; - args[1].forEach((v, i) => { - const isHp = i === 0; - // Doesn't modify HP if holder has Wonder Guard - if (!isHp || !targetToApply.hasAbility(Abilities.WONDER_GUARD)) { - let mult = 1; - if (this.stackCount === this.getMaxHeldItemCount()) { - mult = isHp ? 1.05 : 1.1; - } - const newVal = Math.floor((v + this.stackCount * (isHp ? 1 : 2)) * mult); - args[1][i] = Math.min(Math.max(newVal, 1), 999999); + if (isHp) { + statHolder.value += this.stackCount; + if (this.stackCount === this.getMaxHeldItemCount()) { + statHolder.value = Math.floor(statHolder.value * 1.05); } - }); + } else { + statHolder.value += 2 * this.stackCount; + if (this.stackCount === this.getMaxHeldItemCount()) { + statHolder.value = Math.floor(statHolder.value * 1.1); + } + } return true; }