mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-24 16:29:27 +02:00
Merge branch 'main' of https://github.com/pagefaultgames/pokerogue into gimmifix
This commit is contained in:
commit
9baa304ca5
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@ -1 +1 @@
|
||||
github: patapancakes
|
||||
github: pagefaultgames
|
||||
|
@ -3091,11 +3091,6 @@ export default class BattleScene extends SceneBase {
|
||||
private isWaveMysteryEncounter(newBattleType: BattleType, waveIndex: number, sessionDataEncounterType?: MysteryEncounterType): boolean {
|
||||
const [lowestMysteryEncounterWave, highestMysteryEncounterWave] = this.gameMode.getMysteryEncounterLegalWaves();
|
||||
if (this.gameMode.hasMysteryEncounters && newBattleType === BattleType.WILD && !this.gameMode.isBoss(waveIndex) && waveIndex < highestMysteryEncounterWave && waveIndex > lowestMysteryEncounterWave) {
|
||||
// If ME type is already defined in session data, no need to roll RNG check
|
||||
if (!isNullOrUndefined(sessionDataEncounterType)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Base spawn weight is BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT/256, and increases by WEIGHT_INCREMENT_ON_SPAWN_MISS/256 for each missed attempt at spawning an encounter on a valid floor
|
||||
const sessionEncounterRate = this.mysteryEncounterSaveData.encounterSpawnChance;
|
||||
const encounteredEvents = this.mysteryEncounterSaveData.encounteredEvents;
|
||||
|
@ -81,7 +81,7 @@ export const speciesEggMoves = {
|
||||
[Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.THIEF, Moves.PARTING_SHOT, Moves.SPORE ],
|
||||
[Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.ATTACK_ORDER, Moves.GASTRO_ACID, Moves.STRENGTH_SAP ],
|
||||
[Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.THUNDER_CAGE, Moves.TAIL_GLOW ],
|
||||
[Species.PICHU]: [ Moves.MOONBLAST, Moves.WAVE_CRASH, Moves.AIR_SLASH, Moves.AURA_WHEEL ],
|
||||
[Species.PICHU]: [ Moves.MOONBLAST, Moves.TRIPLE_AXEL, Moves.FIERY_DANCE, Moves.AURA_WHEEL ],
|
||||
[Species.CLEFFA]: [ Moves.CALM_MIND, Moves.EARTH_POWER, Moves.WISH, Moves.LIGHT_OF_RUIN ],
|
||||
[Species.IGGLYBUFF]: [ Moves.DRAIN_PUNCH, Moves.GRAV_APPLE, Moves.SOFT_BOILED, Moves.EXTREME_SPEED ],
|
||||
[Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.ROOST, Moves.RELIC_SONG, Moves.FIERY_DANCE ],
|
||||
@ -195,7 +195,7 @@ export const speciesEggMoves = {
|
||||
[Species.REGISTEEL]: [ Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.GIGATON_HAMMER ],
|
||||
[Species.LATIAS]: [ Moves.CORE_ENFORCER, Moves.FUSION_FLARE, Moves.SPARKLY_SWIRL, Moves.MYSTICAL_POWER ],
|
||||
[Species.LATIOS]: [ Moves.CORE_ENFORCER, Moves.BLUE_FLARE, Moves.NASTY_PLOT, Moves.TACHYON_CUTTER ],
|
||||
[Species.KYOGRE]: [ Moves.RECOVER, Moves.HURRICANE, Moves.FLIP_TURN, Moves.WILDBOLT_STORM ],
|
||||
[Species.KYOGRE]: [ Moves.RECOVER, Moves.HURRICANE, Moves.FREEZY_FROST, Moves.WILDBOLT_STORM ],
|
||||
[Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ],
|
||||
[Species.RAYQUAZA]: [ Moves.V_CREATE, Moves.DRAGON_DARTS, Moves.CORE_ENFORCER, Moves.OBLIVION_WING ],
|
||||
[Species.JIRACHI]: [ Moves.TACHYON_CUTTER, Moves.TRIPLE_ARROWS, Moves.ROCK_SLIDE, Moves.SHELL_SMASH ],
|
||||
|
@ -5226,6 +5226,9 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
||||
*/
|
||||
const switchOutTarget = this.selfSwitch ? user : target;
|
||||
if (switchOutTarget instanceof PlayerPokemon) {
|
||||
if (switchOutTarget.scene.getParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) {
|
||||
return false;
|
||||
}
|
||||
switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH);
|
||||
|
||||
if (switchOutTarget.hp > 0) {
|
||||
@ -5234,6 +5237,9 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
||||
}
|
||||
return false;
|
||||
} else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
|
||||
if (switchOutTarget.scene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) {
|
||||
return false;
|
||||
}
|
||||
// Switch out logic for trainer battles
|
||||
switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH);
|
||||
|
||||
@ -5244,6 +5250,9 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
||||
false, false), MoveEndPhase);
|
||||
}
|
||||
} else {
|
||||
if (user.scene.currentBattle.waveIndex % 10 === 0) {
|
||||
return false;
|
||||
}
|
||||
// Switch out logic for everything else (eg: WILD battles)
|
||||
switchOutTarget.leaveField(false);
|
||||
|
||||
|
@ -558,6 +558,10 @@ function onGameOver(scene: BattleScene) {
|
||||
// Revert BGM
|
||||
scene.playBgm(scene.arena.bgm);
|
||||
|
||||
// Clear any leftover battle phases
|
||||
scene.clearPhaseQueue();
|
||||
scene.clearPhaseQueueSplice();
|
||||
|
||||
// Return enemy Pokemon
|
||||
const pokemon = scene.getEnemyPokemon();
|
||||
if (pokemon) {
|
||||
|
@ -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[] {
|
||||
|
@ -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!"
|
||||
}
|
||||
|
@ -71,5 +71,5 @@
|
||||
"safeguard": "{{targetName}} is protected by Safeguard!",
|
||||
"substituteOnOverlap": "{{pokemonName}} already\nhas a substitute!",
|
||||
"substituteNotEnoughHp": "But it does not have enough HP\nleft to make a substitute!",
|
||||
"afterYou": "{{pokemonName}} took the kind offer!"
|
||||
"afterYou": "{{targetName}} took the kind offer!"
|
||||
}
|
@ -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",
|
||||
|
@ -67,5 +67,5 @@
|
||||
"swapArenaTags": "¡{{pokemonName}} ha intercambiado los efectos del terreno de combate!",
|
||||
"exposedMove": "¡{{pokemonName}} ha identificado\n{{targetPokemonName}}!",
|
||||
"safeguard": "¡{{targetName}} está protegido por Velo Sagrado!",
|
||||
"afterYou": "¡{{pokemonName}} ha decidido aprovechar la oportunidad!"
|
||||
"afterYou": "¡{{targetName}} ha decidido aprovechar la oportunidad!"
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -71,5 +71,5 @@
|
||||
"safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !",
|
||||
"substituteOnOverlap": "{{pokemonName}} a déjà\nun clone !",
|
||||
"substituteNotEnoughHp": "Mais il est trop faible\npour créer un clone !",
|
||||
"afterYou": "{{pokemonName}} accepte\navec joie !"
|
||||
"afterYou": "{{targetName}} accepte\navec joie !"
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
"select_prompt": "Choisissez un objet à donner.",
|
||||
"invalid_selection": "Ce Pokémon ne porte pas ce genre d’objet.",
|
||||
"selected": "Vous remettez l’objet {{selectedItem}} au Dresseur.",
|
||||
"selected_dialogue": "Sérieux ? {{selectedItem}}, comme ça en cadeau ?\nC’est très générieux !$En guise de ma reconnaissance, laisse-moi\nte faire un cadeau un peu spécial !$Il est dans ma famille depusi des générations, et ça me ferait plaisir de te l’offrir !"
|
||||
"selected_dialogue": "Sérieux ? {{selectedItem}}, comme ça en cadeau ?\nC’est très générieux !$En guise de ma reconnaissance, laisse-moi\nte faire un cadeau un peu spécial !$Il est dans ma famille depuis des générations, et ça me ferait plaisir de te l’offrir !"
|
||||
}
|
||||
},
|
||||
"battle_won": "Tes connaissances et tes capacités ont totalement exploité nos faiblesses !$En remerciement de cette leçon, permets-moi\nd’apprendre une capacité Insecte à un de tes Pokémon !",
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"intro": "Vous tombez sur du matériel d’entrainement.",
|
||||
"title": "Session d’entrainement",
|
||||
"description": "Ce matériel semble pouvoir être utilisé pour entrainer un membre de votre équipe ! Il existe plusieurs moyens avec lesquels vous pourriez entrainer un Pokémon, comme @[TOOLTIP_TITLE]{en le faisant combattre et vaincre le reste de votre équipe}.",
|
||||
"description": "Ce matériel semble pouvoir être utilisé pour entrainer un membre de votre équipe ! Il existe plusieurs moyens avec lesquels vous pourriez entrainer un Pokémon, comme @[TOOLTIP_TITLE]{en le combattant et le vainquant avec le reste de votre équipe}.",
|
||||
"query": "Quel entrainement choisir ?",
|
||||
"invalid_selection": "Le Pokémon doit être en bonne santé.",
|
||||
"option": {
|
||||
|
@ -14,13 +14,13 @@
|
||||
"label": "Le nourrir",
|
||||
"disabled_tooltip": "Vous avez besoin de 4 Baies pour choisir cette option",
|
||||
"tooltip": "(-) Donner 4 Baies\n(+) Le {{enemyPokemon}} vous apprécie",
|
||||
"selected": "Vous lancer quelques Baies\nau {{enemyPokemon}} !$Il les engloutit avec joie !$Le {{enemyPokemon}} veut se joindre\nà votre équipe !"
|
||||
"selected": "Vous lancez quelques Baies\nau {{enemyPokemon}} !$Il les engloutit avec joie !$Le {{enemyPokemon}} veut se joindre\nà votre équipe !"
|
||||
},
|
||||
"3": {
|
||||
"label": "Devenir amis",
|
||||
"disabled_tooltip": "Votre Pokémon doit connaitre certaines capacités pour choisir cette option",
|
||||
"tooltip": "(+) {{option3PrimaryName}} utilise {{option3PrimaryMove}}\n(+) Le {{enemyPokemon}} vous apprécie",
|
||||
"selected": "Votre {{option3PrimaryName}} utilise {{option3PrimaryMove}} pour charmer le {{enemyPokemon}} !$The {{enemyPokemon}} veut se joindre\nà votre équipe !"
|
||||
"selected": "Votre {{option3PrimaryName}} utilise {{option3PrimaryMove}} pour charmer le {{enemyPokemon}} !$Le {{enemyPokemon}} veut se joindre\nà votre équipe !"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
"expGainsSpeed": "Vit. barre d’Exp",
|
||||
"expPartyDisplay": "Afficher Exp équipe",
|
||||
"skipSeenDialogues": "Passer dialogues connus",
|
||||
"eggSkip": "Animation d’éclosion",
|
||||
"eggSkip": "Passer les éclosions",
|
||||
"never": "Jamais",
|
||||
"always": "Toujours",
|
||||
"ask": "Demander",
|
||||
|
@ -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",
|
||||
|
@ -68,5 +68,5 @@
|
||||
"exposedMove": "{{pokemonName}} ha identificato\n{{targetPokemonName}}!",
|
||||
"chillyReception": "{{pokemonName}} sta per fare una battuta!",
|
||||
"safeguard": "Salvaguardia protegge {{targetName}}!",
|
||||
"afterYou": "{{pokemonName}} approfitta della cortesia!"
|
||||
"afterYou": "{{targetName}} approfitta della cortesia!"
|
||||
}
|
||||
|
@ -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": "くろのきせき",
|
||||
|
@ -68,5 +68,5 @@
|
||||
"chillyReception": "{{pokemonName}}は\n寒い ギャグを かました!",
|
||||
"swapArenaTags": "{{pokemonName}}は\nお互いの 場の 効果を 入れ替えた!",
|
||||
"exposedMove": "{{pokemonName}}は {{targetPokemonName}}の\n正体を 見破った!",
|
||||
"afterYou": "{{pokemonName}}は\nお言葉に 甘えることにした!"
|
||||
"afterYou": "{{targetName}}は\nお言葉に 甘えることにした!"
|
||||
}
|
||||
|
@ -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": "가라두구팔찌",
|
||||
|
@ -69,5 +69,5 @@
|
||||
"chillyReception": "{{pokemonName}}[[는]] 썰렁한 개그를 선보였다!",
|
||||
"exposedMove": "{{pokemonName}}[[는]]\n{{targetPokemonName}}의 정체를 꿰뚫어 보았다!",
|
||||
"safeguard": "{{targetName}}[[는]] 신비의 베일이 지켜 주고 있다!",
|
||||
"afterYou": "{{pokemonName}}[[는]]\n배려를 받아들이기로 했다!"
|
||||
"afterYou": "{{targetName}}[[는]]\n배려를 받아들이기로 했다!"
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -64,5 +64,5 @@
|
||||
"chillyReception": "{{pokemonName}} está prestes a contar uma piada gelada!",
|
||||
"exposedMove": "{{pokemonName}} identificou\n{{targetPokemonName}}!",
|
||||
"safeguard": "{{targetName}} está protegido por Safeguard!",
|
||||
"afterYou": "{{pokemonName}} aceitou a gentil oferta!"
|
||||
"afterYou": "{{targetName}} aceitou a gentil oferta!"
|
||||
}
|
||||
|
@ -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": "伽勒豆蔻手环",
|
||||
|
@ -68,5 +68,5 @@
|
||||
"chillyReception": "{{pokemonName}}\n说出了冷笑话!",
|
||||
"exposedMove": "{{pokemonName}}识破了\n{{targetPokemonName}}的原型!",
|
||||
"safeguard": "{{targetName}}\n正受到神秘之幕的保护!",
|
||||
"afterYou": "{{pokemonName}}\n接受了对手的好意!"
|
||||
"afterYou": "{{targetName}}\n接受了对手的好意!"
|
||||
}
|
||||
|
@ -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": "伽勒豆蔻手環",
|
||||
|
@ -68,5 +68,5 @@
|
||||
"chillyReception": "{{pokemonName}}\n說了冷笑話!",
|
||||
"exposedMove": "{{pokemonName}}識破了\n{{targetPokemonName}}的原形!",
|
||||
"safeguard": "{{targetName}}\n正受到神秘之幕的保護!",
|
||||
"afterYou": "{{pokemonName}}\n接受了對手的好意!"
|
||||
"afterYou": "{{targetName}}\n接受了對手的好意!"
|
||||
}
|
||||
|
@ -1017,26 +1017,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;
|
||||
}
|
||||
@ -2604,7 +2604,7 @@ export class HealShopCostModifier extends PersistentModifier {
|
||||
constructor(type: ModifierType, shopMultiplier: number, stackCount?: integer) {
|
||||
super(type, stackCount);
|
||||
|
||||
this.shopMultiplier = shopMultiplier;
|
||||
this.shopMultiplier = shopMultiplier ?? 2.5;
|
||||
}
|
||||
|
||||
match(modifier: Modifier): boolean {
|
||||
@ -2616,11 +2616,16 @@ export class HealShopCostModifier extends PersistentModifier {
|
||||
}
|
||||
|
||||
apply(args: any[]): boolean {
|
||||
(args[0] as Utils.IntegerHolder).value *= this.shopMultiplier;
|
||||
const moneyCost = args[0] as Utils.NumberHolder;
|
||||
moneyCost.value = Math.floor(moneyCost.value * this.shopMultiplier);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
getArgs(): any[] {
|
||||
return super.getArgs().concat(this.shopMultiplier);
|
||||
}
|
||||
|
||||
getMaxStackCount(scene: BattleScene): integer {
|
||||
return 1;
|
||||
}
|
||||
|
@ -238,7 +238,7 @@ export class GameOverPhase extends BattlePhase {
|
||||
enemyModifiers: this.scene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)),
|
||||
arena: new ArenaData(this.scene.arena),
|
||||
pokeballCounts: this.scene.pokeballCounts,
|
||||
money: this.scene.money,
|
||||
money: Math.floor(this.scene.money),
|
||||
score: this.scene.score,
|
||||
waveIndex: this.scene.currentBattle.waveIndex,
|
||||
battleType: this.scene.currentBattle.battleType,
|
||||
|
@ -25,6 +25,7 @@ import { GameOverPhase } from "#app/phases/game-over-phase";
|
||||
import { SwitchPhase } from "#app/phases/switch-phase";
|
||||
import { SeenEncounterData } from "#app/data/mystery-encounters/mystery-encounter-save-data";
|
||||
import { SwitchType } from "#enums/switch-type";
|
||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||
|
||||
/**
|
||||
* Will handle (in order):
|
||||
@ -218,9 +219,17 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase {
|
||||
start() {
|
||||
super.start();
|
||||
|
||||
// Lapse any residual flinches/endures but ignore all other turn-end battle tags
|
||||
const includedLapseTags = [BattlerTagType.FLINCHED, BattlerTagType.ENDURING];
|
||||
const field = this.scene.getField(true).filter(p => p.summonData);
|
||||
field.forEach(pokemon => {
|
||||
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
||||
const tags = pokemon.summonData.tags;
|
||||
tags.filter(t => includedLapseTags.includes(t.tagType)
|
||||
&& t.lapseTypes.includes(BattlerTagLapseType.TURN_END)
|
||||
&& !(t.lapse(pokemon, BattlerTagLapseType.TURN_END))).forEach(t => {
|
||||
t.onRemove(pokemon);
|
||||
tags.splice(tags.indexOf(t), 1);
|
||||
});
|
||||
});
|
||||
|
||||
// Remove any status tick phases
|
||||
|
@ -957,7 +957,7 @@ export class GameData {
|
||||
enemyModifiers: scene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)),
|
||||
arena: new ArenaData(scene.arena),
|
||||
pokeballCounts: scene.pokeballCounts,
|
||||
money: scene.money,
|
||||
money: Math.floor(scene.money),
|
||||
score: scene.score,
|
||||
waveIndex: scene.currentBattle.waveIndex,
|
||||
battleType: scene.currentBattle.battleType,
|
||||
@ -1047,7 +1047,7 @@ export class GameData {
|
||||
scene.pokeballCounts = Overrides.POKEBALL_OVERRIDE.pokeballs;
|
||||
}
|
||||
|
||||
scene.money = sessionData.money || 0;
|
||||
scene.money = Math.floor(sessionData.money || 0);
|
||||
scene.updateMoneyText();
|
||||
|
||||
if (scene.money > this.gameStats.highestMoney) {
|
||||
|
@ -6,6 +6,10 @@ const LATEST_VERSION = "1.0.5";
|
||||
|
||||
export function applySessionDataPatches(data: SessionSaveData) {
|
||||
const curVersion = data.gameVersion;
|
||||
|
||||
// Always sanitize money as a safeguard
|
||||
data.money = Math.floor(data.money);
|
||||
|
||||
if (curVersion !== LATEST_VERSION) {
|
||||
switch (curVersion) {
|
||||
case "1.0.0":
|
||||
|
Loading…
Reference in New Issue
Block a user