Commit Graph

49 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
684150d9d7
Implement Mega Stones as {key: value} pairs (#11684)
* Implement Mega Stones as pairs {key: value}

* Fix Mega Evolution check

* Add constructor guards to Dex getters

* Update config/formats.ts

---------

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
2026-01-08 14:59:22 -07:00
André Bastos Dias
dc7294ed6e
Remove unused code (#11215)
Some checks failed
Node.js CI / build (18.x) (push) Has been cancelled
* Remove unused Move#negateSecondary
* Remove unused 'SubDamage' event
* Remove unused Move#pressureTarget
* Partially remove unused Move#spreadModifier
2025-06-22 08:21:19 -07:00
Guangcong Luo
e07080ce5c
Support fuzzy searching /dt etc (#11124)
This add's the teambuilder's fuzzy matching to /dt and similar commands.
2025-05-23 00:26:23 -07:00
André Bastos Dias
6b3d0eefbd
Fix Sparkling Aria's interaction with Shield Dust (#10882)
Some checks are pending
Node.js CI / build (18.x) (push) Waiting to run
2025-04-23 16:57:31 -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
Guangcong Luo
ec7332b498 Import Utils from lib/utils
Some checks are pending
Node.js CI / build (16.x) (push) Waiting to run
This mostly is just a step towards removing sim's dependency on Node's
stdlib.
2025-01-14 23:01:53 -08:00
larry-the-table-guy
06da2bed6f
Sim/DexMoves: Deduplicate DataMove against parent mod (#10658)
Some checks are pending
Node.js CI / build (16.x) (push) Waiting to run
2024-11-09 03:47:14 -08:00
larry-the-table-guy
12c1614eb5
Dex: Consistent field init order in constructors (#10608)
Some checks are pending
Node.js CI / build (16.x) (push) Waiting to run
2024-10-31 10:05:03 -07:00
larry-the-table-guy
101f6bcc33
Dex*: Cache empty objects (#10607) 2024-10-12 18:43:53 -06:00
Leonard Craft III
27557e5fdc
Convert noSketch to move flag (#10407) 2024-07-14 23:45:10 -05: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
bilalafzalshafi
011ff74462
Fix Metronome (item) with calling moves (#10361) 2024-06-21 22:09:47 -05:00
Karthik
44541b30d0
Fix Tera Stellar interaction with multihit moves (#10185) 2024-02-24 00:14:29 -06:00
Karthik
06d88748a5
Refactor STAB (again) (#10099) 2024-01-13 23:48:47 -06:00
Karthik
73041e4137
Refactor noMetronome lists to metronome flag (#10110) 2024-01-13 14:00:19 -06:00
Guangcong Luo
9cd64cba15 Freeze cached Sim objects
We're hunting ~~wabbits~~ validator bugs.

Honestly, this has been a long time coming, but Object.freeze perf
used to not be good enough for us to use it here. Here's hoping!
2023-12-07 01:26:51 -05:00
Leonard Craft III
5296a28b8d
Implement cantusetwice move flag (#9740) 2023-09-06 20:12:30 -05:00
Leonard Craft III
156a39405f
Refactor some move lists to move flags (#9396) 2023-03-18 22:21:00 -05:00
Karthik
8d989b2e22
Implement new Order Up mechanics (#9429) 2023-03-01 14:18:40 -05:00
pyuk-bot
842227146e
Fix Copycat Dancer interaction, take 3 (#9193) 2022-12-16 12:40:20 -05:00
pyuk-bot
2bc2100a7b
Make -Ate abilities share a ...Boosted property (#9174) 2022-12-13 21:43:52 -06:00
pyuk-bot
fff008b127
Make identical Ruin Abilities not stack (#9164) 2022-12-13 14:38:16 -05:00
Kris Johnson
3e16498b40 Fix typo in comment 2022-12-03 00:07:42 -07:00
Kris Johnson
e672e44941 Moves: Make hasSheerForce usable in move data 2022-12-03 00:05:09 -07:00
Karthik
912aedb326
Use MoveFlags interface for MoveData#flags (#9090) 2022-11-29 20:56:32 -06:00
Alexander B
8fc3597326
Refactor self-disabling moves (#9072) 2022-11-26 22:26:04 -05:00
te
8e0e374940
Correct Max Move dex generation (#9027) 2022-11-23 13:39:20 -05:00
Kris Johnson
d50c8c249b
Add Gen 9 (#8997) 2022-11-17 20:46:29 -05:00
Mia
8bdebea6e4 Fix eslint errors 2022-11-17 16:18:39 -06:00
Marty
84353cbd92 Revert "Fix damage from future attacks (#8731)"
This reverts commit 5a707dd080.
2022-07-29 13:25:49 -04:00
wimeng
5a707dd080
Fix damage from future attacks (#8731) 2022-07-20 19:12:27 -07:00
Karthik
42333b392b
Fix self-KO timing for Memento/Healing Wish/Lunar Dance (#8750) 2022-05-04 17:32:37 -04:00
Karthik
cfff8b85aa
Fix Focus Punch/Beak Blast/Shell Trap charge timing (#8733) 2022-04-25 16:35:36 -04:00
Annika
ec89fb77b5 Handle new, stricter enforcement of no-this-alias 2022-04-04 16:54:36 -07:00
EvGym
5d8117302c
Refactor overriding stats used for damaging moves (#8373) 2021-11-08 13:48:26 -08:00
pacmanboss256
23b35498f6
Rename the "mystery" and "authentic" move flags (#8445)
* mystery -> allyanim
* authentic -> bypasssub
2021-08-30 23:07:50 -07:00
Guangcong Luo
74211859c9 Update to TypeScript 4.3
Changes relevant to our codebase:

- TypeScript now knows that `typeof id === 'string'`! A bunch of casts
  on `User | ID` or `Room | RoomID` are no longer necessary!!!

- `override` will protect against certain typoes, and we'll adopt it
  (and `--noImplicitOverride`) as soon as sucrase comes in

- `declare` is now required for properties we want to narrow the type
  of without directly overwriting - a good thing to use going forward,
	but very annoying to fix all our old code for
2021-05-26 14:16:54 -07: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
HematiteH2O
654a106df4
Megas for All: Slates 30 and 31, balance/bugfixes (#8114)
* Megas for All: Slate 30 and balance/bugfixes

Adding all four new Abilities from Slate 30 (Pool Floaties, Red Licorice, Stygian Shades and Long Whip), but also fixing issues with various other Abilities, including minor balance changes to Savage, Heavenly Techniques, Body of Water and Forgery, and bugfixes to Forgery (again), Seismic Scream and Settle.

* Megas for All: Slate 30 ability (Long Whip)

This is so convoluted, but it has to be able to stack with itself as many as five times over, so I hope this is okay. Let me know if there's a way to streamline this! (and same for Settle, for that matter)

* Megas for All: Slate 30

* Megas for All: Add slate 30 stones

* Megas for All: Update Court Change

* Megas for All: Add slate 30 Mega Evolutions

* Megas for All: Slate 30 and balance changes

Forgery can no longer fake a Z-Crystal, so the entire section dedicated to making that work is no longer necessary. However, there's a new form of non-groundedness that needs to be added (the new 'poolfloaties' volatile), and I also modified the damage section slightly because Settle and Body of Water have some weird interactions, and this was the best way I could find to handle them with perfect accuracy. (For reference, Settle is meant to use the user's physical Attack stat without actually becoming a physical move for any other intents or purposes, while Body of Water is now about halfway to the Body Press effect but keeps the user's offensive stat changes rather than its defensive ones.)

* Megas for All: Add two new move modifiers

* Megas for All: Add missing trailing comma

* Megas for All: Improve Red Licorice ability

* Update abilities.ts

Okay I do think this was at least part of the problem so I'm gonna address that first

* Update scripts.ts

* Megas for All: Fix Cinccino and Falinks

Just fixing two minor errors that came up since the last time I touched this patch

* Update data/mods/megasforall/abilities.ts

Co-authored-by: Annika <annika0uwu@gmail.com>

* Megas for All: Define bladeMoves only once

(okay I was so tired when I worked on this code and I'm actually very embarrassed to see that there are three of these in quick succession and I only changed two of them ._.
so uh! clearly Annika's suggestion not to define it three separate times in the first place is the right call XP)

* Update data/mods/megasforall/abilities.ts

Co-authored-by: Annika <annika0uwu@gmail.com>

* Update scripts.ts

* Megas for All: Abilities for slate 31 and bugfixes

* Revise some shortDescs so they can fit better
* Accommodate for Illusion in some messages (previously, they gave away the Pokémon's real name)
* Revise Forgery (again) - it can no longer copy Mega Stones, and it no longer wears off when the user is hit
* Improve the functionality of Clairvoyance (for consistency with Future Sight and other delayed moves)
* Preserve type change indicators for SOS and Stance Change (established convention is for every Mega in the mod to have these regardless of whether it has changed type, but they disappear when changing form)
* Make sure Sticky Gel doesn't ignite more than once at a time (has been happening)
* Add an activation message to Stygian Shades to reduce confusion
* Overhaul Long Whip (now compatible with the varying base powers of Triple Axel and Triple Kick; now decides accuracy at the start and guarantees that every subsequent hit will land; now persists after the source faints and behaves more similarly to other delayed moves)
* Add new Abilities from slate 31, the very over-the-top complicated Gravitational Pull and the refreshingly simple Chakra Lock

* Megas for All: Improve functionality of Long Whip

* Megas for All: Slate 31

* Megas for All: Slate 31 stones

* Megas for All: Slate 31 compatibility

Modify all entry hazards to account for Gravitational Pull and Triple Axel and Triple Kick to account for Long Whip

* Megas for All: Add slate 31 forms

Add Mega Torterra, Mega Infernape and Mega Empoleon and revise Mega Zoroark's stats

* Megas for All: Slate 31 moves and balance changes

* Megas for All: Minor Ability corrections

* Megas for All: longWhipBoost

* Update moves.ts

* Megas for All: Fix Long Whip

* Megas for All: Fix Alchemist

SHOOT sorry I skipped over this
Meant to do it in the same commit
That was just a copying error

* Apply suggestions from code review

Aaaaa thank you so much! ;u;

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>

* Megas for All: Condense Long Whip conditions

WOW this saves so much space I never knew you could do that

* Update conditions.ts

Co-authored-by: Annika <annika0uwu@gmail.com>
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
2021-03-23 02:34:41 -06:00
Mia
76c10841ea
Lib: Add an index file for all exports (#7972) 2021-01-31 18:00:19 -08:00
HematiteH2O
111ab3788f
Add Megas For All and Double Trouble (#7893)
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
2021-01-09 00:41:06 -08:00
urkerab
80d652d59b Sturdy should trigger before Focus Sash but after False Swipe 2021-01-05 16:58:03 +00:00
Adam Tran
d6e05d0a98
Fix Metal Burst interaction with called moves (#7835) 2020-12-30 14:36:06 -05:00
Instruct
5b441c2013
Super Staff Bros 4 (#7793)
Collaborative Project lead by @xInstruct with many contributors.

See the Special Thanks section of https://www.smogon.com/articles/super-staff-bros-4
2020-12-24 11:21:02 -05:00
urkerab
ec8cd25d59
Properly update Diamond Storm boosts for Gen 7 (#7638) 2020-11-12 10:27:18 -05:00
Guangcong Luo
9b5217ab70
Split up dex-data into more files (#7634)
* Split up dex-data over individual files

This commit introduces:
- `dex-abilities.ts`
- `dex-conditions.ts`
- `dex-formats.ts`
- `dex-items.ts`
- `dex-moves.ts`
- `dex-species.ts`

These files centralize definitions from `dex-data` and `global-types`.

* Inherit ItemData from Item etc

Previously, Condition inherited from ConditionData. Now, ConditionData
inherits from Condition. The advantage of the new approach is that now,
Condition and DataCondition no longer need to be separate types, and
there should be much less duplication of type definitions in general.

This has also been done for

- ItemData/Item/DataItem
- AbilityData/Ability/DataAbility
- FormatData/Format/DataFormat

Species and DataSpecies was already merged, but this also reverses
their inheritance (saving a lot of duplicated definitions in the
process!)

The only one left is MoveData, which is just super complicated and
will need its own commit.
2020-11-05 05:00:13 -08:00