mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-06 00:12:16 +02:00
Compare commits
11 Commits
219f227cab
...
4b36d38acb
Author | SHA1 | Date | |
---|---|---|---|
|
4b36d38acb | ||
|
3855b92237 | ||
|
4a9fe763a5 | ||
|
e614aec8ca | ||
|
b532a6b2d0 | ||
|
6d71db0f13 | ||
|
395fa6e33d | ||
|
dce4518b93 | ||
|
fe732bbbe6 | ||
|
e599931ff3 | ||
|
bd34fc0b47 |
@ -1313,6 +1313,14 @@ export default class BattleScene extends SceneBase {
|
||||
});
|
||||
}
|
||||
|
||||
showEnemyModifierBar(): void {
|
||||
this.enemyModifierBar.setVisible(true);
|
||||
}
|
||||
|
||||
hideEnemyModifierBar(): void {
|
||||
this.enemyModifierBar.setVisible(false);
|
||||
}
|
||||
|
||||
updateBiomeWaveText(): void {
|
||||
const isBoss = !(this.currentBattle.waveIndex % 10);
|
||||
const biomeString: string = getBiomeName(this.arena.biomeType);
|
||||
@ -1418,7 +1426,7 @@ export default class BattleScene extends SceneBase {
|
||||
|
||||
randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies {
|
||||
if (fromArenaPool) {
|
||||
return this.arena.randomSpecies(waveIndex, level);
|
||||
return this.arena.randomSpecies(waveIndex, level,null , getPartyLuckValue(this.party));
|
||||
}
|
||||
const filteredSpecies = speciesFilter ? [...new Set(allSpecies.filter(s => s.isCatchable()).filter(speciesFilter).map(s => {
|
||||
if (!filterAllEvolutions) {
|
||||
|
@ -2462,7 +2462,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr {
|
||||
* @returns Returns true if healed from status, false if not
|
||||
*/
|
||||
applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise<boolean> {
|
||||
if (this.effects.includes(pokemon.status.effect)) {
|
||||
if (this.effects.includes(pokemon.status?.effect)) {
|
||||
if (pokemon.getMaxHp() !== pokemon.hp) {
|
||||
const scene = pokemon.scene;
|
||||
const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name;
|
||||
@ -2764,8 +2764,12 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr {
|
||||
* @return true if the Dancer ability was resolved
|
||||
*/
|
||||
applyPostMoveUsed(dancer: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], args: any[]): boolean | Promise<boolean> {
|
||||
// List of tags that prevent the Dancer from replicating the move
|
||||
const forbiddenTags = [BattlerTagType.FLYING, BattlerTagType.UNDERWATER,
|
||||
BattlerTagType.UNDERGROUND, BattlerTagType.HIDDEN];
|
||||
// The move to replicate cannot come from the Dancer
|
||||
if (source.getBattlerIndex() !== dancer.getBattlerIndex()) {
|
||||
if (source.getBattlerIndex() !== dancer.getBattlerIndex()
|
||||
&& !dancer.summonData.tags.some(tag => forbiddenTags.includes(tag.tagType))) {
|
||||
// If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance
|
||||
if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) {
|
||||
const target = this.getTarget(dancer, source, targets);
|
||||
@ -2774,9 +2778,10 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr {
|
||||
// If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself
|
||||
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [dancer.getBattlerIndex()], move, true));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the correct targets of Dancer ability
|
||||
|
@ -68,14 +68,20 @@ export class Arena {
|
||||
}
|
||||
}
|
||||
|
||||
randomSpecies(waveIndex: integer, level: integer, attempt?: integer): PokemonSpecies {
|
||||
randomSpecies(waveIndex: integer, level: integer, attempt?: integer, luckValue?: integer): PokemonSpecies {
|
||||
const overrideSpecies = this.scene.gameMode.getOverrideSpecies(waveIndex);
|
||||
if (overrideSpecies) {
|
||||
return overrideSpecies;
|
||||
}
|
||||
const isBoss = !!this.scene.getEncounterBossSegments(waveIndex, level) && !!this.pokemonPool[BiomePoolTier.BOSS].length
|
||||
&& (this.biomeType !== Biome.END || this.scene.gameMode.isClassic || this.scene.gameMode.isWaveFinal(waveIndex));
|
||||
const tierValue = Utils.randSeedInt(!isBoss ? 512 : 64);
|
||||
const randVal = isBoss ? 64 : 512;
|
||||
// luck influences encounter rarity
|
||||
let luckModifier = 0;
|
||||
if (typeof luckValue !== "undefined") {
|
||||
luckModifier = luckValue * (isBoss ? 0.5 : 2);
|
||||
}
|
||||
const tierValue = Utils.randSeedInt(randVal - luckModifier);
|
||||
let tier = !isBoss
|
||||
? tierValue >= 156 ? BiomePoolTier.COMMON : tierValue >= 32 ? BiomePoolTier.UNCOMMON : tierValue >= 6 ? BiomePoolTier.RARE : tierValue >= 1 ? BiomePoolTier.SUPER_RARE : BiomePoolTier.ULTRA_RARE
|
||||
: tierValue >= 20 ? BiomePoolTier.BOSS : tierValue >= 6 ? BiomePoolTier.BOSS_RARE : tierValue >= 1 ? BiomePoolTier.BOSS_SUPER_RARE : BiomePoolTier.BOSS_ULTRA_RARE;
|
||||
|
@ -1168,6 +1168,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
if (this.fusionSpecies) {
|
||||
const evolutionLevelMoves = levelMoves.slice(0, Math.max(levelMoves.findIndex(lm => !!lm[0]), 0));
|
||||
const fusionLevelMoves = this.getFusionSpeciesForm(true).getLevelMoves();
|
||||
const fusionEvolutionLevelMoves = fusionLevelMoves.slice(0, Math.max(fusionLevelMoves.findIndex(flm => !!flm[0]), 0));
|
||||
const newLevelMoves: LevelMoves = [];
|
||||
while (levelMoves.length && levelMoves[0][0] < startingLevel) {
|
||||
levelMoves.shift();
|
||||
@ -1179,6 +1180,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
for (const elm of evolutionLevelMoves.reverse()) {
|
||||
levelMoves.unshift(elm);
|
||||
}
|
||||
for (const felm of fusionEvolutionLevelMoves.reverse()) {
|
||||
fusionLevelMoves.unshift(felm);
|
||||
}
|
||||
}
|
||||
for (let l = includeEvolutionMoves ? 0 : startingLevel; l <= this.level; l++) {
|
||||
if (l === 1 && startingLevel > 1) {
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const pokemonInfoContainer: SimpleTranslationEntries = {
|
||||
"moveset": "Moveset",
|
||||
"gender": "Gender:",
|
||||
"ability": "Ability:",
|
||||
"nature": "Nature:",
|
||||
"epic": "Epic",
|
||||
"rare": "Rare",
|
||||
"common": "Common"
|
||||
"moveset": "Movimientos",
|
||||
"gender": "Género:",
|
||||
"ability": "Habilid:",
|
||||
"nature": "Natur:",
|
||||
"epic": "Épico",
|
||||
"rare": "Raro",
|
||||
"common": "Común"
|
||||
} as const;
|
||||
|
@ -4,58 +4,58 @@ import { DialogueTranslationEntries, SimpleTranslationEntries } from "#app/plugi
|
||||
export const PGMdialogue: DialogueTranslationEntries = {
|
||||
"youngster": {
|
||||
"encounter": {
|
||||
1: "Hey, wanna battle?",
|
||||
2: "Are you a new trainer too?",
|
||||
3: "Hey, I haven't seen you before. Let's battle!",
|
||||
4: "I just lost, so I'm trying to find more Pokémon.\nWait! You look weak! Come on, let's battle!",
|
||||
5: "Have we met or not? I don't really remember. Well, I guess it's nice to meet you anyway!",
|
||||
6: "All right! Let's go!",
|
||||
7: "All right! Here I come! I'll show you my power!",
|
||||
8: "Haw haw haw... I'll show you how hawesome my Pokémon are!",
|
||||
9: "No need to waste time saying hello. Bring it on whenever you're ready!",
|
||||
10: "Don't let your guard down, or you may be crying when a kid beats you.",
|
||||
11: "I've raised my Pokémon with great care. You're not allowed to hurt them!",
|
||||
12: "Glad you made it! It won't be an easy job from here.",
|
||||
13: "The battles continue forever! Welcome to the world with no end!"
|
||||
1: "거기 너! 나와 배틀 어때?",
|
||||
2: "넌 새내기 트레이너구나. 맞지?",
|
||||
3: "거기 너! 처음보는 얼굴인데? 나랑 배틀하자!",
|
||||
4: "방금 배틀에서 져서 새로운 포켓몬을 찾는 중이야.\n잠깐! 넌 약해보이는데? 어서 나와 배틀하자!",
|
||||
5: "우리 만난 적이 있었던가? 잘 기억은 안나지만 어쨌든 만나서 반가워!",
|
||||
6: "좋아! 시작하자!",
|
||||
7: "좋아! 내가 왔다! 내 힘을 보여주지!",
|
||||
8: "하하하… 내 포켓몬이 얼마나 멋진지 보여주겠어!",
|
||||
9: "인사할 시간도 없어. 준비가 되었다면 이리 와!",
|
||||
10: "긴장을 늦추지마. 그렇지 않으면 어린이에게 맞아 울지도 몰라.",
|
||||
11: "난 내 포켓몬들을 소중히 키웠어. 내 포켓몬에게 상처를 입히게 놔두지 않겠어!",
|
||||
12: "여기까지 잘 왔구나! 하지만 지금부턴 쉽지 않을거야.",
|
||||
13: "배틀은 끝나지 않아! 끝없는 배틀의 세계에 온 것을 환영해!"
|
||||
},
|
||||
"victory": {
|
||||
1: "Wow! You're strong!",
|
||||
2: "I didn't stand a chance, huh?",
|
||||
3: "I'll find you again when I'm older and beat you!",
|
||||
4: "Ugh. I don't have any more Pokémon.",
|
||||
5: "No way… NO WAY! How could I lose again…",
|
||||
6: "No! I lost!",
|
||||
7: "Whoa! You are incredible! I'm amazed and surprised!",
|
||||
8: "Could it be… How… My Pokémon and I are the strongest, though…",
|
||||
9: "I won't lose next time! Let's battle again sometime!",
|
||||
10: "Sheesh! Can't you see that I'm just a kid! It wasn't fair of you to go all out like that!",
|
||||
11: "Your Pokémon are more amazing! Trade with me!",
|
||||
12: "I got a little carried away earlier, but what job was I talking about?",
|
||||
13: "Ahaha! There it is! That's right! You're already right at home in this world!"
|
||||
1: "우와! 넌 강하구나!",
|
||||
2: "하? 난 기회가 없었어.",
|
||||
3: "내가 조금 더 큰 다음엔 널 찾아서 때리겠어!",
|
||||
4: "으.. 더이상 가지고 있는 포켓몬이 없어.",
|
||||
5: "말도 안돼… 안돼! 내가 또 지다니…",
|
||||
6: "안돼! 내가 지다니!",
|
||||
7: "우와! 정말 깜짝 놀랐어! 넌 정말 강하구나!",
|
||||
8: "이럴수가… 내 포켓몬과 난 최강인데… 어떻게…",
|
||||
9: "다음엔 지지 않을거야! 다음에 다시 배틀하자!",
|
||||
10: "쳇! 내가 어린애인게 보이지 않아?! 그렇게 최선을 다하는건 불공평해!",
|
||||
11: "네 포켓몬은 정말 굉장하구나! 나와 교환하자!",
|
||||
12: "내가 잠깐 정신이 나갔었나 봐. 내가 무슨 말을 하고 있었지?",
|
||||
13: "아하! 거기구나! 좋아! 넌 이미 이 세계에 머무를 곳이 있구나!"
|
||||
}
|
||||
},
|
||||
"lass": {
|
||||
"encounter": {
|
||||
1: "Let's have a battle, shall we?",
|
||||
2: "You look like a new trainer. Let's have a battle!",
|
||||
3: "I don't recognize you. How about a battle?",
|
||||
4: "Let's have a fun Pokémon battle!",
|
||||
5: "I'll show you the ropes of how to really use Pokémon!",
|
||||
6: "A serious battle starts from a serious beginning! Are you sure you're ready?",
|
||||
7: "You're only young once. And you only get one shot at a given battle. Soon, you'll be nothing but a memory.",
|
||||
8: "You'd better go easy on me, OK? Though I'll be seriously fighting!",
|
||||
9: "School is boring. I've got nothing to do. Yawn. I'm only battling to kill the time."
|
||||
1: "나랑 배틀하자, 어때?",
|
||||
2: "넌 신입 트레이너구나. 나랑 배틀하자!",
|
||||
3: "너 거기 있었구나? 나랑 배틀할래?",
|
||||
4: "재밌는 포켓몬 배틀하자!",
|
||||
5: "내가 포켓몬을 어떻게 다뤄야하는지 보여줄게!",
|
||||
6: "진정한 배틀은 진지한 자세부터 시작이야! 준비됐어?",
|
||||
7: "젊음이 한순간이듯 배틀에서 네 기회도 단 한번만 주어질거야. 곧 넌 추억속으로 사라질거야.",
|
||||
8: "나에겐 살살해도 돼, 알았지? 그래도 난 진지하게 싸울거야!",
|
||||
9: "학교는 지겨워. 나는 할 일이 없어. 하암~ 난 그저 시간을 때우기 위해 싸울뿐이야."
|
||||
},
|
||||
"victory": {
|
||||
1: "That was impressive! I've got a lot to learn.",
|
||||
2: "I didn't think you'd beat me that bad…",
|
||||
3: "I hope we get to have a rematch some day.",
|
||||
4: "That was pretty amazingly fun! You've totally exhausted me…",
|
||||
5: "You actually taught me a lesson! You're pretty amazing!",
|
||||
6: "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.",
|
||||
7: "I don't need memories like this. Deleting memory…",
|
||||
8: "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.",
|
||||
9: "I'm actually getting tired of battling… There's gotta be something new to do…"
|
||||
1: "인상적이었어! 난 아직 배울게 많구나.",
|
||||
2: "내가 이렇게까지 크게 질 줄은 몰랐어…",
|
||||
3: "언젠가 우리가 다시 배틀할 수 있을 날을 기다릴게.",
|
||||
4: "놀라울 정도로 엄청 재미있었어! 넌 날 완전히 지치게 만들어버렸네…",
|
||||
5: "넌 나에게 진짜 교훈을 주었어! 넌 정말 대단해!",
|
||||
6: "세상에, 내가 지다니. 이거 정말 우울하지만… 넌 정말 멋있었어.",
|
||||
7: "난 이런 기억따윈 필요없어. 잊어버리겠어…",
|
||||
8: "거기 너! 살살하라고 했지! 그래도 넌 진지할때 정말 멋지구나!",
|
||||
9: "사실 배틀하는 것이 지루하던 참이야… 뭔가 새로운 것이 없을까?"
|
||||
}
|
||||
},
|
||||
"breeder": {
|
||||
|
@ -27,7 +27,7 @@ export const gameStatsUiHandler: SimpleTranslationEntries = {
|
||||
"subLegendsHatched": "Sub-Lendários Chocados",
|
||||
"legendsSeen": "Lendários Vistos",
|
||||
"legendsCaught": "Lendários Capturados",
|
||||
"legendsHatched": "Legendários Chocados",
|
||||
"legendsHatched": "Lendários Chocados",
|
||||
"mythicalsSeen": "Míticos Vistos",
|
||||
"mythicalsCaught": "Míticos Capturados",
|
||||
"mythicalsHatched": "Míticos Chocados",
|
||||
|
@ -49,6 +49,6 @@ export const menu: SimpleTranslationEntries = {
|
||||
"empty": "Vazio",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"disclaimer": "DISCLAIMER",
|
||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
||||
"disclaimer": "AVISO",
|
||||
"disclaimerDescription": "Este jogo é um produto inacabado; ele pode ter problemas de jogabilidade (incluindo possíveis perdas de dados salvos),\n sofrer alterações sem aviso prévio e pode ou não ser atualizado ou concluído."
|
||||
} as const;
|
||||
|
@ -1875,8 +1875,9 @@ export class ModifierTypeOption {
|
||||
}
|
||||
|
||||
export function getPartyLuckValue(party: Pokemon[]): integer {
|
||||
return Phaser.Math.Clamp(party.map(p => p.isFainted() ? 0 : p.getLuck())
|
||||
const luck = Phaser.Math.Clamp(party.map(p => p.isFainted() ? 0 : p.getLuck())
|
||||
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
||||
return luck || 0;
|
||||
}
|
||||
|
||||
export function getLuckString(luckValue: integer): string {
|
||||
|
@ -22,6 +22,7 @@ import { Nature } from "#app/data/nature";
|
||||
import { BattlerTagType } from "#app/data/enums/battler-tag-type";
|
||||
import * as Overrides from "../overrides";
|
||||
import { ModifierType, modifierTypes } from "./modifier-type";
|
||||
import { Command } from "#app/ui/command-ui-handler.js";
|
||||
|
||||
export type ModifierPredicate = (modifier: Modifier) => boolean;
|
||||
|
||||
@ -776,7 +777,10 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier {
|
||||
|
||||
if (!bypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) {
|
||||
bypassSpeed.value = true;
|
||||
if (this.type instanceof ModifierTypes.PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW") {
|
||||
const isCommandFight = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT;
|
||||
const hasQuickClaw = this.type instanceof ModifierTypes.PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW";
|
||||
|
||||
if (isCommandFight && hasQuickClaw) {
|
||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " used its quick claw to move faster!"));
|
||||
}
|
||||
return true;
|
||||
|
@ -2583,7 +2583,7 @@ export class MovePhase extends BattlePhase {
|
||||
this.scene.getPlayerField().forEach(pokemon => {
|
||||
applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets);
|
||||
});
|
||||
this.scene.getEnemyParty().forEach(pokemon => {
|
||||
this.scene.getEnemyField().forEach(pokemon => {
|
||||
applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets);
|
||||
});
|
||||
}
|
||||
|
@ -262,6 +262,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
|
||||
|
||||
this.setVisible(true);
|
||||
this.shown = true;
|
||||
this.scene.hideEnemyModifierBar();
|
||||
});
|
||||
}
|
||||
|
||||
@ -282,6 +283,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
|
||||
hide(speedMultiplier: number = 1): Promise<void> {
|
||||
return new Promise(resolve => {
|
||||
if (!this.shown) {
|
||||
this.scene.showEnemyModifierBar();
|
||||
return resolve();
|
||||
}
|
||||
|
||||
@ -302,6 +304,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
|
||||
this.pokemonShinyIcon.off("pointerover");
|
||||
this.pokemonShinyIcon.off("pointerout");
|
||||
(this.scene as BattleScene).ui.hideTooltip();
|
||||
this.scene.showEnemyModifierBar();
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user