@pkmn/sim 0.9.30 → 0.9.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/config/formats.js +58 -43
- package/build/cjs/config/formats.js.map +1 -1
- package/build/cjs/data/abilities.js +41 -41
- package/build/cjs/data/abilities.js.map +1 -1
- package/build/cjs/data/aliases.js +2 -2
- package/build/cjs/data/aliases.js.map +1 -1
- package/build/cjs/data/conditions.js +20 -20
- package/build/cjs/data/conditions.js.map +1 -1
- package/build/cjs/data/formats-data.js +1 -1
- package/build/cjs/data/items.js +5 -5
- package/build/cjs/data/items.js.map +1 -1
- package/build/cjs/data/mods/gen1/conditions.js +1 -2
- package/build/cjs/data/mods/gen1/conditions.js.map +1 -1
- package/build/cjs/data/mods/gen1/moves.js +2 -2
- package/build/cjs/data/mods/gen1/moves.js.map +1 -1
- package/build/cjs/data/mods/gen1/pokedex.js.map +1 -1
- package/build/cjs/data/mods/gen1/scripts.js +6 -6
- package/build/cjs/data/mods/gen1/scripts.js.map +1 -1
- package/build/cjs/data/mods/gen2/conditions.js +2 -2
- package/build/cjs/data/mods/gen2/conditions.js.map +1 -1
- package/build/cjs/data/mods/gen2/moves.js +3 -3
- package/build/cjs/data/mods/gen2/moves.js.map +1 -1
- package/build/cjs/data/mods/gen2/rulesets.js.map +1 -1
- package/build/cjs/data/mods/gen2/scripts.js +2 -2
- package/build/cjs/data/mods/gen2/scripts.js.map +1 -1
- package/build/cjs/data/mods/gen3/abilities.js +1 -1
- package/build/cjs/data/mods/gen3/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen3/conditions.js +1 -1
- package/build/cjs/data/mods/gen3/conditions.js.map +1 -1
- package/build/cjs/data/mods/gen3/moves.js +5 -5
- package/build/cjs/data/mods/gen3/moves.js.map +1 -1
- package/build/cjs/data/mods/gen3/scripts.js +2 -2
- package/build/cjs/data/mods/gen3/scripts.js.map +1 -1
- package/build/cjs/data/mods/gen4/abilities.js +4 -4
- package/build/cjs/data/mods/gen4/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen4/conditions.js +1 -1
- package/build/cjs/data/mods/gen4/conditions.js.map +1 -1
- package/build/cjs/data/mods/gen4/items.js +2 -2
- package/build/cjs/data/mods/gen4/items.js.map +1 -1
- package/build/cjs/data/mods/gen4/moves.js +22 -22
- package/build/cjs/data/mods/gen4/moves.js.map +1 -1
- package/build/cjs/data/mods/gen4/scripts.js +1 -1
- package/build/cjs/data/mods/gen4/scripts.js.map +1 -1
- package/build/cjs/data/mods/gen5/abilities.js +1 -1
- package/build/cjs/data/mods/gen5/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen5/conditions.js +2 -2
- package/build/cjs/data/mods/gen5/conditions.js.map +1 -1
- package/build/cjs/data/mods/gen5/moves.js +6 -6
- package/build/cjs/data/mods/gen5/moves.js.map +1 -1
- package/build/cjs/data/mods/gen5/pokedex.js.map +1 -1
- package/build/cjs/data/mods/gen6/abilities.js +2 -2
- package/build/cjs/data/mods/gen6/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen6/moves.js +1 -1
- package/build/cjs/data/mods/gen6/moves.js.map +1 -1
- package/build/cjs/data/mods/gen6/pokedex.js.map +1 -1
- package/build/cjs/data/mods/gen7/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen7/moves.js +8 -8
- package/build/cjs/data/mods/gen7/moves.js.map +1 -1
- package/build/cjs/data/mods/gen7/pokedex.js.map +1 -1
- package/build/cjs/data/mods/gen8/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen8/moves.js.map +1 -1
- package/build/cjs/data/mods/gen8/pokedex.js.map +1 -1
- package/build/cjs/data/moves.js +105 -103
- package/build/cjs/data/moves.js.map +1 -1
- package/build/cjs/data/pokedex.js.map +1 -1
- package/build/cjs/data/pokemongo.js.map +1 -1
- package/build/cjs/data/rulesets.js +0 -1
- package/build/cjs/data/rulesets.js.map +1 -1
- package/build/cjs/data/tags.js.map +1 -1
- package/build/cjs/data/text/abilities.js.map +1 -1
- package/build/cjs/data/text/default.js.map +1 -1
- package/build/cjs/data/text/items.js.map +1 -1
- package/build/cjs/data/text/moves.js.map +1 -1
- package/build/cjs/data/typechart.js.map +1 -1
- package/build/cjs/lib/utils.d.ts +5 -5
- package/build/cjs/lib/utils.js +21 -11
- package/build/cjs/lib/utils.js.map +1 -1
- package/build/cjs/sim/battle-actions.js +8 -8
- package/build/cjs/sim/battle-actions.js.map +1 -1
- package/build/cjs/sim/battle-queue.js +0 -1
- package/build/cjs/sim/battle-queue.js.map +1 -1
- package/build/cjs/sim/battle-stream.d.ts +3 -2
- package/build/cjs/sim/battle-stream.js +1 -1
- package/build/cjs/sim/battle-stream.js.map +1 -1
- package/build/cjs/sim/battle.d.ts +8 -8
- package/build/cjs/sim/battle.js +41 -44
- package/build/cjs/sim/battle.js.map +1 -1
- package/build/cjs/sim/dex-abilities.js.map +1 -1
- package/build/cjs/sim/dex-conditions.js +2 -2
- package/build/cjs/sim/dex-conditions.js.map +1 -1
- package/build/cjs/sim/dex-data.js +1 -1
- package/build/cjs/sim/dex-data.js.map +1 -1
- package/build/cjs/sim/dex-formats.d.ts +1 -0
- package/build/cjs/sim/dex-formats.js +95 -37
- package/build/cjs/sim/dex-formats.js.map +1 -1
- package/build/cjs/sim/dex-items.js.map +1 -1
- package/build/cjs/sim/dex-moves.js +2 -3
- package/build/cjs/sim/dex-moves.js.map +1 -1
- package/build/cjs/sim/exported-global-types.d.ts +1 -9
- package/build/cjs/sim/field.d.ts +1 -1
- package/build/cjs/sim/field.js +3 -3
- package/build/cjs/sim/field.js.map +1 -1
- package/build/cjs/sim/global-types.d.ts +1 -9
- package/build/cjs/sim/pokemon.d.ts +14 -25
- package/build/cjs/sim/pokemon.js +21 -22
- package/build/cjs/sim/pokemon.js.map +1 -1
- package/build/cjs/sim/side.d.ts +105 -11
- package/build/cjs/sim/side.js +6 -6
- package/build/cjs/sim/side.js.map +1 -1
- package/build/cjs/sim/state.d.ts +1 -1
- package/build/cjs/sim/state.js +3 -3
- package/build/cjs/sim/state.js.map +1 -1
- package/build/cjs/sim/team-validator.d.ts +2 -1
- package/build/cjs/sim/team-validator.js +37 -27
- package/build/cjs/sim/team-validator.js.map +1 -1
- package/build/cjs/sim/tools/random-player-ai.d.ts +4 -3
- package/build/cjs/sim/tools/random-player-ai.js +6 -7
- package/build/cjs/sim/tools/random-player-ai.js.map +1 -1
- package/build/cjs/sim/tools/runner.d.ts +2 -2
- package/build/cjs/sim/tools/runner.js +1 -1
- package/build/cjs/sim/tools/runner.js.map +1 -1
- package/build/esm/config/formats.mjs +58 -43
- package/build/esm/config/formats.mjs.map +1 -1
- package/build/esm/data/abilities.mjs +41 -41
- package/build/esm/data/abilities.mjs.map +1 -1
- package/build/esm/data/aliases.mjs +2 -2
- package/build/esm/data/aliases.mjs.map +1 -1
- package/build/esm/data/conditions.mjs +20 -20
- package/build/esm/data/conditions.mjs.map +1 -1
- package/build/esm/data/formats-data.mjs +1 -1
- package/build/esm/data/items.mjs +5 -5
- package/build/esm/data/items.mjs.map +1 -1
- package/build/esm/data/mods/gen1/conditions.mjs +1 -2
- package/build/esm/data/mods/gen1/conditions.mjs.map +1 -1
- package/build/esm/data/mods/gen1/moves.mjs +2 -2
- package/build/esm/data/mods/gen1/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen1/pokedex.mjs.map +1 -1
- package/build/esm/data/mods/gen1/scripts.mjs +6 -6
- package/build/esm/data/mods/gen1/scripts.mjs.map +1 -1
- package/build/esm/data/mods/gen2/conditions.mjs +2 -2
- package/build/esm/data/mods/gen2/conditions.mjs.map +1 -1
- package/build/esm/data/mods/gen2/moves.mjs +3 -3
- package/build/esm/data/mods/gen2/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen2/rulesets.mjs.map +1 -1
- package/build/esm/data/mods/gen2/scripts.mjs +2 -2
- package/build/esm/data/mods/gen2/scripts.mjs.map +1 -1
- package/build/esm/data/mods/gen3/abilities.mjs +1 -1
- package/build/esm/data/mods/gen3/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen3/conditions.mjs +1 -1
- package/build/esm/data/mods/gen3/conditions.mjs.map +1 -1
- package/build/esm/data/mods/gen3/moves.mjs +5 -5
- package/build/esm/data/mods/gen3/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen3/scripts.mjs +2 -2
- package/build/esm/data/mods/gen3/scripts.mjs.map +1 -1
- package/build/esm/data/mods/gen4/abilities.mjs +4 -4
- package/build/esm/data/mods/gen4/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen4/conditions.mjs +1 -1
- package/build/esm/data/mods/gen4/conditions.mjs.map +1 -1
- package/build/esm/data/mods/gen4/items.mjs +2 -2
- package/build/esm/data/mods/gen4/items.mjs.map +1 -1
- package/build/esm/data/mods/gen4/moves.mjs +22 -22
- package/build/esm/data/mods/gen4/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen4/scripts.mjs +1 -1
- package/build/esm/data/mods/gen4/scripts.mjs.map +1 -1
- package/build/esm/data/mods/gen5/abilities.mjs +1 -1
- package/build/esm/data/mods/gen5/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen5/conditions.mjs +2 -2
- package/build/esm/data/mods/gen5/conditions.mjs.map +1 -1
- package/build/esm/data/mods/gen5/moves.mjs +6 -6
- package/build/esm/data/mods/gen5/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen5/pokedex.mjs.map +1 -1
- package/build/esm/data/mods/gen6/abilities.mjs +2 -2
- package/build/esm/data/mods/gen6/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen6/moves.mjs +1 -1
- package/build/esm/data/mods/gen6/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen6/pokedex.mjs.map +1 -1
- package/build/esm/data/mods/gen7/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen7/moves.mjs +8 -8
- package/build/esm/data/mods/gen7/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen7/pokedex.mjs.map +1 -1
- package/build/esm/data/mods/gen8/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen8/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen8/pokedex.mjs.map +1 -1
- package/build/esm/data/moves.mjs +105 -103
- package/build/esm/data/moves.mjs.map +1 -1
- package/build/esm/data/pokedex.mjs.map +1 -1
- package/build/esm/data/pokemongo.mjs.map +1 -1
- package/build/esm/data/rulesets.mjs +0 -1
- package/build/esm/data/rulesets.mjs.map +1 -1
- package/build/esm/data/tags.mjs.map +1 -1
- package/build/esm/data/text/abilities.mjs.map +1 -1
- package/build/esm/data/text/default.mjs.map +1 -1
- package/build/esm/data/text/items.mjs.map +1 -1
- package/build/esm/data/text/moves.mjs.map +1 -1
- package/build/esm/data/typechart.mjs.map +1 -1
- package/build/esm/lib/utils.d.mts +5 -5
- package/build/esm/lib/utils.mjs +21 -11
- package/build/esm/lib/utils.mjs.map +1 -1
- package/build/esm/sim/battle-actions.mjs +8 -8
- package/build/esm/sim/battle-actions.mjs.map +1 -1
- package/build/esm/sim/battle-queue.mjs +0 -1
- package/build/esm/sim/battle-queue.mjs.map +1 -1
- package/build/esm/sim/battle-stream.d.mts +3 -2
- package/build/esm/sim/battle-stream.mjs +1 -1
- package/build/esm/sim/battle-stream.mjs.map +1 -1
- package/build/esm/sim/battle.d.mts +8 -8
- package/build/esm/sim/battle.mjs +41 -44
- package/build/esm/sim/battle.mjs.map +1 -1
- package/build/esm/sim/dex-abilities.mjs.map +1 -1
- package/build/esm/sim/dex-conditions.mjs +2 -2
- package/build/esm/sim/dex-conditions.mjs.map +1 -1
- package/build/esm/sim/dex-data.mjs +1 -1
- package/build/esm/sim/dex-data.mjs.map +1 -1
- package/build/esm/sim/dex-formats.d.mts +1 -0
- package/build/esm/sim/dex-formats.mjs +95 -37
- package/build/esm/sim/dex-formats.mjs.map +1 -1
- package/build/esm/sim/dex-items.mjs.map +1 -1
- package/build/esm/sim/dex-moves.mjs +2 -3
- package/build/esm/sim/dex-moves.mjs.map +1 -1
- package/build/esm/sim/exported-global-types.d.mts +1 -9
- package/build/esm/sim/field.d.mts +1 -1
- package/build/esm/sim/field.mjs +3 -3
- package/build/esm/sim/field.mjs.map +1 -1
- package/build/esm/sim/global-types.d.mts +1 -9
- package/build/esm/sim/pokemon.d.mts +14 -25
- package/build/esm/sim/pokemon.mjs +21 -22
- package/build/esm/sim/pokemon.mjs.map +1 -1
- package/build/esm/sim/side.d.mts +105 -11
- package/build/esm/sim/side.mjs +6 -6
- package/build/esm/sim/side.mjs.map +1 -1
- package/build/esm/sim/state.d.mts +1 -1
- package/build/esm/sim/state.mjs +3 -3
- package/build/esm/sim/state.mjs.map +1 -1
- package/build/esm/sim/team-validator.d.mts +2 -1
- package/build/esm/sim/team-validator.mjs +37 -27
- package/build/esm/sim/team-validator.mjs.map +1 -1
- package/build/esm/sim/tools/random-player-ai.d.mts +4 -3
- package/build/esm/sim/tools/random-player-ai.mjs +6 -7
- package/build/esm/sim/tools/random-player-ai.mjs.map +1 -1
- package/build/esm/sim/tools/runner.d.mts +2 -2
- package/build/esm/sim/tools/runner.mjs +1 -1
- package/build/esm/sim/tools/runner.mjs.map +1 -1
- package/package.json +1 -1
package/build/cjs/sim/battle.js
CHANGED
|
@@ -352,7 +352,7 @@ class Battle {
|
|
|
352
352
|
if (!(handler.state?.isSlotCondition))
|
|
353
353
|
continue;
|
|
354
354
|
}
|
|
355
|
-
if (eventid === 'Residual' && handler.end && handler.state
|
|
355
|
+
if (eventid === 'Residual' && handler.end && handler.state?.duration) {
|
|
356
356
|
handler.state.duration--;
|
|
357
357
|
if (!handler.state.duration) {
|
|
358
358
|
const endCallArgs = handler.endCallArgs || [handler.effectHolder, effect.id];
|
|
@@ -568,7 +568,6 @@ class Battle {
|
|
|
568
568
|
if (onEffect) {
|
|
569
569
|
if (!sourceEffect)
|
|
570
570
|
throw new Error("onEffect passed without an effect");
|
|
571
|
-
// @ts-ignore - dynamic lookup
|
|
572
571
|
const callback = sourceEffect[`on${eventid}`];
|
|
573
572
|
if (callback !== undefined) {
|
|
574
573
|
if (Array.isArray(target))
|
|
@@ -737,11 +736,8 @@ class Battle {
|
|
|
737
736
|
}
|
|
738
737
|
resolvePriority(h, callbackName) {
|
|
739
738
|
const handler = h;
|
|
740
|
-
// @ts-ignore
|
|
741
739
|
handler.order = handler.effect[`${callbackName}Order`] || false;
|
|
742
|
-
// @ts-ignore
|
|
743
740
|
handler.priority = handler.effect[`${callbackName}Priority`] || 0;
|
|
744
|
-
// @ts-ignore
|
|
745
741
|
handler.subOrder = handler.effect[`${callbackName}SubOrder`] || 0;
|
|
746
742
|
if (!handler.subOrder) {
|
|
747
743
|
// https://www.smogon.com/forums/threads/sword-shield-battle-mechanics-research.3655528/page-59#post-8685465
|
|
@@ -810,7 +806,7 @@ class Battle {
|
|
|
810
806
|
let handlers = [];
|
|
811
807
|
if (Array.isArray(target)) {
|
|
812
808
|
for (const [i, pokemon] of target.entries()) {
|
|
813
|
-
// console.log(`Event: ${eventName}, Target: ${
|
|
809
|
+
// console.log(`Event: ${eventName}, Target: ${pokemon}, ${i}`);
|
|
814
810
|
const curHandlers = this.findEventHandlers(pokemon, eventName, source);
|
|
815
811
|
for (const handler of curHandlers) {
|
|
816
812
|
handler.target = pokemon; // Original "effectHolder"
|
|
@@ -860,7 +856,7 @@ class Battle {
|
|
|
860
856
|
findPokemonEventHandlers(pokemon, callbackName, getKey) {
|
|
861
857
|
const handlers = [];
|
|
862
858
|
const status = pokemon.getStatus();
|
|
863
|
-
// @ts-
|
|
859
|
+
// @ts-expect-error dynamic lookup
|
|
864
860
|
let callback = status[callbackName];
|
|
865
861
|
if (callback !== undefined || (getKey && pokemon.statusState[getKey])) {
|
|
866
862
|
handlers.push(this.resolvePriority({
|
|
@@ -870,7 +866,7 @@ class Battle {
|
|
|
870
866
|
for (const id in pokemon.volatiles) {
|
|
871
867
|
const volatileState = pokemon.volatiles[id];
|
|
872
868
|
const volatile = this.dex.conditions.getByID(id);
|
|
873
|
-
// @ts-
|
|
869
|
+
// @ts-expect-error dynamic lookup
|
|
874
870
|
callback = volatile[callbackName];
|
|
875
871
|
if (callback !== undefined || (getKey && volatileState[getKey])) {
|
|
876
872
|
handlers.push(this.resolvePriority({
|
|
@@ -879,7 +875,7 @@ class Battle {
|
|
|
879
875
|
}
|
|
880
876
|
else if (['ability', 'item'].includes(volatile.id.split(':')[0])) {
|
|
881
877
|
// Innate abilities/items; see comment below
|
|
882
|
-
// @ts-
|
|
878
|
+
// @ts-expect-error dynamic lookup
|
|
883
879
|
if (this.gen >= 5 && callbackName === 'onSwitchIn' && !volatile.onAnySwitchIn) {
|
|
884
880
|
callback = volatile.onStart;
|
|
885
881
|
if (callback !== undefined || (getKey && volatileState[getKey])) {
|
|
@@ -894,16 +890,16 @@ class Battle {
|
|
|
894
890
|
// during the SwitchIn event instead of running the Start event during switch-ins
|
|
895
891
|
// gens 4 and before still use the old system, though
|
|
896
892
|
const ability = pokemon.getAbility();
|
|
897
|
-
// @ts-
|
|
893
|
+
// @ts-expect-error dynamic lookup
|
|
898
894
|
callback = ability[callbackName];
|
|
899
895
|
if (callback !== undefined || (getKey && pokemon.abilityState[getKey])) {
|
|
900
896
|
handlers.push(this.resolvePriority({
|
|
901
897
|
effect: ability, callback, state: pokemon.abilityState, end: pokemon.clearAbility, effectHolder: pokemon,
|
|
902
898
|
}, callbackName));
|
|
903
|
-
// @ts-
|
|
899
|
+
// @ts-expect-error dynamic lookup
|
|
904
900
|
}
|
|
905
901
|
else if (this.gen >= 5 && callbackName === 'onSwitchIn' && !ability.onAnySwitchIn) {
|
|
906
|
-
// @ts-
|
|
902
|
+
// @ts-expect-error dynamic lookup
|
|
907
903
|
callback = ability.onStart;
|
|
908
904
|
if (callback !== undefined || (getKey && pokemon.abilityState[getKey])) {
|
|
909
905
|
handlers.push(this.resolvePriority({
|
|
@@ -912,16 +908,15 @@ class Battle {
|
|
|
912
908
|
}
|
|
913
909
|
}
|
|
914
910
|
const item = pokemon.getItem();
|
|
915
|
-
// @ts-
|
|
911
|
+
// @ts-expect-error dynamic lookup
|
|
916
912
|
callback = item[callbackName];
|
|
917
913
|
if (callback !== undefined || (getKey && pokemon.itemState[getKey])) {
|
|
918
914
|
handlers.push(this.resolvePriority({
|
|
919
915
|
effect: item, callback, state: pokemon.itemState, end: pokemon.clearItem, effectHolder: pokemon,
|
|
920
916
|
}, callbackName));
|
|
921
|
-
// @ts-
|
|
917
|
+
// @ts-expect-error dynamic lookup
|
|
922
918
|
}
|
|
923
919
|
else if (this.gen >= 5 && callbackName === 'onSwitchIn' && !item.onAnySwitchIn) {
|
|
924
|
-
// @ts-ignore - dynamic lookup
|
|
925
920
|
callback = item.onStart;
|
|
926
921
|
if (callback !== undefined || (getKey && pokemon.itemState[getKey])) {
|
|
927
922
|
handlers.push(this.resolvePriority({
|
|
@@ -930,7 +925,7 @@ class Battle {
|
|
|
930
925
|
}
|
|
931
926
|
}
|
|
932
927
|
const species = pokemon.baseSpecies;
|
|
933
|
-
// @ts-
|
|
928
|
+
// @ts-expect-error dynamic lookup
|
|
934
929
|
callback = species[callbackName];
|
|
935
930
|
if (callback !== undefined) {
|
|
936
931
|
handlers.push(this.resolvePriority({
|
|
@@ -941,7 +936,7 @@ class Battle {
|
|
|
941
936
|
for (const conditionid in side.slotConditions[pokemon.position]) {
|
|
942
937
|
const slotConditionState = side.slotConditions[pokemon.position][conditionid];
|
|
943
938
|
const slotCondition = this.dex.conditions.getByID(conditionid);
|
|
944
|
-
// @ts-
|
|
939
|
+
// @ts-expect-error dynamic lookup
|
|
945
940
|
callback = slotCondition[callbackName];
|
|
946
941
|
if (callback !== undefined || (getKey && slotConditionState[getKey])) {
|
|
947
942
|
handlers.push(this.resolvePriority({
|
|
@@ -960,7 +955,7 @@ class Battle {
|
|
|
960
955
|
const handlers = [];
|
|
961
956
|
let callback;
|
|
962
957
|
const format = this.format;
|
|
963
|
-
// @ts-
|
|
958
|
+
// @ts-expect-error dynamic lookup
|
|
964
959
|
callback = format[callbackName];
|
|
965
960
|
if (callback !== undefined || (getKey && this.formatData[getKey])) {
|
|
966
961
|
handlers.push(this.resolvePriority({
|
|
@@ -984,7 +979,7 @@ class Battle {
|
|
|
984
979
|
for (const id in field.pseudoWeather) {
|
|
985
980
|
const pseudoWeatherState = field.pseudoWeather[id];
|
|
986
981
|
const pseudoWeather = this.dex.conditions.getByID(id);
|
|
987
|
-
// @ts-
|
|
982
|
+
// @ts-expect-error dynamic lookup
|
|
988
983
|
callback = pseudoWeather[callbackName];
|
|
989
984
|
if (callback !== undefined || (getKey && pseudoWeatherState[getKey])) {
|
|
990
985
|
handlers.push(this.resolvePriority({
|
|
@@ -994,7 +989,7 @@ class Battle {
|
|
|
994
989
|
}
|
|
995
990
|
}
|
|
996
991
|
const weather = field.getWeather();
|
|
997
|
-
// @ts-
|
|
992
|
+
// @ts-expect-error dynamic lookup
|
|
998
993
|
callback = weather[callbackName];
|
|
999
994
|
if (callback !== undefined || (getKey && this.field.weatherState[getKey])) {
|
|
1000
995
|
handlers.push(this.resolvePriority({
|
|
@@ -1003,7 +998,7 @@ class Battle {
|
|
|
1003
998
|
}, callbackName));
|
|
1004
999
|
}
|
|
1005
1000
|
const terrain = field.getTerrain();
|
|
1006
|
-
// @ts-
|
|
1001
|
+
// @ts-expect-error dynamic lookup
|
|
1007
1002
|
callback = terrain[callbackName];
|
|
1008
1003
|
if (callback !== undefined || (getKey && field.terrainState[getKey])) {
|
|
1009
1004
|
handlers.push(this.resolvePriority({
|
|
@@ -1018,7 +1013,7 @@ class Battle {
|
|
|
1018
1013
|
for (const id in side.sideConditions) {
|
|
1019
1014
|
const sideConditionData = side.sideConditions[id];
|
|
1020
1015
|
const sideCondition = this.dex.conditions.getByID(id);
|
|
1021
|
-
// @ts-
|
|
1016
|
+
// @ts-expect-error dynamic lookup
|
|
1022
1017
|
const callback = sideCondition[callbackName];
|
|
1023
1018
|
if (callback !== undefined || (getKey && sideConditionData[getKey])) {
|
|
1024
1019
|
handlers.push(this.resolvePriority({
|
|
@@ -1144,7 +1139,7 @@ class Battle {
|
|
|
1144
1139
|
// the entire team order, unlike `pickedTeamSize = undefined` which
|
|
1145
1140
|
// will only ask the user to select their lead(s).
|
|
1146
1141
|
const pickedTeamSize = this.ruleTable.pickedTeamSize;
|
|
1147
|
-
this.add(
|
|
1142
|
+
this.add(`teampreview${pickedTeamSize ? `|${pickedTeamSize}` : ''}`);
|
|
1148
1143
|
}
|
|
1149
1144
|
const requests = this.getRequests(type);
|
|
1150
1145
|
for (let i = 0; i < this.sides.length; i++) {
|
|
@@ -1837,10 +1832,10 @@ class Battle {
|
|
|
1837
1832
|
this.add('-damage', target, target.getHealth);
|
|
1838
1833
|
}
|
|
1839
1834
|
else if (source && (source !== target || effect.effectType === 'Ability')) {
|
|
1840
|
-
this.add('-damage', target, target.getHealth,
|
|
1835
|
+
this.add('-damage', target, target.getHealth, `[from] ${name}`, `[of] ${source}`);
|
|
1841
1836
|
}
|
|
1842
1837
|
else {
|
|
1843
|
-
this.add('-damage', target, target.getHealth,
|
|
1838
|
+
this.add('-damage', target, target.getHealth, `[from] ${name}`);
|
|
1844
1839
|
}
|
|
1845
1840
|
break;
|
|
1846
1841
|
}
|
|
@@ -1869,7 +1864,7 @@ class Battle {
|
|
|
1869
1864
|
if (!retVals[i] || !target)
|
|
1870
1865
|
continue;
|
|
1871
1866
|
if (target.hp <= 0) {
|
|
1872
|
-
this.debug(
|
|
1867
|
+
this.debug(`instafaint: ${this.faintQueue.map(entry => entry.target.name)}`);
|
|
1873
1868
|
this.faintMessages(true);
|
|
1874
1869
|
if (this.gen <= 2) {
|
|
1875
1870
|
target.faint();
|
|
@@ -1877,7 +1872,7 @@ class Battle {
|
|
|
1877
1872
|
this.queue.clear();
|
|
1878
1873
|
// Fainting clears accumulated Bide damage
|
|
1879
1874
|
for (const pokemon of this.getAllActive()) {
|
|
1880
|
-
if (pokemon.volatiles['bide']
|
|
1875
|
+
if (pokemon.volatiles['bide']?.damage) {
|
|
1881
1876
|
pokemon.volatiles['bide'].damage = 0;
|
|
1882
1877
|
this.hint("Desync Clause Mod activated!");
|
|
1883
1878
|
this.hint("In Gen 1, Bide's accumulated damage is reset to 0 when a Pokemon faints.");
|
|
@@ -1982,7 +1977,7 @@ class Battle {
|
|
|
1982
1977
|
this.add('-heal', target, target.getHealth, '[silent]');
|
|
1983
1978
|
break;
|
|
1984
1979
|
case 'drain':
|
|
1985
|
-
this.add('-heal', target, target.getHealth, '[from] drain',
|
|
1980
|
+
this.add('-heal', target, target.getHealth, '[from] drain', `[of] ${source}`);
|
|
1986
1981
|
break;
|
|
1987
1982
|
case 'wish':
|
|
1988
1983
|
break;
|
|
@@ -1996,10 +1991,10 @@ class Battle {
|
|
|
1996
1991
|
this.add('-heal', target, target.getHealth);
|
|
1997
1992
|
}
|
|
1998
1993
|
else if (source && source !== target) {
|
|
1999
|
-
this.add('-heal', target, target.getHealth,
|
|
1994
|
+
this.add('-heal', target, target.getHealth, `[from] ${effect.fullname}`, `[of] ${source}`);
|
|
2000
1995
|
}
|
|
2001
1996
|
else {
|
|
2002
|
-
this.add('-heal', target, target.getHealth,
|
|
1997
|
+
this.add('-heal', target, target.getHealth, `[from] ${effect.fullname}`);
|
|
2003
1998
|
}
|
|
2004
1999
|
break;
|
|
2005
2000
|
}
|
|
@@ -2134,7 +2129,7 @@ class Battle {
|
|
|
2134
2129
|
// we need to manually check for Stalwart here
|
|
2135
2130
|
if (pokemon.hasAbility(['stalwart', 'propellertail']))
|
|
2136
2131
|
tracksTarget = true;
|
|
2137
|
-
if (tracksTarget && originalTarget
|
|
2132
|
+
if (tracksTarget && originalTarget?.isActive) {
|
|
2138
2133
|
// smart-tracking move's original target is on the field: target it
|
|
2139
2134
|
return originalTarget;
|
|
2140
2135
|
}
|
|
@@ -2235,8 +2230,7 @@ class Battle {
|
|
|
2235
2230
|
faintQueueLeft = this.faintQueue.length;
|
|
2236
2231
|
faintData = this.faintQueue.shift();
|
|
2237
2232
|
const pokemon = faintData.target;
|
|
2238
|
-
if (!pokemon.fainted &&
|
|
2239
|
-
this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) {
|
|
2233
|
+
if (!pokemon.fainted && this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) {
|
|
2240
2234
|
this.add('faint', pokemon);
|
|
2241
2235
|
if (pokemon.side.pokemonLeft)
|
|
2242
2236
|
pokemon.side.pokemonLeft--;
|
|
@@ -2272,7 +2266,7 @@ class Battle {
|
|
|
2272
2266
|
this.queue.clear();
|
|
2273
2267
|
// Fainting clears accumulated Bide damage
|
|
2274
2268
|
for (const pokemon of this.getAllActive()) {
|
|
2275
|
-
if (pokemon.volatiles['bide']
|
|
2269
|
+
if (pokemon.volatiles['bide']?.damage) {
|
|
2276
2270
|
pokemon.volatiles['bide'].damage = 0;
|
|
2277
2271
|
this.hint("Desync Clause Mod activated!");
|
|
2278
2272
|
this.hint("In Gen 1, Bide's accumulated damage is reset to 0 when a Pokemon faints.");
|
|
@@ -2392,8 +2386,8 @@ class Battle {
|
|
|
2392
2386
|
pokemon.baseMoveSlots[ironHead] = {
|
|
2393
2387
|
move: move.name,
|
|
2394
2388
|
id: move.id,
|
|
2395
|
-
pp:
|
|
2396
|
-
maxpp:
|
|
2389
|
+
pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
|
2390
|
+
maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
|
|
2397
2391
|
target: move.target,
|
|
2398
2392
|
disabled: false,
|
|
2399
2393
|
disabledSource: '',
|
|
@@ -2552,7 +2546,8 @@ class Battle {
|
|
|
2552
2546
|
this.updateSpeed();
|
|
2553
2547
|
residualPokemon = this.getAllActive().map(pokemon => [pokemon, pokemon.getUndynamaxedHP()]);
|
|
2554
2548
|
this.fieldEvent('Residual');
|
|
2555
|
-
this.
|
|
2549
|
+
if (!this.ended)
|
|
2550
|
+
this.add('upkeep');
|
|
2556
2551
|
break;
|
|
2557
2552
|
}
|
|
2558
2553
|
// phazing (Roar, etc)
|
|
@@ -2822,6 +2817,7 @@ class Battle {
|
|
|
2822
2817
|
}
|
|
2823
2818
|
addMove(...args) {
|
|
2824
2819
|
this.lastMoveLine = this.log.length;
|
|
2820
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
2825
2821
|
this.log.push(`|${args.join('|')}`);
|
|
2826
2822
|
}
|
|
2827
2823
|
attrLastMove(...args) {
|
|
@@ -2840,6 +2836,7 @@ class Battle {
|
|
|
2840
2836
|
parts[4] = '';
|
|
2841
2837
|
this.log[this.lastMoveLine] = parts.join('|');
|
|
2842
2838
|
}
|
|
2839
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
2843
2840
|
this.log[this.lastMoveLine] += `|${args.join('|')}`;
|
|
2844
2841
|
}
|
|
2845
2842
|
retargetLastMove(newTarget) {
|
|
@@ -2933,7 +2930,7 @@ class Battle {
|
|
|
2933
2930
|
const team = this.getTeam(options);
|
|
2934
2931
|
side = new side_1.Side(options.name || `Player ${slotNum + 1}`, this, slotNum, team);
|
|
2935
2932
|
if (options.avatar)
|
|
2936
|
-
side.avatar =
|
|
2933
|
+
side.avatar = `${options.avatar}`;
|
|
2937
2934
|
this.sides[slotNum] = side;
|
|
2938
2935
|
}
|
|
2939
2936
|
else {
|
|
@@ -2944,8 +2941,8 @@ class Battle {
|
|
|
2944
2941
|
side.name = options.name;
|
|
2945
2942
|
didSomething = true;
|
|
2946
2943
|
}
|
|
2947
|
-
if (options.avatar && side.avatar !==
|
|
2948
|
-
side.avatar =
|
|
2944
|
+
if (options.avatar && side.avatar !== `${options.avatar}`) {
|
|
2945
|
+
side.avatar = `${options.avatar}`;
|
|
2949
2946
|
didSomething = true;
|
|
2950
2947
|
}
|
|
2951
2948
|
if (options.team)
|
|
@@ -2979,12 +2976,12 @@ class Battle {
|
|
|
2979
2976
|
turns: this.turn,
|
|
2980
2977
|
p1: this.sides[0].name,
|
|
2981
2978
|
p2: this.sides[1].name,
|
|
2982
|
-
p3: this.sides[2]
|
|
2983
|
-
p4: this.sides[3]
|
|
2979
|
+
p3: this.sides[2]?.name,
|
|
2980
|
+
p4: this.sides[3]?.name,
|
|
2984
2981
|
p1team: this.sides[0].team,
|
|
2985
2982
|
p2team: this.sides[1].team,
|
|
2986
|
-
p3team: this.sides[2]
|
|
2987
|
-
p4team: this.sides[3]
|
|
2983
|
+
p3team: this.sides[2]?.team,
|
|
2984
|
+
p4team: this.sides[3]?.team,
|
|
2988
2985
|
score: [this.sides[0].pokemonLeft, this.sides[1].pokemonLeft],
|
|
2989
2986
|
inputLog: this.inputLog,
|
|
2990
2987
|
};
|