mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-24 08:19:33 +02:00
Add other Pledge combo effects (untested)
This commit is contained in:
parent
b9afcbb6aa
commit
82d929d34e
@ -1027,6 +1027,47 @@ class FireGrassPledgeTag extends ArenaTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arena Tag implementing the "rainbow" effect from the combination
|
||||||
|
* of {@link https://bulbapedia.bulbagarden.net/wiki/Water_Pledge_(move) | Water Pledge}
|
||||||
|
* and {@link https://bulbapedia.bulbagarden.net/wiki/Fire_Pledge_(move) | Fire Pledge}.
|
||||||
|
* Doubles the secondary effect chance of moves from Pokemon on the
|
||||||
|
* given side of the field for 4 turns.
|
||||||
|
*/
|
||||||
|
class WaterFirePledgeTag extends ArenaTag {
|
||||||
|
constructor(sourceId: number, side: ArenaTagSide) {
|
||||||
|
super(ArenaTagType.WATER_FIRE_PLEDGE, 4, Moves.WATER_PLEDGE, sourceId, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
override onAdd(arena: Arena): void {
|
||||||
|
// "A rainbow appeared in the sky on your/the opposing team's side!"
|
||||||
|
arena.scene.queueMessage(i18next.t(`arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`));
|
||||||
|
}
|
||||||
|
|
||||||
|
override apply(arena: Arena, args: any[]): boolean {
|
||||||
|
const moveChance = args[0] as Utils.NumberHolder;
|
||||||
|
moveChance.value *= 2;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arena Tag implementing the "swamp" effect from the combination
|
||||||
|
* of {@link https://bulbapedia.bulbagarden.net/wiki/Grass_Pledge_(move) | Grass Pledge}
|
||||||
|
* and {@link https://bulbapedia.bulbagarden.net/wiki/Water_Pledge_(move) | Water Pledge}.
|
||||||
|
* Quarters the Speed of Pokemon on the given side of the field for 4 turns.
|
||||||
|
*/
|
||||||
|
class GrassWaterPledgeTag extends ArenaTag {
|
||||||
|
constructor(sourceId: number, side: ArenaTagSide) {
|
||||||
|
super(ArenaTagType.GRASS_WATER_PLEDGE, 4, Moves.GRASS_PLEDGE, sourceId, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
override onAdd(arena: Arena): void {
|
||||||
|
// "A swamp enveloped your/the opposing team!"
|
||||||
|
arena.scene.queueMessage(i18next.t(`arenaTag:grassWaterPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves | undefined, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null {
|
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves | undefined, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null {
|
||||||
switch (tagType) {
|
switch (tagType) {
|
||||||
case ArenaTagType.MIST:
|
case ArenaTagType.MIST:
|
||||||
@ -1078,6 +1119,10 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov
|
|||||||
return new ImprisonTag(sourceId, side);
|
return new ImprisonTag(sourceId, side);
|
||||||
case ArenaTagType.FIRE_GRASS_PLEDGE:
|
case ArenaTagType.FIRE_GRASS_PLEDGE:
|
||||||
return new FireGrassPledgeTag(sourceId, side);
|
return new FireGrassPledgeTag(sourceId, side);
|
||||||
|
case ArenaTagType.WATER_FIRE_PLEDGE:
|
||||||
|
return new WaterFirePledgeTag(sourceId, side);
|
||||||
|
case ArenaTagType.GRASS_WATER_PLEDGE:
|
||||||
|
return new GrassWaterPledgeTag(sourceId, side);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1027,7 +1027,14 @@ export class MoveEffectAttr extends MoveAttr {
|
|||||||
*/
|
*/
|
||||||
getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): integer {
|
getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): integer {
|
||||||
const moveChance = new Utils.NumberHolder(move.chance);
|
const moveChance = new Utils.NumberHolder(move.chance);
|
||||||
|
|
||||||
applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility);
|
applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility);
|
||||||
|
|
||||||
|
if (!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) {
|
||||||
|
const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY;
|
||||||
|
user.scene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, moveChance);
|
||||||
|
}
|
||||||
|
|
||||||
if (!selfEffect) {
|
if (!selfEffect) {
|
||||||
applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, target, user, null, null, false, moveChance);
|
applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, target, user, null, null, false, moveChance);
|
||||||
}
|
}
|
||||||
@ -8437,20 +8444,24 @@ export function initMoves() {
|
|||||||
.attr(CombinedPledgeTypeAttr)
|
.attr(CombinedPledgeTypeAttr)
|
||||||
.attr(CombinedPledgePowerAttr)
|
.attr(CombinedPledgePowerAttr)
|
||||||
.attr(CombinedPledgeStabBoostAttr)
|
.attr(CombinedPledgeStabBoostAttr)
|
||||||
|
.attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.FIRE_PLEDGE, true)
|
||||||
|
.attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.GRASS_PLEDGE)
|
||||||
.attr(BypassRedirectAttr), // technically incorrect, should only bypass Storm Drain/Lightning Rod
|
.attr(BypassRedirectAttr), // technically incorrect, should only bypass Storm Drain/Lightning Rod
|
||||||
new AttackMove(Moves.FIRE_PLEDGE, Type.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.FIRE_PLEDGE, Type.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5)
|
||||||
.attr(AwaitCombinedPledgeAttr)
|
.attr(AwaitCombinedPledgeAttr)
|
||||||
.attr(CombinedPledgeTypeAttr)
|
.attr(CombinedPledgeTypeAttr)
|
||||||
.attr(CombinedPledgePowerAttr)
|
.attr(CombinedPledgePowerAttr)
|
||||||
.attr(CombinedPledgeStabBoostAttr)
|
.attr(CombinedPledgeStabBoostAttr)
|
||||||
.attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.GRASS_PLEDGE, false)
|
.attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.GRASS_PLEDGE)
|
||||||
|
.attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.WATER_PLEDGE, true)
|
||||||
.attr(BypassRedirectAttr), // technically incorrect, should only bypass Storm Drain/Lightning Rod
|
.attr(BypassRedirectAttr), // technically incorrect, should only bypass Storm Drain/Lightning Rod
|
||||||
new AttackMove(Moves.GRASS_PLEDGE, Type.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5)
|
new AttackMove(Moves.GRASS_PLEDGE, Type.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5)
|
||||||
.attr(AwaitCombinedPledgeAttr)
|
.attr(AwaitCombinedPledgeAttr)
|
||||||
.attr(CombinedPledgeTypeAttr)
|
.attr(CombinedPledgeTypeAttr)
|
||||||
.attr(CombinedPledgePowerAttr)
|
.attr(CombinedPledgePowerAttr)
|
||||||
.attr(CombinedPledgeStabBoostAttr)
|
.attr(CombinedPledgeStabBoostAttr)
|
||||||
.attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.FIRE_PLEDGE, false)
|
.attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.WATER_PLEDGE)
|
||||||
|
.attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.FIRE_PLEDGE)
|
||||||
.attr(BypassRedirectAttr), // technically incorrect, should only bypass Storm Drain/Lightning Rod
|
.attr(BypassRedirectAttr), // technically incorrect, should only bypass Storm Drain/Lightning Rod
|
||||||
new AttackMove(Moves.VOLT_SWITCH, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5)
|
new AttackMove(Moves.VOLT_SWITCH, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5)
|
||||||
.attr(ForceSwitchOutAttr, true),
|
.attr(ForceSwitchOutAttr, true),
|
||||||
|
@ -920,11 +920,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Stat.SPD:
|
case Stat.SPD:
|
||||||
// Check both the player and enemy to see if Tailwind should be multiplying the speed of the Pokemon
|
const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY;
|
||||||
if ((this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER))
|
if (this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) {
|
||||||
|| (!this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY))) {
|
|
||||||
ret *= 2;
|
ret *= 2;
|
||||||
}
|
}
|
||||||
|
if (this.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) {
|
||||||
|
ret /= 4;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.getTag(BattlerTagType.SLOW_START)) {
|
if (this.getTag(BattlerTagType.SLOW_START)) {
|
||||||
ret >>= 1;
|
ret >>= 1;
|
||||||
|
@ -54,7 +54,14 @@
|
|||||||
"safeguardOnRemove": "The field is no longer protected by Safeguard!",
|
"safeguardOnRemove": "The field is no longer protected by Safeguard!",
|
||||||
"safeguardOnRemovePlayer": "Your team is no longer protected by Safeguard!",
|
"safeguardOnRemovePlayer": "Your team is no longer protected by Safeguard!",
|
||||||
"safeguardOnRemoveEnemy": "The opposing team is no longer protected by Safeguard!",
|
"safeguardOnRemoveEnemy": "The opposing team is no longer protected by Safeguard!",
|
||||||
|
"fireGrassPledgeOnAdd": "A sea of fire enveloped the field!",
|
||||||
"fireGrassPledgeOnAddPlayer": "A sea of fire enveloped your team!",
|
"fireGrassPledgeOnAddPlayer": "A sea of fire enveloped your team!",
|
||||||
"fireGrassPledgeOnAddEnemy": "A sea of fire enveloped the opposing team!",
|
"fireGrassPledgeOnAddEnemy": "A sea of fire enveloped the opposing team!",
|
||||||
"fireGrassPledgeLapse": "{{pokemonNameWithAffix}} was hurt by the sea of fire!"
|
"fireGrassPledgeLapse": "{{pokemonNameWithAffix}} was hurt by the sea of fire!",
|
||||||
|
"waterFirePledgeOnAdd": "A rainbow appeared in the sky!",
|
||||||
|
"waterFirePledgeOnAddPlayer": "A rainbow appeared in the sky on your team's side!",
|
||||||
|
"waterFirePledgeOnAddEnemy": "A rainbow appeared in the sky on the opposing team's side!",
|
||||||
|
"grassWaterPledgeOnAdd": "A swamp enveloped the field!",
|
||||||
|
"grassWaterPledgeOnAddPlayer": "A swamp enveloped your team!",
|
||||||
|
"grassWaterPledgeOnAddEnemy": "A swamp enveloped the opposing team!"
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user