Merge 316acc1d0d
into 51bb80cb66
This commit is contained in:
commit
5a43a906cf
File diff suppressed because it is too large
Load Diff
|
@ -5,4 +5,8 @@ export enum Challenges {
|
||||||
LOWER_STARTER_POINTS,
|
LOWER_STARTER_POINTS,
|
||||||
FRESH_START,
|
FRESH_START,
|
||||||
INVERSE_BATTLE,
|
INVERSE_BATTLE,
|
||||||
|
NO_AUTO_HEAL,
|
||||||
|
HARDCORE,
|
||||||
|
NO_LEGENDS,
|
||||||
|
LIMITED_CATCH,
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,5 +33,29 @@
|
||||||
"desc": "Type matchups are reversed and no type is immune to any other type.\nDisables other challenges' achievements.",
|
"desc": "Type matchups are reversed and no type is immune to any other type.\nDisables other challenges' achievements.",
|
||||||
"value.0": "Off",
|
"value.0": "Off",
|
||||||
"value.1": "On"
|
"value.1": "On"
|
||||||
|
},
|
||||||
|
"noAutoHeal": {
|
||||||
|
"name": "No Free Heal",
|
||||||
|
"desc": "Disables the free automatic healing which normally occurs after every 10th wave.",
|
||||||
|
"value.0": "Off",
|
||||||
|
"value.1": "On"
|
||||||
|
},
|
||||||
|
"hardcore": {
|
||||||
|
"name": "Hardcore",
|
||||||
|
"desc": "You can no longer revive Pokemon that have fainted.",
|
||||||
|
"value.0": "Off",
|
||||||
|
"value.1": "On"
|
||||||
|
},
|
||||||
|
"noLegends": {
|
||||||
|
"name": "No Starter Legends",
|
||||||
|
"desc": "You can't choose any legendary, sub-legendary or mythical Pokemon as a starter.",
|
||||||
|
"value.0": "Off",
|
||||||
|
"value.1": "On"
|
||||||
|
},
|
||||||
|
"limitedCatch": {
|
||||||
|
"name": "Limited Catch",
|
||||||
|
"desc": "You can only add the first Pokemon of a biome to your current party.",
|
||||||
|
"value.0": "Off",
|
||||||
|
"value.1": "On"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,32 +1,34 @@
|
||||||
import * as Modifiers from "./modifier";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { MoneyMultiplierModifier } from "./modifier";
|
import { getBerryEffectDescription, getBerryName } from "#app/data/berry";
|
||||||
import { allMoves, AttackMove, selfStatLowerMoves } from "../data/move";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS, PokeballType } from "../data/pokeball";
|
import { allMoves, AttackMove, selfStatLowerMoves } from "#app/data/move";
|
||||||
import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "../field/pokemon";
|
|
||||||
import { EvolutionItem, pokemonEvolutions } from "../data/pokemon-evolutions";
|
|
||||||
import { tmPoolTiers, tmSpecies } from "../data/tms";
|
|
||||||
import { Type } from "../data/type";
|
|
||||||
import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "../ui/party-ui-handler";
|
|
||||||
import * as Utils from "../utils";
|
|
||||||
import { getBerryEffectDescription, getBerryName } from "../data/berry";
|
|
||||||
import { Unlockables } from "../system/unlockables";
|
|
||||||
import { getStatusEffectDescriptor, StatusEffect } from "../data/status-effect";
|
|
||||||
import { SpeciesFormKey } from "../data/pokemon-species";
|
|
||||||
import BattleScene from "../battle-scene";
|
|
||||||
import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "../system/voucher";
|
|
||||||
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "../data/pokemon-forms";
|
|
||||||
import { ModifierTier } from "./modifier-tier";
|
|
||||||
import { getNatureName, getNatureStatMultiplier, Nature } from "#app/data/nature";
|
import { getNatureName, getNatureStatMultiplier, Nature } from "#app/data/nature";
|
||||||
import i18next from "i18next";
|
import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS, PokeballType } from "#app/data/pokeball";
|
||||||
import { getModifierTierTextTint } from "#app/ui/text";
|
import { EvolutionItem, pokemonEvolutions } from "#app/data/pokemon-evolutions";
|
||||||
|
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms";
|
||||||
|
import { SpeciesFormKey } from "#app/data/pokemon-species";
|
||||||
|
import { getStatusEffectDescriptor, StatusEffect } from "#app/data/status-effect";
|
||||||
|
import { tmPoolTiers, tmSpecies } from "#app/data/tms";
|
||||||
|
import { Type } from "#app/data/type";
|
||||||
|
import { getStatKey, PermanentStat, Stat, TEMP_BATTLE_STATS, TempBattleStat } from "#app/enums/stat";
|
||||||
|
import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||||
|
import { GameMode } from "#app/game-mode";
|
||||||
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
|
import { Unlockables } from "#app/system/unlockables";
|
||||||
|
import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher";
|
||||||
|
import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler";
|
||||||
|
import { getModifierTierTextTint } from "#app/ui/text";
|
||||||
|
import * as Utils from "#app/utils";
|
||||||
import { Abilities } from "#enums/abilities";
|
import { Abilities } from "#enums/abilities";
|
||||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
import { BerryType } from "#enums/berry-type";
|
import { BerryType } from "#enums/berry-type";
|
||||||
import { Moves } from "#enums/moves";
|
import { Moves } from "#enums/moves";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import i18next from "i18next";
|
||||||
import { PermanentStat, TEMP_BATTLE_STATS, TempBattleStat, Stat, getStatKey } from "#app/enums/stat";
|
import * as Modifiers from "./modifier";
|
||||||
|
import { MoneyMultiplierModifier } from "./modifier";
|
||||||
|
import { ModifierTier } from "./modifier-tier";
|
||||||
|
|
||||||
const outputModifierData = false;
|
const outputModifierData = false;
|
||||||
const useMaxWeightForOutput = false;
|
const useMaxWeightForOutput = false;
|
||||||
|
@ -2139,8 +2141,12 @@ function getModifierTypeOptionWithRetry(existingOptions: ModifierTypeOption[], r
|
||||||
allowLuckUpgrades = allowLuckUpgrades ?? true;
|
allowLuckUpgrades = allowLuckUpgrades ?? true;
|
||||||
let candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, tier, undefined, 0, allowLuckUpgrades);
|
let candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, tier, undefined, 0, allowLuckUpgrades);
|
||||||
let r = 0;
|
let r = 0;
|
||||||
while (existingOptions.length && ++r < retryCount && existingOptions.filter(o => o.type.name === candidate?.type.name || o.type.group === candidate?.type.group).length) {
|
let isValidForChallenge = new Utils.BooleanHolder(true);
|
||||||
|
applyChallenges(party[0].scene.gameMode, ChallengeType.RANDOM_ITEM_BLACKLIST, candidate!, isValidForChallenge);
|
||||||
|
while (existingOptions.length && ++r < retryCount && existingOptions.filter(o => o.type.name === candidate?.type.name || o.type.group === candidate?.type.group).length || !isValidForChallenge.value) {
|
||||||
candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, candidate?.type.tier ?? tier, candidate?.upgradeCount, 0, allowLuckUpgrades);
|
candidate = getNewModifierTypeOption(party, ModifierPoolType.PLAYER, candidate?.type.tier ?? tier, candidate?.upgradeCount, 0, allowLuckUpgrades);
|
||||||
|
isValidForChallenge = new Utils.BooleanHolder(true);
|
||||||
|
applyChallenges(party[0].scene.gameMode, ChallengeType.RANDOM_ITEM_BLACKLIST, candidate!, isValidForChallenge);
|
||||||
}
|
}
|
||||||
return candidate!;
|
return candidate!;
|
||||||
}
|
}
|
||||||
|
@ -2170,7 +2176,7 @@ export function overridePlayerModifierTypeOptions(options: ModifierTypeOption[],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, baseCost: integer): ModifierTypeOption[] {
|
export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, baseCost: integer, gameMode: GameMode): ModifierTypeOption[] {
|
||||||
if (!(waveIndex % 10)) {
|
if (!(waveIndex % 10)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -2204,7 +2210,11 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, base
|
||||||
new ModifierTypeOption(modifierTypes.SACRED_ASH(), 0, baseCost * 10)
|
new ModifierTypeOption(modifierTypes.SACRED_ASH(), 0, baseCost * 10)
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
return options.slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)).flat();
|
return options.slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)).flat().filter(x => {
|
||||||
|
const isValidForChallenge = new Utils.BooleanHolder(true);
|
||||||
|
applyChallenges(gameMode, ChallengeType.SHOP_ITEM_BLACKLIST, x, isValidForChallenge);
|
||||||
|
return isValidForChallenge.value;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: Modifiers.PersistentModifier[], scene: BattleScene): Modifiers.EnemyPersistentModifier {
|
export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: Modifiers.PersistentModifier[], scene: BattleScene): Modifiers.EnemyPersistentModifier {
|
||||||
|
|
|
@ -1,21 +1,23 @@
|
||||||
import BattleScene from "#app/battle-scene";
|
|
||||||
import { BattlerIndex } from "#app/battle";
|
import { BattlerIndex } from "#app/battle";
|
||||||
import { getPokeballCatchMultiplier, getPokeballAtlasKey, getPokeballTintColor, doPokeballBounceAnim } from "#app/data/pokeball";
|
import BattleScene from "#app/battle-scene";
|
||||||
|
import { SubstituteTag } from "#app/data/battler-tags";
|
||||||
|
import { ChallengeType, applyChallenges } from "#app/data/challenge";
|
||||||
|
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor } from "#app/data/pokeball";
|
||||||
import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect";
|
import { getStatusEffectCatchRateMultiplier } from "#app/data/status-effect";
|
||||||
import { PokeballType } from "#app/enums/pokeball";
|
import { PokeballType } from "#app/enums/pokeball";
|
||||||
import { StatusEffect } from "#app/enums/status-effect";
|
import { StatusEffect } from "#app/enums/status-effect";
|
||||||
import { addPokeballOpenParticles, addPokeballCaptureStars } from "#app/field/anims";
|
import { addPokeballCaptureStars, addPokeballOpenParticles } from "#app/field/anims";
|
||||||
import { EnemyPokemon } from "#app/field/pokemon";
|
import { EnemyPokemon } from "#app/field/pokemon";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||||
import { achvs } from "#app/system/achv";
|
import { achvs } from "#app/system/achv";
|
||||||
import { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler";
|
import { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler";
|
||||||
import { SummaryUiMode } from "#app/ui/summary-ui-handler";
|
import { SummaryUiMode } from "#app/ui/summary-ui-handler";
|
||||||
import { Mode } from "#app/ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
|
import { BooleanHolder } from "#app/utils";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { PokemonPhase } from "./pokemon-phase";
|
import { PokemonPhase } from "./pokemon-phase";
|
||||||
import { VictoryPhase } from "./victory-phase";
|
import { VictoryPhase } from "./victory-phase";
|
||||||
import { SubstituteTag } from "#app/data/battler-tags";
|
|
||||||
|
|
||||||
export class AttemptCapturePhase extends PokemonPhase {
|
export class AttemptCapturePhase extends PokemonPhase {
|
||||||
private pokeballType: PokeballType;
|
private pokeballType: PokeballType;
|
||||||
|
@ -249,6 +251,13 @@ export class AttemptCapturePhase extends PokemonPhase {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
Promise.all([pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon)]).then(() => {
|
Promise.all([pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon)]).then(() => {
|
||||||
|
const challengeCanAddToParty = new BooleanHolder(true);
|
||||||
|
applyChallenges(this.scene.gameMode, ChallengeType.ADD_POKEMON_TO_PARTY, pokemon, this.scene.currentBattle.waveIndex, challengeCanAddToParty);
|
||||||
|
if (!challengeCanAddToParty.value) {
|
||||||
|
removePokemon();
|
||||||
|
end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.scene.getParty().length === 6) {
|
if (this.scene.getParty().length === 6) {
|
||||||
const promptRelease = () => {
|
const promptRelease = () => {
|
||||||
this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => {
|
this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => {
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
|
import { BattleType, TurnCommand } from "#app/battle";
|
||||||
import BattleScene from "#app/battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { TurnCommand, BattleType } from "#app/battle";
|
import { EncoreTag, TrappedTag } from "#app/data/battler-tags";
|
||||||
import { TrappedTag, EncoreTag } from "#app/data/battler-tags";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import { MoveTargetSet, getMoveTargets } from "#app/data/move";
|
import { getMoveTargets, MoveTargetSet } from "#app/data/move";
|
||||||
import { speciesStarters } from "#app/data/pokemon-species";
|
import { speciesStarters } from "#app/data/pokemon-species";
|
||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#app/enums/abilities";
|
||||||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||||
|
@ -12,10 +13,11 @@ import { FieldPosition, PlayerPokemon } from "#app/field/pokemon";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { Command } from "#app/ui/command-ui-handler";
|
import { Command } from "#app/ui/command-ui-handler";
|
||||||
import { Mode } from "#app/ui/ui";
|
import { Mode } from "#app/ui/ui";
|
||||||
|
import { BooleanHolder } from "#app/utils";
|
||||||
|
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { FieldPhase } from "./field-phase";
|
import { FieldPhase } from "./field-phase";
|
||||||
import { SelectTargetPhase } from "./select-target-phase";
|
import { SelectTargetPhase } from "./select-target-phase";
|
||||||
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
|
||||||
|
|
||||||
export class CommandPhase extends FieldPhase {
|
export class CommandPhase extends FieldPhase {
|
||||||
protected fieldIndex: integer;
|
protected fieldIndex: integer;
|
||||||
|
@ -84,6 +86,18 @@ export class CommandPhase extends FieldPhase {
|
||||||
|
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case Command.FIGHT:
|
case Command.FIGHT:
|
||||||
|
// Check if move can be used in challenge
|
||||||
|
const isValidForChallenge = new BooleanHolder(true);
|
||||||
|
applyChallenges(this.scene.gameMode, ChallengeType.MOVE_BLACKLIST, playerPokemon.getMoveset()[cursor]!, isValidForChallenge);
|
||||||
|
if (!isValidForChallenge.value) {
|
||||||
|
const moveName = playerPokemon.getMoveset()[cursor]?.getName();
|
||||||
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
|
this.scene.ui.showText(i18next.t("challenges:illegalMove", { moveName: moveName }), null, () => {
|
||||||
|
this.scene.ui.clearText();
|
||||||
|
this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex);
|
||||||
|
}, null, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
let useStruggle = false;
|
let useStruggle = false;
|
||||||
if (cursor === -1 ||
|
if (cursor === -1 ||
|
||||||
playerPokemon.trySelectMove(cursor, args[0] as boolean) ||
|
playerPokemon.trySelectMove(cursor, args[0] as boolean) ||
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import BattleScene from "#app/battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import * as Utils from "#app/utils";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
|
import { SelectModifierPhase } from "#app/phases/select-modifier-phase";
|
||||||
|
import { BooleanHolder, fixedInt } from "#app/utils";
|
||||||
import { BattlePhase } from "./battle-phase";
|
import { BattlePhase } from "./battle-phase";
|
||||||
|
|
||||||
export class PartyHealPhase extends BattlePhase {
|
export class PartyHealPhase extends BattlePhase {
|
||||||
|
@ -14,21 +16,36 @@ export class PartyHealPhase extends BattlePhase {
|
||||||
start() {
|
start() {
|
||||||
super.start();
|
super.start();
|
||||||
|
|
||||||
|
const isHealPhaseActive = new BooleanHolder(true);
|
||||||
|
applyChallenges(this.scene.gameMode, ChallengeType.NO_HEAL_PHASE, isHealPhaseActive);
|
||||||
|
if (!isHealPhaseActive.value) {
|
||||||
|
this.scene.unshiftPhase(new SelectModifierPhase(this.scene));
|
||||||
|
this.end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const bgmPlaying = this.scene.isBgmPlaying();
|
const bgmPlaying = this.scene.isBgmPlaying();
|
||||||
if (bgmPlaying) {
|
if (bgmPlaying) {
|
||||||
this.scene.fadeOutBgm(1000, false);
|
this.scene.fadeOutBgm(1000, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const canBeRevived = new BooleanHolder(true);
|
||||||
this.scene.ui.fadeOut(1000).then(() => {
|
this.scene.ui.fadeOut(1000).then(() => {
|
||||||
for (const pokemon of this.scene.getParty()) {
|
for (const pokemon of this.scene.getParty()) {
|
||||||
pokemon.hp = pokemon.getMaxHp();
|
applyChallenges(this.scene.gameMode, ChallengeType.PREVENT_REVIVE, pokemon, canBeRevived);
|
||||||
pokemon.resetStatus();
|
if (canBeRevived.value || !pokemon.isFainted()) {
|
||||||
for (const move of pokemon.moveset) {
|
pokemon.hp = pokemon.getMaxHp();
|
||||||
move!.ppUsed = 0; // TODO: is this bang correct?
|
pokemon.resetStatus();
|
||||||
|
for (const move of pokemon.moveset) {
|
||||||
|
if (move) {
|
||||||
|
move.ppUsed = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pokemon.updateInfo(true);
|
||||||
}
|
}
|
||||||
pokemon.updateInfo(true);
|
|
||||||
}
|
}
|
||||||
const healSong = this.scene.playSoundWithoutBgm("heal");
|
const healSong = this.scene.playSoundWithoutBgm("heal");
|
||||||
this.scene.time.delayedCall(Utils.fixedInt(healSong.totalDuration * 1000), () => {
|
this.scene.time.delayedCall(fixedInt(healSong.totalDuration * 1000), () => {
|
||||||
healSong.destroy();
|
healSong.destroy();
|
||||||
if (this.resumeBgm && bgmPlaying) {
|
if (this.resumeBgm && bgmPlaying) {
|
||||||
this.scene.playBgm();
|
this.scene.playBgm();
|
||||||
|
|
|
@ -1,16 +1,15 @@
|
||||||
import BattleScene from "#app/battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
|
||||||
import { regenerateModifierPoolThresholds, ModifierTypeOption, ModifierType, getPlayerShopModifierTypeOptionsForWave, PokemonModifierType, FusePokemonModifierType, PokemonMoveModifierType, TmModifierType, RememberMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, ModifierPoolType, getPlayerModifierTypeOptions } from "#app/modifier/modifier-type";
|
|
||||||
import { ExtraModifierModifier, Modifier, PokemonHeldItemModifier } from "#app/modifier/modifier";
|
import { ExtraModifierModifier, Modifier, PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||||
import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import PartyUiHandler, { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler";
|
import { CustomModifierSettings, FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, RememberMoveModifierType, TmModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type";
|
||||||
import { Mode } from "#app/ui/ui";
|
|
||||||
import i18next from "i18next";
|
|
||||||
import * as Utils from "#app/utils";
|
|
||||||
import { BattlePhase } from "./battle-phase";
|
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import { CustomModifierSettings } from "#app/modifier/modifier-type";
|
import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler";
|
||||||
|
import PartyUiHandler, { PartyOption, PartyUiMode } from "#app/ui/party-ui-handler";
|
||||||
|
import { Mode } from "#app/ui/ui";
|
||||||
|
import * as Utils from "#app/utils";
|
||||||
import { isNullOrUndefined } from "#app/utils";
|
import { isNullOrUndefined } from "#app/utils";
|
||||||
|
import i18next from "i18next";
|
||||||
|
import { BattlePhase } from "./battle-phase";
|
||||||
|
|
||||||
export class SelectModifierPhase extends BattlePhase {
|
export class SelectModifierPhase extends BattlePhase {
|
||||||
private rerollCount: integer;
|
private rerollCount: integer;
|
||||||
|
@ -128,7 +127,7 @@ export class SelectModifierPhase extends BattlePhase {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
const shopOptions = getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, this.scene.getWaveMoneyAmount(1));
|
const shopOptions = getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, this.scene.getWaveMoneyAmount(1), this.scene.gameMode);
|
||||||
const shopOption = shopOptions[rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT];
|
const shopOption = shopOptions[rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT];
|
||||||
if (shopOption.type) {
|
if (shopOption.type) {
|
||||||
modifierType = shopOption.type;
|
modifierType = shopOption.type;
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
import BattleScene from "../battle-scene";
|
import BattleScene from "#app/battle-scene";
|
||||||
import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption, TmModifierType } from "../modifier/modifier-type";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import { getPokeballAtlasKey, PokeballType } from "../data/pokeball";
|
import { allMoves } from "#app/data/move";
|
||||||
import { addTextObject, getTextStyleOptions, getModifierTierTextTint, getTextColor, TextStyle } from "./text";
|
import { getPokeballAtlasKey, PokeballType } from "#app/data/pokeball";
|
||||||
import AwaitableUiHandler from "./awaitable-ui-handler";
|
import { HealShopCostModifier, LockModifierTiersModifier, PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||||
import { Mode } from "./ui";
|
import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption, TmModifierType } from "#app/modifier/modifier-type";
|
||||||
import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifier } from "../modifier/modifier";
|
|
||||||
import { handleTutorial, Tutorial } from "../tutorial";
|
|
||||||
import { Button } from "#enums/buttons";
|
|
||||||
import MoveInfoOverlay from "./move-info-overlay";
|
|
||||||
import { allMoves } from "../data/move";
|
|
||||||
import * as Utils from "./../utils";
|
|
||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
|
import { handleTutorial, Tutorial } from "#app/tutorial";
|
||||||
|
import { BooleanHolder, formatMoney, NumberHolder } from "#app/utils";
|
||||||
|
import { Button } from "#enums/buttons";
|
||||||
|
import { ShopCursorTarget } from "#enums/shop-cursor-target";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { ShopCursorTarget } from "#app/enums/shop-cursor-target";
|
|
||||||
import { IntegerHolder } from "./../utils";
|
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
|
import AwaitableUiHandler from "./awaitable-ui-handler";
|
||||||
|
import MoveInfoOverlay from "./move-info-overlay";
|
||||||
|
import { addTextObject, getModifierTierTextTint, getTextColor, getTextStyleOptions, TextStyle } from "./text";
|
||||||
|
import { Mode } from "./ui";
|
||||||
|
|
||||||
export const SHOP_OPTIONS_ROW_LIMIT = 6;
|
export const SHOP_OPTIONS_ROW_LIMIT = 6;
|
||||||
|
|
||||||
|
@ -186,11 +186,18 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler {
|
||||||
|
|
||||||
const typeOptions = args[1] as ModifierTypeOption[];
|
const typeOptions = args[1] as ModifierTypeOption[];
|
||||||
const removeHealShop = this.scene.gameMode.hasNoShop;
|
const removeHealShop = this.scene.gameMode.hasNoShop;
|
||||||
const baseShopCost = new IntegerHolder(this.scene.getWaveMoneyAmount(1));
|
const baseShopCost = new NumberHolder(this.scene.getWaveMoneyAmount(1));
|
||||||
|
|
||||||
this.scene.applyModifier(HealShopCostModifier, true, baseShopCost);
|
this.scene.applyModifier(HealShopCostModifier, true, baseShopCost);
|
||||||
|
|
||||||
const shopTypeOptions = !removeHealShop
|
const shopTypeOptions = !removeHealShop
|
||||||
? getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, baseShopCost.value)
|
? getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, baseShopCost.value, this.scene.gameMode).filter(shopItem => {
|
||||||
|
const isValidForChallenge = new BooleanHolder(true);
|
||||||
|
applyChallenges(this.scene.gameMode, ChallengeType.SHOP_ITEM_BLACKLIST, shopItem, isValidForChallenge);
|
||||||
|
return isValidForChallenge.value;
|
||||||
|
})
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
const optionsYOffset = shopTypeOptions.length >= SHOP_OPTIONS_ROW_LIMIT ? -8 : -24;
|
const optionsYOffset = shopTypeOptions.length >= SHOP_OPTIONS_ROW_LIMIT ? -8 : -24;
|
||||||
|
|
||||||
for (let m = 0; m < typeOptions.length; m++) {
|
for (let m = 0; m < typeOptions.length; m++) {
|
||||||
|
@ -554,7 +561,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler {
|
||||||
}
|
}
|
||||||
const canReroll = this.scene.money >= this.rerollCost;
|
const canReroll = this.scene.money >= this.rerollCost;
|
||||||
|
|
||||||
const formattedMoney = Utils.formatMoney(this.scene.moneyFormat, this.rerollCost);
|
const formattedMoney = formatMoney(this.scene.moneyFormat, this.rerollCost);
|
||||||
|
|
||||||
this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney }));
|
this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney }));
|
||||||
this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED));
|
this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED));
|
||||||
|
@ -819,7 +826,7 @@ class ModifierOption extends Phaser.GameObjects.Container {
|
||||||
const cost = Overrides.WAIVE_ROLL_FEE_OVERRIDE ? 0 : this.modifierTypeOption.cost;
|
const cost = Overrides.WAIVE_ROLL_FEE_OVERRIDE ? 0 : this.modifierTypeOption.cost;
|
||||||
const textStyle = cost <= scene.money ? TextStyle.MONEY : TextStyle.PARTY_RED;
|
const textStyle = cost <= scene.money ? TextStyle.MONEY : TextStyle.PARTY_RED;
|
||||||
|
|
||||||
const formattedMoney = Utils.formatMoney(scene.moneyFormat, cost);
|
const formattedMoney = formatMoney(scene.moneyFormat, cost);
|
||||||
|
|
||||||
this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney }));
|
this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney }));
|
||||||
this.itemCostText.setColor(getTextColor(textStyle, false, scene.uiTheme));
|
this.itemCostText.setColor(getTextColor(textStyle, false, scene.uiTheme));
|
||||||
|
|
Loading…
Reference in New Issue