mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-17 13:52:18 +02:00
add ability scanner
This commit is contained in:
parent
33f8365192
commit
f10da84389
@ -52,5 +52,7 @@ export const battle: SimpleTranslationEntries = {
|
||||
"notDisabled": "{{pokemonName}}'s {{moveName}} is disabled\nno more!",
|
||||
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||
"eggHatching": "Oh?",
|
||||
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?"
|
||||
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
|
||||
"abilityScannerUseQuestion": "Use Ability Scanner on {{pokemonName}}?",
|
||||
"abilityPrompt": "{{pokemonName}}'s ability is {{abilityName}}.",
|
||||
} as const;
|
@ -215,6 +215,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
||||
"ABILITY_CHARM": { name: "Ability Charm", description: "Dramatically increases the chance of a wild Pokémon having a Hidden Ability" },
|
||||
|
||||
"IV_SCANNER": { name: "IV Scanner", description: "Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first" },
|
||||
"ABILITY_SCANNER": { name: "Ability Scanner", description: "Allows scanning the Abilities of wild Pokémon." },
|
||||
|
||||
"DNA_SPLICERS": { name: "DNA Splicers" },
|
||||
|
||||
|
@ -1152,6 +1152,7 @@ export const modifierTypes = {
|
||||
ABILITY_CHARM: () => new ModifierType(`modifierType:ModifierType.ABILITY_CHARM`, 'ability_charm', (type, _args) => new Modifiers.HiddenAbilityRateBoosterModifier(type)),
|
||||
|
||||
IV_SCANNER: () => new ModifierType(`modifierType:ModifierType.IV_SCANNER`, 'scanner', (type, _args) => new Modifiers.IvScannerModifier(type)),
|
||||
ABILITY_SCANNER: () => new ModifierType(`modifierType:ModifierType.ABILITY_SCANNER`, 'ability_scanner', (type, _args) => new Modifiers.AbilityScannerModifier(type)),
|
||||
|
||||
DNA_SPLICERS: () => new FusePokemonModifierType(`modifierType:ModifierType.DNA_SPLICERS`, 'dna_splicers'),
|
||||
|
||||
@ -1278,6 +1279,7 @@ const modifierPool: ModifierPool = {
|
||||
new WeightedModifierType(modifierTypes.RARER_CANDY, 4),
|
||||
new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2),
|
||||
new WeightedModifierType(modifierTypes.IV_SCANNER, 4),
|
||||
new WeightedModifierType(modifierTypes.ABILITY_SCANNER, 4),
|
||||
new WeightedModifierType(modifierTypes.EXP_CHARM, 8),
|
||||
new WeightedModifierType(modifierTypes.EXP_SHARE, 12),
|
||||
new WeightedModifierType(modifierTypes.EXP_BALANCE, 4),
|
||||
|
@ -1942,6 +1942,28 @@ export class IvScannerModifier extends PersistentModifier {
|
||||
}
|
||||
}
|
||||
|
||||
export class AbilityScannerModifier extends PersistentModifier {
|
||||
constructor(type: ModifierType, stackCount?: integer) {
|
||||
super(type, stackCount);
|
||||
}
|
||||
|
||||
match(modifier: Modifier): boolean {
|
||||
return modifier instanceof AbilityScannerModifier;
|
||||
}
|
||||
|
||||
clone(): AbilityScannerModifier {
|
||||
return new AbilityScannerModifier(this.type, this.stackCount);
|
||||
}
|
||||
|
||||
apply(args: any[]): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxStackCount(scene: BattleScene): integer {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtraModifierModifier extends PersistentModifier {
|
||||
constructor(type: ModifierType, stackCount?: integer) {
|
||||
super(type, stackCount);
|
||||
|
@ -6,7 +6,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov
|
||||
import { Mode } from './ui/ui';
|
||||
import { Command } from "./ui/command-ui-handler";
|
||||
import { Stat } from "./data/pokemon-stat";
|
||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, overrideModifiers, overrideHeldItems, BypassSpeedChanceModifier } from "./modifier/modifier";
|
||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, overrideModifiers, overrideHeldItems, BypassSpeedChanceModifier, AbilityScannerModifier } from "./modifier/modifier";
|
||||
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
||||
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
||||
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
||||
@ -935,6 +935,9 @@ export class EncounterPhase extends BattlePhase {
|
||||
const ivScannerModifier = this.scene.findModifier(m => m instanceof IvScannerModifier);
|
||||
if (ivScannerModifier)
|
||||
enemyField.map(p => this.scene.pushPhase(new ScanIvsPhase(this.scene, p.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))));
|
||||
const abilityScannerModifier = this.scene.findModifier(m => m instanceof AbilityScannerModifier);
|
||||
if (abilityScannerModifier)
|
||||
enemyField.map(p => this.scene.pushPhase(new ScanAbilityPhase(this.scene, p.getBattlerIndex(), Math.min(abilityScannerModifier.getStackCount() * 2, 6))));
|
||||
}
|
||||
|
||||
if (!this.loaded) {
|
||||
@ -4862,6 +4865,34 @@ export class ScanIvsPhase extends PokemonPhase {
|
||||
}
|
||||
}
|
||||
|
||||
export class ScanAbilityPhase extends PokemonPhase {
|
||||
|
||||
constructor(scene: BattleScene, battlerIndex: BattlerIndex, shownIvs: integer) {
|
||||
super(scene, battlerIndex);
|
||||
}
|
||||
|
||||
start() {
|
||||
super.start();
|
||||
|
||||
const pokemon = this.getPokemon();
|
||||
|
||||
this.scene.ui.showText(i18next.t('battle:abilityScannerUseQuestion', { pokemonName: pokemon.name }), null, () => {
|
||||
this.scene.ui.setMode(Mode.CONFIRM, () => {
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
this.scene.ui.clearText();
|
||||
new CommonBattleAnim(CommonAnim.LOCK_ON, pokemon, pokemon).play(this.scene, () => {
|
||||
this.scene.ui.getMessageHandler().promptAbility(pokemon.id, pokemon.getAbility().name).then(() => this.end());
|
||||
});
|
||||
}, () => {
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
this.scene.ui.clearText();
|
||||
this.end();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export class TrainerMessageTestPhase extends BattlePhase {
|
||||
private trainerTypes: TrainerType[];
|
||||
|
||||
|
@ -225,6 +225,19 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
|
||||
});
|
||||
}
|
||||
|
||||
promptAbility(pokemonId: integer, abilityName: string): Promise<void> {
|
||||
return new Promise(resolve => {
|
||||
this.scene.executeWithSeedOffset(() => {
|
||||
this.showText(i18next.t('battle:abilityPrompt', {abilityName: abilityName, pokemonName: this.scene.getPokemonById(pokemonId).name}));
|
||||
|
||||
this.awaitingActionInput = true;
|
||||
this.onActionInput = () => {
|
||||
resolve();
|
||||
};
|
||||
}, pokemonId);
|
||||
});
|
||||
}
|
||||
|
||||
getIvDescriptor(value: integer, typeIv: integer, pokemonId: integer): string {
|
||||
const starterSpecies = this.scene.getPokemonById(pokemonId).species.getRootSpeciesId(true);
|
||||
const starterIvs: number[] = this.scene.gameData.dexData[starterSpecies].ivs;
|
||||
|
Loading…
Reference in New Issue
Block a user