Commit Graph

37 Commits

Author SHA1 Message Date
André Bastos Dias
815b5f260a
Support inheritance of ability, item, and move conditions (#11754)
Some checks are pending
Node.js CI / build (18.x) (push) Waiting to run
2026-03-19 03:44:48 -07:00
André Bastos Dias
6e5e42e1d3
Fix interaction between Wonder Guard and typeless moves (#11548)
Some checks are pending
Node.js CI / build (18.x) (push) Waiting to run
2025-10-31 16:31:59 -07:00
Karthik Bandagonda
d0d1eab7b7
Gens 3-4: Fix Knock Off + Recycle Interaction (#11510)
* Gens 3-4: Fix Knock Off + Recycle Interaction

* forgot to actually remove the item
2025-10-17 16:34:51 -06:00
Karthik99999
dc48d8234e Gens 3-4: Fix Knock Off state being reset on switch out
Some checks are pending
Node.js CI / build (18.x) (push) Waiting to run
2025-10-14 18:12:25 -07:00
André Bastos Dias
3a67660d9e
Fix Trace message timing (#11282)
Co-authored-by: Karthik99999 <bandagondak0217@gmail.com>
2025-08-13 14:11:49 -04:00
André Bastos Dias
ac3c06daf0
Approximate Rebound to Magic Bounce/Coat implementation (#11290) 2025-07-23 03:13:47 -07:00
André Bastos Dias
6513f4b18a
Activate Wonder Guard if the target is immune (#11130)
* Activate Wonder Guard if the target is immune

* Lint

* Correctly check for immunities

* Refactor runImmunity

* Change all move.type to move

For example, this fixes Thousand Arrows vs Air Ballon Terapagos. Tera Shell was not activating.

* Remove unnecessary cast
2025-05-31 01:28:46 -06:00
André Bastos Dias
233c618f97
Fix Chatter's old gen mechanics (#11140) 2025-05-29 21:50:01 -07:00
Guangcong Luo
78439b4a02
Update to ESLint 9 (#10926)
ESLint has a whole new config format, so I figure it's a good time to
make the config system saner.

- First, we no longer have separate eslint-no-types configs. Lint
  performance shouldn't be enough of a problem to justify the
  relevant maintenance complexity.

- Second, our base config should work out-of-the-box now. `npx eslint`
  will work as expected, without any CLI flags. You should still use
  `npm run lint` which adds the `--cached` flag for performance.

- Third, whatever updates I did fixed style linting, which apparently
  has been bugged for quite some time, considering all the obvious
  mixed-tabs-and-spaces issues I found in the upgrade.

Also here are some changes to our style rules. In particular:

- Curly brackets (for objects etc) now have spaces inside them. Sorry
  for the huge change. ESLint doesn't support our old style, and most
  projects use Prettier style, so we might as well match them in this way.
  See https://github.com/eslint-stylistic/eslint-stylistic/issues/415

- String + number concatenation is no longer allowed. We now
  consistently use template strings for this.
2025-02-25 20:03:46 -08:00
pyuk-bot
7bb2fd1869
Overhaul 'SwitchIn' event for more accurate effect resolution order (#10766) 2025-01-28 16:51:17 -06:00
Alex "Mathy
e03abffef2
Gen 4-5: Fix target in Frisk message (#10695) 2024-11-27 13:08:21 -07:00
Karthik Bandagonda
116664c257
Fix Frisk text in Gens 4-5 (#10453) 2024-07-31 17:41:53 -06:00
Guangcong Luo
88be8d7b3c
Refactor types for Lowercase<string> (#10377)
TypeScript 4.8+ supports Lowercase for lowercase strings, which isn't
exactly what ID is, but can be used to type IDs in object keys and data
entries that previously required string. I'm calling it IDEntry in places
where it should be an ID but TypeScript doesn't support that.

Very conveniently, no additional casts will be needed when using ID
where IDEntry is expected.

It's caught at least a few bugs, which is also why I'm PRing: I didn't
write the code for the bugs it found, and don't know if it's the right
way to fix them.

This ballooned into several other type refactors.
2024-07-01 15:57:14 -07:00
Alex "Mathy
44ea4080b2
Gen IV: Make Download ignore foes behind substitutes (#10310) 2024-06-02 21:56:30 -04:00
Smudge
8003338fa5
Fix Air Lock/Cloud Nine in Gen 4 and below (#10259) 2024-04-21 23:46:05 -05:00
Leonard Craft III
42f7c42c6d Fix Wonder Guard Fire Fang hint info leak 2024-03-14 21:58:45 -05:00
Leonard Craft III
8a5bbbd255
Implement Ability flags (#10048)
* Add AbilityFlags interface

* Add flags to abilities data (Karthik's script)

* Convert isBreakable to its new flag

* Convert most of isPermanent to its new flag

* Convert Trace to its new flag

* Convert Skill Swap to its new flag

* Convert Wandering Spirit to the failskillswap flag

* Update miscelleneous descriptions that depend on cantsuppress

* Convert Entrainment to its flag

* Convert Receiver/PoA to its flag

* Convert Role Play to its flag

* Implement Doodle failure conditions

* Various cleanup

* Breakable fixes

* How did I manage to do this

* Allow LightningRod to be breakable in Gen 3

* Implement notransform flag

* Tera Shell oopsie

* Fix more things after the rebase

* And fix Teraform Zero

* Update data/abilities.ts

* Update data/abilities.ts

* Update data/abilities.ts

* Update data/mods/partnersincrime/abilities.ts

* Update data/abilities.ts

* Update data/mods/sharedpower/abilities.ts

* Update abilities.ts

---------

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
2024-01-02 23:55:17 -07:00
Karthik
e4f510faaf
Fix Nightmare not getting removed after certain curing effects (#8791) 2022-07-14 16:01:06 -05:00
Karthik
0e692d4a9e
Gen 3-4: Fix Knock Off mechanics (#8569) 2022-04-25 18:03:35 -04:00
Karthik
d99779ba8a
Gen III-IV: Fix interaction between Liquid Ooze / Dream Eater (#8467) 2021-09-19 10:28:22 -04:00
Leonard Craft III
d946308900
Fix the order of many end-turn resolution effects (#8307)
Co-authored-by: Marty-D <Marty-D@users.noreply.github.com>
2021-05-17 11:53:52 -04:00
pacmanboss256
4186ef5f4f
Refactor Mold Breaker effect (#8291) 2021-05-14 08:32:41 -04:00
Guangcong Luo
f9fdc73133
Support per-pokemon Residual handlers in Side/Field conditions (#8222)
For side conditions, `onStart`/`onRestart`/`onResidual`/`onEnd`
have been renamed `onSideStart`/`onSideRestart`/`onSideResidual`/`onSideEnd`,
with the `onResidualOrder` properties renamed `onSideResidualOrder`.

For field conditions, `onStart`/`onRestart`/`onResidual`/`onEnd`
have been renamed `onFieldStart`/`onFieldRestart`/`onFieldResidual`/`onFieldEnd`,
with the `onResidualOrder` properties renamed `onFieldResidualOrder`.

(The `onField` and `onSide` part helps make it clear to the type system
that the first argument is a Field or Side, not a Pokemon.)

Side and field conditions can now use `onResidual` to tick separately
on each pokemon in Speed order. `onResidualOrder` (the per-pokemon
tick) can be timed separate from `onSideResidualOrder` (the
per-condition tick), allowing conditions to end at a different priority
than they tick per-pokemon.

Relatedly, `onTeamPreview` and `onStart` in formats now need to be
`onFieldTeamPreview` and `onFieldStart`.

Unrelatedly, `effectData` has been renamed `effectState`, and the
corresponding state containers (`pokemon.statusData`,
`pokemon.speciesData`, `pokemon.itemData`, `pokemon.abilityData`,
`field.weatherData`, `field.terrainData`) have been similarly renamed. I
renamed the types a while ago, but I was holding off renaming the fields
because it would be a breaking change. But this is a breaking change
anyway, so we might as well do it now.

Note: `onResidual` will tick even on `onSideEnd` turns, although
`onSideResidual` won't. When refactoring weather, remember to
check `this.state.duration` so you don't deal weather damage on the
ending turn.

Intended as a better fix for #8216
2021-04-25 10:55:54 -07:00
Guangcong Luo
13189fdb02
Update Dex API (#8181)
This is the change that renames:

- `Dex.getMove` -> `Dex.moves.get`
- `Dex.getAbility` -> `Dex.abilities.get`
- `Dex.getItem` -> `Dex.items.get`
- `Dex.getSpecies` -> `Dex.species.get`
- `Dex.getEffect` -> `Dex.conditions.get`
- `Dex.getNature` -> `Dex.natures.get`
- `Dex.getType` -> `Dex.types.get`
- `Dex.getFormat` -> `Dex.formats.get`

In addition, some other APIs have been updated:

- `getByID` methods have also been added to every other table.
- `Dex.moves.all()` now gets an array of all moves
  - Plus equivalent methods for `abilities`, `items`, `species`, `formats`, `natures`, `types`
  - Note: there's no `Dex.conditions.all()`
- new API: `Dex.stats` for naming/iterating stats
- `Dex.getEffectByID` -> `Dex.conditions.getByID`
- `Dex.getType` -> `Dex.types.get`
- `Dex.data.Formats` -> `Dex.data.Rulesets`
- `Dex.formats` -> now an array `Dex.formats.all()`
- `Dex.getRuleTable` -> `Dex.formats.getRuleTable`
- `Dex.validateFormat` -> `Dex.formats.validate`

Team functions have been split off into a new `sim/teams` package:

- `Dex.packTeam` -> `Teams.pack`
- `Dex.fastUnpackTeam` -> `Teams.unpack`
- `Dex.generateTeam` -> `Teams.generate`
- `Dex.stringifyTeam` -> `Teams.export`

`Teams.export` has also been rewritten to better match how it works in client.

This implements #8178
2021-04-08 03:00:37 -07:00
Guangcong Luo
3b5e8cbfc2
Refactor for multi battles (#8152) 2021-03-31 20:27:07 -07:00
Guangcong Luo
d18c0a4e1f Refactor more things to use pokemon.allies/foes
(This will make multi battles easier to implement.)
2021-03-28 20:06:18 -07:00
Guangcong Luo
ed454ef76a
Refactor scripts to battle-actions (#8138)
This introduces a new class, BattleActions, available as `battle.actions`,
moving all functions from `data/scripts.ts` to `sim/battle-actions.ts`.

This makes it so that "go to definition" will now work correctly for
functions previously in scripts; we no longer need UnimplementedError,
and there's now a clean conceptual separation between `battle` and
`battle-actions` (whereas the previous distinction between `battle` and
`scripts` was basically nonexistent).

This will be a difficult migration if you maintain a fork with custom
scripted mods. I'm sorry! Migration instructions are here:

https://github.com/smogon/pokemon-showdown/pull/8138
2021-03-28 12:01:38 -07:00
Marty-D
e92bc94685 Gen IV: Fix Rough Skin
Little overzealous with the copypasting last time...
2021-03-06 14:33:57 -05:00
urkerab
74ae95a91c
Update accuracy calculation for latest Gen 7 research (#7806) 2020-12-15 18:37:24 -05:00
Marty-D
5cbaefbf71
Gen III-IV: Air Lock / Cloud Nine have no message 2020-11-22 17:38:23 -05:00
Guangcong Luo
ea8f52ce97
Move descriptions to data/text/ files (#7036)
This adds some new `data/text/` files, which are the new home for
item/move/ability descriptions, as well as in-game messages, in one
place for ease of translation.
2020-09-06 22:00:11 -07:00
Guangcong Luo
4d09f7acde Rename more instances of Effect to Condition 2020-07-26 11:26:23 -07:00
Guangcong Luo
2f805c93a2
Remove "Battle" prefix from data exports (#7039)
`BattlePokedex` is now `Pokedex`, `BattleItems` is now `Items`, etc.

I also renamed `Movedex` to `Moves` and `Statuses` to `Conditions`.

`TypeChart` isn't `Types` yet, because unlike the others, it's not
indexed by ID. That should probably be fixed one day.
2020-07-24 12:42:26 -07:00
Marty-D
10e4ecdc84 Clean up event priorities 2020-07-21 10:43:12 -04:00
Marty-D
324a5bfa1a Gen III-IV: Fix Abilities' interaction with 0 damage
Thanks BKC for pointing out Rough Skin
2020-05-23 11:52:52 -04:00
Guangcong Luo
e0f6453b60 Refactor data definitions
- `Modded[Effect]Data` are now correctly defined: they must either have
  `inherit: true` and be partial, or not have `inherit: true` and be a
	complete `[Effect]Data` entry

- `id` is no longer allowed; instead, it's calculated directly from
  `toID(name)`. The one exception, Hidden Power, gets a `realMove`
	property to track this (it's still used to set `.id`, though;
	TODO: really fix it properly).

- `num` is still required in `data/pokedex.ts` (dex number),
  `data/moves.ts` (move index number, for Metronome), and
	`data/items.ts` (minisprite sprite-sheet location). It's still not
	required for mod-only items and moves.

- `num` is no longer allowed for PureEffects (in `statuses.ts`) where
  it's always been meaningless.

- `color` and `heightm`, being completely flavor, are still not
  required for `pokedex.ts` in mods. They're still required in the base
	pokedex.
2020-04-30 21:39:29 -07:00
Kris Johnson
28bf388b98
Typescript data (#6553) 2020-04-23 09:16:09 -07:00