Merge branch 'beta' into bgm-name-change-locales
This commit is contained in:
commit
516c9a7d62
|
@ -4859,16 +4859,18 @@ export class RemoveAllSubstitutesAttr extends MoveEffectAttr {
|
|||
}
|
||||
|
||||
/**
|
||||
* Attribute used when a move hits a {@linkcode BattlerTagType} for double damage
|
||||
* Attribute used when a move can deal damage to {@linkcode BattlerTagType}
|
||||
* Moves that always hit but do not deal double damage: Thunder, Fissure, Sky Uppercut,
|
||||
* Smack Down, Hurricane, Thousand Arrows
|
||||
* @extends MoveAttr
|
||||
*/
|
||||
export class DealsDoubleDamageToTagAttr extends MoveAttr {
|
||||
export class HitsTagAttr extends MoveAttr {
|
||||
/** The {@linkcode BattlerTagType} this move hits */
|
||||
public tagType: BattlerTagType;
|
||||
/** Should this move deal double damage against {@linkcode DealsDoubleDamageToTagAttr.tagType}? */
|
||||
/** Should this move deal double damage against {@linkcode HitsTagAttr.tagType}? */
|
||||
public doubleDamage: boolean;
|
||||
|
||||
constructor(tagType: BattlerTagType, doubleDamage?: boolean) {
|
||||
constructor(tagType: BattlerTagType, doubleDamage: boolean = false) {
|
||||
super();
|
||||
|
||||
this.tagType = tagType;
|
||||
|
@ -4880,6 +4882,17 @@ export class DealsDoubleDamageToTagAttr extends MoveAttr {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for moves that will always hit for a given tag but also doubles damage.
|
||||
* Moves include: Gust, Stomp, Body Slam, Surf, Earthquake, Magnitude, Twister,
|
||||
* Whirlpool, Dragon Rush, Heat Crash, Steam Roller, Flying Press
|
||||
*/
|
||||
export class HitsTagForDoubleDamageAttr extends HitsTagAttr {
|
||||
constructor(tagType: BattlerTagType) {
|
||||
super(tagType, true);
|
||||
}
|
||||
}
|
||||
|
||||
export class AddArenaTagAttr extends MoveEffectAttr {
|
||||
public tagType: ArenaTagType;
|
||||
public turnCount: integer;
|
||||
|
@ -6759,7 +6772,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.CUT, Type.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1)
|
||||
.slicingMove(),
|
||||
new AttackMove(Moves.GUST, Type.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.FLYING)
|
||||
.windMove(),
|
||||
new AttackMove(Moves.WING_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1),
|
||||
new StatusMove(Moves.WHIRLWIND, Type.NORMAL, -1, 20, -1, -6, 1)
|
||||
|
@ -6777,7 +6790,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.VINE_WHIP, Type.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1),
|
||||
new AttackMove(Moves.STOMP, Type.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED)
|
||||
.attr(FlinchAttr),
|
||||
new AttackMove(Moves.DOUBLE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1)
|
||||
.attr(MultiHitAttr, MultiHitType._2),
|
||||
|
@ -6802,7 +6815,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.TACKLE, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1),
|
||||
new AttackMove(Moves.BODY_SLAM, Type.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED)
|
||||
.attr(StatusEffectAttr, StatusEffect.PARALYSIS),
|
||||
new AttackMove(Moves.WRAP, Type.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1)
|
||||
.attr(TrapAttr, BattlerTagType.WRAP),
|
||||
|
@ -6870,7 +6883,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.HYDRO_PUMP, Type.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1),
|
||||
new AttackMove(Moves.SURF, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1)
|
||||
.target(MoveTarget.ALL_NEAR_OTHERS)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERWATER, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERWATER)
|
||||
.attr(GulpMissileTagAttr),
|
||||
new AttackMove(Moves.ICE_BEAM, Type.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1)
|
||||
.attr(StatusEffectAttr, StatusEffect.FREEZE),
|
||||
|
@ -6953,18 +6966,18 @@ export function initMoves() {
|
|||
new AttackMove(Moves.THUNDER, Type.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1)
|
||||
.attr(StatusEffectAttr, StatusEffect.PARALYSIS)
|
||||
.attr(ThunderAccuracyAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false),
|
||||
.attr(HitsTagAttr, BattlerTagType.FLYING),
|
||||
new AttackMove(Moves.ROCK_THROW, Type.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1)
|
||||
.makesContact(false),
|
||||
new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERGROUND, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND)
|
||||
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
||||
.makesContact(false)
|
||||
.target(MoveTarget.ALL_NEAR_OTHERS),
|
||||
new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
|
||||
.attr(OneHitKOAttr)
|
||||
.attr(OneHitKOAccuracyAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERGROUND, false)
|
||||
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND)
|
||||
.makesContact(false),
|
||||
new AttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1)
|
||||
.attr(ChargeAttr, ChargeAnim.DIG_CHARGING, i18next.t("moveTriggers:dugAHole", {pokemonName: "{USER}"}), BattlerTagType.UNDERGROUND)
|
||||
|
@ -7353,7 +7366,7 @@ export function initMoves() {
|
|||
.attr(PreMoveMessageAttr, magnitudeMessageFunc)
|
||||
.attr(MagnitudePowerAttr)
|
||||
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERGROUND, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND)
|
||||
.makesContact(false)
|
||||
.target(MoveTarget.ALL_NEAR_OTHERS),
|
||||
new AttackMove(Moves.DYNAMIC_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2)
|
||||
|
@ -7409,7 +7422,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.CROSS_CHOP, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2)
|
||||
.attr(HighCritAttr),
|
||||
new AttackMove(Moves.TWISTER, Type.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.FLYING)
|
||||
.attr(FlinchAttr)
|
||||
.windMove()
|
||||
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
||||
|
@ -7441,7 +7454,7 @@ export function initMoves() {
|
|||
.attr(StatStageChangeAttr, [ Stat.DEF ], -1),
|
||||
new AttackMove(Moves.WHIRLPOOL, Type.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2)
|
||||
.attr(TrapAttr, BattlerTagType.WHIRLPOOL)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERWATER, true),
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERWATER),
|
||||
new AttackMove(Moves.BEAT_UP, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2)
|
||||
.attr(MultiHitAttr, MultiHitType.BEAT_UP)
|
||||
.attr(BeatUpAttr)
|
||||
|
@ -7664,7 +7677,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.EXTRASENSORY, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3)
|
||||
.attr(FlinchAttr),
|
||||
new AttackMove(Moves.SKY_UPPERCUT, Type.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING)
|
||||
.attr(HitsTagAttr, BattlerTagType.FLYING)
|
||||
.punchingMove(),
|
||||
new AttackMove(Moves.SAND_TOMB, Type.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3)
|
||||
.attr(TrapAttr, BattlerTagType.SAND_TOMB)
|
||||
|
@ -7896,7 +7909,7 @@ export function initMoves() {
|
|||
.pulseMove(),
|
||||
new AttackMove(Moves.DRAGON_RUSH, Type.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED)
|
||||
.attr(FlinchAttr),
|
||||
new AttackMove(Moves.POWER_GEM, Type.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4),
|
||||
new AttackMove(Moves.DRAIN_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4)
|
||||
|
@ -8093,7 +8106,7 @@ export function initMoves() {
|
|||
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED)
|
||||
.attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN])
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false)
|
||||
.attr(HitsTagAttr, BattlerTagType.FLYING)
|
||||
.makesContact(false),
|
||||
new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5)
|
||||
.attr(CritOnlyAttr),
|
||||
|
@ -8108,7 +8121,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.HEAVY_SLAM, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(CompareWeightPowerAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true),
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED),
|
||||
new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5)
|
||||
.target(MoveTarget.ALL_NEAR_OTHERS)
|
||||
.condition(unknownTypeCondition)
|
||||
|
@ -8261,12 +8274,12 @@ export function initMoves() {
|
|||
new AttackMove(Moves.HEAT_CRASH, Type.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(CompareWeightPowerAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true),
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED),
|
||||
new AttackMove(Moves.LEAF_TORNADO, Type.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5)
|
||||
.attr(StatStageChangeAttr, [ Stat.ACC ], -1),
|
||||
new AttackMove(Moves.STEAMROLLER, Type.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED)
|
||||
.attr(FlinchAttr),
|
||||
new SelfStatusMove(Moves.COTTON_GUARD, Type.GRASS, -1, 10, -1, 0, 5)
|
||||
.attr(StatStageChangeAttr, [ Stat.DEF ], 3, true),
|
||||
|
@ -8279,7 +8292,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.HURRICANE, Type.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5)
|
||||
.attr(ThunderAccuracyAttr)
|
||||
.attr(ConfuseAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false)
|
||||
.attr(HitsTagAttr, BattlerTagType.FLYING)
|
||||
.windMove(),
|
||||
new AttackMove(Moves.HEAD_CHARGE, Type.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5)
|
||||
.attr(RecoilAttr)
|
||||
|
@ -8335,7 +8348,7 @@ export function initMoves() {
|
|||
new AttackMove(Moves.FLYING_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(FlyingTypeMultiplierAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED)
|
||||
.condition(failOnGravityCondition),
|
||||
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
|
||||
.target(MoveTarget.USER_SIDE)
|
||||
|
@ -8506,8 +8519,8 @@ export function initMoves() {
|
|||
new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6)
|
||||
.attr(NeutralDamageAgainstFlyingTypeMultiplierAttr)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MAGNET_RISEN, false)
|
||||
.attr(HitsTagAttr, BattlerTagType.FLYING)
|
||||
.attr(HitsTagAttr, BattlerTagType.MAGNET_RISEN)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED)
|
||||
.attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN])
|
||||
.makesContact(false)
|
||||
|
@ -8765,7 +8778,7 @@ export function initMoves() {
|
|||
.ignoresVirtual(),
|
||||
new AttackMove(Moves.MALICIOUS_MOONSAULT, Type.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7)
|
||||
.attr(AlwaysHitMinimizeAttr)
|
||||
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true)
|
||||
.partial()
|
||||
.ignoresVirtual(),
|
||||
new AttackMove(Moves.OCEANIC_OPERETTA, Type.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7)
|
||||
|
|
|
@ -3,7 +3,7 @@ import BattleScene, { AnySound } from "../battle-scene";
|
|||
import { Variant, VariantSet, variantColorCache } from "#app/data/variant";
|
||||
import { variantData } from "#app/data/variant";
|
||||
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "../ui/battle-info";
|
||||
import Move, { HighCritAttr, DealsDoubleDamageToTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "../data/move";
|
||||
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "../data/move";
|
||||
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species";
|
||||
import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils";
|
||||
import * as Utils from "../utils";
|
||||
|
@ -1513,7 +1513,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
|
||||
const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType);
|
||||
for (const tag of immuneTags) {
|
||||
if (move && !move.getAttrs(DealsDoubleDamageToTagAttr).some(attr => attr.tagType === tag.tagType)) {
|
||||
if (move && !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType)) {
|
||||
typeMultiplier.value = 0;
|
||||
break;
|
||||
}
|
||||
|
@ -2515,13 +2515,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, move.category, this.scene.currentBattle.double, screenMultiplier);
|
||||
|
||||
/**
|
||||
* For each {@linkcode DealsDoubleDamageToTagAttr} the move has, doubles the damage of the move if:
|
||||
* For each {@linkcode HitsTagAttr} the move has, doubles the damage of the move if:
|
||||
* The target has a {@linkcode BattlerTagType} that this move interacts with
|
||||
* AND
|
||||
* The move doubles damage when used against that tag
|
||||
*/
|
||||
const hitsTagMultiplier = new Utils.NumberHolder(1);
|
||||
move.getAttrs(DealsDoubleDamageToTagAttr).filter(hta => hta.doubleDamage).forEach(hta => {
|
||||
move.getAttrs(HitsTagAttr).filter(hta => hta.doubleDamage).forEach(hta => {
|
||||
if (this.getTag(hta.tagType)) {
|
||||
hitsTagMultiplier.value *= 2;
|
||||
}
|
||||
|
|
|
@ -3121,11 +3121,11 @@
|
|||
},
|
||||
"behemothBlade": {
|
||||
"name": "Gigantenhieb",
|
||||
"effect": "Der Anwender wird zu einem riesigen Schwert und greift das Ziel an. Dynamaximierte Ziele erleiden doppelten Schaden."
|
||||
"effect": "Der Anwender wird zu einem riesigen Schwert und greift das Ziel an."
|
||||
},
|
||||
"behemothBash": {
|
||||
"name": "Gigantenstoß",
|
||||
"effect": "Der Anwender wird zu einem riesigen Schild und greift das Ziel an. Dynamaximierte Ziele erleiden doppelten Schaden."
|
||||
"effect": "Der Anwender wird zu einem riesigen Schild und greift das Ziel an."
|
||||
},
|
||||
"auraWheel": {
|
||||
"name": "Aura-Rad",
|
||||
|
|
|
@ -3121,11 +3121,11 @@
|
|||
},
|
||||
"behemothBlade": {
|
||||
"name": "Gladius Maximus",
|
||||
"effect": "Le lanceur se transforme en une immense épée et pourfend sa cible. Cette capacité inflige le double de dégâts aux Pokémon Dynamax."
|
||||
"effect": "Le lanceur se transforme en une immense épée et pourfend sa cible."
|
||||
},
|
||||
"behemothBash": {
|
||||
"name": "Aegis Maxima",
|
||||
"effect": "Le lanceur se transforme en un immense bouclier et charge sa cible. Cette capacité inflige le double de dégâts aux Pokémon Dynamax."
|
||||
"effect": "Le lanceur se transforme en un immense bouclier et charge sa cible."
|
||||
},
|
||||
"auraWheel": {
|
||||
"name": "Roue Libre",
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
"ALL": "Tout",
|
||||
"PASS_BATON": "Relais",
|
||||
"UNPAUSE_EVOLUTION": "Réactiver Évolution",
|
||||
"PAUSE_EVOLUTION": "Interrompre Évolution",
|
||||
"PAUSE_EVOLUTION": "Empêcher Évolution",
|
||||
"REVIVE": "Ranimer",
|
||||
"RENAME": "Renommer",
|
||||
"choosePokemon": "Sélectionnez un Pokémon.",
|
||||
|
|
|
@ -243,7 +243,7 @@ export class GameOverPhase extends BattlePhase {
|
|||
gameVersion: this.scene.game.config.gameVersion,
|
||||
timestamp: new Date().getTime(),
|
||||
challenges: this.scene.gameMode.challenges.map(c => new ChallengeData(c)),
|
||||
mysteryEncounterType: this.scene.currentBattle.mysteryEncounter?.encounterType,
|
||||
mysteryEncounterType: this.scene.currentBattle.mysteryEncounter?.encounterType ?? -1,
|
||||
mysteryEncounterSaveData: this.scene.mysteryEncounterSaveData
|
||||
} as SessionSaveData;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr,
|
|||
import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag";
|
||||
import { MoveAnim } from "#app/data/battle-anims";
|
||||
import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags";
|
||||
import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, DealsDoubleDamageToTagAttr } from "#app/data/move";
|
||||
import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr } from "#app/data/move";
|
||||
import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms";
|
||||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||
import { Moves } from "#app/enums/moves";
|
||||
|
@ -394,7 +394,7 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||
}
|
||||
|
||||
const semiInvulnerableTag = target.getTag(SemiInvulnerableTag);
|
||||
if (semiInvulnerableTag && !this.move.getMove().getAttrs(DealsDoubleDamageToTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType)) {
|
||||
if (semiInvulnerableTag && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -281,7 +281,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container {
|
|||
const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET;
|
||||
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
||||
// Defeats from wild Pokemon battles will show the Pokemon responsible by the text of the run result.
|
||||
if (data.battleType === BattleType.WILD) {
|
||||
if (data.battleType === BattleType.WILD || (data.battleType === BattleType.MYSTERY_ENCOUNTER && !data.trainer)) {
|
||||
const enemyContainer = this.scene.add.container(8, 5);
|
||||
const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild", { context: genderStr })}`, TextStyle.WINDOW);
|
||||
enemyContainer.add(gameOutcomeLabel);
|
||||
|
@ -302,7 +302,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container {
|
|||
enemy.destroy();
|
||||
});
|
||||
this.add(enemyContainer);
|
||||
} else if (data.battleType === BattleType.TRAINER) { // Defeats from Trainers show the trainer's title and name
|
||||
} else if (data.battleType === BattleType.TRAINER || (data.battleType === BattleType.MYSTERY_ENCOUNTER && data.trainer)) { // Defeats from Trainers show the trainer's title and name
|
||||
const tObj = data.trainer.toTrainer(this.scene);
|
||||
// Because of the interesting mechanics behind rival names, the rival name and title have to be retrieved differently
|
||||
const RIVAL_TRAINER_ID_THRESHOLD = 375;
|
||||
|
|
|
@ -211,7 +211,7 @@ export default class RunInfoUiHandler extends UiHandler {
|
|||
if (!this.isVictory) {
|
||||
const enemyContainer = this.scene.add.container(0, 0);
|
||||
// Wild - Single and Doubles
|
||||
if (this.runInfo.battleType === BattleType.WILD) {
|
||||
if (this.runInfo.battleType === BattleType.WILD || (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER && !this.runInfo.trainer)) {
|
||||
switch (this.runInfo.enemyParty.length) {
|
||||
case 1:
|
||||
// Wild - Singles
|
||||
|
@ -222,7 +222,7 @@ export default class RunInfoUiHandler extends UiHandler {
|
|||
this.parseWildDoubleDefeat(enemyContainer);
|
||||
break;
|
||||
}
|
||||
} else if (this.runInfo.battleType === BattleType.TRAINER) {
|
||||
} else if (this.runInfo.battleType === BattleType.TRAINER || (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER && this.runInfo.trainer)) {
|
||||
this.parseTrainerDefeat(enemyContainer);
|
||||
}
|
||||
this.runResultContainer.add(enemyContainer);
|
||||
|
@ -381,10 +381,6 @@ export default class RunInfoUiHandler extends UiHandler {
|
|||
break;
|
||||
case GameModes.SPLICED_ENDLESS:
|
||||
modeText.appendText(`${i18next.t("gameMode:endlessSpliced")}`, false);
|
||||
if (this.runInfo.waveIndex === this.scene.gameData.gameStats.highestEndlessWave) {
|
||||
modeText.appendText(` [${i18next.t("runHistory:personalBest")}]`, false);
|
||||
modeText.setTint(0xffef5c, 0x47ff69, 0x6b6bff, 0xff6969);
|
||||
}
|
||||
break;
|
||||
case GameModes.CHALLENGE:
|
||||
modeText.appendText(`${i18next.t("gameMode:challenge")}`, false);
|
||||
|
@ -403,17 +399,18 @@ export default class RunInfoUiHandler extends UiHandler {
|
|||
break;
|
||||
case GameModes.ENDLESS:
|
||||
modeText.appendText(`${i18next.t("gameMode:endless")}`, false);
|
||||
// If the player achieves a personal best in Endless, the mode text will be tinted similarly to SSS luck to celebrate their achievement.
|
||||
if (this.runInfo.waveIndex === this.scene.gameData.gameStats.highestEndlessWave) {
|
||||
modeText.appendText(` [${i18next.t("runHistory:personalBest")}]`, false);
|
||||
modeText.setTint(0xffef5c, 0x47ff69, 0x6b6bff, 0xff6969);
|
||||
}
|
||||
break;
|
||||
case GameModes.CLASSIC:
|
||||
modeText.appendText(`${i18next.t("gameMode:classic")}`, false);
|
||||
break;
|
||||
}
|
||||
|
||||
// If the player achieves a personal best in Endless, the mode text will be tinted similarly to SSS luck to celebrate their achievement.
|
||||
if ((this.runInfo.gameMode === GameModes.ENDLESS || this.runInfo.gameMode === GameModes.SPLICED_ENDLESS) && this.runInfo.waveIndex === this.scene.gameData.gameStats.highestEndlessWave) {
|
||||
modeText.appendText(` [${i18next.t("runHistory:personalBest")}]`);
|
||||
modeText.setTint(0xffef5c, 0x47ff69, 0x6b6bff, 0xff6969);
|
||||
}
|
||||
|
||||
// Duration + Money
|
||||
const runInfoTextContainer = this.scene.add.container(0, 0);
|
||||
// Japanese is set to a greater line spacing of 35px in addBBCodeTextObject() if lineSpacing < 12.
|
||||
|
|
|
@ -83,7 +83,7 @@ const languageSettings: { [key: string]: LanguageSetting } = {
|
|||
},
|
||||
"fr":{
|
||||
starterInfoTextSize: "54px",
|
||||
instructionTextSize: "35px",
|
||||
instructionTextSize: "38px",
|
||||
},
|
||||
"it":{
|
||||
starterInfoTextSize: "56px",
|
||||
|
|
Loading…
Reference in New Issue