Commit Graph

54 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
Sunny
c7717be292
Gen 1 Stadium Rentals: Fix implementation (#11824)
* Implementing Stadium Rentals

* pidgeot fix

* Duplicate Fixing
2026-03-17 15:58:19 -06:00
Kris Johnson
bf6e6efbe7 Add [Gen 1] Stadium Rentals
Some checks failed
Node.js CI / build (18.x) (push) Has been cancelled
2026-03-13 22:31:59 -06:00
André Bastos Dias
3f071d4b8a
Add and use the Standard AG ruleset in previous generations (#11796)
Some checks are pending
Node.js CI / build (18.x) (push) Waiting to run
* Add and use the Standard AG ruleset in previous generations

* Fix gen1 and gen1stadium

* Fix Gen 1 again
2026-03-08 12:42:16 -06:00
kn-Kris
ae832da721
Gen 1 Stadium OU: Add June 2025 Rises (#11539) 2025-10-27 01:04:09 -06:00
André Bastos Dias
f24d648c8a
Fix accuracy of Gen 1 trapping moves (#11305)
* Fix accuracy of Gen 1 trapping moves

* Fix tests

* Update data/mods/gen1/scripts.ts

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

* Update data/mods/gen1stadium/scripts.ts

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

* Update data/mods/gen3/scripts.ts

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

---------

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
2025-07-29 17:47:49 -06: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
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
HiZo
60786853de
Gen 1 Stadium: Implement the 1/65536 miss (#11061) 2025-04-25 20:57:49 -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
Kris Johnson
44b0f7d8c1
Battle Actions: Clean up runMove and useMove function args (#10492)
* Battle Actions: Clean up `runMove` and `useMove` function args

* sdfsdf
2024-08-18 09:00:13 -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
LightningThunder1
b4ccd31711
Fix typos (#9871)
* Update scripts.ts

Typo.

* Update data/mods/gen1stadium/scripts.ts

---------

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
2023-11-19 11:45:19 -07:00
Tree69420
10ecf63566
Fix Gen 1 Stadium Overflow (#9655) 2023-09-12 20:07:14 -05:00
André Bastos Dias
6f45298ef4
Gen 1 and Gen 2: Nickname Clause (#9505) 2023-04-13 03:21:48 -07:00
livid washed
6573f468bc
Gen 1: Fix Thrash and Rage mechanics (#9315)
* Copy everything from Gen 2 thrashing condition and stop inheriting

* Remove residual and MoveAborted events (don't occur in gen 1)

* effectState.duration --> effectState.time, so that thrashing pauses on slp/frz/flinch/partial trapping. Also, confusion is now applied before the final Thrash hits (but after confusion check, so the final Thrash won't be interrupted)

* Confusion is only applied if Thrashing effect ends naturally, not due to full para/confusion

* Thrash should lock the user in, even if it misses/hits a Ghost/etc

* Add Thrash tests: duration and locking in the user when it misses

* Thrash locks in the user even if it breaks a sub

* Remove unnecessary events for thrashing moves

* Thrash is paused when the user is asleep, frozen, partially trapped, or flinching

* Thrash is paused when disabled

* Rage duration is permanent, not 255

* Implement Rage/Thrash accuracy bug (need to change when lockedmove volatile is removed

* Move location of applying thrashing effect, so that the final turn will be subject to accuracy bug

* Add test for Thrash accuracy bug

* Add test for Rage accuracy bug

* Remove useless line

* Use an event for obtaining accuracy of Rage/Thrash

* Revert last change
2023-01-14 14:47:58 -08:00
livid washed
a1cb1f23fc
Gen 1: Implement Dig/Fly invulnerability glitch, partially fix charging moves and Mirror Move (#9243)
* Protect/Detect/Endure don't exist in gen 1

* Add twoturnmove condition to gen 1

* Gens 1-2: Mirror Move fails immediately after a switch

* Fix first Mirror Move test: Fearow was getting OHKO'd by Hyper Beam

* pokemon.lastMove (for Mirror Move) isn't updated with the charging turn

* Remove unnecessary code

* Add onTryMove for each two-turn move with removeVolatile('twoturnmove')

* Sleep, Freeze, partial trapping, flinch don't stop two turn moves

* Para/confusion stops thrashing moves + copy over lockedmove condition details instead of inheriting

* Remove some unnecessary code

* Add Dig/Fly invulnerability glitch

* Add hint for Dig/Fly invulnerability glitch

* Gen 1 Japanese and Stadium

* put Dig before Fly

* Self-targeted moves (e.g. Recover) will work while semi-invulnerable

* Revert changes to lockedmove, do them in a future patch

* move ends if it fails due to disable

* Two-turn moves use PP in their second turn

* restore mocharc

* Remove unnecessary code

* Fix PP usage for Metronome/Mirror Move calling two-turn moves
2022-12-29 18:35:59 -08:00
livid washed
289ff26038
Gen 1: Fix Bide's implementation (#9201)
* Remove lastDamage as a field for Bide + remove some useless fields

* Bide: use time instead of duration, so that it doesn't get changed with slp/frz/etc

* Bide totalDamage should be adjusted before reducing Bide time. Damage counting should be done when the Bide user moves, not when the foe attacks it

* Call the stored damage 'damage' rather than 'totalDamage'

* Fix Bide target, Bide can hit substitutes, add test
s

* Add test for Bide vs switching / using moves that don't reset lastDamage

* Bide damage is reset to 0 when a Pokemon faints

* Add test for Bide when asleep

* Add Desync messages for Bide clearing stored damage when a Pokemon faints

* Mention Desync Clause Mod in test

* Specify 'in gen 1' in hint messages

* Bide is paused if disabled

* Improve Bide-Disable test

* Further adjust the Bide-Disable test
2022-12-20 15:02:27 -08:00
livid washed
dc29389347
Gen 1: Actually fix Metronome calling Counter (#9156)
* Actually fix Metronome calling Counter

* Use set instead of array for lastDamage skipping moves

* Add Metronome-Counter test
2022-12-11 14:31:43 -08:00
livid washed
d59bce51c6
Gen 1: Fix more Counter bugs (#9136)
* Gen 1: SonicBoom can be Countered

* OHKO moves do 65535 damage (matters for Counter against sub)

* Move damage comparison with target hp outside getDamage()

* Remove a blank line

* Move damage comparison with target hp outside getDamage() (Stadium)

* Add counter test

* Fix Metronome not failing if calling Counter (move setting lastDamage before tryMoveHit)

* Do the same for Stadium

* Start phasing out pokemon.lastDamage from Gen 1 code

* Failed Counter doesn't zero lastDamage

* When a move misses, battle.lastDamage is set to 0

* Remove all pokemon.lastDamage

* Remove a couple of comments
2022-12-08 16:07:39 -08:00
livid washed
6cc75a6f88
Gen 1: Fix some more Counter inaccuracies (#9091)
* Move Gen 1 Counter tests into its own section

* Confusion damage, (h)jk recoil, and draining can be countered in gen 1

* Recoil and Drain round down in gen 1 (against substitute)

* Add tests for Counter + fix linting issue

* lastSelectedMove is updated when Mirror Move or Metronome calls another move

* Move pokemon.side.lastMove setting into a (more) correct location

* move pokemon.lastMove as well

* Remove unnecessary seed in test
2022-11-30 13:14:03 -08:00
livid washed
534cd35119
Gen 1: Fix inaccuracies in damage calculation (#9054) 2022-11-25 16:48:37 -08:00
livid washed
0c0fb305b2
Gen 1: Remove unnecessary RNG rolls for secondaries (#9062)
* Gen 1: remove unnecessary RNG rolls for secondaries

* remove a check that is now unnecessary
2022-11-25 16:48:12 -08:00
livid washed
fc6050ae78
Gen I: Clean up screens implementation (#9053) 2022-11-24 13:08:47 -06:00
livid washed
38945f6a49
Gen 1 Stadium: fix battle crash when Wrap KOs an enemy (#9032) 2022-11-23 12:47:09 -08:00
livid washed
66a930d4fe
Gen 1: Fix Explosion not fainting user when target is semi-invulnerable (#9034)
* Gen 1 Stadium: fix battle crash when Wrap KOs an enemy

* Fix explosion against semi-invulnerable enemies + shift disable-rage message location

* Add relevant Explosion test

* Add explanatory hint for Disable/Explosion boosting Rage

* Move rage interaction back to where it was
2022-11-23 12:44:55 -08:00
livid washed
52a77a5e79
Gen 1: Fix Wrap when hitting a substitute (#9015)
* Gen 1: Fix Wrap against a substitute

* Gen 1: Fix Wrap when it hits Ghosts behind a substitute

* Remove unnecessary 'else' statement

* Fix Stadium as well

* Fix Gen 1 Japanese as well
2022-11-19 18:13:35 -08:00
livid washed
ebdda4f691
Gen 1: Fix Rage not being triggered by missed Disable/Explosion (#8991)
* Gen 1: Fix Rage not being triggered by failed Disable/Explosion

* Gen 1 Stadium doesn't have the same behavior
2022-11-17 21:01:45 -08:00
livid washed
2947318816
Gen 1: Fix probabilities for 2-5 hit multihit moves (#8992) 2022-11-17 21:01:31 -08:00
Leonard Craft III
5842e1d56d Fix toID crash in Gen 1 mods 2022-11-17 20:42:14 -06:00
Kris Johnson
d50c8c249b
Add Gen 9 (#8997) 2022-11-17 20:46:29 -05:00
livid washed
13852061e9
Gen 1: Fix Transform and Bide accuracy (#8972) 2022-11-08 15:20:09 -08:00
livid washed
133212043b
Gen 1: Fix Counter interaction with Substitute (#8969)
* Gen 1: Fix Counter interaction with Substitute

* reverse an unintentional empty line delete

* reverse an unintentional empty line delete

* updating a couple of comments

* Update gen 1 Japanese version as well

* Update test/sim/moves/counter.js

Co-authored-by: pyuk-bot <msaimrkon@gmail.com>

* Update test/sim/moves/counter.js

Co-authored-by: pyuk-bot <msaimrkon@gmail.com>

Co-authored-by: pyuk-bot <msaimrkon@gmail.com>
2022-11-06 18:09:03 -08:00
livid washed
40cd8b41ff
Gen 1: Fix Mirror Move Hyper Beam interaction (#8966)
* (Partially) fix Mirror Move after move behavior

* typo
2022-11-04 18:40:47 -07:00
livid washed
7c5de2bd7c
Fix typos in comments (#8964) 2022-11-03 18:09:05 -05:00
livid washed
4d3656ab80
Gen 1: Fix Twineedle poison chance (#8961) 2022-11-01 10:10:08 -07:00
Karthik
e4f510faaf
Fix Nightmare not getting removed after certain curing effects (#8791) 2022-07-14 16:01:06 -05:00
May Evans
c648d58cd4
Gen I: Fix RBY, Stadium Substitute at 25% 2022-07-13 19:07:06 -05:00
Leonard Craft III
4ea5a6a9dc Gen 1 Stadium: Fix stat overflow past 999
Thanks Plague Von Karma!
2022-07-12 22:07:23 -05:00
May Evans
f9198758cd
Gen 1: Fix flinch interaction & Mist (#8818) 2022-06-24 21:48:34 -04:00
Karthik
de36d38d23
Fix multiple Gen 1 Stadium bugs (#8781) 2022-05-24 21:34:17 -05:00
EvGym
5d8117302c
Refactor overriding stats used for damaging moves (#8373) 2021-11-08 13:48:26 -08:00
Guangcong Luo
d0ea290992 Rename pokemon to source in getDamage
This has been split off from #8373 to improve diff readability.
2021-11-02 18:05:53 -04:00
Leonard Craft III
4771a9db55 Gens I-II: Remove unneeded checks for spread moves 2021-10-28 18:52:28 -05:00
May Evans
3676ba36bf
Stadium OU: Move Poliwrath to StUU (#8475) 2021-09-19 10:52:42 -04:00
May Evans
992280b9a3
Gen 1: Implement Stadium tiers (#8460) 2021-09-08 19:20:58 -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