Merge branch 'main' into main
commit
8aca96ee74
File diff suppressed because it is too large
Load Diff
|
@ -4,30 +4,408 @@
|
|||
"image": "970.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 294,
|
||||
"h": 294
|
||||
"w": 296,
|
||||
"h": 296
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"filename": "0007.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 294,
|
||||
"h": 272
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 294,
|
||||
"h": 272
|
||||
"x": 2,
|
||||
"y": 8,
|
||||
"w": 59,
|
||||
"h": 60
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 294,
|
||||
"h": 272
|
||||
"w": 59,
|
||||
"h": 60
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0008.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 2,
|
||||
"y": 8,
|
||||
"w": 59,
|
||||
"h": 60
|
||||
},
|
||||
"frame": {
|
||||
"x": 59,
|
||||
"y": 0,
|
||||
"w": 59,
|
||||
"h": 60
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0006.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 6,
|
||||
"w": 59,
|
||||
"h": 62
|
||||
},
|
||||
"frame": {
|
||||
"x": 118,
|
||||
"y": 0,
|
||||
"w": 59,
|
||||
"h": 62
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0005.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 5,
|
||||
"w": 58,
|
||||
"h": 63
|
||||
},
|
||||
"frame": {
|
||||
"x": 177,
|
||||
"y": 0,
|
||||
"w": 58,
|
||||
"h": 63
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0009.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 2,
|
||||
"y": 5,
|
||||
"w": 59,
|
||||
"h": 66
|
||||
},
|
||||
"frame": {
|
||||
"x": 235,
|
||||
"y": 0,
|
||||
"w": 59,
|
||||
"h": 66
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0010.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 1,
|
||||
"y": 4,
|
||||
"w": 60,
|
||||
"h": 66
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 60,
|
||||
"w": 60,
|
||||
"h": 66
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0018.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 4,
|
||||
"w": 59,
|
||||
"h": 66
|
||||
},
|
||||
"frame": {
|
||||
"x": 60,
|
||||
"y": 62,
|
||||
"w": 59,
|
||||
"h": 66
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0004.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 2,
|
||||
"w": 59,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 119,
|
||||
"y": 63,
|
||||
"w": 59,
|
||||
"h": 67
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0017.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 2,
|
||||
"w": 59,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 178,
|
||||
"y": 66,
|
||||
"w": 59,
|
||||
"h": 67
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0012.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 4,
|
||||
"w": 59,
|
||||
"h": 68
|
||||
},
|
||||
"frame": {
|
||||
"x": 237,
|
||||
"y": 66,
|
||||
"w": 59,
|
||||
"h": 68
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0015.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 4,
|
||||
"w": 59,
|
||||
"h": 68
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 126,
|
||||
"w": 59,
|
||||
"h": 68
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0014.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"w": 60,
|
||||
"h": 69
|
||||
},
|
||||
"frame": {
|
||||
"x": 59,
|
||||
"y": 128,
|
||||
"w": 60,
|
||||
"h": 69
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 2,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
},
|
||||
"frame": {
|
||||
"x": 119,
|
||||
"y": 133,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0011.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 2,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
},
|
||||
"frame": {
|
||||
"x": 119,
|
||||
"y": 133,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0002.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 3,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
},
|
||||
"frame": {
|
||||
"x": 180,
|
||||
"y": 134,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0003.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 2,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 197,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0019.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 2,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
},
|
||||
"frame": {
|
||||
"x": 61,
|
||||
"y": 202,
|
||||
"w": 61,
|
||||
"h": 69
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0013.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 61,
|
||||
"h": 71
|
||||
},
|
||||
"frame": {
|
||||
"x": 122,
|
||||
"y": 203,
|
||||
"w": 61,
|
||||
"h": 71
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0016.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 61,
|
||||
"h": 77
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 61,
|
||||
"h": 71
|
||||
},
|
||||
"frame": {
|
||||
"x": 183,
|
||||
"y": 203,
|
||||
"w": 61,
|
||||
"h": 71
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -36,6 +414,6 @@
|
|||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:eb082214aae3ead48b7392bfc2701b0e:1b1153da7ce39a79125cb8a7c87e1cf3:51b1ef671985c954e537f39ec6f4e095$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:826f0c54b74572cfb274b9973fbd50bf:a0d3e34e9b94dc843d98c54879e0c70e:97e320d73d4227f4b083688478fb20b2$"
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1971,6 +1971,7 @@ export default class BattleScene extends SceneBase {
|
|||
|
||||
updateGameInfo(): void {
|
||||
const gameInfo = {
|
||||
playTime: this.sessionPlayTime ? this.sessionPlayTime : 0,
|
||||
gameMode: this.currentBattle ? this.gameMode.getName() : 'Title',
|
||||
biome: this.currentBattle ? getBiomeName(this.arena.biomeType) : '',
|
||||
wave: this.currentBattle?.waveIndex || 0,
|
||||
|
|
|
@ -9,7 +9,7 @@ import { BattlerTag } from "./battler-tags";
|
|||
import { BattlerTagType } from "./enums/battler-tag-type";
|
||||
import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect";
|
||||
import { Gender } from "./gender";
|
||||
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove } from "./move";
|
||||
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove, VariablePowerAttr, applyMoveAttrs } from "./move";
|
||||
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag";
|
||||
import { ArenaTagType } from "./enums/arena-tag-type";
|
||||
import { Stat } from "./pokemon-stat";
|
||||
|
@ -3042,7 +3042,11 @@ export function initAbilities() {
|
|||
new Ability(Abilities.STALL, 4)
|
||||
.unimplemented(),
|
||||
new Ability(Abilities.TECHNICIAN, 4)
|
||||
.attr(MovePowerBoostAbAttr, (user, target, move) => move.power <= 60, 1.5),
|
||||
.attr(MovePowerBoostAbAttr, (user, target, move) => {
|
||||
const power = new Utils.NumberHolder(move.power);
|
||||
applyMoveAttrs(VariablePowerAttr, user, target, move, power);
|
||||
return power.value <= 60
|
||||
}, 1.5),
|
||||
new Ability(Abilities.LEAF_GUARD, 4)
|
||||
.attr(StatusEffectImmunityAbAttr)
|
||||
.condition(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN))
|
||||
|
|
|
@ -197,7 +197,7 @@ export const speciesEggMoves = {
|
|||
[Species.LATIOS]: [ Moves.CORE_ENFORCER, Moves.SEARING_SHOT, Moves.DRAGON_ENERGY, Moves.QUIVER_DANCE ],
|
||||
[Species.KYOGRE]: [ Moves.BOUNCY_BUBBLE, Moves.HURRICANE, Moves.THUNDER, Moves.TAIL_GLOW ],
|
||||
[Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ],
|
||||
[Species.RAYQUAZA]: [ Moves.OBLIVION_WING, Moves.DRAGON_DARTS, Moves.DRAGON_ENERGY, Moves.V_CREATE ],
|
||||
[Species.RAYQUAZA]: [ Moves.V_CREATE, Moves.DRAGON_DARTS, Moves.DRAGON_ENERGY, Moves.OBLIVION_WING ],
|
||||
[Species.JIRACHI]: [ Moves.IRON_HEAD, Moves.FLOATY_FALL, Moves.ROCK_SLIDE, Moves.SHIFT_GEAR ],
|
||||
[Species.DEOXYS]: [ Moves.COLLISION_COURSE, Moves.EARTH_POWER, Moves.PARTING_SHOT, Moves.LUMINA_CRASH ],
|
||||
[Species.TURTWIG]: [ Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE, Moves.ICE_SPINNER, Moves.SAPPY_SEED ],
|
||||
|
|
|
@ -43,7 +43,7 @@ export function getLevelTotalExp(level: integer, growthRate: GrowthRate): intege
|
|||
ret = Math.pow(level, 3) * 5 / 4;
|
||||
break;
|
||||
case GrowthRate.FLUCTUATING:
|
||||
ret = (Math.pow(level, 3) + ((level / 2) + 32)) * 4 / (100 + level);
|
||||
ret = (Math.pow(level, 3) * ((level / 2) + 8)) * 4 / (100 + level);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1775,6 +1775,37 @@ export class ResetStatsAttr extends MoveEffectAttr {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute used for moves which swap the user and the target's stat changes.
|
||||
*/
|
||||
export class SwapStatsAttr extends MoveEffectAttr
|
||||
{
|
||||
/**
|
||||
* Swaps the user and the target's stat changes.
|
||||
* @param user Pokemon that used the move
|
||||
* @param target The target of the move
|
||||
* @param move Move with this attribute
|
||||
* @param args N/A
|
||||
* @returns true if the function succeeds
|
||||
*/
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any []): boolean
|
||||
{
|
||||
if (!super.apply(user, target, move, args))
|
||||
return false; //Exits if the move can't apply
|
||||
let priorBoost : integer; //For storing a stat boost
|
||||
for (let s = 0; s < target.summonData.battleStats.length; s++)
|
||||
{
|
||||
priorBoost = user.summonData.battleStats[s]; //Store user stat boost
|
||||
user.summonData.battleStats[s] = target.summonData.battleStats[s]; //Applies target boost to self
|
||||
target.summonData.battleStats[s] = priorBoost; //Applies stored boost to target
|
||||
}
|
||||
target.updateInfo();
|
||||
user.updateInfo();
|
||||
target.scene.queueMessage(getPokemonMessage(user, ' switched stat changes with the target!'));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export class HpSplitAttr extends MoveEffectAttr {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||
return new Promise(resolve => {
|
||||
|
@ -5181,7 +5212,7 @@ export function initMoves() {
|
|||
.attr(AddArenaTrapTagAttr, ArenaTagType.TOXIC_SPIKES)
|
||||
.target(MoveTarget.ENEMY_SIDE),
|
||||
new StatusMove(Moves.HEART_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 4)
|
||||
.unimplemented(),
|
||||
.attr(SwapStatsAttr),
|
||||
new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true),
|
||||
new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4)
|
||||
|
@ -6331,7 +6362,8 @@ export function initMoves() {
|
|||
.attr(ConfuseAttr),
|
||||
new StatusMove(Moves.LIFE_DEW, Type.WATER, -1, 10, -1, 0, 8)
|
||||
.attr(HealAttr, 0.25, true, false)
|
||||
.target(MoveTarget.USER_AND_ALLIES),
|
||||
.target(MoveTarget.USER_AND_ALLIES)
|
||||
.ignoresProtect(),
|
||||
new SelfStatusMove(Moves.OBSTRUCT, Type.DARK, 100, 10, -1, 4, 8)
|
||||
.attr(ProtectAttr, BattlerTagType.OBSTRUCT),
|
||||
new AttackMove(Moves.FALSE_SURRENDER, Type.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8),
|
||||
|
|
|
@ -2,6 +2,7 @@ import { Stat, getStatName } from "./pokemon-stat";
|
|||
import * as Utils from "../utils";
|
||||
import { TextStyle, getBBCodeFrag } from "../ui/text";
|
||||
import { UiTheme } from "#app/enums/ui-theme";
|
||||
import i18next from 'i18next';
|
||||
|
||||
export enum Nature {
|
||||
HARDY,
|
||||
|
@ -33,6 +34,10 @@ export enum Nature {
|
|||
|
||||
export function getNatureName(nature: Nature, includeStatEffects: boolean = false, forStarterSelect: boolean = false, ignoreBBCode: boolean = false, uiTheme: UiTheme = UiTheme.DEFAULT): string {
|
||||
let ret = Utils.toReadableString(Nature[nature]);
|
||||
//Translating nature
|
||||
if(i18next.exists('nature:' + ret)){
|
||||
ret = i18next.t('nature:' + ret as any)
|
||||
}
|
||||
if (includeStatEffects) {
|
||||
const stats = Utils.getEnumValues(Stat).slice(1);
|
||||
let increasedStat: Stat = null;
|
||||
|
|
|
@ -423,7 +423,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
}
|
||||
|
||||
getFusionIconId(ignoreOverride?: boolean): string {
|
||||
return this.getFusionSpeciesForm(ignoreOverride).getIconId(this.getFusionGender(ignoreOverride) === Gender.FEMALE, this.fusionFormIndex, this.fusionShiny, this.variant);
|
||||
return this.getFusionSpeciesForm(ignoreOverride).getIconId(this.getFusionGender(ignoreOverride) === Gender.FEMALE, this.fusionFormIndex, this.fusionShiny, this.fusionVariant);
|
||||
}
|
||||
|
||||
getSpeciesForm(ignoreOverride?: boolean): PokemonSpeciesForm {
|
||||
|
@ -731,7 +731,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
const overrideArray: Array<Moves> = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE;
|
||||
if (overrideArray.length > 0) {
|
||||
overrideArray.forEach((move: Moves, index: number) => {
|
||||
const ppUsed = this.moveset[index]?.ppUp || 0;
|
||||
const ppUsed = this.moveset[index]?.ppUsed || 0;
|
||||
this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp))
|
||||
});
|
||||
}
|
||||
|
@ -796,6 +796,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
return !!this.getTypes(true, forDefend).find(t => t === type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the non-passive ability of the pokemon. This accounts for fusions and ability changing effects.
|
||||
* This should rarely be called, most of the time {@link hasAbility} or {@link hasAbilityWithAttr} are better used as
|
||||
* those check both the passive and non-passive abilities and account for ability suppression.
|
||||
* @see {@link hasAbility} {@link hasAbilityWithAttr} Intended ways to check abilities in most cases
|
||||
* @param {boolean} ignoreOverride If true, ignore ability changing effects
|
||||
* @returns {Ability} The non-passive ability of the pokemon
|
||||
*/
|
||||
getAbility(ignoreOverride?: boolean): Ability {
|
||||
if (!ignoreOverride && this.summonData?.ability)
|
||||
return allAbilities[this.summonData.ability];
|
||||
|
@ -811,6 +819,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
return allAbilities[abilityId];
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the passive ability of the pokemon. This should rarely be called, most of the time
|
||||
* {@link hasAbility} or {@link hasAbilityWithAttr} are better used as those check both the passive and
|
||||
* non-passive abilities and account for ability suppression.
|
||||
* @see {@link hasAbility} {@link hasAbilityWithAttr} Intended ways to check abilities in most cases
|
||||
* @returns {Ability} The passive ability of the pokemon
|
||||
*/
|
||||
getPassiveAbility(): Ability {
|
||||
if (Overrides.PASSIVE_ABILITY_OVERRIDE && this.isPlayer())
|
||||
return allAbilities[Overrides.PASSIVE_ABILITY_OVERRIDE];
|
||||
|
@ -838,6 +853,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
return this.passive || this.isBoss();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether an ability of a pokemon can be currently applied. This should rarely be
|
||||
* directly called, as {@link hasAbility} and {@link hasAbilityWithAttr} already call this.
|
||||
* @see {@link hasAbility} {@link hasAbilityWithAttr} Intended ways to check abilities in most cases
|
||||
* @param {boolean} passive If true, check if passive can be applied instead of non-passive
|
||||
* @returns {Ability} The passive ability of the pokemon
|
||||
*/
|
||||
canApplyAbility(passive: boolean = false): boolean {
|
||||
if (passive && !this.hasPassive())
|
||||
return false;
|
||||
|
@ -862,6 +884,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
return (this.hp || ability.isBypassFaint) && !ability.conditions.find(condition => !condition(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a pokemon has the specified ability and it's in effect. Accounts for all the various
|
||||
* effects which can affect whether an ability will be present or in effect, and both passive and
|
||||
* non-passive. This is the primary way to check whether a pokemon has a particular ability.
|
||||
* @param {Abilities} ability The ability to check for
|
||||
* @param {boolean} canApply If false, it doesn't check whether the abiltiy is currently active
|
||||
* @param {boolean} ignoreOverride If true, it ignores ability changing effects
|
||||
* @returns {boolean} Whether the ability is present and active
|
||||
*/
|
||||
hasAbility(ability: Abilities, canApply: boolean = true, ignoreOverride?: boolean): boolean {
|
||||
if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).id === ability)
|
||||
return true;
|
||||
|
@ -870,6 +901,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a pokemon has an ability with the specified attribute and it's in effect.
|
||||
* Accounts for all the various effects which can affect whether an ability will be present or
|
||||
* in effect, and both passive and non-passive. This is one of the two primary ways to check
|
||||
* whether a pokemon has a particular ability.
|
||||
* @param {AbAttr} attrType The ability attribute to check for
|
||||
* @param {boolean} canApply If false, it doesn't check whether the abiltiy is currently active
|
||||
* @param {boolean} ignoreOverride If true, it ignores ability changing effects
|
||||
* @returns {boolean} Whether an ability with that attribute is present and active
|
||||
*/
|
||||
hasAbilityWithAttr(attrType: { new(...args: any[]): AbAttr }, canApply: boolean = true, ignoreOverride?: boolean): boolean {
|
||||
if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).hasAttr(attrType))
|
||||
return true;
|
||||
|
@ -899,7 +940,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
}
|
||||
|
||||
isGrounded(): boolean {
|
||||
return !this.isOfType(Type.FLYING, true) && this.getAbility().id !== Abilities.LEVITATE;
|
||||
return !this.isOfType(Type.FLYING, true) && this.hasAbility(Abilities.LEVITATE);
|
||||
}
|
||||
|
||||
getAttackMoveEffectiveness(source: Pokemon, move: PokemonMove): TypeDamageMultiplier {
|
||||
|
@ -1824,7 +1865,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
const scene = sceneOverride || this.scene;
|
||||
const cry = this.getSpeciesForm().cry(scene, soundConfig);
|
||||
let duration = cry.totalDuration * 1000;
|
||||
if (this.fusionSpecies) {
|
||||
if (this.fusionSpecies && this.getSpeciesForm() != this.getFusionSpeciesForm()) {
|
||||
let fusionCry = this.getFusionSpeciesForm().cry(scene, soundConfig, true);
|
||||
duration = Math.min(duration, fusionCry.totalDuration * 1000);
|
||||
fusionCry.destroy();
|
||||
|
@ -1843,7 +1884,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
}
|
||||
|
||||
faintCry(callback: Function): void {
|
||||
if (this.fusionSpecies)
|
||||
if (this.fusionSpecies && this.getSpeciesForm() != this.getFusionSpeciesForm())
|
||||
return this.fusionFaintCry(callback);
|
||||
|
||||
const key = this.getSpeciesForm().getCryKey(this.formIndex);
|
||||
|
|
|
@ -2,9 +2,11 @@ import { ability } from "./ability";
|
|||
import { battle } from "./battle";
|
||||
import { commandUiHandler } from "./command-ui-handler";
|
||||
import { fightUiHandler } from "./fight-ui-handler";
|
||||
import { growth } from "./growth";
|
||||
import { menu } from "./menu";
|
||||
import { menuUiHandler } from "./menu-ui-handler";
|
||||
import { move } from "./move";
|
||||
import { nature } from "./nature";
|
||||
import { pokeball } from "./pokeball";
|
||||
import { pokemon } from "./pokemon";
|
||||
import { pokemonStat } from "./pokemon-stat";
|
||||
|
@ -24,5 +26,7 @@ export const deConfig = {
|
|||
pokemonStat: pokemonStat,
|
||||
pokemon: pokemon,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
tutorial: tutorial
|
||||
tutorial: tutorial,
|
||||
nature: nature,
|
||||
growth: growth
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const growth: SimpleTranslationEntries = {
|
||||
"Erratic": "Erratic",
|
||||
"Fast": "Fast",
|
||||
"Medium_Fast": "Medium Fast",
|
||||
"Medium_Slow": "Medium Slow",
|
||||
"Slow": "Slow",
|
||||
"Fluctuating": "Fluctuating"
|
||||
} as const;
|
|
@ -0,0 +1,29 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"Hardy": "Robust",
|
||||
"Lonely": "Solo",
|
||||
"Brave": "Mutig",
|
||||
"Adamant": "Hart",
|
||||
"Naughty": "Frech",
|
||||
"Bold": "Kühn",
|
||||
"Docile": "Sanft",
|
||||
"Relaxed": "Locker",
|
||||
"Impish": "Pfiffig",
|
||||
"Lax": "Lasch",
|
||||
"Timid": "Scheu",
|
||||
"Hasty": "Hastig",
|
||||
"Serious": "Ernst",
|
||||
"Jolly": "Froh",
|
||||
"Naive": "Naiv",
|
||||
"Modest": "Mäßig",
|
||||
"Mild": "Mild",
|
||||
"Quiet": "Ruhig",
|
||||
"Bashful": "Zaghaft",
|
||||
"Rash": "Hitzig",
|
||||
"Calm": "Still",
|
||||
"Gentle": "Zart",
|
||||
"Sassy": "Forsch",
|
||||
"Careful": "Sacht",
|
||||
"Quirky": "Kauzig"
|
||||
} as const;
|
|
@ -2,9 +2,11 @@ import { ability } from "./ability";
|
|||
import { battle } from "./battle";
|
||||
import { commandUiHandler } from "./command-ui-handler";
|
||||
import { fightUiHandler } from "./fight-ui-handler";
|
||||
import { growth } from "./growth";
|
||||
import { menu } from "./menu";
|
||||
import { menuUiHandler } from "./menu-ui-handler";
|
||||
import { move } from "./move";
|
||||
import { nature } from "./nature";
|
||||
import { pokeball } from "./pokeball";
|
||||
import { pokemon } from "./pokemon";
|
||||
import { pokemonStat } from "./pokemon-stat";
|
||||
|
@ -24,5 +26,7 @@ export const enConfig = {
|
|||
pokemonStat: pokemonStat,
|
||||
pokemon: pokemon,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
tutorial: tutorial
|
||||
tutorial: tutorial,
|
||||
nature: nature,
|
||||
growth: growth
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const growth: SimpleTranslationEntries = {
|
||||
"Erratic": "Erratic",
|
||||
"Fast": "Fast",
|
||||
"Medium_Fast": "Medium Fast",
|
||||
"Medium_Slow": "Medium Slow",
|
||||
"Slow": "Slow",
|
||||
"Fluctuating": "Fluctuating"
|
||||
} as const;
|
|
@ -0,0 +1,29 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"Hardy": "Hardy",
|
||||
"Lonely": "Lonely",
|
||||
"Brave": "Brave",
|
||||
"Adamant": "Adamant",
|
||||
"Naughty": "Naughty",
|
||||
"Bold": "Bold",
|
||||
"Docile": "Docile",
|
||||
"Relaxed": "Relaxed",
|
||||
"Impish": "Impish",
|
||||
"Lax": "Lax",
|
||||
"Timid": "Timid",
|
||||
"Hasty": "Hasty",
|
||||
"Serious": "Serious",
|
||||
"Jolly": "Jolly",
|
||||
"Naive": "Naive",
|
||||
"Modest": "Modest",
|
||||
"Mild": "Mild",
|
||||
"Quiet": "Quiet",
|
||||
"Bashful": "Bashful",
|
||||
"Rash": "Rash",
|
||||
"Calm": "Calm",
|
||||
"Gentle": "Gentle",
|
||||
"Sassy": "Sassy",
|
||||
"Careful": "Careful",
|
||||
"Quirky": "Quirky"
|
||||
} as const;
|
|
@ -2,9 +2,11 @@ import { ability } from "./ability";
|
|||
import { battle } from "./battle";
|
||||
import { commandUiHandler } from "./command-ui-handler";
|
||||
import { fightUiHandler } from "./fight-ui-handler";
|
||||
import { growth } from "./growth";
|
||||
import { menu } from "./menu";
|
||||
import { menuUiHandler } from "./menu-ui-handler";
|
||||
import { move } from "./move";
|
||||
import { nature } from "./nature";
|
||||
import { pokeball } from "./pokeball";
|
||||
import { pokemon } from "./pokemon";
|
||||
import { pokemonStat } from "./pokemon-stat";
|
||||
|
@ -24,5 +26,7 @@ export const esConfig = {
|
|||
pokemonStat: pokemonStat,
|
||||
pokemon: pokemon,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
tutorial: tutorial
|
||||
tutorial: tutorial,
|
||||
nature: nature,
|
||||
growth: growth
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const growth: SimpleTranslationEntries = {
|
||||
"Erratic": "Errático",
|
||||
"Fast": "Rápido",
|
||||
"Medium_Fast": "Medio Rápido",
|
||||
"Medium_Slow": "Medio Lento",
|
||||
"Slow": "Lento",
|
||||
"Fluctuating": "Fluctuante"
|
||||
} as const;
|
|
@ -0,0 +1,29 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"Hardy": "Fuerte",
|
||||
"Lonely": "Huraña",
|
||||
"Brave": "Audaz",
|
||||
"Adamant": "Firme",
|
||||
"Naughty": "Pícara",
|
||||
"Bold": "Osada",
|
||||
"Docile": "Dócil",
|
||||
"Relaxed": "Plácida",
|
||||
"Impish": "Agitada",
|
||||
"Lax": "Floja",
|
||||
"Timid": "Miedosa",
|
||||
"Hasty": "Activa",
|
||||
"Serious": "Seria",
|
||||
"Jolly": "Alegre",
|
||||
"Naive": "Ingenua",
|
||||
"Modest": "Modesta",
|
||||
"Mild": "Afable",
|
||||
"Quiet": "Mansa",
|
||||
"Bashful": "Tímida",
|
||||
"Rash": "Alocada",
|
||||
"Calm": "Serena",
|
||||
"Gentle": "Amable",
|
||||
"Sassy": "Grosera",
|
||||
"Careful": "Cauta",
|
||||
"Quirky": "Rara"
|
||||
} as const;
|
|
@ -2,9 +2,11 @@ import { ability } from "./ability";
|
|||
import { battle } from "./battle";
|
||||
import { commandUiHandler } from "./command-ui-handler";
|
||||
import { fightUiHandler } from "./fight-ui-handler";
|
||||
import { growth } from "./growth";
|
||||
import { menu } from "./menu";
|
||||
import { menuUiHandler } from "./menu-ui-handler";
|
||||
import { move } from "./move";
|
||||
import { nature } from "./nature";
|
||||
import { pokeball } from "./pokeball";
|
||||
import { pokemon } from "./pokemon";
|
||||
import { pokemonStat } from "./pokemon-stat";
|
||||
|
@ -24,5 +26,7 @@ export const frConfig = {
|
|||
pokemonStat: pokemonStat,
|
||||
pokemon: pokemon,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
tutorial: tutorial
|
||||
tutorial: tutorial,
|
||||
nature: nature,
|
||||
growth: growth
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const growth: SimpleTranslationEntries = {
|
||||
"Erratic": "Erratic",
|
||||
"Fast": "Fast",
|
||||
"Medium_Fast": "Medium Fast",
|
||||
"Medium_Slow": "Medium Slow",
|
||||
"Slow": "Slow",
|
||||
"Fluctuating": "Fluctuating"
|
||||
} as const;
|
|
@ -0,0 +1,29 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"Hardy": "Hardi",
|
||||
"Lonely": "Solo",
|
||||
"Brave": "Brave",
|
||||
"Adamant": "Rigide",
|
||||
"Naughty": "Mauvais",
|
||||
"Bold": "Assuré",
|
||||
"Docile": "Docile",
|
||||
"Relaxed": "Relax",
|
||||
"Impish": "Malin",
|
||||
"Lax": "Lâche",
|
||||
"Timid": "Timide",
|
||||
"Hasty": "Pressé",
|
||||
"Serious": "Sérieux",
|
||||
"Jolly": "Jovial",
|
||||
"Naive": "Naïf",
|
||||
"Modest": "Modeste",
|
||||
"Mild": "Doux",
|
||||
"Quiet": "Discret",
|
||||
"Bashful": "Pudique",
|
||||
"Rash": "Foufou",
|
||||
"Calm": "Calme",
|
||||
"Gentle": "Gentil",
|
||||
"Sassy": "Malpoli",
|
||||
"Careful": "Prudent",
|
||||
"Quirky": "Bizarre"
|
||||
} as const;
|
|
@ -2,9 +2,11 @@ import { ability } from "./ability";
|
|||
import { battle } from "./battle";
|
||||
import { commandUiHandler } from "./command-ui-handler";
|
||||
import { fightUiHandler } from "./fight-ui-handler";
|
||||
import { growth } from "./growth";
|
||||
import { menu } from "./menu";
|
||||
import { menuUiHandler } from "./menu-ui-handler";
|
||||
import { move } from "./move";
|
||||
import { nature } from "./nature";
|
||||
import { pokeball } from "./pokeball";
|
||||
import { pokemon } from "./pokemon";
|
||||
import { pokemonStat } from "./pokemon-stat";
|
||||
|
@ -24,5 +26,7 @@ export const itConfig = {
|
|||
pokemonStat: pokemonStat,
|
||||
pokemon: pokemon,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
tutorial: tutorial
|
||||
tutorial: tutorial,
|
||||
nature: nature,
|
||||
growth: growth
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const growth: SimpleTranslationEntries = {
|
||||
"Erratic": "Erratic",
|
||||
"Fast": "Fast",
|
||||
"Medium_Fast": "Medium Fast",
|
||||
"Medium_Slow": "Medium Slow",
|
||||
"Slow": "Slow",
|
||||
"Fluctuating": "Fluctuating"
|
||||
} as const;
|
|
@ -0,0 +1,29 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"Hardy": "Hardy",
|
||||
"Lonely": "Lonely",
|
||||
"Brave": "Brave",
|
||||
"Adamant": "Adamant",
|
||||
"Naughty": "Naughty",
|
||||
"Bold": "Bold",
|
||||
"Docile": "Docile",
|
||||
"Relaxed": "Relaxed",
|
||||
"Impish": "Impish",
|
||||
"Lax": "Lax",
|
||||
"Timid": "Timid",
|
||||
"Hasty": "Hasty",
|
||||
"Serious": "Serious",
|
||||
"Jolly": "Jolly",
|
||||
"Naive": "Naive",
|
||||
"Modest": "Modest",
|
||||
"Mild": "Mild",
|
||||
"Quiet": "Quiet",
|
||||
"Bashful": "Bashful",
|
||||
"Rash": "Rash",
|
||||
"Calm": "Calm",
|
||||
"Gentle": "Gentle",
|
||||
"Sassy": "Sassy",
|
||||
"Careful": "Careful",
|
||||
"Quirky": "Quirky"
|
||||
} as const;
|
File diff suppressed because it is too large
Load Diff
|
@ -38,7 +38,7 @@ export const battle: SimpleTranslationEntries = {
|
|||
"noPokeballForce": "一股无形的力量阻止了你使用精灵球。",
|
||||
"noPokeballTrainer": "你不能捕捉其他训练家的宝可梦!",
|
||||
"noPokeballMulti": "只能在剩下一只宝可梦时才能扔出精灵球!",
|
||||
"noPokeballStrong": "目标宝可梦太强了,无法捕捉!你需要先削弱它!",
|
||||
"noPokeballStrong": "目标宝可梦太强了,无法捕捉!你需要先\n削弱它!",
|
||||
"noEscapeForce": "一股无形的力量阻止你逃跑。",
|
||||
"noEscapeTrainer": "你不能从训练家战斗中逃跑!",
|
||||
"noEscapePokemon": "{{pokemonName}} 的 {{moveName}} 阻止了你 {{escapeVerb}}!",
|
||||
|
|
|
@ -10,6 +10,7 @@ import { pokemon } from "./pokemon";
|
|||
import { pokemonStat } from "./pokemon-stat";
|
||||
import { starterSelectUiHandler } from "./starter-select-ui-handler";
|
||||
import { tutorial } from "./tutorial";
|
||||
import { nature } from "./nature";
|
||||
|
||||
|
||||
export const zhCnConfig = {
|
||||
|
@ -24,5 +25,7 @@ export const zhCnConfig = {
|
|||
pokemonStat: pokemonStat,
|
||||
pokemon: pokemon,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
tutorial: tutorial
|
||||
tutorial: tutorial,
|
||||
|
||||
nature: nature
|
||||
}
|
|
@ -6,7 +6,7 @@ export const menuUiHandler: SimpleTranslationEntries = {
|
|||
"STATS": "数据统计",
|
||||
"VOUCHERS": "兑换券",
|
||||
"EGG_LIST": "蛋列表",
|
||||
"EGG_GACHA": "蛋扭蛋",
|
||||
"EGG_GACHA": "扭蛋机",
|
||||
"MANAGE_DATA": "管理数据",
|
||||
"COMMUNITY": "社区",
|
||||
"RETURN_TO_TITLE": "返回标题画面",
|
||||
|
@ -19,5 +19,5 @@ export const menuUiHandler: SimpleTranslationEntries = {
|
|||
"importData": "导入数据",
|
||||
"exportData": "导出数据",
|
||||
"cancel": "取消",
|
||||
"losingProgressionWarning": "你将失去自战斗开始以来的所有进度。是否继续?"
|
||||
"losingProgressionWarning": "你将失去自战斗开始以来的所有进度。是否\n继续?"
|
||||
} as const;
|
|
@ -29,7 +29,7 @@ export const menu: SimpleTranslationEntries = {
|
|||
"confirmPassword": "确认密码",
|
||||
"registrationAgeWarning": "注册即表示您确认您已年满 13 岁。",
|
||||
"backToLogin": "返回登录",
|
||||
"failedToLoadSaveData": "读取存档数据失败。请重新加载页面。如果问题仍然存在,请联系管理员。",
|
||||
"failedToLoadSaveData": "读取存档数据失败。请重新加载页面。如果\n问题仍然存在,请联系管理员。",
|
||||
"sessionSuccess": "会话加载成功。",
|
||||
"failedToLoadSession": "无法加载您的会话数据。它可能已损坏。",
|
||||
"boyOrGirl": "你是男孩还是女孩?",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,29 @@
|
|||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"Hardy": "Hardy",
|
||||
"Lonely": "Lonely",
|
||||
"Brave": "Brave",
|
||||
"Adamant": "Adamant",
|
||||
"Naughty": "Naughty",
|
||||
"Bold": "Bold",
|
||||
"Docile": "Docile",
|
||||
"Relaxed": "Relaxed",
|
||||
"Impish": "Impish",
|
||||
"Lax": "Lax",
|
||||
"Timid": "Timid",
|
||||
"Hasty": "Hasty",
|
||||
"Serious": "Serious",
|
||||
"Jolly": "Jolly",
|
||||
"Naive": "Naive",
|
||||
"Modest": "Modest",
|
||||
"Mild": "Mild",
|
||||
"Quiet": "Quiet",
|
||||
"Bashful": "Bashful",
|
||||
"Rash": "Rash",
|
||||
"Calm": "Calm",
|
||||
"Gentle": "Gentle",
|
||||
"Sassy": "Sassy",
|
||||
"Careful": "Careful",
|
||||
"Quirky": "Quirky"
|
||||
} as const;
|
|
@ -57,7 +57,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"psyduck": "可达鸭",
|
||||
"golduck": "哥达鸭",
|
||||
"mankey": "猴怪",
|
||||
"primeape": "火爆猴",
|
||||
"primeape": "火暴猴",
|
||||
"growlithe": "卡蒂狗",
|
||||
"arcanine": "风速狗",
|
||||
"poliwag": "蚊香蝌蚪",
|
||||
|
@ -233,7 +233,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"kingdra": "刺龙王",
|
||||
"phanpy": "小小象",
|
||||
"donphan": "顿甲",
|
||||
"porygon2": "多边兽Ⅱ",
|
||||
"porygon2": "多边兽2型",
|
||||
"stantler": "惊角鹿",
|
||||
"smeargle": "图图犬",
|
||||
"tyrogue": "无畏小子",
|
||||
|
@ -474,7 +474,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"glaceon": "冰伊布",
|
||||
"gliscor": "天蝎王",
|
||||
"mamoswine": "象牙猪",
|
||||
"porygon_z": "多边兽Z",
|
||||
"porygon_z": "多边兽乙型",
|
||||
"gallade": "艾路雷朵",
|
||||
"probopass": "大朝北鼻",
|
||||
"dusknoir": "黑夜魔灵",
|
||||
|
@ -563,7 +563,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"scrafty": "头巾混混",
|
||||
"sigilyph": "象征鸟",
|
||||
"yamask": "哭哭面具",
|
||||
"cofagrigus": "死神棺",
|
||||
"cofagrigus": "迭失棺",
|
||||
"tirtouga": "原盖海龟",
|
||||
"carracosta": "肋骨海龟",
|
||||
"archen": "始祖小鸟",
|
||||
|
@ -594,7 +594,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"amoonguss": "败露球菇",
|
||||
"frillish": "轻飘飘",
|
||||
"jellicent": "胖嘟嘟",
|
||||
"alomomola": "保母曼波",
|
||||
"alomomola": "保姆曼波",
|
||||
"joltik": "电电虫",
|
||||
"galvantula": "电蜘蛛",
|
||||
"ferroseed": "种子铁球",
|
||||
|
@ -675,7 +675,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"skiddo": "坐骑小羊",
|
||||
"gogoat": "坐骑山羊",
|
||||
"pancham": "顽皮熊猫",
|
||||
"pangoro": "流氓熊猫",
|
||||
"pangoro": "霸道熊猫",
|
||||
"furfrou": "多丽米亚",
|
||||
"espurr": "妙喵",
|
||||
"meowstic": "超能妙喵",
|
||||
|
@ -760,7 +760,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"salandit": "夜盗火蜥",
|
||||
"salazzle": "焰后蜥",
|
||||
"stufful": "童偶熊",
|
||||
"bewear": "穿著熊",
|
||||
"bewear": "穿着熊",
|
||||
"bounsweet": "甜竹竹",
|
||||
"steenee": "甜舞妮",
|
||||
"tsareena": "甜冷美后",
|
||||
|
@ -778,7 +778,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"komala": "树枕尾熊",
|
||||
"turtonator": "爆焰龟兽",
|
||||
"togedemaru": "托戈德玛尔",
|
||||
"mimikyu": "谜拟Q",
|
||||
"mimikyu": "谜拟丘",
|
||||
"bruxish": "磨牙彩皮鱼",
|
||||
"drampa": "老翁龙",
|
||||
"dhelmise": "破破舵轮",
|
||||
|
@ -827,8 +827,8 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"blipbug": "索侦虫",
|
||||
"dottler": "天罩虫",
|
||||
"orbeetle": "以欧路普",
|
||||
"nickit": "偷儿狐",
|
||||
"thievul": "狐大盗",
|
||||
"nickit": "狡小狐",
|
||||
"thievul": "猾大狐",
|
||||
"gossifleur": "幼棉棉",
|
||||
"eldegoss": "白蓬蓬",
|
||||
"wooloo": "毛辫羊",
|
||||
|
@ -848,7 +848,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"cramorant": "古月鸟",
|
||||
"arrokuda": "刺梭鱼",
|
||||
"barraskewda": "戽斗尖梭",
|
||||
"toxel": "毒电婴",
|
||||
"toxel": "电音婴",
|
||||
"toxtricity": "颤弦蝾螈",
|
||||
"sizzlipede": "烧火蚣",
|
||||
"centiskorch": "焚焰蚣",
|
||||
|
@ -867,7 +867,7 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"cursola": "魔灵珊瑚",
|
||||
"sirfetchd": "葱游兵",
|
||||
"mr_rime": "踏冰人偶",
|
||||
"runerigus": "死神板",
|
||||
"runerigus": "迭失板",
|
||||
"milcery": "小仙奶",
|
||||
"alcremie": "霜奶仙",
|
||||
"falinks": "列阵兵",
|
||||
|
@ -1026,61 +1026,61 @@ export const pokemon: SimpleTranslationEntries = {
|
|||
"iron_crown": "铁头壳",
|
||||
"terapagos": "太乐巴戈斯",
|
||||
"pecharunt": "桃歹郎",
|
||||
"alola_rattata": "阿罗拉拉达",
|
||||
"alola_raticate": "阿罗拉拉达",
|
||||
"alola_raichu": "阿罗拉雷丘",
|
||||
"alola_sandshrew": "阿罗拉穿山鼠",
|
||||
"alola_sandslash": "阿罗拉穿山王",
|
||||
"alola_vulpix": "阿罗拉六尾",
|
||||
"alola_ninetales": "阿罗拉九尾",
|
||||
"alola_diglett": "阿罗拉地鼠",
|
||||
"alola_dugtrio": "阿罗拉三地鼠",
|
||||
"alola_meowth": "阿罗拉喵喵",
|
||||
"alola_persian": "阿罗拉猫老大",
|
||||
"alola_geodude": "阿罗拉小拳石",
|
||||
"alola_graveler": "阿罗拉隆隆石",
|
||||
"alola_golem": "阿罗拉隆隆岩",
|
||||
"alola_grimer": "阿罗拉臭泥",
|
||||
"alola_muk": "阿罗拉臭臭泥",
|
||||
"alola_exeggutor": "阿罗拉椰蛋树",
|
||||
"alola_marowak": "阿罗拉嘎啦嘎啦",
|
||||
"eternal_floette": "永恒之花花叶蒂",
|
||||
"galar_meowth": "伽勒尔喵喵",
|
||||
"galar_ponyta": "伽勒尔小火马",
|
||||
"galar_rapidash": "伽勒尔烈焰马",
|
||||
"galar_slowpoke": "伽勒尔呆呆兽",
|
||||
"galar_slowbro": "伽勒尔呆壳兽",
|
||||
"galar_farfetchd": "伽勒尔大葱鸭",
|
||||
"galar_weezing": "伽勒尔双弹瓦斯",
|
||||
"galar_mr_mime": "伽勒尔魔墙人偶",
|
||||
"galar_articuno": "伽勒尔急冻鸟",
|
||||
"galar_zapdos": "伽勒尔闪电鸟",
|
||||
"galar_moltres": "伽勒尔火焰鸟",
|
||||
"galar_slowking": "伽勒尔呆呆王",
|
||||
"galar_corsola": "伽勒尔太阳珊瑚",
|
||||
"galar_zigzagoon": "伽勒尔蛇纹熊",
|
||||
"galar_linoone": "伽勒尔直冲熊",
|
||||
"galar_darumaka": "伽勒尔火红不倒翁",
|
||||
"galar_darmanitan": "伽勒尔达摩狒狒",
|
||||
"galar_yamask": "伽勒尔哭哭面具",
|
||||
"galar_stunfisk": "伽勒尔泥巴鱼",
|
||||
"hisui_growlithe": "洗翠卡蒂狗",
|
||||
"hisui_arcanine": "洗翠风速狗",
|
||||
"hisui_voltorb": "洗翠霹雳电球",
|
||||
"hisui_electrode": "洗翠顽皮雷弹",
|
||||
"hisui_typhlosion": "洗翠火暴兽",
|
||||
"hisui_qwilfish": "洗翠千针鱼",
|
||||
"hisui_sneasel": "洗翠狃拉",
|
||||
"hisui_samurott": "洗翠大剑鬼",
|
||||
"hisui_lilligant": "洗翠裙儿小姐",
|
||||
"hisui_zorua": "洗翠索罗亚",
|
||||
"hisui_zoroark": "洗翠索罗亚克",
|
||||
"hisui_braviary": "洗翠勇士雄鹰",
|
||||
"hisui_sliggoo": "洗翠黏美儿",
|
||||
"hisui_goodra": "洗翠黏美龙",
|
||||
"hisui_avalugg": "洗翠冰岩怪",
|
||||
"hisui_decidueye": "洗翠狙射树枭",
|
||||
"paldea_tauros": "帕底亚肯泰罗",
|
||||
"paldea_wooper": "帕底亚乌波",
|
||||
"bloodmoon_ursaluna": "血月月月熊",
|
||||
"alola_rattata": "小拉达",
|
||||
"alola_raticate": "拉达",
|
||||
"alola_raichu": "雷丘",
|
||||
"alola_sandshrew": "穿山鼠",
|
||||
"alola_sandslash": "穿山王",
|
||||
"alola_vulpix": "六尾",
|
||||
"alola_ninetales": "九尾",
|
||||
"alola_diglett": "地鼠",
|
||||
"alola_dugtrio": "三地鼠",
|
||||
"alola_meowth": "喵喵",
|
||||
"alola_persian": "猫老大",
|
||||
"alola_geodude": "小拳石",
|
||||
"alola_graveler": "隆隆石",
|
||||
"alola_golem": "隆隆岩",
|
||||
"alola_grimer": "臭泥",
|
||||
"alola_muk": "臭臭泥",
|
||||
"alola_exeggutor": "椰蛋树",
|
||||
"alola_marowak": "嘎啦嘎啦",
|
||||
"eternal_floette": "花叶蒂",
|
||||
"galar_meowth": "喵喵",
|
||||
"galar_ponyta": "小火马",
|
||||
"galar_rapidash": "烈焰马",
|
||||
"galar_slowpoke": "呆呆兽",
|
||||
"galar_slowbro": "呆壳兽",
|
||||
"galar_farfetchd": "大葱鸭",
|
||||
"galar_weezing": "双弹瓦斯",
|
||||
"galar_mr_mime": "魔墙人偶",
|
||||
"galar_articuno": "急冻鸟",
|
||||
"galar_zapdos": "闪电鸟",
|
||||
"galar_moltres": "火焰鸟",
|
||||
"galar_slowking": "呆呆王",
|
||||
"galar_corsola": "太阳珊瑚",
|
||||
"galar_zigzagoon": "蛇纹熊",
|
||||
"galar_linoone": "直冲熊",
|
||||
"galar_darumaka": "火红不倒翁",
|
||||
"galar_darmanitan": "达摩狒狒",
|
||||
"galar_yamask": "哭哭面具",
|
||||
"galar_stunfisk": "泥巴鱼",
|
||||
"hisui_growlithe": "卡蒂狗",
|
||||
"hisui_arcanine": "风速狗",
|
||||
"hisui_voltorb": "霹雳电球",
|
||||
"hisui_electrode": "顽皮雷弹",
|
||||
"hisui_typhlosion": "火暴兽",
|
||||
"hisui_qwilfish": "千针鱼",
|
||||
"hisui_sneasel": "狃拉",
|
||||
"hisui_samurott": "大剑鬼",
|
||||
"hisui_lilligant": "裙儿小姐",
|
||||
"hisui_zorua": "索罗亚",
|
||||
"hisui_zoroark": "索罗亚克",
|
||||
"hisui_braviary": "勇士雄鹰",
|
||||
"hisui_sliggoo": "黏美儿",
|
||||
"hisui_goodra": "黏美龙",
|
||||
"hisui_avalugg": "冰岩怪",
|
||||
"hisui_decidueye": "狙射树枭",
|
||||
"paldea_tauros": "肯泰罗",
|
||||
"paldea_wooper": "乌波",
|
||||
"bloodmoon_ursaluna": "月月熊",
|
||||
} as const;
|
|
@ -2,41 +2,43 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
|||
|
||||
export const tutorial: SimpleTranslationEntries = {
|
||||
"intro": `欢迎来到PokéRogue!这是一款以战斗为核心的融合了roguelite元素的宝可梦同人游戏。
|
||||
$本游戏未进行商业化,我们没有Pokémon或Pokémon使用的版权资产的所有权。
|
||||
$游戏仍在开发中,但已可完整游玩。\n如需报告错误,请使用 Discord 社区。
|
||||
$如果游戏运行缓慢,请确保在浏览器设置中打开了“硬件加速”。`,
|
||||
$本游戏未进行商业化,我们没有\nPokémon或Pokémon使用的版
|
||||
$权资产的所有权。
|
||||
$游戏仍在开发中,但已可完整游玩。如需报\n告错误,请使用 Discord 社区。
|
||||
$如果游戏运行缓慢,请确保在浏览器设置中\n打开了“硬件加速”。`,
|
||||
|
||||
"accessMenu": `在等待输入时,按 M 或 Escape 键可访问菜单。\n菜单包含设置和各种功能。`,
|
||||
"accessMenu": `在等待输入时,按 M 或 Escape 键可访\n问菜单。菜单包含设置和各种功能。`,
|
||||
|
||||
"menu": `在此菜单中,您可以访问设置。
|
||||
$在设置中,您可以更改游戏速度、窗口样式和其他选项。
|
||||
$在设置中,您可以更改游戏速度、窗口样式\n和其他选项。
|
||||
$这里还有各种其他功能,请务必全部查看!`,
|
||||
|
||||
"starterSelect": `在此页面中,您可以选择您的初始宝可梦。\n这些是您最初的队伍成员。
|
||||
$每个初始宝可梦都有一个费用。您的队伍最多可以拥有\n6 名成员,只要总费用不超过 10。
|
||||
$您还可以根据\n您捕获或孵化的变种选择性别、特性和形态。
|
||||
$一个物种的个体值是您捕获或孵化的所有宝可梦中最好的,所以尽量获得更多同种宝可梦!`,
|
||||
$每个初始宝可梦都有一个费用值。您的队伍\n最多可以拥有6名成员,只要总费用不超过10。
|
||||
$您还可以根据您捕获或孵化的变种选择性别\n、特性和形态。
|
||||
$一个物种个体值是您捕获或孵化的所有宝可\n梦中最好的,所以尽量获得更多同种宝可梦!`,
|
||||
|
||||
"pokerus": `每天随机 3 个可选的初始宝可梦会有紫色边框。
|
||||
$如果您看到您拥有的初始宝可梦带有紫色边框,\n请尝试将其添加到您的队伍中。请务必查看其概况!`,
|
||||
"pokerus": `每天随机3个可选的初始宝可梦会有紫色边\n框。
|
||||
$如果您看到您拥有的初始宝可梦带有紫色边\n框,请尝试将其添加到您的队伍中。请务必
|
||||
$查看其概况!`,
|
||||
|
||||
"statChange": `只要您的宝可梦没有被召回,属性变化就会在战斗中持续存在。
|
||||
$在训练家战斗之前和进入新的宝可梦群落之前,您的宝可梦会被召回。
|
||||
$您还可以通过按住 C 或 Shift 键来查看场上宝可梦的能力变化。`,
|
||||
"statChange": `只要您的宝可梦没有被召回,属性变化就会\n在战斗中持续存在。
|
||||
$在训练家战斗之前和进入新的宝可梦群落之\n前,您的宝可梦会被召回。
|
||||
$您还可以通过按住C或Shift键来查看\n场上宝可梦的能力变化。`,
|
||||
|
||||
"selectItem": `每次战斗后,您都可以选择 3 个随机物品。\n您只能选择其中一个。
|
||||
$这些物品包括消耗品、宝可梦携带物品和永久被动道具。
|
||||
$这些物品包括消耗品、宝可梦携带物品和永\n久被动道具。
|
||||
$大多数非消耗品的效果会以各种方式叠加。
|
||||
$某些物品只有在可以使用时才会出现,例如进化物品。
|
||||
$您还可以使用转移选项在宝可梦之间转移携带物品。
|
||||
$一旦您获得了携带物品,转移选项就会出现在右下角。
|
||||
$您可以用金钱购买消耗品,并且随着您游戏的深入,将会有更多种类的消耗品可供选择。
|
||||
$请务必在选择随机物品之前购买这些消耗品,因为一旦您选择,游戏就会进入下一场战斗。`,
|
||||
$某些物品只有在可以使用时才会出现,例如\n进化物品。
|
||||
$您还可以使用转移选项在宝可梦之间转移携\n带物品。
|
||||
$一旦您获得了携带物品,转移选项就会出现\n在右下角。
|
||||
$您可以用金钱购买消耗品,并且随着您游戏\n的深入,将会有更多种类的消耗品可供选择。
|
||||
$请务必在选择随机物品之前购买这些消耗品\n因为一旦您选择,游戏就会进入下一场战斗。`,
|
||||
|
||||
"eggGacha": `在此页面中,您可以使用您的兑换券兑换\n宝可梦蛋。
|
||||
$蛋需要孵化,并且在每场战斗后都会减少孵化周期。稀有蛋需要更长时间才能孵化。
|
||||
$孵化的宝可梦不会被添加到您的队伍中,它们将被添加到您的初始宝可梦中。
|
||||
$从蛋中孵化的宝可梦通常比\n野生宝可梦具有更好的个体值。
|
||||
"eggGacha": `在此页面中,您可以使用您的兑换券兑换宝\n可梦蛋。
|
||||
$蛋需要孵化,并且在每场战斗后都会减少孵\n化周期。稀有蛋需要更长时间才能孵化。
|
||||
$孵化的宝可梦不会被添加到您的队伍中,它\n们将被添加到您的初始宝可梦中。
|
||||
$从蛋中孵化的宝可梦通常比野生宝可梦具有\n更好的个体值。
|
||||
$有些宝可梦只能从蛋中获得。
|
||||
$有 3 种不同的扭蛋机可供选择,每种扭蛋机都有不同的\n奖励,请选择最适合您的!`,
|
||||
$有 3 种不同的扭蛋机可供选择,每种扭蛋机\n都有不同的奖励,请选择最适合您的!`,
|
||||
} as const;
|
|
@ -2211,22 +2211,22 @@ export class MovePhase extends BattlePhase {
|
|||
}
|
||||
|
||||
// Move redirection abilities (ie. Storm Drain) only support single target moves
|
||||
const moveTarget = this.targets.length === 1
|
||||
? new Utils.IntegerHolder(this.targets[0])
|
||||
: null;
|
||||
if (moveTarget) {
|
||||
var oldTarget = moveTarget.value;
|
||||
this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, this.move.moveId, moveTarget));
|
||||
//Check if this move is immune to being redirected, and restore its target to the intended target if it is.
|
||||
if ((this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr) || this.move.getMove().getAttrs(BypassRedirectAttr).length)) {
|
||||
//If an ability prevented this move from being redirected, display its ability pop up.
|
||||
if ((this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr) && !this.move.getMove().getAttrs(BypassRedirectAttr).length) && oldTarget != moveTarget.value) {
|
||||
this.scene.unshiftPhase(new ShowAbilityPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr)));
|
||||
}
|
||||
const moveTarget = this.targets.length === 1
|
||||
? new Utils.IntegerHolder(this.targets[0])
|
||||
: null;
|
||||
if (moveTarget) {
|
||||
var oldTarget = moveTarget.value;
|
||||
this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, this.move.moveId, moveTarget));
|
||||
//Check if this move is immune to being redirected, and restore its target to the intended target if it is.
|
||||
if ((this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr) || this.move.getMove().getAttrs(BypassRedirectAttr).length)) {
|
||||
//If an ability prevented this move from being redirected, display its ability pop up.
|
||||
if ((this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr) && !this.move.getMove().getAttrs(BypassRedirectAttr).length) && oldTarget != moveTarget.value) {
|
||||
this.scene.unshiftPhase(new ShowAbilityPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr)));
|
||||
}
|
||||
moveTarget.value = oldTarget;
|
||||
}
|
||||
this.targets[0] = moveTarget.value;
|
||||
}
|
||||
}
|
||||
this.targets[0] = moveTarget.value;
|
||||
}
|
||||
|
||||
if (this.targets.length === 1 && this.targets[0] === BattlerIndex.ATTACKER) {
|
||||
if (this.pokemon.turnData.attacksReceived.length) {
|
||||
|
@ -2269,16 +2269,20 @@ const moveTarget = this.targets.length === 1
|
|||
if (!this.followUp && this.canMove() && !this.cancelled) {
|
||||
this.pokemon.lapseTags(BattlerTagLapseType.MOVE);
|
||||
}
|
||||
|
||||
const moveQueue = this.pokemon.getMoveQueue();
|
||||
if (this.cancelled || this.failed) {
|
||||
if (this.failed)
|
||||
this.move.usePp(ppUsed); // Only use PP if the move failed
|
||||
|
||||
// Record a failed move so Abilities like Truant don't trigger next turn and soft-lock
|
||||
this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL });
|
||||
|
||||
this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); // Remove any tags from moves like Fly/Dive/etc.
|
||||
moveQueue.shift(); // Remove the second turn of charge moves
|
||||
return this.end();
|
||||
}
|
||||
|
||||
const moveQueue = this.pokemon.getMoveQueue();
|
||||
|
||||
this.scene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger);
|
||||
|
||||
if (this.move.moveId)
|
||||
|
|
|
@ -113,4 +113,4 @@ declare module 'i18next' {
|
|||
}
|
||||
}
|
||||
|
||||
export default i18next;
|
||||
export default i18next;
|
|
@ -754,7 +754,7 @@ export class GameData {
|
|||
tryClearSession(scene: BattleScene, slotId: integer): Promise<[success: boolean, newClear: boolean]> {
|
||||
return new Promise<[boolean, boolean]>(resolve => {
|
||||
if (bypassLogin) {
|
||||
localStorage.removeItem('sessionData');
|
||||
localStorage.removeItem(`sessionData${slotId ? slotId : ''}`);
|
||||
return resolve([true, true]);
|
||||
}
|
||||
|
||||
|
|
|
@ -1294,7 +1294,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||
this.pokemonLuckText.setTint(getVariantTint(Math.min(luck - 1, 2) as Variant));
|
||||
this.pokemonLuckLabelText.setVisible(this.pokemonLuckText.visible);
|
||||
|
||||
this.pokemonGrowthRateText.setText(Utils.toReadableString(GrowthRate[species.growthRate]));
|
||||
//Growth translate
|
||||
let growthReadable = Utils.toReadableString(GrowthRate[species.growthRate]);
|
||||
let growthAux = growthReadable.replace(" ", "_")
|
||||
if(i18next.exists("growth:" + growthAux)){
|
||||
growthReadable = i18next.t("growth:"+ growthAux as any)
|
||||
}
|
||||
this.pokemonGrowthRateText.setText(growthReadable);
|
||||
|
||||
this.pokemonGrowthRateText.setColor(getGrowthRateColor(species.growthRate));
|
||||
this.pokemonGrowthRateText.setShadowColor(getGrowthRateColor(species.growthRate, true));
|
||||
this.pokemonGrowthRateLabelText.setVisible(true);
|
||||
|
|
Loading…
Reference in New Issue