mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-05 16:02:20 +02:00
Merge branch 'pr/333'
This commit is contained in:
commit
676482fa30
@ -1,3 +1,5 @@
|
||||
import i18next from "i18next";
|
||||
|
||||
export enum BattleStat {
|
||||
ATK,
|
||||
DEF,
|
||||
@ -12,19 +14,19 @@ export enum BattleStat {
|
||||
export function getBattleStatName(stat: BattleStat) {
|
||||
switch (stat) {
|
||||
case BattleStat.ATK:
|
||||
return 'Attack';
|
||||
return i18next.t('pokemonStat:ATK');
|
||||
case BattleStat.DEF:
|
||||
return 'Defense';
|
||||
return i18next.t('pokemonStat:DEF');
|
||||
case BattleStat.SPATK:
|
||||
return 'Sp. Atk';
|
||||
return i18next.t('pokemonStat:SPATK');
|
||||
case BattleStat.SPDEF:
|
||||
return 'Sp. Def';
|
||||
return i18next.t('pokemonStat:SPDEF');
|
||||
case BattleStat.SPD:
|
||||
return 'Speed';
|
||||
return i18next.t('pokemonStat:SPD');
|
||||
case BattleStat.ACC:
|
||||
return 'Accuracy';
|
||||
return i18next.t('pokemonStat:ACC');
|
||||
case BattleStat.EVA:
|
||||
return 'Evasiveness';
|
||||
return i18next.t('pokemonStat:EVA');
|
||||
default:
|
||||
return '???';
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import { BattlerTagType } from "./enums/battler-tag-type";
|
||||
import { getStatusEffectHealText } from "./status-effect";
|
||||
import * as Utils from "../utils";
|
||||
import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./ability";
|
||||
import i18next from "i18next";
|
||||
|
||||
export enum BerryType {
|
||||
SITRUS,
|
||||
@ -23,30 +24,30 @@ export enum BerryType {
|
||||
}
|
||||
|
||||
export function getBerryName(berryType: BerryType) {
|
||||
return `${Utils.toReadableString(BerryType[berryType])} Berry`;
|
||||
return `${i18next.t(`berry:${BerryType[berryType]}.name`)}`;
|
||||
}
|
||||
|
||||
export function getBerryEffectDescription(berryType: BerryType) {
|
||||
switch (berryType) {
|
||||
case BerryType.SITRUS:
|
||||
return 'Restores 25% HP if HP is below 50%';
|
||||
return i18next.t('berry:SITRUS.description');
|
||||
case BerryType.LUM:
|
||||
return 'Cures any non-volatile status condition and confusion';
|
||||
return i18next.t('berry:LUM.description');
|
||||
case BerryType.ENIGMA:
|
||||
return 'Restores 25% HP if hit by a super effective move';
|
||||
return i18next.t('berry:ENIGMA.description');
|
||||
case BerryType.LIECHI:
|
||||
case BerryType.GANLON:
|
||||
case BerryType.PETAYA:
|
||||
case BerryType.APICOT:
|
||||
case BerryType.SALAC:
|
||||
const stat = (berryType - BerryType.LIECHI) as BattleStat;
|
||||
return `Raises ${getBattleStatName(stat)} if HP is below 25%`;
|
||||
return i18next.t('modifier:berry', { stat: getBattleStatName(stat) });
|
||||
case BerryType.LANSAT:
|
||||
return 'Raises critical hit ratio if HP is below 25%';
|
||||
return i18next.t('berry:LANSAT.description');
|
||||
case BerryType.STARF:
|
||||
return 'Sharply raises a random stat if HP is below 25%';
|
||||
return i18next.t('berry:STARF.description');
|
||||
case BerryType.LEPPA:
|
||||
return 'Restores 10 PP to a move if its PP reaches 0';
|
||||
return i18next.t('berry:LEPPA.description');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
@ -32,7 +33,7 @@ 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]);
|
||||
let ret = i18next.t(`nature:${Nature[nature]}`);
|
||||
if (includeStatEffects) {
|
||||
const stats = Utils.getEnumValues(Stat).slice(1);
|
||||
let increasedStat: Stat = null;
|
||||
|
@ -1,5 +1,7 @@
|
||||
import i18next from "i18next";
|
||||
import { BattleStat, getBattleStatName } from "./battle-stat";
|
||||
|
||||
|
||||
export enum TempBattleStat {
|
||||
ATK,
|
||||
DEF,
|
||||
@ -12,25 +14,44 @@ export enum TempBattleStat {
|
||||
|
||||
export function getTempBattleStatName(tempBattleStat: TempBattleStat) {
|
||||
if (tempBattleStat === TempBattleStat.CRIT)
|
||||
return 'critical-hit ratio';
|
||||
return i18next.t('pokemonStat:CRIT');
|
||||
return getBattleStatName(tempBattleStat as integer as BattleStat);
|
||||
}
|
||||
|
||||
export function getTempBattleStatBoosterItemName(tempBattleStat: TempBattleStat) {
|
||||
switch (tempBattleStat) {
|
||||
case TempBattleStat.ATK:
|
||||
return 'X Attack';
|
||||
return i18next.t('modifierType:X_ATTACK.name');
|
||||
case TempBattleStat.DEF:
|
||||
return 'X Defense';
|
||||
return i18next.t('modifierType:X_DEFENSE.name');
|
||||
case TempBattleStat.SPATK:
|
||||
return 'X Sp. Atk';
|
||||
return i18next.t('modifierType:X_SPATK.name');
|
||||
case TempBattleStat.SPDEF:
|
||||
return 'X Sp. Def';
|
||||
return i18next.t('modifierType:X_SPDEF.name');
|
||||
case TempBattleStat.SPD:
|
||||
return 'X Speed';
|
||||
return i18next.t('modifierType:X_SPEED.name');
|
||||
case TempBattleStat.ACC:
|
||||
return 'X Accuracy';
|
||||
return i18next.t('modifierType:X_ACCURACY.name');
|
||||
case TempBattleStat.CRIT:
|
||||
return 'Dire Hit';
|
||||
return i18next.t('modifierType:DIRE_HIT.name');
|
||||
}
|
||||
}
|
||||
|
||||
export function getTempBattleStatBoosterIconName(tempBattleStat: TempBattleStat) {
|
||||
switch (tempBattleStat) {
|
||||
case TempBattleStat.ATK:
|
||||
return 'x_attack';
|
||||
case TempBattleStat.DEF:
|
||||
return 'x_defense';
|
||||
case TempBattleStat.SPATK:
|
||||
return 'x_sp_atk';
|
||||
case TempBattleStat.SPDEF:
|
||||
return 'x_sp_def';
|
||||
case TempBattleStat.SPD:
|
||||
return 'x_speed';
|
||||
case TempBattleStat.ACC:
|
||||
return 'x_accuracy';
|
||||
case TempBattleStat.CRIT:
|
||||
return 'dire_hit';
|
||||
}
|
||||
}
|
48
src/locales/en/berry.ts
Normal file
48
src/locales/en/berry.ts
Normal file
@ -0,0 +1,48 @@
|
||||
import { BerryTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const berry: BerryTranslationEntries = {
|
||||
"SITRUS": {
|
||||
"name": "Sitrus",
|
||||
"description": "Restores 25% HP if HP is below 50%"
|
||||
},
|
||||
"LUM" : {
|
||||
"name": "Lum",
|
||||
"description": "Cures any non-volatile status condition and confusion"
|
||||
},
|
||||
"ENIGMA": {
|
||||
"name": "Enigma",
|
||||
"description": "Restores 25% HP if hit by a super effective move"
|
||||
},
|
||||
"LIECHI": {
|
||||
"name": "Liechi",
|
||||
"description": "$t('modifier.berry')"
|
||||
},
|
||||
"GANLON": {
|
||||
"name": "Ganlon",
|
||||
"description": "$t('modifier.berry')"
|
||||
},
|
||||
"PETAYA": {
|
||||
"name": "Petaya",
|
||||
"description": "$t('modifier.berry')"
|
||||
},
|
||||
"APICOT": {
|
||||
"name": "Apicot",
|
||||
"description": "$t('modifier.berry')"
|
||||
},
|
||||
"SALAC": {
|
||||
"name": "Salac",
|
||||
"description": "$t('modifier.berry')"
|
||||
},
|
||||
"LANSAT": {
|
||||
"name": "Lansat",
|
||||
"description": "Raises critical hit ratio if HP is below 25%"
|
||||
},
|
||||
"STARF": {
|
||||
"name": "Starf",
|
||||
"description": "Sharply raises a random stat if HP is below 25%"
|
||||
},
|
||||
"LEPPA": {
|
||||
"name": "Leppa",
|
||||
"description": "Restores 10 PP to a move if its PP reaches 0"
|
||||
},
|
||||
} as const;
|
849
src/locales/en/modifier-type.ts
Normal file
849
src/locales/en/modifier-type.ts
Normal file
@ -0,0 +1,849 @@
|
||||
import { ModifierTypeTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const modifierType: ModifierTypeTranslationEntries = {
|
||||
"RARE_CANDY": {
|
||||
"name": "Rare Candy",
|
||||
"description": "Increases a Pokémon\'s level by 1",
|
||||
},
|
||||
"RARER_CANDY": {
|
||||
"name": "Rarer Candy",
|
||||
"description": "Increases all party members' level by 1",
|
||||
},
|
||||
"MEGA_BRACELET": {
|
||||
"name": "Mega Bracelet",
|
||||
"description": "Mega Stones become available.",
|
||||
},
|
||||
"DYNAMAX_BAND": {
|
||||
"name": "Dynamax Band",
|
||||
"description": "Max Mushrooms become available.",
|
||||
},
|
||||
"TERA_ORB": {
|
||||
"name": "Tera Orb",
|
||||
"description": "Tera Shards become available.",
|
||||
},
|
||||
"MAP": {
|
||||
"name": "Map",
|
||||
"description": "Allows you to choose your destination at a crossroads",
|
||||
},
|
||||
"POTION": {
|
||||
"name": "Potion",
|
||||
"description": "$t('modifier.hpRestore')",
|
||||
},
|
||||
"SUPER_POTION": {
|
||||
"name": "Super Potion",
|
||||
"description": "$t('modifier.hpRestore')",
|
||||
},
|
||||
"HYPER_POTION": {
|
||||
"name": "Hyper Potion",
|
||||
"description": "$t('modifier.hpRestore')",
|
||||
},
|
||||
"MAX_POTION": {
|
||||
"name": "Max Potion",
|
||||
"description": "Fully restores HP for one Pokémon",
|
||||
},
|
||||
"FULL_RESTORE": {
|
||||
"name": "Full Restore",
|
||||
"description": "Fully restores HP and removes all status conditions for one Pokémon",
|
||||
},
|
||||
"REVIVE": {
|
||||
"name": "Revive",
|
||||
"description": "$t('modifier.revive')",
|
||||
},
|
||||
"MAX_REVIVE": {
|
||||
"name": "Max Revive",
|
||||
"description": "Revives a fainted Pokémon with full HP",
|
||||
},
|
||||
"FULL_HEAL": {
|
||||
"name": "Full Heal",
|
||||
"description": "Heals any status ailment for one Pokémon",
|
||||
},
|
||||
"SACRED_ASH": {
|
||||
"name": "Sacred Ash",
|
||||
"description": "Restores 100% HP for all Pokémon",
|
||||
},
|
||||
"REVIVER_SEED": {
|
||||
"name": "Reviver Seed",
|
||||
"description": "Revives the holder for 1/2 HP upon fainting",
|
||||
},
|
||||
"ETHER": {
|
||||
"name": "Ether",
|
||||
"description": "$t('modifier.ppRestore')",
|
||||
},
|
||||
"MAX_ETHER": {
|
||||
"name": "Max Ether",
|
||||
"description": "Fully restores PP for one move",
|
||||
},
|
||||
"ELIXIR": {
|
||||
"name": "Elixir",
|
||||
"description": "$t('modifier.ppRestoreAll')",
|
||||
},
|
||||
"MAX_ELIXIR": {
|
||||
"name": "Max Elixir",
|
||||
"description": "Fully restores PP for all of one Pokémon's moves",
|
||||
},
|
||||
"PP_UP": {
|
||||
"name": "PP Up",
|
||||
"description": "$t('modifier.ppUp')",
|
||||
},
|
||||
"PP_MAX": {
|
||||
"name": "PP Max",
|
||||
"description": "Raises the maximum PP of one move to its maximum",
|
||||
},
|
||||
"LURE": {
|
||||
"name": "Lure",
|
||||
"description": "$t('modifier.lure')",
|
||||
},
|
||||
"SUPER_LURE": {
|
||||
"name": "Super Lure",
|
||||
"description": "$t('modifier.lure')",
|
||||
},
|
||||
"MAX_LURE": {
|
||||
"name": "Max Lure",
|
||||
"description": "$t('modifier.lure')",
|
||||
},
|
||||
"X_ATTACK": {
|
||||
"name": "X Attack",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_DEFENSE": {
|
||||
"name": "X Defense",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_SPATK": {
|
||||
"name": "X Sp. Atk",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_SPDEF": {
|
||||
"name": "X Sp. Def",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_SPEED": {
|
||||
"name": "X Speed",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_ACCURACY": {
|
||||
"name": "X Accuracy",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"DIRE_HIT": {
|
||||
"name": "Dire Hit",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"GUARD_SPEC": {
|
||||
"name": "Guard Spec.",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"HP_UP": {
|
||||
"name": "HP Up",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"PROTEIN": {
|
||||
"name": "Protein",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"IRON": {
|
||||
"name": "Iron",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"CALCIUM": {
|
||||
"name": "Calcium",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"ZINC": {
|
||||
"name": "Zinc",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"CARBOS": {
|
||||
"name": "Carbos",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"SILK_SCARF": {
|
||||
"name": "Silk Scarf",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"BLACK_BELT": {
|
||||
"name": "Black Belt",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SHARP_BEAK": {
|
||||
"name": "Sharp Beak",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"POSION_BARB": {
|
||||
"name": "Poison Barb",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SOFT_SAND": {
|
||||
"name": "Soft Sand",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"HARD_STONE": {
|
||||
"name": "Hard Stone",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SILVER_POWER": {
|
||||
"name": "Silver Powder",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SPELL_TAG": {
|
||||
"name": "Spell Tag",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"METAL_COAT": {
|
||||
"name": "Metal Coat",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"CHARCOAL": {
|
||||
"name": "Charcoal",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MYSTIC_WATER": {
|
||||
"name": "Mystic Water",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MIRACLE_SEED": {
|
||||
"name": "Miracle Seed",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MAGNET": {
|
||||
"name": "Magnet",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"TWISTED_SPOON": {
|
||||
"name": "Twisted Spoon",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"NEVER_MELT_ICE": {
|
||||
"name": "Never-Melt Ice",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"DRAGON_FANG": {
|
||||
"name": "Dragon Fang",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"BLACK_GLASSES": {
|
||||
"name": "Black Glasses",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"FAIRY_FEATHER": {
|
||||
"name": "Fairy Feather",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MINT": {
|
||||
"name": "{{nature}} Mint",
|
||||
"description": "Changes the nature of a Pokémon",
|
||||
},
|
||||
"TERA_SHARD": {
|
||||
"name": "{{type}} Tera Shard",
|
||||
"description": "Terastalize a Pokémon",
|
||||
},
|
||||
"BERRY": {
|
||||
"name": "{{berry}} Berry",
|
||||
"description": "$t('modifier.berry')",
|
||||
},
|
||||
"MEMORY_MUSHROOM": {
|
||||
"name": "Memory Mushroom",
|
||||
"description": "Recall one Pokémon\'s forgotten move",
|
||||
},
|
||||
"EXP_SHARE": {
|
||||
"name": "Exp. All",
|
||||
"description": "Non-participants receive 20% of a single participant\'s EXP. Points.",
|
||||
},
|
||||
"EXP_BALANCE": {
|
||||
"name": "Exp. Balance",
|
||||
"description": "Weighs EXP. Points received from battles towards lower-leveled party members",
|
||||
},
|
||||
"OVAL_CHARM": {
|
||||
"name": "Oval Charm",
|
||||
"description": "When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP.",
|
||||
},
|
||||
"EXP_CHARM": {
|
||||
"name": "Exp. Charm",
|
||||
"description": "$t('modifier:expCharm')",
|
||||
},
|
||||
"SUPER_EXP_CHARM": {
|
||||
"name": "Super Exp. Charm",
|
||||
"description": "$t('modifier.expCharm')",
|
||||
},
|
||||
"GOLDEN_EXP_CHARM": {
|
||||
"name": "Golden Exp. Charm",
|
||||
"description": "$t('modifier.expCharm')",
|
||||
},
|
||||
"LUCKY_EGG": {
|
||||
"name": "Lucky Egg",
|
||||
"description": "$t('modifier.expEgg')",
|
||||
},
|
||||
"GOLDEN_EGG": {
|
||||
"name": "Golden Egg",
|
||||
"description": "$t('modifier.expEgg')",
|
||||
},
|
||||
"SOOTHE_BELL": {
|
||||
"name": "Soothe Bell",
|
||||
"description": "Increases friendship gain per victory by 50%",
|
||||
},
|
||||
"SOUL_DEW": {
|
||||
"name": "Soul Dew",
|
||||
"description": "Increases the influence of a Pokémon\'s nature on its stats by 10% (additive)",
|
||||
},
|
||||
"AMULET_COIN": {
|
||||
"name": "Amulet Coin",
|
||||
"description": "Increases money rewards by 20%",
|
||||
},
|
||||
"GOLDEN_PUNCH": {
|
||||
"name": "Golden Punch",
|
||||
"description": "Grants 50% of damage inflicted as money",
|
||||
},
|
||||
"COIN_CASE": {
|
||||
"name": "Coin Case",
|
||||
"description": "After every 10th battle, receive 10% of your money in interest.",
|
||||
},
|
||||
"LOCK_CAPSULE": {
|
||||
"name": "Lock Capsule",
|
||||
"description": "Allows you to lock item rarities when rerolling items",
|
||||
},
|
||||
"GRIP_CLAW": {
|
||||
"name": "Grip Claw",
|
||||
"description": "$t('modifier.contactItemTransfer')",
|
||||
},
|
||||
"WIDE_LENS": {
|
||||
"name": "Wide Lens",
|
||||
"description": "$t('modifier.moveAccuracyBooster')",
|
||||
},
|
||||
"MULTI_LENS": {
|
||||
"name": "Multi Lens",
|
||||
"description": "$t('modifier.multiHit')",
|
||||
},
|
||||
"HEALING_CHARM": {
|
||||
"name": "Healing Charm",
|
||||
"description": "Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)",
|
||||
},
|
||||
"CANDY_JAR": {
|
||||
"name": "Candy Jar",
|
||||
"description": "Increases the number of levels added by Rare Candy items by 1",
|
||||
},
|
||||
"BERRY_POUCH": {
|
||||
"name": "Berry Pouch",
|
||||
"description": "Adds a 25% chance that a used berry will not be consumed",
|
||||
},
|
||||
"FOCUS_BAND": {
|
||||
"name": "Focus Band",
|
||||
"description": "Adds a 10% chance to survive with 1 HP after being damaged enough to faint",
|
||||
},
|
||||
"KINGS_ROCK": {
|
||||
"name": "King's Rock",
|
||||
"description": "Adds a 10% chance an attack move will cause the opponent to flinch",
|
||||
},
|
||||
"LEFTOVERS": {
|
||||
"name": "Leftovers",
|
||||
"description": "Heals 1/16 of a Pokémon\'s maximum HP every turn",
|
||||
},
|
||||
"SHELL_BELL": {
|
||||
"name": "Shell Bell",
|
||||
"description": "Heals 1/8 of a Pokémon\'s dealt damage",
|
||||
},
|
||||
"BATON": {
|
||||
"name": "Baton",
|
||||
"description": "Allows passing along effects when switching Pokémon, which also bypasses traps",
|
||||
},
|
||||
"SHINY_CHARM": {
|
||||
"name": "Shiny Charm",
|
||||
"description": "Dramatically increases the chance of a wild Pokémon being Shiny",
|
||||
},
|
||||
"ABILITY_CHARM": {
|
||||
"name": "Ability Charm",
|
||||
"description": "Dramatically increases the chance of a wild Pokémon having a Hidden Ability",
|
||||
},
|
||||
"IV_SCANNER": {
|
||||
"name": "IV Scanner",
|
||||
"description": "Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first.",
|
||||
},
|
||||
"DNA_SPLICERS": {
|
||||
"name": "DNA Splicers",
|
||||
"description": "$t('modifier.fusePokemon')",
|
||||
},
|
||||
"MINI_BLACK_HOLE": {
|
||||
"name": "Mini Black Hole",
|
||||
"description": "$t('modifier.heldItemTransfer')",
|
||||
},
|
||||
"GOLDEN_POKEBALL": {
|
||||
"name": "Golden Pokeball",
|
||||
"description": "Adds 1 extra item option at the end of every battle",
|
||||
},
|
||||
"DAMAGE_TOKEN": {
|
||||
"name": "Damage Token",
|
||||
"description": "Increases damage by 5%",
|
||||
},
|
||||
"PROTECTION_TOKEN": {
|
||||
"name": "Protection Token",
|
||||
"description": "Reduces incoming damage by 2.5%",
|
||||
},
|
||||
"RECOVERY_TOKEN": {
|
||||
"name": "Recovery Token",
|
||||
"description": "Heals 3% of max HP every turn",
|
||||
},
|
||||
"POISON_TOKEN": {
|
||||
"name": "Poison Token",
|
||||
"description": "$t('modifier.attackStatusEffect')",
|
||||
},
|
||||
"PARALYZE_TOKEN": {
|
||||
"name": "Paralyze Token",
|
||||
"description": "$t('modifier.attackStatusEffect')",
|
||||
},
|
||||
"SLEEP_TOKEN": {
|
||||
"name": "Sleep Token",
|
||||
"description": "$t('modifier.attackStatusEffect')",
|
||||
},
|
||||
"FREEZE_TOKEN": {
|
||||
"name": "Freeze Token",
|
||||
"description": "$t('modifier.attackStatusEffect')",
|
||||
},
|
||||
"BURN_TOKEN": {
|
||||
"name": "Burn Token",
|
||||
"description": "$t('modifier.attackStatusEffect')",
|
||||
},
|
||||
"FULL_HEAL_TOKEN": {
|
||||
"name": "Full Heal Token",
|
||||
"description": "Adds a 10% chance every turn to heal a status condition",
|
||||
},
|
||||
"ENDURE_TOKEN": {
|
||||
"name": "Endure Token",
|
||||
"description": "$t('modifier.endureChance')",
|
||||
},
|
||||
"FUSION_TOKEN": {
|
||||
"name": "Fusion Token",
|
||||
"description": "Adds a 1% chance that a wild Pokémon will be a fusion",
|
||||
},
|
||||
"VOUCHER_REGULAR": {
|
||||
"name": "Egg Voucher",
|
||||
"description": "-",
|
||||
},
|
||||
"VOUCHER_PLUS": {
|
||||
"name": "Egg Voucher Plus",
|
||||
"description": "-",
|
||||
},
|
||||
"VOUCHER_PREMIUM": {
|
||||
"name": "Egg Voucher Premium",
|
||||
"description": "-",
|
||||
},
|
||||
"VOUCHER_GOLDEN": {
|
||||
"name": "Gold Egg Voucher",
|
||||
"description": "-",
|
||||
},
|
||||
"LINKING_CORD": {
|
||||
"name": "Linking Cord",
|
||||
"description": "-",
|
||||
},
|
||||
"SUN_STONE": {
|
||||
"name": "Sun Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"MOON_STONE": {
|
||||
"name": "Moon Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"LEAF_STONE": {
|
||||
"name": "Leaf Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"FIRE_STONE": {
|
||||
"name": "Fire Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"WATER_STONE": {
|
||||
"name": "Water Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"THUNDER_STONE": {
|
||||
"name": "Thunder Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"ICE_STONE": {
|
||||
"name": "Ice Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"DUSK_STONE": {
|
||||
"name": "Dusk Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"DAWN_STONE": {
|
||||
"name": "Dawn Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"SHINY_STONE": {
|
||||
"name": "Shiny Stone",
|
||||
"description": "-",
|
||||
},
|
||||
"SWEEET_APPLE": {
|
||||
"name": "Sweet Apple",
|
||||
"description": "-",
|
||||
},
|
||||
"TART_APPLE": {
|
||||
"name": "Tart Apple",
|
||||
"description": "-",
|
||||
},
|
||||
"STRAWBERRY_SWEET": {
|
||||
"name": "Strawberry Sweet",
|
||||
"description": "-",
|
||||
},
|
||||
"UNREMARKABLE_TEACUP": {
|
||||
"name": "Unremarkable Teacup",
|
||||
"description": "-",
|
||||
},
|
||||
"CHIPPED_POT": {
|
||||
"name": "Chipped Pot",
|
||||
"description": "-",
|
||||
},
|
||||
"BLACK_AUGURITE": {
|
||||
"name": "Black Augurite",
|
||||
"description": "-",
|
||||
},
|
||||
"GALARICA_CUFF": {
|
||||
"name": "Galarica Cuff",
|
||||
"description": "-",
|
||||
},
|
||||
"GALARICA_TWIG": {
|
||||
"name": "Galarica Twig",
|
||||
"description": "-",
|
||||
},
|
||||
"PEAT_BLOCK": {
|
||||
"name": "Peat Block",
|
||||
"description": "-",
|
||||
},
|
||||
"AUSPICIOUS_ARMOR": {
|
||||
"name": "Auspicious Armor",
|
||||
"description": "-",
|
||||
},
|
||||
"MALICIOUS_ARMOR": {
|
||||
"name": "Malicious Armor",
|
||||
"description": "-",
|
||||
},
|
||||
"MASTERPIECE_TEACUP": {
|
||||
"name": "Masterpiece Teacup",
|
||||
"description": "-",
|
||||
},
|
||||
"METAL_ALLOY": {
|
||||
"name": "Metal Alloy",
|
||||
"description": "-",
|
||||
},
|
||||
"SCROLL_OF_DARKNESS": {
|
||||
"name": "Scroll of Darkness",
|
||||
"description": "-",
|
||||
},
|
||||
"SCROLL_OF_WATERS": {
|
||||
"name": "Scroll of Waters",
|
||||
"description": "-",
|
||||
},
|
||||
"SYRUPY_APPLE": {
|
||||
"name": "Syrupy Apple",
|
||||
"description": "-",
|
||||
},
|
||||
"ABOMASITE": {
|
||||
"name": "Abomasite",
|
||||
"description": "-"
|
||||
},
|
||||
"ABSOLITE": {
|
||||
"name": "Absolite",
|
||||
"description": "-"
|
||||
},
|
||||
"AERODACTYLITE": {
|
||||
"name": "Aerodactylite",
|
||||
"description": "-"
|
||||
},
|
||||
"AGGRONITE": {
|
||||
"name": "Aggronite",
|
||||
"description": "-"
|
||||
},
|
||||
"ALAKAZITE": {
|
||||
"name": "Alakazite",
|
||||
"description": "-"
|
||||
},
|
||||
"ALTARIANITE": {
|
||||
"name": "Altarianite",
|
||||
"description": "-"
|
||||
},
|
||||
"AMPHAROSITE": {
|
||||
"name": "Ampharosite",
|
||||
"description": "-"
|
||||
},
|
||||
"AUDINITE": {
|
||||
"name": "Audinite",
|
||||
"description": "-"
|
||||
},
|
||||
"BANETTITE": {
|
||||
"name": "Banettite",
|
||||
"description": "-"
|
||||
},
|
||||
"BEEDRILLITE": {
|
||||
"name": "Beedrillite",
|
||||
"description": "-"
|
||||
},
|
||||
"BLASTOISINITE": {
|
||||
"name": "Blastoisinite",
|
||||
"description": "-"
|
||||
},
|
||||
"BLAZIKENITE": {
|
||||
"name": "Blazikenite",
|
||||
"description": "-"
|
||||
},
|
||||
"CAMERUPTITE": {
|
||||
"name": "Cameruptite",
|
||||
"description": "-"
|
||||
},
|
||||
"CHARIZARDITE_X": {
|
||||
"name": "Charizardite X",
|
||||
"description": "-"
|
||||
},
|
||||
"CHARIZARDITE_Y": {
|
||||
"name": "Charizardite Y",
|
||||
"description": "-"
|
||||
},
|
||||
"DIANCITE": {
|
||||
"name": "Diancite",
|
||||
"description": "-"
|
||||
},
|
||||
"GALLADITE": {
|
||||
"name": "Galladite",
|
||||
"description": "-"
|
||||
},
|
||||
"GARCHOMPITE": {
|
||||
"name": "Garchompite",
|
||||
"description": "-"
|
||||
},
|
||||
"GARDEVOIRITE": {
|
||||
"name": "Gardevoirite",
|
||||
"description": "-"
|
||||
},
|
||||
"GENGARITE": {
|
||||
"name": "Gengarite",
|
||||
"description": "-"
|
||||
},
|
||||
"GLALITITE": {
|
||||
"name": "Glalitite",
|
||||
"description": "-"
|
||||
},
|
||||
"GYARADOSITE": {
|
||||
"name": "Gyaradosite",
|
||||
"description": "-"
|
||||
},
|
||||
"HERACRONITE": {
|
||||
"name": "Heracronite",
|
||||
"description": "-"
|
||||
},
|
||||
"HOUNDOOMINITE": {
|
||||
"name": "Houndoominite",
|
||||
"description": "-"
|
||||
},
|
||||
"KANGASKHANITE": {
|
||||
"name": "Kangaskhanite",
|
||||
"description": "-"
|
||||
},
|
||||
"LATIASITE": {
|
||||
"name": "Latiasite",
|
||||
"description": "-"
|
||||
},
|
||||
"LATIOSITE": {
|
||||
"name": "Latiosite",
|
||||
"description": "-"
|
||||
},
|
||||
"LOPUNNITE": {
|
||||
"name": "Lopunnite",
|
||||
"description": "-"
|
||||
},
|
||||
"LUCARIONITE": {
|
||||
"name": "Lucarionite",
|
||||
"description": "-"
|
||||
},
|
||||
"MANECTITE": {
|
||||
"name": "Manectite",
|
||||
"description": "-"
|
||||
},
|
||||
"MAWILITE": {
|
||||
"name": "Mawilite",
|
||||
"description": "-"
|
||||
},
|
||||
"MEDICHAMITE": {
|
||||
"name": "Medichamite",
|
||||
"description": "-"
|
||||
},
|
||||
"METAGROSSITE": {
|
||||
"name": "Metagrossite",
|
||||
"description": "-"
|
||||
},
|
||||
"MEWTWONITE_X": {
|
||||
"name": "Mewtwonite X",
|
||||
"description": "-"
|
||||
},
|
||||
"MEWTWONITE_Y": {
|
||||
"name": "Mewtwonite Y",
|
||||
"description": "-"
|
||||
},
|
||||
"PIDGEOTITE": {
|
||||
"name": "Pidgeotite",
|
||||
"description": "-"
|
||||
},
|
||||
"PINSIRITE": {
|
||||
"name": "Pinsirite",
|
||||
"description": "-"
|
||||
},
|
||||
"RAYQUAZITE": {
|
||||
"name": "Rayquazite",
|
||||
"description": "-"
|
||||
},
|
||||
"SABLENITE": {
|
||||
"name": "Sablenite",
|
||||
"description": "-"
|
||||
},
|
||||
"SALAMENCITE": {
|
||||
"name": "Salamencite",
|
||||
"description": "-"
|
||||
},
|
||||
"SCEPTILITE": {
|
||||
"name": "Sceptilite",
|
||||
"description": "-"
|
||||
},
|
||||
"SCIZORITE": {
|
||||
"name": "Scizorite",
|
||||
"description": "-"
|
||||
},
|
||||
"SHARPEDONITE": {
|
||||
"name": "Sharpedonite",
|
||||
"description": "-"
|
||||
},
|
||||
"SLOWBRONITE": {
|
||||
"name": "Slowbronite",
|
||||
"description": "-"
|
||||
},
|
||||
"STEELIXITE": {
|
||||
"name": "Steelixite",
|
||||
"description": "-"
|
||||
},
|
||||
"SWAMPERTITE": {
|
||||
"name": "Swampertite",
|
||||
"description": "-"
|
||||
},
|
||||
"TYRANITARITE": {
|
||||
"name": "Tyranitarite",
|
||||
"description": "-"
|
||||
},
|
||||
"VENUSAURITE": {
|
||||
"name": "Venusaurite",
|
||||
"description": "-"
|
||||
},
|
||||
"BLUE_ORB": {
|
||||
"name": "Blue Orb",
|
||||
"description": "-"
|
||||
},
|
||||
"RED_ORB": {
|
||||
"name": "Red Orb",
|
||||
"description": "-"
|
||||
},
|
||||
"SHARP_METEORITE": {
|
||||
"name": "Sharp Meteorite",
|
||||
"description": "-"
|
||||
},
|
||||
"HARD_METEORITE": {
|
||||
"name": "Hard Meteorite",
|
||||
"description": "-"
|
||||
},
|
||||
"SMOOTH_METEORITE": {
|
||||
"name": "Smooth Meteorite",
|
||||
"description": "-"
|
||||
},
|
||||
"ADAMANT_CRYSTAL": {
|
||||
"name": "Adamant Crystal",
|
||||
"description": "-"
|
||||
},
|
||||
"LUSTROUS_ORB": {
|
||||
"name": "Lustrous Orb",
|
||||
"description": "-"
|
||||
},
|
||||
"GRISEOUS_CORE": {
|
||||
"name": "Griseous Core",
|
||||
"description": "-"
|
||||
},
|
||||
"REVEAL_GLASS": {
|
||||
"name": "Reveal Glass",
|
||||
"description": "-"
|
||||
},
|
||||
"GRACIDEA": {
|
||||
"name": "Gracidea",
|
||||
"description": "-"
|
||||
},
|
||||
"MAX_MUSHROOMS": {
|
||||
"name": "Max Mushrooms",
|
||||
"description": "-"
|
||||
},
|
||||
"DARK_STONE": {
|
||||
"name": "Dark Stone",
|
||||
"description": "-"
|
||||
},
|
||||
"LIGHT_STONE": {
|
||||
"name": "Light_Stone",
|
||||
"description": "-"
|
||||
},
|
||||
"PRISON_BOTTLE": {
|
||||
"name": "Prison Bottle",
|
||||
"description": "-"
|
||||
},
|
||||
"N_LUNARIZER": {
|
||||
"name": "N Lunarizer",
|
||||
"description": "-"
|
||||
},
|
||||
"N_SOLARIZER": {
|
||||
"name": "N Solarizer",
|
||||
"description": "-"
|
||||
},
|
||||
"RUSTED_SWORD": {
|
||||
"name": "Rusted Sword",
|
||||
"description": "-"
|
||||
},
|
||||
"RUSTED_SHIELD": {
|
||||
"name": "Rusted Shield",
|
||||
"description": "-"
|
||||
},
|
||||
"ICY_REINS_OF_UNITY": {
|
||||
"name": "Icy Reins Of Unity",
|
||||
"description": "-"
|
||||
},
|
||||
"SHADOW_REINS_OF_UNITY": {
|
||||
"name": "Shadow Reins Of Unity",
|
||||
"description": "-"
|
||||
},
|
||||
"WELLSPRING_MASK": {
|
||||
"name": "Wellspring Mask",
|
||||
"description": "-"
|
||||
},
|
||||
"HEARTHFLAME_MASK": {
|
||||
"name": "Hearthflame Mask",
|
||||
"description": "-"
|
||||
},
|
||||
"CORNERSTONE_MASK": {
|
||||
"name": "Cornerstone Mask",
|
||||
"description": "-"
|
||||
},
|
||||
"NUGGET": {
|
||||
"name": "Nugget",
|
||||
"description": "$t('modifier.moneyReward')",
|
||||
},
|
||||
"BIG_NUGGET": {
|
||||
"name": "Big Nugget",
|
||||
"description": "$t('modifier.moneyReward')",
|
||||
},
|
||||
"RELIC_GOLD": {
|
||||
"name": "Relic Gold",
|
||||
"description": "$t('modifier.moneyReward')",
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} as const;
|
||||
|
34
src/locales/en/modifier.ts
Normal file
34
src/locales/en/modifier.ts
Normal file
@ -0,0 +1,34 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const modifier: SimpleTranslationEntries = {
|
||||
"recieveModifier": "Recieve {{modifier}} {{amount}}x",
|
||||
"catchRate": "Catch Rate: {{multiplier}}",
|
||||
"hpRestore": "Restores {{restorePoints}} HP or {{restorePercent}} HP for one Pokémon, whichever is higher",
|
||||
"revive": "Revives one Pokémon and restores {{restorePercent}}% HP",
|
||||
"ppRestore": "Restores {{restorePoints}} PP for one Pokémon move",
|
||||
"ppRestoreAll": "Restores {{restorePoints}} PP for all of one Pokémon's moves",
|
||||
"ppUp": "Permanently increases PP for one Pokémon move by {{upPoints}} for every 5 maximum PP (maximum 3)",
|
||||
"lure": "Doubles the chance of an encounter being a double battle for {{battleCount}} battles",
|
||||
"tempBattleStatBoost": "Increases the {{tempBattleStat}} of all party members by 1 stage for 5 battles",
|
||||
"baseStatBoost": "Increases the holder's base {{stat}} by 10%. The higher your IVs, the higher the stack limit.",
|
||||
"atkTypeBooster": "Increases the power of a Pokémon's {{type}}-type moves by 20%",
|
||||
"mint": "Changes a Pokémon\'s nature to {{nature}}",
|
||||
"tera": "{{type}} Terastallizes the holder for up to 10 battles",
|
||||
"berry": "Raises {{stat}} if HP is below 25%",
|
||||
"tm": "Teaches {{move}} to a Pokémon",
|
||||
"expCharm": "Increases gain of EXP. Points by {{boostPercent}}%",
|
||||
"expEgg": "Increases the holder's gain of EXP. Points by {{boostPercent}}%",
|
||||
"contactItemTransfer": "Upon attacking, there is a {{chancePercent}}% chance the foe's held item will be stolen.",
|
||||
"moveAccuracyBooster": "Increases move accuracy by {{amount}} (maximum 100)",
|
||||
"multiHit": "Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively.",
|
||||
"fusePokemon": "Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool)",
|
||||
"heldItemTransfer": "Every turn, the holder acquires one held item from the foe.",
|
||||
"attackStatusEffect": "Adds a {{chancePercent}}% chance to inflict {{effect}} with attack moves",
|
||||
"endureChance": "Adds a {{chancePercent}}% chance of enduring a hit",
|
||||
"evolve": "Causes certain Pokémon to evolve",
|
||||
"formChange": "Causes certain Pokémon to change form",
|
||||
"moneyReward": "Grants a {{moneyMultiplierDescriptor}} amount of money (₽{AMOUNT})",
|
||||
"small": "small",
|
||||
"moderate": "moderate",
|
||||
"large": "large",
|
||||
} as const;
|
29
src/locales/en/nature.ts
Normal file
29
src/locales/en/nature.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"ADAMANT": "Adamant",
|
||||
"BOLD": "Bold",
|
||||
"BRAVE": "Brave",
|
||||
"CALM": "Calm",
|
||||
"CAREFUL": "Careful",
|
||||
"GENTLE": "Gentle",
|
||||
"HARDY": "Hardy",
|
||||
"HASTY": "Hasty",
|
||||
"IMPISH": "Impish",
|
||||
"JOLLY": "Jolly",
|
||||
"LAX": "Lax",
|
||||
"LONELY": "Lonely",
|
||||
"MILD": "Mild",
|
||||
"MODEST": "Modest",
|
||||
"NAIVE": "Naive",
|
||||
"NAUGHTY": "Naughty",
|
||||
"QUIET": "Quiet",
|
||||
"RASH": "Rash",
|
||||
"RELAXED": "Relaxed",
|
||||
"SASSY": "Sassy",
|
||||
"SERIOUS": "Serious",
|
||||
"TIMID": "Timid",
|
||||
"QUIRKY": "Quirky",
|
||||
"BASHFUL": "Bashful",
|
||||
"DOCILE": "Docile",
|
||||
} as const;
|
@ -12,5 +12,10 @@ export const pokemonStat: SimpleTranslationEntries = {
|
||||
"SPDEF": "Sp. Def",
|
||||
"SPDEFshortened": "SpDef",
|
||||
"SPD": "Speed",
|
||||
"SPDshortened": "Spd"
|
||||
"SPDshortened": "Spd",
|
||||
"ACC": "Accuracy",
|
||||
"ACCshortened": "Acc",
|
||||
"EVA": "Evasiveness",
|
||||
"EVAShortened": "Eva",
|
||||
"CRIT": "Critical Hit Ratio",
|
||||
} as const;
|
22
src/locales/en/type.ts
Normal file
22
src/locales/en/type.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const type: SimpleTranslationEntries = {
|
||||
"normal": "Normal",
|
||||
"fire": "Fire",
|
||||
"water": "Water",
|
||||
"electric": "Electric",
|
||||
"grass": "Grass",
|
||||
"ice": "Ice",
|
||||
"fighting": "Fighting",
|
||||
"poison": "Poison",
|
||||
"ground": "Ground",
|
||||
"flying": "Flying",
|
||||
"psychic": "Psychic",
|
||||
"bug": "Bug",
|
||||
"rock": "Rock",
|
||||
"ghost": "Ghost",
|
||||
"dragon": "Dragon",
|
||||
"dark": "Dark",
|
||||
"steel": "Steel",
|
||||
"fairy": "Fairy",
|
||||
} as const;
|
233
src/locales/es/modifier-type.ts
Normal file
233
src/locales/es/modifier-type.ts
Normal file
@ -0,0 +1,233 @@
|
||||
import { ModifierTypeTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const modifierType: ModifierTypeTranslationEntries = {
|
||||
"RARE_CANDY": {
|
||||
"name": "Caramelo Raro",
|
||||
"description": "Sube un nivel instantáneamente a un Pokémon.",
|
||||
},
|
||||
"RARER_CANDY": {
|
||||
"name": "Caramelo Rarisimo",
|
||||
"description": "Sube un nivel instantáneamente a todos los Pokémon del equipo.",
|
||||
},
|
||||
"MEGA_BRACELET": {
|
||||
"name": "Mega Brazalete",
|
||||
"description": "Las Mega Piedras se vuelven disponibles.",
|
||||
},
|
||||
"DYNAMAX_BAND": {
|
||||
"name": "Banda Dinamax",
|
||||
"description": "Las Maxi Setas se vuelven disponibles.",
|
||||
},
|
||||
"TERA_ORB": {
|
||||
"name": "Orbe Tera",
|
||||
"description": "Los Tera Fragmentos se vuelven disponibles.",
|
||||
},
|
||||
"MAP": {
|
||||
"name": "Mapa",
|
||||
"description": "Te permite elegir tu destino en una encrucijada",
|
||||
},
|
||||
"POTION": {
|
||||
"name": "Poción",
|
||||
"description": "$t('modifier.hpRestore')",
|
||||
},
|
||||
"SUPER_POTION": {
|
||||
"name": "Super Poción",
|
||||
"description": "$t('modifier.hpRestore')",
|
||||
},
|
||||
"HYPER_POTION": {
|
||||
"name": "Hiper Poción",
|
||||
"description": "$t('modifier.hpRestore')",
|
||||
},
|
||||
"MAX_POTION": {
|
||||
"name": "Máxima Poción",
|
||||
"description": "Restaura todos los PS de un Pokémon",
|
||||
},
|
||||
"FULL_RESTORE": {
|
||||
"name": "Restauración Total",
|
||||
"description": "Restaura todos los PS y elimina todas las condiciones de estado de un Pokémon",
|
||||
},
|
||||
"REVIVE": {
|
||||
"name": "Revivir",
|
||||
"description": "$t('modifier.revive')",
|
||||
},
|
||||
"MAX_REVIVE": {
|
||||
"name": "Máximo Revivir",
|
||||
"description": "Revive a un Pokémon debilitado con todos sus PS al máximo",
|
||||
},
|
||||
"FULL_HEAL": {
|
||||
"name": "Curación Total",
|
||||
"description": "Cura cualquier estado alterado a un Pokémon",
|
||||
},
|
||||
"SACRED_ASH": {
|
||||
"name": "Ceniza Sagrada",
|
||||
"description": "Revive a todos los Pokémon del equipo con sus PS al máximo",
|
||||
},
|
||||
"REVIVER_SEED": {
|
||||
"name": "Semilla Revivir",
|
||||
"description": "Revive al portador con la mitad de sus PS máximos",
|
||||
},
|
||||
"ETHER": {
|
||||
"name": "Éter",
|
||||
"description": "$t('modifier.ppRestore')",
|
||||
},
|
||||
"MAX_ETHER": {
|
||||
"name": "Máximo Éter",
|
||||
"description": "Restaura todos los PP de un movimiento de un Pokémon",
|
||||
},
|
||||
"ELIXIR": {
|
||||
"name": "Elixir",
|
||||
"description": "$t('modifier.ppRestoreAll')",
|
||||
},
|
||||
"MAX_ELIXIR": {
|
||||
"name": "Máximo Elixir",
|
||||
"description": "Restaura todos los PP de todos los movimientos de un Pokémon",
|
||||
},
|
||||
"PP_UP": {
|
||||
"name": "Más PP",
|
||||
"description": "$t('modifier.ppUp')",
|
||||
},
|
||||
"PP_MAX": {
|
||||
"name": "Máximo PP",
|
||||
"description": "Eleva el máximo de PP de un movimiento de un Pokémon a 8",
|
||||
},
|
||||
"LURE": {
|
||||
"name": "Cebo",
|
||||
"description": "$t('modifier.lure')",
|
||||
},
|
||||
"SUPER_LURE": {
|
||||
"name": "Super Cebo",
|
||||
"description": "$t('modifier.lure')",
|
||||
},
|
||||
"MAX_LURE": {
|
||||
"name": "Máximo Cebo",
|
||||
"description": "$t('modifier.lure')",
|
||||
},
|
||||
"X_ATTACK": {
|
||||
"name": "Ataque X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_DEFENSE": {
|
||||
"name": "Defensa X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_SPATK": {
|
||||
"name": "At. Esp. X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_SPDEF": {
|
||||
"name": "Def. Esp. X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_SPEED": {
|
||||
"name": "Velocidad X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"X_ACCURACY": {
|
||||
"name": "Precisión X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"DIRE_HIT": {
|
||||
"name": "Golpe Crítico",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"GUARD_SPEC": {
|
||||
"name": "Protección X",
|
||||
"description": "$t('modifier.tempBattleStatBoost')",
|
||||
},
|
||||
"HP_UP": {
|
||||
"name": "Más PS",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"PROTEIN": {
|
||||
"name": "Proteína",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"IRON": {
|
||||
"name": "Hierro",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"CALCIUM": {
|
||||
"name": "Calcio",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"ZINC": {
|
||||
"name": "Zinc",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"CARBOS": {
|
||||
"name": "Carburante",
|
||||
"description": "$t('modifier.baseStatBoost')",
|
||||
},
|
||||
"SILK_SCARF": {
|
||||
"name": "Pañuelo Seda",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"BLACK_BELT": {
|
||||
"name": "Cinta Negra",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SHARP_BEAK": {
|
||||
"name": "Pico Afilado",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"POISON_BARB": {
|
||||
"name": "Pua Veneno",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SOFT_SAND": {
|
||||
"name": "Arena Fina",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"HARD_STONE": {
|
||||
"name": "Piedra Dura",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SILVER_POWDER": {
|
||||
"name": "Polvo Plata",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"SPELL_TAG": {
|
||||
"name": "Hechizo",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"METAL_COAT": {
|
||||
"name": "Revest. Metálico",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"CHARCOAL": {
|
||||
"name": "Carbón",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MYSTIC_WATER": {
|
||||
"name": "Agua Mística",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MIRACLE_SEED": {
|
||||
"name": "Semilla Milagro",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"MAGNET": {
|
||||
"name": "Imán",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"TWISTED_SPOON": {
|
||||
"name": "Cuchara Torcida",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"NEVERMELT_ICE": {
|
||||
"name": "Hielo Eterno",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"DRAGON_FANG": {
|
||||
"name": "Colmillo Dragón",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"BLACK_GLASSES": {
|
||||
"name": "Gafas Negras",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
"FAIRY_FEATHER": {
|
||||
"name": "Pluma Hada",
|
||||
"description": "$t('modifier.atkTypeBooster')",
|
||||
},
|
||||
} as const;
|
||||
|
16
src/locales/es/modifier.ts
Normal file
16
src/locales/es/modifier.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const modifier: SimpleTranslationEntries = {
|
||||
"recieveModifier": "Recibe {{modifier}} {{amount}}x",
|
||||
"catchRate": "Ratio de captura: {{multiplier}}",
|
||||
"hpRestore": "Restaura {{restorePoints}} PS o {{restorePercent}}% de los PS de un Pokémon, lo que sea mayor",
|
||||
"revive": "Revive a un Pokémon y restaura el {{restorePercent}}% de los PS",
|
||||
"ppRestore": "Restaura {{restorePoints}} PP de un movimiento de un Pokémon",
|
||||
"ppRestoreAll": "Restaura {{restorePoints}} PP de todos los movimientos de un Pokémon",
|
||||
"ppUp": "Aumenta permanentemente los PP de un movimiento de un Pokémon en {{upPoints}} por cada 5 PP máximos (máximo 3)",
|
||||
"lure": "Duplica la probabilidad de que un encuentro sea una batalla doble durante {{battleCount}} batallas",
|
||||
"tempBattleStatBoost": "Aumenta el {{tempBattleStat}} de todos los miembros del equipo en 1 nivel durante 5 batallas",
|
||||
"baseStatBoost": "Aumenta el {{stat}} base del portador en un 10%. Cuanto más altos sean tus IV, mayor será el límite de acumulación.",
|
||||
"atkTypeBooster": "Aumenta el poder de los movimientos de tipo {{type}} de un Pokémon en un 20%",
|
||||
|
||||
} as const;
|
29
src/locales/es/nature.ts
Normal file
29
src/locales/es/nature.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n.js";
|
||||
|
||||
export const nature: SimpleTranslationEntries = {
|
||||
"ADAMANT": "Firme",
|
||||
"BOLD": "Osada",
|
||||
"BRAVE": "Audaz",
|
||||
"CALM": "Serena",
|
||||
"CAREFUL": "Cauta",
|
||||
"GENTLE": "Amable",
|
||||
"HARDY": "Fuerte",
|
||||
"HASTY": "Activa",
|
||||
"IMPISH": "Agitada",
|
||||
"JOLLY": "Alegre",
|
||||
"LAX": "Floja",
|
||||
"LONELY": "Sola",
|
||||
"MILD": "Afable",
|
||||
"MODEST": "Modesta",
|
||||
"NAIVE": "Ingenua",
|
||||
"NAUGHTY": "Pícara",
|
||||
"QUIET": "Mansa",
|
||||
"RASH": "Alocada",
|
||||
"RELAXED": "Plácida",
|
||||
"SASSY": "Grosera",
|
||||
"SERIOUS": "Seria",
|
||||
"TIMID": "Miedosa",
|
||||
"QUIRKY": "Rara",
|
||||
"BASHFUL": "Tímida",
|
||||
"DOCILE": "Dócil",
|
||||
} as const;
|
@ -9,7 +9,7 @@ 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 { TempBattleStat, getTempBattleStatBoosterItemName, getTempBattleStatName } from '../data/temp-battle-stat';
|
||||
import { TempBattleStat, getTempBattleStatBoosterIconName, getTempBattleStatBoosterItemName, getTempBattleStatName } from '../data/temp-battle-stat';
|
||||
import { BerryType, getBerryEffectDescription, getBerryName } from '../data/berry';
|
||||
import { Unlockables } from '../system/unlockables';
|
||||
import { StatusEffect, getStatusEffectDescriptor } from '../data/status-effect';
|
||||
@ -19,7 +19,7 @@ import { VoucherType, getVoucherTypeIcon, getVoucherTypeName } from '../system/v
|
||||
import { FormChangeItem, SpeciesFormChangeItemTrigger, pokemonFormChanges } from '../data/pokemon-forms';
|
||||
import { ModifierTier } from './modifier-tier';
|
||||
import { Nature, getNatureName, getNatureStatMultiplier } from '#app/data/nature';
|
||||
import { Localizable } from '#app/plugins/i18n';
|
||||
import i18next, { Localizable } from '#app/plugins/i18n';
|
||||
import { getModifierTierTextTint } from '#app/ui/text';
|
||||
|
||||
const outputModifierData = false;
|
||||
@ -61,6 +61,10 @@ export class ModifierType {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
setDescription(description: string): void {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
setTier(tier: ModifierTier): void {
|
||||
this.tier = tier;
|
||||
}
|
||||
@ -145,14 +149,22 @@ class AddPokeballModifierType extends ModifierType implements Localizable {
|
||||
|
||||
localize(): void {
|
||||
this.name = `${this.count}x ${getPokeballName(this.pokeballType)}`;
|
||||
this.description = `Receive ${getPokeballName(this.pokeballType)} x${this.count}\nCatch Rate: ${getPokeballCatchMultiplier(this.pokeballType) > -1 ? `${getPokeballCatchMultiplier(this.pokeballType)}x` : 'Certain'}`;
|
||||
this.description = `${i18next.t("modifier:recieveModifier", { modifier: getPokeballName(this.pokeballType), amount: this.count.toString() })}\n${i18next.t("modifier:catchRate", { multiplier: getPokeballCatchMultiplier(this.pokeballType) > -1 ? `${getPokeballCatchMultiplier(this.pokeballType)}x` : '100%' })}`;
|
||||
}
|
||||
}
|
||||
|
||||
class AddVoucherModifierType extends ModifierType {
|
||||
private voucherType: VoucherType;
|
||||
private count: integer;
|
||||
constructor(voucherType: VoucherType, count: integer) {
|
||||
super(`${count}x ${getVoucherTypeName(voucherType)}`, `Receive ${getVoucherTypeName(voucherType)} x${count}`,
|
||||
super('', '',
|
||||
(_type, _args) => new Modifiers.AddVoucherModifier(this, voucherType, count), getVoucherTypeIcon(voucherType), 'voucher');
|
||||
this.voucherType = voucherType;
|
||||
this.count = count;
|
||||
}
|
||||
localize(): void {
|
||||
this.name = `${this.count}x ${getVoucherTypeName(this.voucherType)}`;
|
||||
this.description = i18next.t('modifier:recieveModifier', { modifier: getVoucherTypeName(this.voucherType), amount: this.count.toString() });
|
||||
}
|
||||
}
|
||||
|
||||
@ -179,6 +191,10 @@ export class PokemonHeldItemModifierType extends PokemonModifierType {
|
||||
return null;
|
||||
}, iconImage, group, soundName);
|
||||
}
|
||||
localize(): void {
|
||||
this.name = i18next.t(`modifierType:${this.name}.name`);
|
||||
this.description = i18next.t(`modifierType:${this.id}.description`);
|
||||
}
|
||||
|
||||
newModifier(...args: any[]): Modifiers.PokemonHeldItemModifier {
|
||||
return super.newModifier(...args) as Modifiers.PokemonHeldItemModifier;
|
||||
@ -191,7 +207,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType {
|
||||
protected healStatus: boolean;
|
||||
|
||||
constructor(name: string, restorePoints: integer, restorePercent: integer, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string, group?: string) {
|
||||
super(name, restorePoints ? `Restores ${restorePoints} HP or ${restorePercent}% HP for one Pokémon, whichever is higher` : `Fully restores HP for one Pokémon${healStatus ? ' and heals any status ailment' : ''}`,
|
||||
super(name, '',
|
||||
newModifierFunc || ((_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)),
|
||||
selectFilter || ((pokemon: PlayerPokemon) => {
|
||||
if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || !pokemon.status)))
|
||||
@ -199,9 +215,17 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType {
|
||||
return null;
|
||||
}), iconImage, group || 'potion');
|
||||
|
||||
|
||||
this.restorePoints = restorePoints;
|
||||
this.restorePercent = restorePercent;
|
||||
this.healStatus = healStatus;
|
||||
this.localize();
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
|
||||
this.description = this.restorePoints ? i18next.t("modifier:hpRestore", { restorePoints: this.restorePoints, restorePercent: this.restorePercent }) : (this.healStatus ? i18next.t("modifierType:FULL_RESTORE.description") : i18next.t("modifierType:MAX_POTION.description"));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -213,25 +237,33 @@ export class PokemonReviveModifierType extends PokemonHpRestoreModifierType {
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
return null;
|
||||
}), iconImage, 'revive');
|
||||
|
||||
this.description = `Revives one Pokémon and restores ${restorePercent}% HP`;
|
||||
this.restorePercent = restorePercent;
|
||||
this.localize()
|
||||
this.selectFilter = (pokemon: PlayerPokemon) => {
|
||||
if (pokemon.hp)
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:revive", { restorePercent: this.restorePercent });
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonStatusHealModifierType extends PokemonModifierType {
|
||||
constructor(name: string) {
|
||||
super(name, `Heals any status ailment for one Pokémon`,
|
||||
super(name, '',
|
||||
((_type, args) => new Modifiers.PokemonStatusHealModifier(this, (args[0] as PlayerPokemon).id)),
|
||||
((pokemon: PlayerPokemon) => {
|
||||
if (!pokemon.hp || !pokemon.status)
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
return null;
|
||||
}));
|
||||
}), 'full_heal');
|
||||
this.localize();
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifierType:FULL_HEAL.description");
|
||||
}
|
||||
}
|
||||
|
||||
@ -250,7 +282,7 @@ export class PokemonPpRestoreModifierType extends PokemonMoveModifierType {
|
||||
protected restorePoints: integer;
|
||||
|
||||
constructor(name: string, restorePoints: integer, iconImage?: string) {
|
||||
super(name, `Restores ${restorePoints > -1 ? restorePoints : 'all'} PP for one Pokémon move`, (_type, args) => new Modifiers.PokemonPpRestoreModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.restorePoints),
|
||||
super(name, '', (_type, args) => new Modifiers.PokemonPpRestoreModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.restorePoints),
|
||||
(_pokemon: PlayerPokemon) => {
|
||||
return null;
|
||||
}, (pokemonMove: PokemonMove) => {
|
||||
@ -258,8 +290,16 @@ export class PokemonPpRestoreModifierType extends PokemonMoveModifierType {
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
return null;
|
||||
}, iconImage, 'ether');
|
||||
|
||||
|
||||
this.restorePoints = restorePoints;
|
||||
this.localize()
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
if (this.restorePoints > -1)
|
||||
this.description = i18next.t("modifier:ppRestore", { restorePoints: this.restorePoints });
|
||||
else
|
||||
this.description = i18next.t("modifierType:MAX_ETHER.description");
|
||||
}
|
||||
}
|
||||
|
||||
@ -267,7 +307,7 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType {
|
||||
protected restorePoints: integer;
|
||||
|
||||
constructor(name: string, restorePoints: integer, iconImage?: string) {
|
||||
super(name, `Restores ${restorePoints > -1 ? restorePoints : 'all'} PP for all of one Pokémon's moves`, (_type, args) => new Modifiers.PokemonAllMovePpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints),
|
||||
super(name, '', (_type, args) => new Modifiers.PokemonAllMovePpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints),
|
||||
(pokemon: PlayerPokemon) => {
|
||||
if (!pokemon.getMoveset().filter(m => m.ppUsed).length)
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
@ -275,6 +315,14 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType {
|
||||
}, iconImage, 'elixir');
|
||||
|
||||
this.restorePoints = restorePoints;
|
||||
this.localize();
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
if (this.restorePoints > -1)
|
||||
this.description = i18next.t("modifier:ppRestoreAll", { restorePoints: this.restorePoints });
|
||||
else
|
||||
this.description = i18next.t("modifierType:MAX_ELIXIR.description");
|
||||
}
|
||||
}
|
||||
|
||||
@ -293,13 +341,16 @@ export class PokemonPpUpModifierType extends PokemonMoveModifierType {
|
||||
|
||||
this.upPoints = upPoints;
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:ppUp", { upPoints: this.upPoints });
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonNatureChangeModifierType extends PokemonModifierType {
|
||||
protected nature: Nature;
|
||||
|
||||
constructor(nature: Nature) {
|
||||
super(`${getNatureName(nature)} Mint`, `Changes a Pokémon\'s nature to ${getNatureName(nature, true, true, true)}`, ((_type, args) => new Modifiers.PokemonNatureChangeModifier(this, (args[0] as PlayerPokemon).id, this.nature)),
|
||||
super(`${i18next.t("modifierType:MINT.name",{ nature: getNatureName(nature) })}`, i18next.t("modifier:mint", { nature:getNatureName(nature, true, true, true) }), ((_type, args) => new Modifiers.PokemonNatureChangeModifier(this, (args[0] as PlayerPokemon).id, this.nature)),
|
||||
((pokemon: PlayerPokemon) => {
|
||||
if (pokemon.getNature() === this.nature)
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
@ -324,12 +375,16 @@ export class RememberMoveModifierType extends PokemonModifierType {
|
||||
export class DoubleBattleChanceBoosterModifierType extends ModifierType {
|
||||
public battleCount: integer;
|
||||
|
||||
constructor(name: string, battleCount: integer) {
|
||||
constructor(name: string, battleCount: integer, iconImage?: string) {
|
||||
super(name, `Doubles the chance of an encounter being a double battle for ${battleCount} battles`, (_type, _args) => new Modifiers.DoubleBattleChanceBoosterModifier(this, this.battleCount),
|
||||
null, 'lure');
|
||||
iconImage, 'lure');
|
||||
|
||||
this.battleCount = battleCount;
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:lure", { battleCount: this.battleCount });
|
||||
}
|
||||
}
|
||||
|
||||
export class TempBattleStatBoosterModifierType extends ModifierType implements GeneratedPersistentModifierType {
|
||||
@ -337,9 +392,9 @@ export class TempBattleStatBoosterModifierType extends ModifierType implements G
|
||||
|
||||
constructor(tempBattleStat: TempBattleStat) {
|
||||
super(getTempBattleStatBoosterItemName(tempBattleStat),
|
||||
`Increases the ${getTempBattleStatName(tempBattleStat)} of all party members by 1 stage for 5 battles`,
|
||||
i18next.t('modifier:tempBattleStatBoost', { tempBattleStat: getTempBattleStatName(tempBattleStat) }),
|
||||
(_type, _args) => new Modifiers.TempBattleStatBoosterModifier(this, this.tempBattleStat),
|
||||
getTempBattleStatBoosterItemName(tempBattleStat).replace(/\./g, '').replace(/[ ]/g, '_').toLowerCase());
|
||||
getTempBattleStatBoosterIconName(tempBattleStat));
|
||||
|
||||
this.tempBattleStat = tempBattleStat;
|
||||
}
|
||||
@ -353,9 +408,9 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge
|
||||
private berryType: BerryType;
|
||||
|
||||
constructor(berryType: BerryType) {
|
||||
super(getBerryName(berryType), getBerryEffectDescription(berryType),
|
||||
super(`${i18next.t("modifierType:BERRY.name", { berry: i18next.t(`berry:${getBerryName(berryType)}`)})}`, getBerryEffectDescription(berryType),
|
||||
(type, args) => new Modifiers.BerryModifier(type, (args[0] as Pokemon).id, berryType),
|
||||
null, 'berry');
|
||||
`${BerryType[berryType].toLowerCase()}_berry`, 'berry');
|
||||
|
||||
this.berryType = berryType;
|
||||
}
|
||||
@ -368,41 +423,82 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge
|
||||
function getAttackTypeBoosterItemName(type: Type) {
|
||||
switch (type) {
|
||||
case Type.NORMAL:
|
||||
return 'Silk Scarf';
|
||||
return i18next.t('modifierType:SILK_SCARF.name');
|
||||
case Type.FIGHTING:
|
||||
return 'Black Belt';
|
||||
return i18next.t('modifierType:BLACK_BELT.name');
|
||||
case Type.FLYING:
|
||||
return 'Sharp Beak';
|
||||
return i18next.t('modifierType:SHARP_BEAK.name');
|
||||
case Type.POISON:
|
||||
return 'Poison Barb';
|
||||
return i18next.t('modifierType:POISON_BARB.name');
|
||||
case Type.GROUND:
|
||||
return 'Soft Sand';
|
||||
return i18next.t('modifierType:SOFT_SAND.name');
|
||||
case Type.ROCK:
|
||||
return 'Hard Stone';
|
||||
return i18next.t('modifierType:HARD_STONE.name');
|
||||
case Type.BUG:
|
||||
return 'Silver Powder';
|
||||
return i18next.t('modifierType:SILVER_POWER.name');
|
||||
case Type.GHOST:
|
||||
return 'Spell Tag';
|
||||
return i18next.t('modifierType:SPELL_TAG.name');
|
||||
case Type.STEEL:
|
||||
return 'Metal Coat';
|
||||
return i18next.t('modifierType:METAL_COAT.name');
|
||||
case Type.FIRE:
|
||||
return 'Charcoal';
|
||||
return i18next.t('modifierType:CHARCOAL.name');
|
||||
case Type.WATER:
|
||||
return 'Mystic Water';
|
||||
return i18next.t('modifierType:MYSTIC_WATER.name');
|
||||
case Type.GRASS:
|
||||
return 'Miracle Seed';
|
||||
return i18next.t('modifierType:MIRACLE_SEED.name');
|
||||
case Type.ELECTRIC:
|
||||
return 'Magnet';
|
||||
return i18next.t('modifierType:MAGNET.name');
|
||||
case Type.PSYCHIC:
|
||||
return 'Twisted Spoon';
|
||||
return i18next.t('modifierType:TWISTED_SPOON.name');
|
||||
case Type.ICE:
|
||||
return 'Never-Melt Ice'
|
||||
return i18next.t('modifierType:NEVER_MELT_ICE.name');
|
||||
case Type.DRAGON:
|
||||
return 'Dragon Fang';
|
||||
return i18next.t('modifierType:DRAGON_FANG.name');
|
||||
case Type.DARK:
|
||||
return 'Black Glasses';
|
||||
return i18next.t('modifierType:BLACK_GLASSES.name');
|
||||
case Type.FAIRY:
|
||||
return 'Fairy Feather';
|
||||
return i18next.t('modifierType:FAIRY_FEATHER.name');
|
||||
}
|
||||
}
|
||||
|
||||
function getAttackTypeBoosterItemIconName(type: Type) {
|
||||
switch (type) {
|
||||
case Type.NORMAL:
|
||||
return 'silk_scarf';
|
||||
case Type.FIGHTING:
|
||||
return 'black_belt';
|
||||
case Type.FLYING:
|
||||
return 'sharp_beak';
|
||||
case Type.POISON:
|
||||
return 'poison_barb';
|
||||
case Type.GROUND:
|
||||
return 'soft_sand';
|
||||
case Type.ROCK:
|
||||
return 'hard_stone';
|
||||
case Type.BUG:
|
||||
return 'silver_powder';
|
||||
case Type.GHOST:
|
||||
return 'spell_tag';
|
||||
case Type.STEEL:
|
||||
return 'metal_coat';
|
||||
case Type.FIRE:
|
||||
return 'charcoal';
|
||||
case Type.WATER:
|
||||
return 'mystic_water';
|
||||
case Type.GRASS:
|
||||
return 'miracle_seed';
|
||||
case Type.ELECTRIC:
|
||||
return 'magnet';
|
||||
case Type.PSYCHIC:
|
||||
return 'twisted_spoon';
|
||||
case Type.ICE:
|
||||
return 'never_melt_ice';
|
||||
case Type.DRAGON:
|
||||
return 'dragon_fang';
|
||||
case Type.DARK:
|
||||
return 'black_glasses';
|
||||
case Type.FAIRY:
|
||||
return 'fairy_feather';
|
||||
}
|
||||
}
|
||||
|
||||
@ -411,9 +507,9 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i
|
||||
public boostPercent: integer;
|
||||
|
||||
constructor(moveType: Type, boostPercent: integer) {
|
||||
super(getAttackTypeBoosterItemName(moveType), `Increases the power of a Pokémon's ${Utils.toReadableString(Type[moveType])}-type moves by 20%`,
|
||||
super(getAttackTypeBoosterItemName(moveType), i18next.t("modifier:atkTypeBooster", {type: i18next.t(`type:${Utils.toReadableString(Type[moveType]).toLowerCase()}`)}),
|
||||
(_type, args) => new Modifiers.AttackTypeBoosterModifier(this, (args[0] as Pokemon).id, moveType, boostPercent),
|
||||
`${getAttackTypeBoosterItemName(moveType).replace(/[ \-]/g, '_').toLowerCase()}`);
|
||||
getAttackTypeBoosterItemIconName(moveType));
|
||||
|
||||
this.moveType = moveType;
|
||||
this.boostPercent = boostPercent;
|
||||
@ -426,31 +522,56 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i
|
||||
|
||||
export class PokemonLevelIncrementModifierType extends PokemonModifierType {
|
||||
constructor(name: string, iconImage?: string) {
|
||||
super(name, `Increases a Pokémon\'s level by 1`, (_type, args) => new Modifiers.PokemonLevelIncrementModifier(this, (args[0] as PlayerPokemon).id),
|
||||
super(name, '', (_type, args) => new Modifiers.PokemonLevelIncrementModifier(this, (args[0] as PlayerPokemon).id),
|
||||
(_pokemon: PlayerPokemon) => null, iconImage);
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifierType:RARE_CANDY.description");
|
||||
}
|
||||
}
|
||||
|
||||
export class AllPokemonLevelIncrementModifierType extends ModifierType {
|
||||
constructor(name: string, iconImage?: string) {
|
||||
super(name, `Increases all party members' level by 1`, (_type, _args) => new Modifiers.PokemonLevelIncrementModifier(this, -1), iconImage);
|
||||
super(name, '', (_type, _args) => new Modifiers.PokemonLevelIncrementModifier(this, -1), iconImage);
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifierType:RARER_CANDY.description");
|
||||
}
|
||||
}
|
||||
|
||||
function getBaseStatBoosterItemName(stat: Stat) {
|
||||
switch (stat) {
|
||||
case Stat.HP:
|
||||
return 'HP Up';
|
||||
return i18next.t('modifierType:HP_UP.name');
|
||||
case Stat.ATK:
|
||||
return 'Protein';
|
||||
return i18next.t('modifierType:PROTEIN.name');
|
||||
case Stat.DEF:
|
||||
return 'Iron';
|
||||
return i18next.t('modifierType:IRON.name');
|
||||
case Stat.SPATK:
|
||||
return 'Calcium';
|
||||
return i18next.t('modifierType:CALCIUM.name');
|
||||
case Stat.SPDEF:
|
||||
return 'Zinc';
|
||||
return i18next.t('modifierType:ZINC.name');
|
||||
case Stat.SPD:
|
||||
return 'Carbos';
|
||||
return i18next.t('modifierType:CARBOS.name');
|
||||
}
|
||||
}
|
||||
|
||||
function getBaseStatBoosterID(stat: Stat) {
|
||||
switch (stat) {
|
||||
case Stat.HP:
|
||||
return 'HP_UP';
|
||||
case Stat.ATK:
|
||||
return 'PROTEIN';
|
||||
case Stat.DEF:
|
||||
return 'IRON';
|
||||
case Stat.SPATK:
|
||||
return 'CALCIUM';
|
||||
case Stat.SPDEF:
|
||||
return 'ZINC';
|
||||
case Stat.SPD:
|
||||
return 'CARBOS';
|
||||
}
|
||||
}
|
||||
|
||||
@ -458,7 +579,7 @@ export class PokemonBaseStatBoosterModifierType extends PokemonHeldItemModifierT
|
||||
private stat: Stat;
|
||||
|
||||
constructor(name: string, stat: Stat, _iconImage?: string) {
|
||||
super(name, `Increases the holder's base ${getStatName(stat)} by 10%. The higher your IVs, the higher the stack limit.`, (_type, args) => new Modifiers.PokemonBaseStatModifier(this, (args[0] as Pokemon).id, this.stat));
|
||||
super(name, i18next.t("modifier:baseStatBoost", { stat: getStatName(stat)}), (_type, args) => new Modifiers.PokemonBaseStatModifier(this, (args[0] as Pokemon).id, this.stat), getBaseStatBoosterID(stat).toLowerCase());
|
||||
|
||||
this.stat = stat;
|
||||
}
|
||||
@ -470,23 +591,38 @@ export class PokemonBaseStatBoosterModifierType extends PokemonHeldItemModifierT
|
||||
|
||||
class AllPokemonFullHpRestoreModifierType extends ModifierType {
|
||||
constructor(name: string, description?: string, newModifierFunc?: NewModifierFunc, iconImage?: string) {
|
||||
super(name, description || `Restores 100% HP for all Pokémon`, newModifierFunc || ((_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false)), iconImage);
|
||||
super(name, description || '', newModifierFunc || ((_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false)), iconImage);
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifierType:SACRED_ASH.description");
|
||||
}
|
||||
}
|
||||
|
||||
class AllPokemonFullReviveModifierType extends AllPokemonFullHpRestoreModifierType {
|
||||
constructor(name: string, iconImage?: string) {
|
||||
super(name, `Revives all fainted Pokémon, fully restoring HP`, (_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false, true), iconImage);
|
||||
super(name, '', (_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false, true), iconImage);
|
||||
this.localize();
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifierType:SACRED_ASH.description");
|
||||
}
|
||||
}
|
||||
|
||||
export class MoneyRewardModifierType extends ModifierType {
|
||||
private moneyMultiplier: number;
|
||||
private moneyMultiplierDescriptor: string;
|
||||
|
||||
constructor(name: string, moneyMultiplier: number, moneyMultiplierDescriptor: string, iconImage?: string) {
|
||||
super(name, `Grants a ${moneyMultiplierDescriptor} amount of money (₽{AMOUNT})`, (_type, _args) => new Modifiers.MoneyRewardModifier(this, moneyMultiplier), iconImage, 'money', 'buy');
|
||||
super(name, ``, (_type, _args) => new Modifiers.MoneyRewardModifier(this, moneyMultiplier), iconImage, 'money', 'buy');
|
||||
|
||||
this.moneyMultiplier = moneyMultiplier;
|
||||
this.moneyMultiplierDescriptor = moneyMultiplierDescriptor;
|
||||
this.localize();
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.name = `${i18next.t(`modifierType:${this.name}.name`)}`;
|
||||
this.description = i18next.t("modifier:moneyReward", { moneyMultiplierDescriptor: i18next.t(`modifier:${this.moneyMultiplierDescriptor}`) });
|
||||
}
|
||||
|
||||
getDescription(scene: BattleScene): string {
|
||||
@ -495,33 +631,61 @@ export class MoneyRewardModifierType extends ModifierType {
|
||||
}
|
||||
|
||||
export class ExpBoosterModifierType extends ModifierType {
|
||||
private boostPercent: integer;
|
||||
constructor(name: string, boostPercent: integer, iconImage?: string) {
|
||||
super(name, `Increases gain of EXP. Points by ${boostPercent}%`, () => new Modifiers.ExpBoosterModifier(this, boostPercent), iconImage);
|
||||
super(name, ``, () => new Modifiers.ExpBoosterModifier(this, boostPercent), iconImage);
|
||||
this.boostPercent = boostPercent;
|
||||
this.localize();
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.name = `${i18next.t(`modifierType:${this.name}.name`)}`;
|
||||
this.description = `${i18next.t("modifier:expCharm", { boostPercent: this.boostPercent })}`;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class PokemonExpBoosterModifierType extends PokemonHeldItemModifierType {
|
||||
private boostPercent: integer;
|
||||
constructor(name: string, boostPercent: integer, iconImage?: string) {
|
||||
super(name, `Increases the holder's gain of EXP. Points by ${boostPercent}%`, (_type, args) => new Modifiers.PokemonExpBoosterModifier(this, (args[0] as Pokemon).id, boostPercent),
|
||||
super(name, `${i18next.t("modifier:expEgg", { boostPercent })}`, (_type, args) => new Modifiers.PokemonExpBoosterModifier(this, (args[0] as Pokemon).id, boostPercent),
|
||||
iconImage);
|
||||
this.boostPercent = boostPercent;
|
||||
this.name = name;
|
||||
this.localize();
|
||||
}
|
||||
localize(): void {
|
||||
this.name = i18next.t(`modifierType:${this.name}.name`);
|
||||
this.description = i18next.t("modifier:expEgg", { boostPercent: this.boostPercent });
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonFriendshipBoosterModifierType extends PokemonHeldItemModifierType {
|
||||
constructor(name: string, iconImage?: string) {
|
||||
super(name,'Increases friendship gain per victory by 50%', (_type, args) => new Modifiers.PokemonFriendshipBoosterModifier(this, (args[0] as Pokemon).id), iconImage);
|
||||
super(name,`${i18next.t("modifierType:SOOTHE_BELL.description")}`, (_type, args) => new Modifiers.PokemonFriendshipBoosterModifier(this, (args[0] as Pokemon).id), iconImage);
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonMoveAccuracyBoosterModifierType extends PokemonHeldItemModifierType {
|
||||
private amount: integer;
|
||||
constructor(name: string, amount: integer, iconImage?: string, group?: string, soundName?: string) {
|
||||
super(name, `Increases move accuracy by ${amount} (maximum 100)`, (_type, args) => new Modifiers.PokemonMoveAccuracyBoosterModifier(this, (args[0] as Pokemon).id, amount), iconImage, group, soundName);
|
||||
super(name, '', (_type, args) => new Modifiers.PokemonMoveAccuracyBoosterModifier(this, (args[0] as Pokemon).id, amount), iconImage, group, soundName);
|
||||
this.amount = amount;
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:moveAccuracyBooster", { amount: this.amount });
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonMultiHitModifierType extends PokemonHeldItemModifierType {
|
||||
constructor(name: string, iconImage?: string) {
|
||||
super(name, `Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively.`, (type, args) => new Modifiers.PokemonMultiHitModifier(type as PokemonMultiHitModifierType, (args[0] as Pokemon).id), iconImage);
|
||||
super(name, '', (type, args) => new Modifiers.PokemonMultiHitModifier(type as PokemonMultiHitModifierType, (args[0] as Pokemon).id), iconImage);
|
||||
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:multiHit");
|
||||
}
|
||||
}
|
||||
|
||||
@ -529,7 +693,7 @@ export class TmModifierType extends PokemonModifierType {
|
||||
public moveId: Moves;
|
||||
|
||||
constructor(moveId: Moves) {
|
||||
super(`TM${Utils.padInt(Object.keys(tmSpecies).indexOf(moveId.toString()) + 1, 3)} - ${allMoves[moveId].name}`, `Teach ${allMoves[moveId].name} to a Pokémon`, (_type, args) => new Modifiers.TmModifier(this, (args[0] as PlayerPokemon).id),
|
||||
super(`TM${Utils.padInt(Object.keys(tmSpecies).indexOf(moveId.toString()) + 1, 3)} - ${allMoves[moveId].name}`, `${i18next.t("modifier:tm", {move:allMoves[moveId].name })}`, (_type, args) => new Modifiers.TmModifier(this, (args[0] as PlayerPokemon).id),
|
||||
(pokemon: PlayerPokemon) => {
|
||||
if (pokemon.compatibleTms.indexOf(moveId) === -1 || pokemon.getMoveset().filter(m => m?.moveId === moveId).length)
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
@ -544,7 +708,7 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge
|
||||
public evolutionItem: EvolutionItem;
|
||||
|
||||
constructor(evolutionItem: EvolutionItem) {
|
||||
super(Utils.toReadableString(EvolutionItem[evolutionItem]), `Causes certain Pokémon to evolve`, (_type, args) => new Modifiers.EvolutionItemModifier(this, (args[0] as PlayerPokemon).id),
|
||||
super('', '', (_type, args) => new Modifiers.EvolutionItemModifier(this, (args[0] as PlayerPokemon).id),
|
||||
(pokemon: PlayerPokemon) => {
|
||||
if (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && pokemonEvolutions[pokemon.species.speciesId].filter(e => e.item === this.evolutionItem
|
||||
&& (!e.condition || e.condition.predicate(pokemon))).length)
|
||||
@ -557,6 +721,12 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge
|
||||
}, EvolutionItem[evolutionItem].toLowerCase());
|
||||
|
||||
this.evolutionItem = evolutionItem;
|
||||
this.localize();
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.name = i18next.t(`modifierType:${EvolutionItem[this.evolutionItem]}.name`);
|
||||
this.description = i18next.t("modifier:evolve");
|
||||
}
|
||||
|
||||
getPregenArgs(): any[] {
|
||||
@ -568,7 +738,7 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G
|
||||
public formChangeItem: FormChangeItem;
|
||||
|
||||
constructor(formChangeItem: FormChangeItem) {
|
||||
super(Utils.toReadableString(FormChangeItem[formChangeItem]), `Causes certain Pokémon to change form`, (_type, args) => new Modifiers.PokemonFormChangeItemModifier(this, (args[0] as PlayerPokemon).id, formChangeItem, true),
|
||||
super('', '', (_type, args) => new Modifiers.PokemonFormChangeItemModifier(this, (args[0] as PlayerPokemon).id, formChangeItem, true),
|
||||
(pokemon: PlayerPokemon) => {
|
||||
if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) && !!pokemonFormChanges[pokemon.species.speciesId].find(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger)
|
||||
&& (fc.trigger as SpeciesFormChangeItemTrigger).item === this.formChangeItem))
|
||||
@ -578,8 +748,13 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G
|
||||
}, FormChangeItem[formChangeItem].toLowerCase());
|
||||
|
||||
this.formChangeItem = formChangeItem;
|
||||
this.localize();
|
||||
}
|
||||
|
||||
localize(): void {
|
||||
this.name = i18next.t(`modifierType:${FormChangeItem[this.formChangeItem]}.name`);
|
||||
this.description = i18next.t("modifier:formChange");
|
||||
}
|
||||
getPregenArgs(): any[] {
|
||||
return [ this.formChangeItem ];
|
||||
}
|
||||
@ -587,13 +762,16 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G
|
||||
|
||||
export class FusePokemonModifierType extends PokemonModifierType {
|
||||
constructor(name: string, iconImage?: string) {
|
||||
super(name, 'Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool)', (_type, args) => new Modifiers.FusePokemonModifier(this, (args[0] as PlayerPokemon).id, (args[1] as PlayerPokemon).id),
|
||||
super(name, `${i18next.t("modifier:fusePokemon")}`, (_type, args) => new Modifiers.FusePokemonModifier(this, (args[0] as PlayerPokemon).id, (args[1] as PlayerPokemon).id),
|
||||
(pokemon: PlayerPokemon) => {
|
||||
if (pokemon.isFusion())
|
||||
return PartyUiHandler.NoEffectMessage;
|
||||
return null;
|
||||
}, iconImage);
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:fusePokemon");
|
||||
}
|
||||
}
|
||||
|
||||
class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator {
|
||||
@ -705,7 +883,7 @@ export class TerastallizeModifierType extends PokemonHeldItemModifierType implem
|
||||
private teraType: Type;
|
||||
|
||||
constructor(teraType: Type) {
|
||||
super(`${Utils.toReadableString(Type[teraType])} Tera Shard`, `${Utils.toReadableString(Type[teraType])} Terastallizes the holder for up to 10 battles`, (type, args) => new Modifiers.TerastallizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), null, 'tera_shard');
|
||||
super(`${i18next.t("modifierType:TERA_SHARD.name", { type: i18next.t(`type:${Utils.toReadableString(Type[teraType])}`)})}`, `${i18next.t("modifier:tera", { type: i18next.t(`type:${Utils.toReadableString(Type[teraType]).toLocaleLowerCase()}`)})}`, (type, args) => new Modifiers.TerastallizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), `${Utils.toReadableString(Type[teraType]).toLocaleLowerCase()}_tera_shard`, 'tera_shard');
|
||||
|
||||
this.teraType = teraType;
|
||||
}
|
||||
@ -716,26 +894,48 @@ export class TerastallizeModifierType extends PokemonHeldItemModifierType implem
|
||||
}
|
||||
|
||||
export class ContactHeldItemTransferChanceModifierType extends PokemonHeldItemModifierType {
|
||||
private chancePercent: integer;
|
||||
constructor(name: string, chancePercent: integer, iconImage?: string, group?: string, soundName?: string) {
|
||||
super(name, `Upon attacking, there is a ${chancePercent}% chance the foe's held item will be stolen.`, (type, args) => new Modifiers.ContactHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), iconImage, group, soundName);
|
||||
super(name, '', (type, args) => new Modifiers.ContactHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), iconImage, group, soundName);
|
||||
this.chancePercent = chancePercent;
|
||||
this.localize();
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:contactItemTransfer", { chancePercent: this.chancePercent });
|
||||
}
|
||||
}
|
||||
|
||||
export class TurnHeldItemTransferModifierType extends PokemonHeldItemModifierType {
|
||||
constructor(name: string, iconImage?: string, group?: string, soundName?: string) {
|
||||
super(name, 'Every turn, the holder acquires one held item from the foe.', (type, args) => new Modifiers.TurnHeldItemTransferModifier(type, (args[0] as Pokemon).id), iconImage, group, soundName);
|
||||
super(name, `${i18next.t("modifier:heldItemTransfer")}`, (type, args) => new Modifiers.TurnHeldItemTransferModifier(type, (args[0] as Pokemon).id), iconImage, group, soundName);
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:heldItemTransfer");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export class EnemyAttackStatusEffectChanceModifierType extends ModifierType {
|
||||
private chancePercent: integer;
|
||||
private effect: StatusEffect;
|
||||
constructor(name: string, chancePercent: integer, effect: StatusEffect, iconImage?: string) {
|
||||
super(name, `Adds a ${chancePercent}% chance to inflict ${getStatusEffectDescriptor(effect)} with attack moves`, (type, args) => new Modifiers.EnemyAttackStatusEffectChanceModifier(type, effect, chancePercent), iconImage, 'enemy_status_chance')
|
||||
super(name, `${i18next.t("modifier:attackStatusEffect", { chancePercent: chancePercent , effect: getStatusEffectDescriptor(effect) })}`, (type, args) => new Modifiers.EnemyAttackStatusEffectChanceModifier(type, effect, chancePercent), iconImage, 'enemy_status_chance')
|
||||
this.chancePercent = chancePercent;
|
||||
this.effect = effect;
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:attackStatusEffect", { chancePercent: this.chancePercent , effect: getStatusEffectDescriptor(this.effect) });
|
||||
}
|
||||
}
|
||||
|
||||
export class EnemyEndureChanceModifierType extends ModifierType {
|
||||
private chancePercent: integer;
|
||||
constructor(name: string, chancePercent: number, iconImage?: string) {
|
||||
super(name, `Adds a ${chancePercent}% chance of enduring a hit`, (type, _args) => new Modifiers.EnemyEndureChanceModifier(type, chancePercent), iconImage, 'enemy_endure');
|
||||
super(name, `${i18next.t("modifier:endureChance", { chancePercent })}`, (type, _args) => new Modifiers.EnemyEndureChanceModifier(type, chancePercent), iconImage, 'enemy_endure');
|
||||
this.chancePercent = chancePercent;
|
||||
}
|
||||
localize(): void {
|
||||
this.description = i18next.t("modifier:endureChance", { chancePercent: this.chancePercent });
|
||||
}
|
||||
}
|
||||
|
||||
@ -766,59 +966,59 @@ export const modifierTypes = {
|
||||
ROGUE_BALL: () => new AddPokeballModifierType(PokeballType.ROGUE_BALL, 5, 'rb'),
|
||||
MASTER_BALL: () => new AddPokeballModifierType(PokeballType.MASTER_BALL, 1, 'mb'),
|
||||
|
||||
RARE_CANDY: () => new PokemonLevelIncrementModifierType('Rare Candy'),
|
||||
RARER_CANDY: () => new AllPokemonLevelIncrementModifierType('Rarer Candy'),
|
||||
RARE_CANDY: () => new PokemonLevelIncrementModifierType(i18next.t("modifierType:RARE_CANDY.name"), 'rare_candy'),
|
||||
RARER_CANDY: () => new AllPokemonLevelIncrementModifierType(i18next.t("modifierType:RARER_CANDY.name"), 'rarer_candy'),
|
||||
|
||||
EVOLUTION_ITEM: () => new EvolutionItemModifierTypeGenerator(false),
|
||||
RARE_EVOLUTION_ITEM: () => new EvolutionItemModifierTypeGenerator(true),
|
||||
FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(),
|
||||
|
||||
MEGA_BRACELET: () => new ModifierType('Mega Bracelet', 'Mega Stones become available.', (type, _args) => new Modifiers.MegaEvolutionAccessModifier(type)),
|
||||
DYNAMAX_BAND: () => new ModifierType('Dynamax Band', 'Max Mushrooms become available.', (type, _args) => new Modifiers.GigantamaxAccessModifier(type)),
|
||||
TERA_ORB: () => new ModifierType('Tera Orb', 'Tera Shards become available.', (type, _args) => new Modifiers.TerastallizeAccessModifier(type)),
|
||||
MEGA_BRACELET: () => new ModifierType(i18next.t("modifierType:MEGA_BRACELET.name"), i18next.t("modifierType:MEGA_BRACELET.description"), (type, _args) => new Modifiers.MegaEvolutionAccessModifier(type), 'mega_bracelet'),
|
||||
DYNAMAX_BAND: () => new ModifierType(i18next.t("modifierType:DYNAMAX_BAND.name"), i18next.t("modifierType:DYNAMAX_BAND.description"), (type, _args) => new Modifiers.GigantamaxAccessModifier(type), 'dynamax_band'),
|
||||
TERA_ORB: () => new ModifierType(i18next.t("modifierType:TERA_ORB.name"), i18next.t("modifierType:TERA_ORB.description"), (type, _args) => new Modifiers.TerastallizeAccessModifier(type), "tera_orb"),
|
||||
|
||||
MAP: () => new ModifierType('Map', 'Allows you to choose your destination at a crossroads', (type, _args) => new Modifiers.MapModifier(type)),
|
||||
MAP: () => new ModifierType(i18next.t("modifierType:MAP.name"), i18next.t("modifierType:MAP.description"), (type, _args) => new Modifiers.MapModifier(type), 'map'),
|
||||
|
||||
POTION: () => new PokemonHpRestoreModifierType('Potion', 20, 10),
|
||||
SUPER_POTION: () => new PokemonHpRestoreModifierType('Super Potion', 50, 25),
|
||||
HYPER_POTION: () => new PokemonHpRestoreModifierType('Hyper Potion', 200, 50),
|
||||
MAX_POTION: () => new PokemonHpRestoreModifierType('Max Potion', 0, 100),
|
||||
FULL_RESTORE: () => new PokemonHpRestoreModifierType('Full Restore', 0, 100, true),
|
||||
POTION: () => new PokemonHpRestoreModifierType(i18next.t("modifierType:POTION.name"), 20, 10, undefined ,undefined , undefined, 'potion'),
|
||||
SUPER_POTION: () => new PokemonHpRestoreModifierType(i18next.t("modifierType:SUPER_POTION.name"), 50, 25, undefined, undefined, undefined, 'super_potion'),
|
||||
HYPER_POTION: () => new PokemonHpRestoreModifierType(i18next.t("modifierType:HYPER_POTION.name"), 200, 50, undefined, undefined, undefined, 'hyper_potion'),
|
||||
MAX_POTION: () => new PokemonHpRestoreModifierType(i18next.t("modifierType:MAX_POTION.name"), 0, 100, true, undefined, undefined, 'max_potion'),
|
||||
FULL_RESTORE: () => new PokemonHpRestoreModifierType(i18next.t("modifierType:FULL_RESTORE.name"), 0, 100, true, undefined, undefined, 'full_restore'),
|
||||
|
||||
REVIVE: () => new PokemonReviveModifierType('Revive', 50),
|
||||
MAX_REVIVE: () => new PokemonReviveModifierType('Max Revive', 100),
|
||||
REVIVE: () => new PokemonReviveModifierType(i18next.t("modifierType:REVIVE.name"), 50,"revive"),
|
||||
MAX_REVIVE: () => new PokemonReviveModifierType(i18next.t("modifierType:MAX_REVIVE.name"), 100, "max_revive"),
|
||||
|
||||
FULL_HEAL: () => new PokemonStatusHealModifierType('Full Heal'),
|
||||
FULL_HEAL: () => new PokemonStatusHealModifierType(i18next.t("modifierType:FULL_HEAL.name")),
|
||||
|
||||
SACRED_ASH: () => new AllPokemonFullReviveModifierType('Sacred Ash'),
|
||||
SACRED_ASH: () => new AllPokemonFullReviveModifierType(i18next.t("modifierType:SACRED_ASH.name"), 'sacred_ash'),
|
||||
|
||||
REVIVER_SEED: () => new PokemonHeldItemModifierType('Reviver Seed', 'Revives the holder for 1/2 HP upon fainting',
|
||||
(type, args) => new Modifiers.PokemonInstantReviveModifier(type, (args[0] as Pokemon).id)),
|
||||
REVIVER_SEED: () => new PokemonHeldItemModifierType(i18next.t("modifierType:REVIVER_SEED.name"), i18next.t("modifierType:REVIVER_SEED.description"),
|
||||
(type, args) => new Modifiers.PokemonInstantReviveModifier(type, (args[0] as Pokemon).id), 'reviver_seed'),
|
||||
|
||||
ETHER: () => new PokemonPpRestoreModifierType('Ether', 10),
|
||||
MAX_ETHER: () => new PokemonPpRestoreModifierType('Max Ether', -1),
|
||||
ETHER: () => new PokemonPpRestoreModifierType(i18next.t("modifierType:ETHER.name"), 10, 'ether'),
|
||||
MAX_ETHER: () => new PokemonPpRestoreModifierType(i18next.t("modifierType:MAX_ETHER.name"), -1, 'max_ether'),
|
||||
|
||||
ELIXIR: () => new PokemonAllMovePpRestoreModifierType('Elixir', 10),
|
||||
MAX_ELIXIR: () => new PokemonAllMovePpRestoreModifierType('Max Elixir', -1),
|
||||
ELIXIR: () => new PokemonAllMovePpRestoreModifierType(i18next.t("modifierType:ELIXIR.name"), 10, 'elixir'),
|
||||
MAX_ELIXIR: () => new PokemonAllMovePpRestoreModifierType(i18next.t("modifierType:MAX_ELIXIR.name"), -1, "max_elixir"),
|
||||
|
||||
PP_UP: () => new PokemonPpUpModifierType('PP Up', 1),
|
||||
PP_MAX: () => new PokemonPpUpModifierType('PP Max', 3),
|
||||
PP_UP: () => new PokemonPpUpModifierType(i18next.t("modifierType:PP_UP.name"), 1, 'pp_up'),
|
||||
PP_MAX: () => new PokemonPpUpModifierType(i18next.t("modifierType:PP_MAX"), 3, 'pp_max'),
|
||||
|
||||
/*REPEL: () => new DoubleBattleChanceBoosterModifierType('Repel', 5),
|
||||
SUPER_REPEL: () => new DoubleBattleChanceBoosterModifierType('Super Repel', 10),
|
||||
MAX_REPEL: () => new DoubleBattleChanceBoosterModifierType('Max Repel', 25),*/
|
||||
|
||||
LURE: () => new DoubleBattleChanceBoosterModifierType('Lure', 5),
|
||||
SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType('Super Lure', 10),
|
||||
MAX_LURE: () => new DoubleBattleChanceBoosterModifierType('Max Lure', 25),
|
||||
LURE: () => new DoubleBattleChanceBoosterModifierType(i18next.t("modifierType:LURE"), 5, "lure"),
|
||||
SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType(i18next.t("modifierType:SUPER_LURE"), 10, "super_lure"),
|
||||
MAX_LURE: () => new DoubleBattleChanceBoosterModifierType(i18next.t("modifierType:MAX_LURE"), 25, "max_lure"),
|
||||
|
||||
TEMP_STAT_BOOSTER: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => {
|
||||
if (pregenArgs)
|
||||
return new TempBattleStatBoosterModifierType(pregenArgs[0] as TempBattleStat);
|
||||
const randTempBattleStat = Utils.randSeedInt(6) as TempBattleStat;
|
||||
const randTempBattleStat = Utils.randSeedInt(7) as TempBattleStat;
|
||||
return new TempBattleStatBoosterModifierType(randTempBattleStat);
|
||||
}),
|
||||
DIRE_HIT: () => new TempBattleStatBoosterModifierType(TempBattleStat.CRIT),
|
||||
/* Now included in TEMP_STAT_BOOSTER DIRE_HIT: () => return new TempBattleStatBoosterModifierType(TempBattleStat.CRIT), */
|
||||
|
||||
BASE_STAT_BOOSTER: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => {
|
||||
if (pregenArgs) {
|
||||
@ -872,91 +1072,91 @@ export const modifierTypes = {
|
||||
TM_GREAT: () => new TmModifierTypeGenerator(ModifierTier.GREAT),
|
||||
TM_ULTRA: () => new TmModifierTypeGenerator(ModifierTier.ULTRA),
|
||||
|
||||
MEMORY_MUSHROOM: () => new RememberMoveModifierType('Memory Mushroom', 'Recall one Pokémon\'s forgotten move', 'big_mushroom'),
|
||||
MEMORY_MUSHROOM: () => new RememberMoveModifierType(`${i18next.t("modifierType:MEMORY_MUSHROOM.name")}`, `${i18next.t("modifierType:MEMORY_MUSHROOM.description")}`, 'big_mushroom'),
|
||||
|
||||
EXP_SHARE: () => new ModifierType('EXP. All', 'Non-participants receive 20% of a single participant\'s EXP. Points.',
|
||||
EXP_SHARE: () => new ModifierType(`${i18next.t("modifierType:EXP_SHARE.name")}`, `${i18next.t("modifierType:EXP_SHARE.description")}`,
|
||||
(type, _args) => new Modifiers.ExpShareModifier(type), 'exp_share'),
|
||||
EXP_BALANCE: () => new ModifierType('EXP. Balance', 'Weighs EXP. Points received from battles towards lower-leveled party members',
|
||||
(type, _args) => new Modifiers.ExpBalanceModifier(type)),
|
||||
EXP_BALANCE: () => new ModifierType(`${i18next.t("modifierType:EXP_BALANCE.name")}`, `${i18next.t("modifierType:EXP_BALANCE.description")}`,
|
||||
(type, _args) => new Modifiers.ExpBalanceModifier(type), 'exp_balance'),
|
||||
|
||||
OVAL_CHARM: () => new ModifierType('Oval Charm', 'When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP.',
|
||||
(type, _args) => new Modifiers.MultipleParticipantExpBonusModifier(type)),
|
||||
OVAL_CHARM: () => new ModifierType(`${i18next.t("modifierType:OVAL_CHARM.name")}`, `${i18next.t("modifierType:OVAL_CHARM.description")}`,
|
||||
(type, _args) => new Modifiers.MultipleParticipantExpBonusModifier(type), "oval_charm"),
|
||||
|
||||
EXP_CHARM: () => new ExpBoosterModifierType('EXP. Charm', 25),
|
||||
SUPER_EXP_CHARM: () => new ExpBoosterModifierType('Super EXP. Charm', 60),
|
||||
GOLDEN_EXP_CHARM: () => new ExpBoosterModifierType('Golden EXP. Charm', 100),
|
||||
EXP_CHARM: () => new ExpBoosterModifierType('EXP_CHARM', 25, 'exp_charm'),
|
||||
SUPER_EXP_CHARM: () => new ExpBoosterModifierType('SUPER_EXP_CHARM', 60, 'super_exp_charm'),
|
||||
GOLDEN_EXP_CHARM: () => new ExpBoosterModifierType('GOLDEN_EXP_CHARM', 100, 'golden_exp_charm'),
|
||||
|
||||
LUCKY_EGG: () => new PokemonExpBoosterModifierType('Lucky Egg', 40),
|
||||
GOLDEN_EGG: () => new PokemonExpBoosterModifierType('Golden Egg', 100),
|
||||
LUCKY_EGG: () => new PokemonExpBoosterModifierType("LUCKY_EGG", 40, 'lucky_egg'),
|
||||
GOLDEN_EGG: () => new PokemonExpBoosterModifierType("GOLDEN_EGG", 100, 'golden_egg'),
|
||||
|
||||
SOOTHE_BELL: () => new PokemonFriendshipBoosterModifierType('Soothe Bell'),
|
||||
SOOTHE_BELL: () => new PokemonFriendshipBoosterModifierType(`${i18next.t("modifierType:SOOTHE_BELL.name")}`, 'soothe_bell'),
|
||||
|
||||
SOUL_DEW: () => new PokemonHeldItemModifierType('Soul Dew', 'Increases the influence of a Pokémon\'s nature on its stats by 10% (additive)', (type, args) => new Modifiers.PokemonNatureWeightModifier(type, (args[0] as Pokemon).id)),
|
||||
SOUL_DEW: () => new PokemonHeldItemModifierType("SOUL_DEW",`${i18next.t("modifierType:SOUL_DEW.description")}`, (type, args) => new Modifiers.PokemonNatureWeightModifier(type, (args[0] as Pokemon).id), "soul_dew"),
|
||||
|
||||
NUGGET: () => new MoneyRewardModifierType('Nugget', 1, 'small'),
|
||||
BIG_NUGGET: () => new MoneyRewardModifierType('Big Nugget', 2.5, 'moderate'),
|
||||
RELIC_GOLD: () => new MoneyRewardModifierType('Relic Gold', 10, 'large'),
|
||||
NUGGET: () => new MoneyRewardModifierType('NUGGET', 1, 'small'),
|
||||
BIG_NUGGET: () => new MoneyRewardModifierType('BIG_NUGGET', 2.5, 'moderate'),
|
||||
RELIC_GOLD: () => new MoneyRewardModifierType('RELIC_GOLD', 10, 'large'),
|
||||
|
||||
AMULET_COIN: () => new ModifierType('Amulet Coin', 'Increases money rewards by 20%', (type, _args) => new Modifiers.MoneyMultiplierModifier(type)),
|
||||
GOLDEN_PUNCH: () => new PokemonHeldItemModifierType('Golden Punch', 'Grants 50% of damage inflicted as money', (type, args) => new Modifiers.DamageMoneyRewardModifier(type, (args[0] as Pokemon).id)),
|
||||
COIN_CASE: () => new ModifierType('Coin Case', 'After every 10th battle, receive 10% of your money in interest.', (type, _args) => new Modifiers.MoneyInterestModifier(type)),
|
||||
AMULET_COIN: () => new ModifierType(`${i18next.t("modifierType:AMULET_COIN.name")}`,`${i18next.t("modifierType:AMULET_COIN.description")}`, (type, _args) => new Modifiers.MoneyMultiplierModifier(type), "amulet_coin"),
|
||||
GOLDEN_PUNCH: () => new PokemonHeldItemModifierType("GOLDEN_PUNCH",`${i18next.t("modifierType:GOLDEN_PUNCH.description")}`, (type, args) => new Modifiers.DamageMoneyRewardModifier(type, (args[0] as Pokemon).id), "golden_punch"),
|
||||
COIN_CASE: () => new ModifierType(`${i18next.t("modifierType:COIN_CASE.name")}`,`${i18next.t("modifierType:COIN_CASE.description")}`, (type, _args) => new Modifiers.MoneyInterestModifier(type), "coin_case"),
|
||||
|
||||
LOCK_CAPSULE: () => new ModifierType('Lock Capsule', 'Allows you to lock item rarities when rerolling items', (type, _args) => new Modifiers.LockModifierTiersModifier(type), 'lock_capsule'),
|
||||
LOCK_CAPSULE: () => new ModifierType(`${i18next.t("modifierType:LOCK_CAPSULE.name")}`,`${i18next.t("modifierType:LOCK_CAPSULE.description")}`, (type, _args) => new Modifiers.LockModifierTiersModifier(type), 'lock_capsule'),
|
||||
|
||||
GRIP_CLAW: () => new ContactHeldItemTransferChanceModifierType('Grip Claw', 10),
|
||||
WIDE_LENS: () => new PokemonMoveAccuracyBoosterModifierType('Wide Lens', 5, 'wide_lens'),
|
||||
GRIP_CLAW: () => new ContactHeldItemTransferChanceModifierType(`${i18next.t("modifierType:GRIP_CLAW.name")}`, 10, "grip_claw"),
|
||||
WIDE_LENS: () => new PokemonMoveAccuracyBoosterModifierType(`${i18next.t("modifierType:WIDE_LENS.name")}`, 5, 'wide_lens'),
|
||||
|
||||
MULTI_LENS: () => new PokemonMultiHitModifierType('Multi Lens', 'zoom_lens'),
|
||||
MULTI_LENS: () => new PokemonMultiHitModifierType(`${i18next.t("modifierType:MULTI_LENS.name")}`, 'zoom_lens'),
|
||||
|
||||
HEALING_CHARM: () => new ModifierType('Healing Charm', 'Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)',
|
||||
HEALING_CHARM: () => new ModifierType(`${i18next.t("modifierType:HEALING_CHARM.name")}`,`${i18next.t("modifierType:HEALING_CHARM.description")}`,
|
||||
(type, _args) => new Modifiers.HealingBoosterModifier(type, 1.1), 'healing_charm'),
|
||||
CANDY_JAR: () => new ModifierType('Candy Jar', 'Increases the number of levels added by Rare Candy items by 1', (type, _args) => new Modifiers.LevelIncrementBoosterModifier(type)),
|
||||
CANDY_JAR: () => new ModifierType(`${i18next.t("modifierType:CANDY_JAR.name")}`,`${i18next.t("modifierType:CANDY_JAR.description")}`, (type, _args) => new Modifiers.LevelIncrementBoosterModifier(type), "candy_jar"),
|
||||
|
||||
BERRY_POUCH: () => new ModifierType('Berry Pouch', 'Adds a 25% chance that a used berry will not be consumed',
|
||||
(type, _args) => new Modifiers.PreserveBerryModifier(type)),
|
||||
BERRY_POUCH: () => new ModifierType(`${i18next.t("modifierType:BERRY_POUCH.name")}`,`${i18next.t("modifierType:BERRY_POUCH.description")}`,
|
||||
(type, _args) => new Modifiers.PreserveBerryModifier(type), 'berry_pouch'),
|
||||
|
||||
FOCUS_BAND: () => new PokemonHeldItemModifierType('Focus Band', 'Adds a 10% chance to survive with 1 HP after being damaged enough to faint',
|
||||
(type, args) => new Modifiers.SurviveDamageModifier(type, (args[0] as Pokemon).id)),
|
||||
FOCUS_BAND: () => new PokemonHeldItemModifierType(`${i18next.t("modifierType:FOCUS_BAND.name")}`,`${i18next.t("modifierType:FOCUS_BAND.description")}`,
|
||||
(type, args) => new Modifiers.SurviveDamageModifier(type, (args[0] as Pokemon).id), 'focus_band'),
|
||||
|
||||
KINGS_ROCK: () => new PokemonHeldItemModifierType('King\'s Rock', 'Adds a 10% chance an attack move will cause the opponent to flinch',
|
||||
(type, args) => new Modifiers.FlinchChanceModifier(type, (args[0] as Pokemon).id)),
|
||||
KINGS_ROCK: () => new PokemonHeldItemModifierType("KINGS_ROCK",`${i18next.t("modifierType:KINGS_ROCK.description")}`,
|
||||
(type, args) => new Modifiers.FlinchChanceModifier(type, (args[0] as Pokemon).id), 'kings_rock'),
|
||||
|
||||
LEFTOVERS: () => new PokemonHeldItemModifierType('Leftovers', 'Heals 1/16 of a Pokémon\'s maximum HP every turn',
|
||||
(type, args) => new Modifiers.TurnHealModifier(type, (args[0] as Pokemon).id)),
|
||||
SHELL_BELL: () => new PokemonHeldItemModifierType('Shell Bell', 'Heals 1/8 of a Pokémon\'s dealt damage',
|
||||
(type, args) => new Modifiers.HitHealModifier(type, (args[0] as Pokemon).id)),
|
||||
LEFTOVERS: () => new PokemonHeldItemModifierType("LEFTOVERS",`${i18next.t("modifierType:LEFTOVERS.description")}`,
|
||||
(type, args) => new Modifiers.TurnHealModifier(type, (args[0] as Pokemon).id), 'leftovers'),
|
||||
SHELL_BELL: () => new PokemonHeldItemModifierType("SHELL_BELL",`${i18next.t("modifierType:SHELL_BELL.description")}`,
|
||||
(type, args) => new Modifiers.HitHealModifier(type, (args[0] as Pokemon).id), 'shell_bell'),
|
||||
|
||||
BATON: () => new PokemonHeldItemModifierType('Baton', 'Allows passing along effects when switching Pokémon, which also bypasses traps',
|
||||
BATON: () => new PokemonHeldItemModifierType("BATON",`${i18next.t("modifierType:BATON.description")}`,
|
||||
(type, args) => new Modifiers.SwitchEffectTransferModifier(type, (args[0] as Pokemon).id), 'stick'),
|
||||
|
||||
SHINY_CHARM: () => new ModifierType('Shiny Charm', 'Dramatically increases the chance of a wild Pokémon being Shiny', (type, _args) => new Modifiers.ShinyRateBoosterModifier(type)),
|
||||
ABILITY_CHARM: () => new ModifierType('Ability Charm', 'Dramatically increases the chance of a wild Pokémon having a Hidden Ability', (type, _args) => new Modifiers.HiddenAbilityRateBoosterModifier(type)),
|
||||
SHINY_CHARM: () => new ModifierType(`${i18next.t("modifierType:SHINY_CHARM.name")}`,`${i18next.t("modifierType:SHINY_CHARM.description")}`, (type, _args) => new Modifiers.ShinyRateBoosterModifier(type), 'shiny_charm'),
|
||||
ABILITY_CHARM: () => new ModifierType(`${i18next.t("modifierType:ABILITY_CHARM.name")}`,`${i18next.t("modifierType:ABILITY_CHARM.description")}`, (type, _args) => new Modifiers.HiddenAbilityRateBoosterModifier(type), 'ability_charm'),
|
||||
|
||||
IV_SCANNER: () => new ModifierType('IV Scanner', 'Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first.', (type, _args) => new Modifiers.IvScannerModifier(type), 'scanner'),
|
||||
IV_SCANNER: () => new ModifierType(`${i18next.t("modifierType:IV_SCANNER.name")}`,`${i18next.t("modifierType:IV_SCANNER.description")}`, (type, _args) => new Modifiers.IvScannerModifier(type), 'scanner'),
|
||||
|
||||
DNA_SPLICERS: () => new FusePokemonModifierType('DNA Splicers'),
|
||||
DNA_SPLICERS: () => new FusePokemonModifierType(`${i18next.t("modifierType:DNA_SPLICERS.name")}`, 'dna_splicers'),
|
||||
|
||||
MINI_BLACK_HOLE: () => new TurnHeldItemTransferModifierType('Mini Black Hole'),
|
||||
MINI_BLACK_HOLE: () => new TurnHeldItemTransferModifierType(`${i18next.t("modifierType:MINI_BLACK_HOLE.name")}`, 'mini_black_hole'),
|
||||
|
||||
VOUCHER: () => new AddVoucherModifierType(VoucherType.REGULAR, 1),
|
||||
VOUCHER_PLUS: () => new AddVoucherModifierType(VoucherType.PLUS, 1),
|
||||
VOUCHER_PREMIUM: () => new AddVoucherModifierType(VoucherType.PREMIUM, 1),
|
||||
|
||||
GOLDEN_POKEBALL: () => new ModifierType(`Golden ${getPokeballName(PokeballType.POKEBALL)}`, 'Adds 1 extra item option at the end of every battle',
|
||||
GOLDEN_POKEBALL: () => new ModifierType(`${i18next.t("modifierType:GOLDEN_POKEBALL.name")}`,`${i18next.t("modifierType:GOLDEN_POKEBALL.description")}`,
|
||||
(type, _args) => new Modifiers.ExtraModifierModifier(type), 'pb_gold', null, 'pb_bounce_1'),
|
||||
|
||||
ENEMY_DAMAGE_BOOSTER: () => new ModifierType('Damage Token', 'Increases damage by 5%', (type, _args) => new Modifiers.EnemyDamageBoosterModifier(type, 5), 'wl_item_drop'),
|
||||
ENEMY_DAMAGE_REDUCTION: () => new ModifierType('Protection Token', 'Reduces incoming damage by 2.5%', (type, _args) => new Modifiers.EnemyDamageReducerModifier(type, 2.5), 'wl_guard_spec'),
|
||||
ENEMY_DAMAGE_BOOSTER: () => new ModifierType(`${i18next.t("modifierType:DAMAGE_TOKEN.name")}`,`${i18next.t("modifierType:DAMAGE_TOKEN.description")}`, (type, _args) => new Modifiers.EnemyDamageBoosterModifier(type, 5), 'wl_item_drop'),
|
||||
ENEMY_DAMAGE_REDUCTION: () => new ModifierType(`${i18next.t("modifierType:PROTECTION_TOKEN.name")}`,`${i18next.t("modifierType:PROTECTION_TOKEN.description")}`, (type, _args) => new Modifiers.EnemyDamageReducerModifier(type, 2.5), 'wl_guard_spec'),
|
||||
//ENEMY_SUPER_EFFECT_BOOSTER: () => new ModifierType('Type Advantage Token', 'Increases damage of super effective attacks by 30%', (type, _args) => new Modifiers.EnemySuperEffectiveDamageBoosterModifier(type, 30), 'wl_custom_super_effective'),
|
||||
ENEMY_HEAL: () => new ModifierType('Recovery Token', 'Heals 3% of max HP every turn', (type, _args) => new Modifiers.EnemyTurnHealModifier(type, 3), 'wl_potion'),
|
||||
ENEMY_ATTACK_POISON_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType('Poison Token', 10, StatusEffect.POISON, 'wl_antidote'),
|
||||
ENEMY_ATTACK_PARALYZE_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType('Paralyze Token', 10, StatusEffect.PARALYSIS, 'wl_paralyze_heal'),
|
||||
ENEMY_ATTACK_SLEEP_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType('Sleep Token', 10, StatusEffect.SLEEP, 'wl_awakening'),
|
||||
ENEMY_ATTACK_FREEZE_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType('Freeze Token', 10, StatusEffect.FREEZE, 'wl_ice_heal'),
|
||||
ENEMY_ATTACK_BURN_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType('Burn Token', 10, StatusEffect.BURN, 'wl_burn_heal'),
|
||||
ENEMY_STATUS_EFFECT_HEAL_CHANCE: () => new ModifierType('Full Heal Token', 'Adds a 10% chance every turn to heal a status condition', (type, _args) => new Modifiers.EnemyStatusEffectHealChanceModifier(type, 10), 'wl_full_heal'),
|
||||
ENEMY_HEAL: () => new ModifierType(`${i18next.t("modifierType:RECOVERY_TOKEN.name")}`,`${i18next.t("modifierType:RECOVERY_TOKEN.description")}`, (type, _args) => new Modifiers.EnemyTurnHealModifier(type, 3), 'wl_potion'),
|
||||
ENEMY_ATTACK_POISON_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType(`${i18next.t("modifierType:POISON_TOKEN.name")}`, 10, StatusEffect.POISON, 'wl_antidote'),
|
||||
ENEMY_ATTACK_PARALYZE_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType(`${i18next.t("modifierType:PARALYZE_TOKEN.name")}`, 10, StatusEffect.PARALYSIS, 'wl_paralyze_heal'),
|
||||
ENEMY_ATTACK_SLEEP_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType(`${i18next.t("modifierType:SLEEP_TOKEN.name")}`, 10, StatusEffect.SLEEP, 'wl_awakening'),
|
||||
ENEMY_ATTACK_FREEZE_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType(`${i18next.t("modifierType:FREEZE_TOKEN.name")}`, 10, StatusEffect.FREEZE, 'wl_ice_heal'),
|
||||
ENEMY_ATTACK_BURN_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType(`${i18next.t("modifierType:BURN_TOKEN.name")}`, 10, StatusEffect.BURN, 'wl_burn_heal'),
|
||||
ENEMY_STATUS_EFFECT_HEAL_CHANCE: () => new ModifierType(`${i18next.t("modifierType:FULL_HEAL_TOKEN.name")}`,`${i18next.t("modifierType:FULL_HEAL_TOKEN.description")}`, (type, _args) => new Modifiers.EnemyStatusEffectHealChanceModifier(type, 10), 'wl_full_heal'),
|
||||
ENEMY_ENDURE_CHANCE: () => new EnemyEndureChanceModifierType('Endure Token', 2.5, 'wl_reset_urge'),
|
||||
ENEMY_FUSED_CHANCE: () => new ModifierType('Fusion Token', 'Adds a 1% chance that a wild Pokémon will be a fusion', (type, _args) => new Modifiers.EnemyFusionChanceModifier(type, 1), 'wl_custom_spliced'),
|
||||
ENEMY_FUSED_CHANCE: () => new ModifierType(`${i18next.t("modifierType:FUSION_TOKEN.name")}`,`${i18next.t("modifierType:FUSION_TOKEN.description")}`, (type, _args) => new Modifiers.EnemyFusionChanceModifier(type, 1), 'wl_custom_spliced'),
|
||||
};
|
||||
|
||||
interface ModifierPool {
|
||||
@ -1026,7 +1226,6 @@ const modifierPool: ModifierPool = {
|
||||
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3);
|
||||
return thresholdPartyMemberCount;
|
||||
}, 3),
|
||||
new WeightedModifierType(modifierTypes.DIRE_HIT, 4),
|
||||
new WeightedModifierType(modifierTypes.SUPER_LURE, 4),
|
||||
new WeightedModifierType(modifierTypes.NUGGET, 5),
|
||||
new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, (party: Pokemon[]) => {
|
||||
|
@ -20,6 +20,7 @@ import { PreventBerryUseAbAttr, applyAbAttrs } from '../data/ability';
|
||||
import { FormChangeItem, SpeciesFormChangeItemTrigger } from '../data/pokemon-forms';
|
||||
import { Nature } from '#app/data/nature';
|
||||
import { BattlerTagType } from '#app/data/enums/battler-tag-type';
|
||||
import i18next from 'i18next';
|
||||
|
||||
type ModifierType = ModifierTypes.ModifierType;
|
||||
export type ModifierPredicate = (modifier: Modifier) => boolean;
|
||||
@ -61,6 +62,8 @@ export class ModifierBar extends Phaser.GameObjects.Container {
|
||||
this.setModifierIconPosition(icon, visibleIconModifiers.length);
|
||||
icon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 32, 24), Phaser.Geom.Rectangle.Contains);
|
||||
icon.on('pointerover', () => {
|
||||
// For some reason i18next returns a undefined string or data type, so this is a lazy workaround, needs more investigation
|
||||
if(modifier.type?.name?.includes("undefined")) modifier.type.name = i18next.t(`modifierType:${modifier.type.id}`);
|
||||
(this.scene as BattleScene).ui.showTooltip(modifier.type.name, modifier.type.getDescription(this.scene as BattleScene));
|
||||
if (this.modifierCache && this.modifierCache.length > iconOverflowIndex)
|
||||
thisArg.updateModifierOverflowVisibility(true);
|
||||
|
@ -51,6 +51,19 @@ import { tutorial as frTutorial } from '../locales/fr/tutorial';
|
||||
import { tutorial as itTutorial} from '../locales/it/tutorial';
|
||||
import { tutorial as deTutorial } from '../locales/de/tutorial';
|
||||
|
||||
import { modifierType as enModifierType } from '../locales/en/modifier-type';
|
||||
import { modifierType as esModifierType } from '../locales/es/modifier-type';
|
||||
|
||||
import { modifier as enModifier } from '../locales/en/modifier';
|
||||
import { modifier as esModifier } from '../locales/es/modifier';
|
||||
|
||||
import { type as enType } from '../locales/en/type';
|
||||
|
||||
import { nature as enNature } from '../locales/en/nature';
|
||||
import { nature as esNature } from '../locales/es/nature';
|
||||
|
||||
import { berry as enBerry } from '../locales/en/berry';
|
||||
|
||||
export interface SimpleTranslationEntries {
|
||||
[key: string]: string
|
||||
}
|
||||
@ -74,6 +87,24 @@ export interface AbilityTranslationEntries {
|
||||
[key: string]: AbilityTranslationEntry
|
||||
}
|
||||
|
||||
export interface ModifierTypeTranslationEntry {
|
||||
name: string,
|
||||
description: string
|
||||
}
|
||||
|
||||
export interface ModifierTypeTranslationEntries {
|
||||
[key: string]: ModifierTypeTranslationEntry
|
||||
}
|
||||
|
||||
export interface BerryTranslationEntry {
|
||||
name: string,
|
||||
description: string
|
||||
}
|
||||
|
||||
export interface BerryTranslationEntries {
|
||||
[key: string]: BerryTranslationEntry
|
||||
}
|
||||
|
||||
export interface Localizable {
|
||||
localize(): void;
|
||||
}
|
||||
@ -120,6 +151,11 @@ export function initI18n(): void {
|
||||
commandUiHandler: enCommandUiHandler,
|
||||
fightUiHandler: enFightUiHandler,
|
||||
tutorial: enTutorial,
|
||||
modifierType: enModifierType,
|
||||
modifier: enModifier,
|
||||
type: enType,
|
||||
nature: enNature,
|
||||
berry: enBerry
|
||||
},
|
||||
es: {
|
||||
menu: esMenu,
|
||||
@ -131,6 +167,9 @@ export function initI18n(): void {
|
||||
pokemonStat: esPokemonStat,
|
||||
commandUiHandler: esCommandUiHandler,
|
||||
tutorial: esTutorial,
|
||||
modifierType: esModifierType,
|
||||
modifier: esModifier,
|
||||
nature: esNature
|
||||
},
|
||||
fr: {
|
||||
menu: frMenu,
|
||||
@ -179,6 +218,11 @@ declare module 'i18next' {
|
||||
commandUiHandler: typeof enCommandUiHandler;
|
||||
fightUiHandler: typeof enFightUiHandler;
|
||||
tutorial: typeof enTutorial;
|
||||
modifierType: typeof enModifierType;
|
||||
modifier: typeof enModifier;
|
||||
type: typeof enType;
|
||||
nature: typeof enNature;
|
||||
berry: typeof enBerry;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import i18next from "i18next";
|
||||
import BattleScene from "../battle-scene";
|
||||
import { TrainerType } from "../data/enums/trainer-type";
|
||||
import { ModifierTier } from "../modifier/modifier-tier";
|
||||
@ -52,13 +53,13 @@ export class Voucher {
|
||||
export function getVoucherTypeName(voucherType: VoucherType): string {
|
||||
switch (voucherType) {
|
||||
case VoucherType.REGULAR:
|
||||
return 'Egg Voucher';
|
||||
return i18next.t('modifierType:VOUCHER_REGULAR.name');
|
||||
case VoucherType.PLUS:
|
||||
return 'Egg Voucher Plus';
|
||||
return i18next.t('modifierType:VOUCHER_PLUS.name');
|
||||
case VoucherType.PREMIUM:
|
||||
return 'Egg Voucher Premium';
|
||||
return i18next.t('modifierType:VOUCHER_PREMIUM.name');
|
||||
case VoucherType.GOLDEN:
|
||||
return 'Egg Voucher Gold';
|
||||
return i18next.t('modifierType:VOUCHER_GOLDEN.name');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ import AwaitableUiHandler from "./awaitable-ui-handler";
|
||||
import { Mode } from "./ui";
|
||||
import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier";
|
||||
import { handleTutorial, Tutorial } from "../tutorial";
|
||||
import i18next from "i18next";
|
||||
|
||||
export const SHOP_OPTIONS_ROW_LIMIT = 6;
|
||||
|
||||
@ -283,7 +284,9 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler {
|
||||
this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 20, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? 6 : 22));
|
||||
else
|
||||
this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 16, (-this.scene.game.canvas.height / 12 - this.scene.game.canvas.height / 32) - (-16 + 28 * (this.rowCursor - (this.shopOptionsRows.length - 1))));
|
||||
ui.showText(options[this.cursor].modifierTypeOption.type.getDescription(this.scene));
|
||||
// For some reason i18next returns a undefined string or data type, so this is a lazy workaround, needs more investigation
|
||||
if(options[this.cursor].modifierTypeOption.type.getDescription(this.scene)?.includes("undefined")) options[this.cursor].modifierTypeOption.type.setDescription(i18next.t(`modifierType:${options[this.cursor].modifierTypeOption.type.id}.description`));
|
||||
ui.showText(options[this.cursor].modifierTypeOption.type.getDescription(this.scene) || i18next.t(`modifierType:${options[this.cursor].modifierTypeOption.type.id}.description`));
|
||||
} else if (!cursor) {
|
||||
this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? -72 : -60);
|
||||
ui.showText('Spend money to reroll your item options.');
|
||||
@ -455,8 +458,9 @@ class ModifierOption extends Phaser.GameObjects.Container {
|
||||
this.itemTint.setTintFill(Phaser.Display.Color.GetColor(255, 192, 255));
|
||||
this.itemContainer.add(this.itemTint);
|
||||
}
|
||||
|
||||
this.itemText = addTextObject(this.scene, 0, 35, this.modifierTypeOption.type.name, TextStyle.PARTY, { align: 'center' });
|
||||
// For some reason i18next returns a undefined string or data type, so this is a lazy workaround, needs more investigation
|
||||
if(this.modifierTypeOption.type?.name?.includes("undefined")) this.modifierTypeOption.type.name = i18next.t(`modifierType:${this.modifierTypeOption.type.id}.name`);
|
||||
this.itemText = addTextObject(this.scene, 0, 35, this.modifierTypeOption.type.name || i18next.t(`modifierType:${this.modifierTypeOption.type.id}.name`), TextStyle.PARTY, { align: 'center' });
|
||||
this.itemText.setOrigin(0.5, 0);
|
||||
this.itemText.setAlpha(0);
|
||||
this.itemText.setTint(getModifierTierTextTint(this.modifierTypeOption.type.tier));
|
||||
|
Loading…
Reference in New Issue
Block a user