Compare commits

..

313 Commits

Author SHA1 Message Date
Wlowscha
c0b67e6c56
Update src/ui/pokedex-ui-handler.ts 2025-08-15 18:56:23 +02:00
Wlowscha
602eac1bad
Merge branch 'beta' into dex-unseen-filter 2025-08-15 18:55:45 +02:00
Wlowscha
b79b739137
Removed changes to icon visibility rules 2025-08-15 18:55:00 +02:00
fabske0
da7903ab92
[i18n] rename cancel to cancelButton (#6267)
rename cancel to cancelButton
2025-08-15 11:34:54 -04:00
Bertie690
70e7f8b4d4
[Misc] Removed populateAnims script (#6229)
Removed `populateAnims`

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-08-15 17:11:37 +02:00
Wlowscha
cfc57a976d
Merge branch 'beta' into dex-unseen-filter 2025-08-15 15:51:01 +02:00
Sirz Benjie
b2990aaa15
[Bug] [Beta] Fix renaming runs (#6268)
Rename run name field, don't encrypt before updating
2025-08-14 16:57:01 -05:00
Bertie690
ee4950633e
[Test] Added toHaveArenaTagMatcher + fixed prior matchers (#6205)
* [Test] Added `toHaveArenaTagMatcher` + fixed prior matchers

* Fixed imports and stuff

* Removed accidental test file addition

* More improvements and minor fixes

* More semantic changes

* Shuffled a few funcs around

* More fixups to strings

* Added `toHavePositionalTag` matcher

* Applied reviews and fixed my godawful penmanship

* Fix vitest.d.ts

* Fix imports in `vitest.d.ts`

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-08-14 13:16:23 -07:00
Sirz Benjie
30058ed70e
[Feature] Add per-species tracking for ribbons, show nuzlocke ribbon (#6246)
* Add tracking for nuzlocke completion

* Add ribbon to legacy ui folder

* Add tracking for friendship ribbon

* fix overlapping flag set

* Replace mass getters with a single method

* Add tracking for each generational ribbon

* Add ribbons for each challenge

* Apply Kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-08-14 13:20:48 -05:00
Wlowscha
140e4ab142
[UI/UX] Party slots refactor (#6199)
* constants for position of discard button

* Moved transfer/discard button up in doubles

* Fixed the various `.setOrigin(0,0)`

* Small clean up

* Added `isBenched` property to slots; x origin of `slotBg` is now 0

* Also set y origin to 0

* Offsets are relevant to the same thing

* Introducing const object to store ui magic numbers

* More magic numbers in const

* Laid out numbers for slot positions

* Added smaller main slots for transfer mode in doubles

* Changed background to fit new slot disposition

* Apply suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Optimized PNGs

* Updated comment

* Removed "magicNumbers" container, added multiple comments

* Update src/ui/party-ui-handler.ts

Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>

* Fainted pkmn slots displaying correctly

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: Adri1 <adrien.grivel@hotmail.fr>
Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-08-14 13:10:15 -05:00
fabske0
76d8357d0b
[Dev] Rename OPP_ overrides to ENEMY_ (#6255)
rename `OPP_` to `ENEMY_`
2025-08-14 18:06:24 +00:00
Bertie690
f42237d415
[Refactor] Removed map(x => x) (#6256)
* Enforced a few usages of `toCamelCase`

* Removed `map(x => x)`

* Removed more maps and sufff

* Update test/mystery-encounter/encounters/weird-dream-encounter.test.ts

* Update game-data.ts types to work
2025-08-14 10:25:44 -07:00
fabske0
b44f0a4176
[Refactor] Remove bgm param from arena constructor (#6254) 2025-08-14 16:52:56 +00:00
Sirz Benjie
076ef81691
[Bug] [UI/UX] [Beta] Fix icons not showing in save slot selection (#6262)
Fix icons not showing in save slot selection
2025-08-13 20:49:46 -05:00
fabske0
23271901cf
[Docs] Add locale key naming info to localization.md (#6260) 2025-08-14 01:12:00 +00:00
Inês Simões
1517e0512e
[UI/UX] [Feature] Save Management Tool (Rename/Delete Saves) (#5978)
* Implement Name Run Feat
Modified load session ui component, adding a submenu when selecting a 3
slot. This menu has 4 options:
Load Game -> Behaves as before, allowing the player to continue
progress from the last saved state in the slot.

Rename Run -> Overlays a rename form, allowing the player to type a
name for the run, checking for string validity, with the option to
cancel or confirm (Rename).

Delete Run -> Prompts user confirmation to delete save data, removing
the current save slot from the users save data.

Cancel -> Hides menu overlay.

Modified game data to implement a function to accept and store
runNameText to the users data.

Modified run info ui component, to display the chosen name when
viewing run information.

Example: When loading the game, the user can choose the Load Game
menu option, then select a save slot, prompting the menu, then choose
"Rename Run" and type the name "Monotype Water Run" then confirm,
thus being able to better organize their save files.

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Implement Rename Input Design and Tests for Name Run Feat
Created a test to verify Name Run Feature behaviour in the
backend (rename_run.test.ts), checking possible errors and
 expected behaviours.

Created a UiHandler RenameRunFormUiHandler
(rename-run-ui-handler.ts), creating a frontend input
overlay for the Name Run Feature.

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Fixed formating and best practices issues:
Rewrote renameSession to be more inline with other
API call funtions, removed debugging comments and
whitespaces.

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Minor Sanitization for aesthetics
Deleting the input when closing the overlay for
aesthetics purpose

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Fixed minor rebase alterations.

Signed-off-by: Matheus Alves matheus.r.noya.alves@tecnico.ulisboa.pt
Co-authored-by: Inês Simões ines.p.simoes@tecnico.ulisboa.pt

* Implemented Default Name Logic
Altered logic in save-slot-select-ui-handler.ts to
support default naming of runs based on the run
game mode with decideFallback function.

In game-data.ts, to prevent inconsistent naming,
added check for unfilled input, ignoring empty
rename requests.

Signed-off-by: Matheus Alves matheus.r.noya.alves@tecnico.ulisboa.pt
Co-authored-by: Inês Simões ines.p.simoes@tecnico.ulisboa.pt

* Replace fallback name logic: use first active challenge instead
of game mode

Previously used game mode as the fallback name, updated to use the
first active challenge instead (e.g. Monogen or Mono Type), which
better reflects the run's theme.
Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Rebasing and conflict resolution

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Lint fix

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Inês Simões <ines.p.simoes@tecnico.ulisboa.pt>

* Minor compile fix

* Dependency resolved

* Format name respected

* Add all active challenges to default challenge session name if possible

If more than 3 challenges are active, only the first 3 are added
to the name (to prevent the text going off-screen)
and then "..." is appended to the end to indicate
there were more challenges active than the ones listed

* Allow deleting malformed sessions

---------

Signed-off-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Signed-off-by: Matheus Alves matheus.r.noya.alves@tecnico.ulisboa.pt
Co-authored-by: Matheus Alves <matheus.r.noya.alves@tecnico.ulisboa.pt>
Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-08-13 20:08:12 -05:00
Bertie690
0da37a0f0c
[Move] Added laser focus locales (#6202)
* Added Laser Focus locales

* Fixed key for locales text

* Added `MessageAttr`; cleaned up a lot of other jank move attrs
2025-08-13 08:16:08 -07:00
Blitzy
907e3c8208
[Balance] Updates to Twins Trainer Class Pool (#6239)
* Update trainer-config.ts

* Update trainer-config.ts

* Update trainer-config.ts

* Update trainer-config.ts

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-08-12 01:10:35 -04:00
Madmadness65
cb3ae4ab87
[Audio] Add new Desert and Fairy Cave biome music (#6257) 2025-08-11 18:09:52 -04:00
Jimmybald1
6c0253ada4
[Misc] Expanded Daily Run custom seeds (#6248)
* Modify custom starters and added boss, biome and luck custom seed overrides

* Added form index to boss custom seed

* Fix circular dependency in daily-run.ts

* Review for PR 6248

- Use early returns

- Update TSDocs

- Use `getEnumValues` instead of `Object.values` for `enum`s

- Add console logging for invalid seeds

---------

Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-08-10 23:43:31 -04:00
AJ Fontaine
2b3b47cc07
Remove random unused empty Palossand exp variant masterlist entry (#6253)
Remove random unused empty Palossand exp variant masterlist entry
2025-08-10 21:40:08 -04:00
Lugiad
d6381deb2f
Optimized PNGs sizes for sprites introduced in PR6244 (#6251)
Optimized sprite PNGs sizes introduced in PR6244
2025-08-10 18:51:58 -04:00
AJ Fontaine
c1cfc02608
[Sprite] Updated animated sprites, put in consistent for White-Stripe Basculin, Basculegion, Sandygast, Palossand, Silicobra, and Sandaconda (#6244)
* Update and un-exp Sandygast and Palossand

* Update and move Basculegion, Basc-White to consistent

* Silicobra, Sandaconda

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-08-10 17:41:42 -04:00
Sirz Benjie
028deedd59
[Sprite] Add new Starter Select Ribbon icons (#6247)
Add new ribbon icons

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-08-10 10:44:56 -04:00
Wlowscha
5d4b805c13
[UI/UX][Bug] Removed extra division by 6 in starter-select-ui-handler.ts (#6245)
Removed division by 6 in starter-select-ui-handler.ts
2025-08-09 15:27:47 -05:00
Lugiad
e862334819
[UI/UX] Summary Move Effect UI adjustments (#6223)
Summary Effect tab UI image adjustments
2025-08-09 15:11:03 +00:00
NightKev
79576ad117
[GitHub] Update .github/CODEOWNERS file (#6240)
* [GitHub] Update `.github/CODEOWNERS` file

`@pagefaultgames/senior-dev-team` added to
`package.json` and `pnpm-lock.yaml`

`@pagefaultgames/balance-team` added to `/src/data/trainers`

* Move senior dev team entries to the bottom of the file
2025-08-09 03:18:40 +00:00
Madmadness65
f0a56a3049
[Sprite] Add unique trainer sprite for Rocket Boss Giovanni (#6235) 2025-08-09 02:15:33 +00:00
Madmadness65
7316628448 [Misc] Fix comment formatting nitpick in ability-id
Adds a space between every `/**` and `{@link`.
2025-08-08 20:31:51 -05:00
Blitzy
8a66cfe40b
[Bug] Fix Poké Fan in Trainer Config (#6238)
Fix Poke Fan in Trainer Config
2025-08-08 15:28:33 -04:00
damocleas
2dfe7232aa
Add 1/16 chance for Trainers in Laboratory 2025-08-08 00:27:59 -04:00
Madmadness65
32f5421b32 [Misc] Replace Abilities.ABILITY_NAME with AbilityId.ABILITY_NAME in comments
This commit mirrors the comment changes made in 375587213e.
2025-08-07 23:11:03 -05:00
Desroi
7873181726
[Bug] Fix Recoil & Shell Bell not applying when hitting Substitute
https://github.com/pagefaultgames/pokerogue/pull/5712

* Created Double Edge testing for recoil damage on substitutes

* Changed the logic for substitute damage

* Made testing for the updated substitute logic

* Update test formatting

* Fixed error in damage logic

* Apply Biome

* Fix test file

* Apply suggestion and update test

* Remove obsolete workaround and console logs

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-08-07 22:46:19 -05:00
damocleas
a289206a96
[Balance] More Passive/Egg Move/Cost changes for 1.10 (#6234)
* Update passives.ts

* Update egg-moves.ts

* Update starters.ts
2025-08-07 23:33:16 -04:00
Blitzy
98d957de75
[Balance] Champion Team Adjustments (#6132)
* Update Morty

* Update trainer-config.ts

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-08-08 02:58:40 +00:00
Blitzy
ae9f03e060
[Balance] Evil Leader Adjustments (#6133)
* Update trainer-config.ts

* Update Starmobiles to use their mainline movesets

* Update Starmobile forms and Trainer Config

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-08-07 21:45:37 -05:00
Bertie690
4bb3e11c74
[Misc] Added chance for alt title logo (#6182)
* [Misc] Added 0.1% chance for fake login screen
* Actually added logo file
* Update title-ui-handler.ts

Co-authored-by: damocleas <damocleas25@gmail.com>
Co-authored-by: Wlowscha
<54003515+Wlowscha@users.noreply.github.com>
2025-08-07 21:24:33 -04:00
NightKev
89871b10c6 [i18n] Update locales submodule 2025-08-07 18:11:47 -07:00
Bertie690
8e261512fc
[Test] Improved tests for arena trap (#6209)
* Added arena trap tests and such

* hopefullt fixed tests

* Marked test as todo since me smol brain

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-08-08 01:00:34 +00:00
fabske0
6e4dd36d5a
[Docs/Misc/i18n] Fix typos (#6231)
* fix comment typos

* fix typos in variable/parameter/class names

* fix typos in object names

* fix typos in `console.log()` and i18n key use

* fix typo in filename `abstact-option-select-ui-handler.ts`

* fix casing of `@privateremarks` to `@privateRemarks`

* fix use of `cancelControllerChoice`
2025-08-07 18:56:50 -06:00
Wlowscha
ac8ef62290
[UI/UX] Clean up some magic numbers (#6165)
* Removed unused scale parameter from InfoOverlay s

* Using `globalScene.scaledCanvas.width`

* Using `scaledCanvas` everywhere

* Replaced some sneaky instances of `scaledCanvas / 2`

* Convert comments to TSDocs

* Fix typo

* Caught a few more instances of `width / 6` etc

* Fixed unused scale parameter

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-08-07 18:49:32 -06:00
Amani H.
94650670fd
[Challenge] Add Nuzlocke-related Challenges (#6186)
* [Challenge] Add Nuzlocke-related Challenges

Co-authored-by: Matilde Simões <matilde.simoes@tecnico.ulisboa.pt>
Co-authored-by: Fuad Ali <fuad.ali@tecnico.ulisboa.pt>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirzento <sirzento@gmx.de>

* Add Sacred Ash to `revive` Group

* Separate Challenge Utility Functions

* Misc. Changes

* Transition to `BooleanHolder`

* Add "Nuzlocke" Achievement

* Change Challenge Order

* Adjust Nuzlocke Achievement to Include Fresh Start

* Fix Infinite Reward Reroll Bug

* Fix Party Heal

* Minor Change

* Adjust TODOs

* Add Unit Tests

* Tweak Faint Cry in Permanent Faint

* Resolve rebase issue

* Apply Matthew's Suggestions

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Apply Matthew's Suggestions Pt. 2

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Fix and Lint Suggestions

* Revert Accidental Overrides

* Fix and Lint Suggestions Pt. 2

* Rename Challenges

* Prevent `RandomMoveAttr` from Using Banned Moves

* Update Locales

---------

Co-authored-by: Matilde Simões <matilde.simoes@tecnico.ulisboa.pt>
Co-authored-by: Fuad Ali <fuad.ali@tecnico.ulisboa.pt>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirzento <sirzento@gmx.de>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-08-07 18:47:28 -06:00
damocleas
d7194accdd
[Balance] Minor ME Adjustments and Fixes 1.10 (#6166)
- Adjusted A Trainer's Test
- Adjusted The Expert Pokémon Breeder
- Adjusted Trash to Treasure
- Adjusted Weird Dream

- Reorganized Dark Deal
- Adjusted Weird Dream Test
2025-08-07 16:42:58 -05:00
damocleas
167e3ae38f Update locales 2025-08-07 14:03:59 -04:00
Sirz Benjie
ce64bad987
[Misc] More battler tag fixups (#6194)
* More battler tag fixups

* Minor fixup for onStatStagesChanged call
2025-08-07 08:03:46 -06:00
Sirz Benjie
ba5db5607d
[Bug][UI/UX][Refactor] Fix empty movesets related to starter forms and general SSUI cleanup (#6080)
* Use phaser method chaining

* Create updateSelectedStarterMoveset and fix moveset adjustment for pokemon forms

Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com>

* Apply biome formatting

* Remove obsolete comment

---------

Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-08-07 08:03:20 -06:00
thisPieonFire
4edcdc9192
[Bug] [Move] Court Change now swaps Safeguard and Pledge Effects (#6069)
* Add unit test for the "Court Change" move

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Add unit test for the "Court Change" move

* Improve formatting in the "Court Change" move unit test

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update test/moves/court-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Added missing import

* Added missing import (ArenaTagSide)

* Update court-change.test.ts

---------

Co-authored-by: PieonFire <purpledream96@hotmail.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-08-06 08:48:11 -04:00
damocleas
bb86bdd2a6
[Balance] Add Scientist to Lab, Swimmer to Seabed to account for ME's
https://github.com/pagefaultgames/pokerogue/pull/6217
2025-08-05 19:57:51 -07:00
Sirz Benjie
1633df75c4
[UI/UX] Add change password ui (#5938)
* Add change password ui

* Ensure input fields are cleared after submit or cancel

* Play select sound on successful submission or cancel

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-08-05 16:35:58 -06:00
Jimmybald1
3b36ab17e4
[Bug] Protect now tracks success chance properly (#5869)
* Protect rng now resets on new waves and fixed to look at all turns in the same wave.

* Added per-wave move history object to fix issues

@Jimmybald1 I added a commented out `console.log` in the protect code (L5797) for you to use for testing

* Added many tests

* Wave move history has to be looped in reverse

* Update src/data/moves/move.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update src/data/moves/move.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* comments

* Fixed forceEnemyMove references after merge

* Removed console log

Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>

* Fixed test message

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Apply Biome

* Fix merge issues

* Fix Crafty Shield test

* Remove protect chance reset on wave change

* Fix merge issue

---------

Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-08-05 07:35:14 +02:00
NightKev
375587213e [Misc] Replace Moves.MOVE_NAME with MoveId.MOVE_NAME in comments 2025-08-04 21:24:58 -07:00
Bertie690
8da02bad50
[Test] Replace game.scene.getXPokemon()! with game.field.getXPokemon()
https://github.com/pagefaultgames/pokerogue/pull/6178

* Replaced all instances of `game.scene.getXXXPokemon()!`
inside tests with `game.field.getXXXPokemon()`

* Fixed tests

* Fixed oblivious test

* Fix Grudge test
2025-08-04 21:19:57 -07:00
Amani H.
5bfcb1d379
[Bug] Release Fainted Pokémon in Switch Menu (#6215)
* [Bug] Release Fainted Pokémon in Switch Menu

* Add Kev's Suggestions
2025-08-04 15:55:36 -07:00
Acelynn Zhang
40443d2afa
[Bug] Fix override move animations not loading for enemy Pokemon
https://github.com/pagefaultgames/pokerogue/pull/6214
2025-08-04 14:33:01 -07:00
Sirz Benjie
800b8c9905
[Bug] [Beta] Fix serialization with transform (#6207)
Fix serialization with transform
2025-08-04 09:10:24 -06:00
Blitzy
8a2b888971
[Balance] Update and Change Breeder Trainer Class Teams (#6200)
* Update Breeder Trainer Class

* Update trainer-config.ts

* Update trainer-config.ts

* Update whirlwind.test.ts

* Update src/data/trainers/trainer-config.ts

Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com>

* Adjust Party Templates and move Wynaut

* Update trainer-party-template.ts

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com>
2025-08-03 16:53:10 -04:00
Amani H.
0bc78cb715
[Balance] Prevent MEs on X1 Waves (#6204)
* [Balance] Prevent MEs on X1 Waves

* Fix Bug-Type Superfan Encounter Test

* Fix Unit Tests
2025-08-03 03:05:54 +00:00
AJ Fontaine
e8ab79ebed
[Dev] Move various functions out of pokemon-species.ts (#6155)
`initSpecies` moved to its own file,
other functions moved to `pokemon-utils.ts`
2025-08-02 19:35:06 -07:00
Blitzy
491df80b66
[Beta] Further Cosmog Evolution Readjustments (#6203)
Update pokemon-evolutions.ts
2025-08-02 21:08:50 -04:00
Bertie690
5ed9e152ab
[Test] Port over + augment remaining test matchers from pkty (#6159)
* Partially ported over pkty matchers (WIP)

* Cleaned up some more matchers

* Fiexd up matchers

* Fixed up remaining matchers

* Removed the word "matcher" from the pkty matcher functions

If we want them back we can always undo this commit and convert the other custom ones

* Added wip spite test

* Added `toHaveUsedPP` matcher

* Fixed up docs and tests

* Fixed spite test

* Ran biome

* Apply Biome

* Reverted biome breaking i18next

* Update src/typings/i18next.d.ts comment

* Fixed log message to not be overly verbose

* Added option to check for all PP used in pp matcher + cleaned up grudge tests

* Fixed up tests

* Fixed tests and such

* Fix various TSDocs + missing TSDoc imports
2025-08-02 15:35:06 -07:00
Blitzy
acb1f4184b
[Balance] Adjust Cosmog / Cosmoem Evolutions, Lower Buneary Friendship requirements (#6198)
* Lower Buneary Friendship Requirement and Change Cosmog method

* Update biomes.ts - Cosmog/Cosmoem wild evo levels

* fix ?

* fixed now

* Update Cosmog Evolution + Biome Levels

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-08-02 18:05:07 -04:00
Bertie690
957a3e5c24
[Misc] Move asset initialization from preload to launchBattle
https://github.com/pagefaultgames/pokerogue/pull/6109

* Move asset initialization into `preload` instead of `launchBattle`

* Fix init problems; remove unused `waitUntil` util function

* Fixed missing `clearAllPhases` call
2025-08-02 14:29:35 -07:00
AJ Fontaine
1f5e089818
[Beta] Remove non-Legend Fresh Start option, fix starting movesets
https://github.com/pagefaultgames/pokerogue/pull/6196

* Remove non-Legend fresh start option, fix starting movesets

* Move updateInfo call

* Fix relearns counting for starter moves

* Reduce array allocations and function calls
2025-08-02 13:48:51 -07:00
Bertie690
97ddcb711b
[Test] game.move.use overrides summon data moveset if present (#6174)
* [Test] Update `game.move.use` to override summon data moveset if present

* ran biome & fixed errors
2025-08-02 19:40:30 +00:00
Sirz Benjie
93525b5803
[Bug] [Beta] Remove setting currentPhase to null in clearAllPhases (#6193)
Remove setting currentPhase to null in clearAllPhases
2025-08-01 13:38:43 -06:00
Sirz Benjie
c6ca35c4ab
[Misc] Set default for crit stage battler tag (#6192)
Set default for crit stage
2025-08-01 12:59:53 -06:00
Sirz Benjie
e50ebaa815
[Misc] Fix missing types in battler tags and remove DragonCheerTag (#6188)
* Fix missing types in battler tags

* Fix issues with dragon cheer
2025-08-01 12:51:11 -06:00
AJ Fontaine
1c59b67d7e
[Sprite] Move Clauncher, Clawitzer, Skiddo, Fomantis, Lurantis animations to consistent (#6177)
* Move Clauncher, Clawitzer, Skiddo out of exp

* Move Fomantis, Lurantis out of exp
2025-08-01 13:08:28 -04:00
NightKev
f54890001c
[Dev] pnpm biome will now only display errors by default (#6187) 2025-07-31 20:06:38 -06:00
Sirz Benjie
8ef2fadce4
[Misc] Disallow using NonFunctionProperties in loadTag methods (#6185)
Disallow using NonFunctionProperties in loadTag methods
2025-07-31 19:08:41 -06:00
Sirz Benjie
4dd6eb4e95
[Misc] [Beta] Fix serializable battler tags (#6184)
Fix serializable battler tags
2025-07-31 17:57:53 -06:00
Sirz Benjie
6204a6fdcb
[Bug] [Beta] Fix serializable battler tags (#6183)
Fix serializable battler tags
2025-07-31 17:44:03 -06:00
Lugiad
12433b78e5
[i18n] Add Tagalog language support (#6170) 2025-07-31 15:13:05 -07:00
damocleas
c3b6e9e6b5 Update locales 2025-07-31 17:07:48 -04:00
Acelynn Zhang
901f6a6812
[Bug] Fix Truant behavior (#6171) 2025-07-31 20:18:11 +00:00
Tiago Rodrigues
75ececd942
[UI/UX] Implement Discard Button (#5985)
* [feature]Implemented needed parts for discard function from issue #4780:
-TryDiscardFunction in battlescene;
-Created a party discard mode button;
-Updated Transfer button in modifier-select-ui-handler to Manage items;
-Created tests for the discard function in test/ui;
-Added images for the new discard and transfer buttons to loading-scene;
-Created placeholder messages for discard feature in party-ui-handler;

Co-authored-by: Tiago Rodrigues <tiago.n.rodrigues@tecnico.ulisboa.pt>

* [Fix] Updated icon for dynamic messaging

* [Fix] Corrected legacy mode icons and adjusted double-battle button location

* [Fix]Adjusted button positioning and mapping after review. Mapping requires debugging.

* [Fix] Fixed visible pokeball in legacy mode and key mapping

* [Fix] Background fixes,manage menu is the only one affected by changes now

* Implement i18n keys

* [Fix] implemented most code optimizations and callbacks to the modified locales folder

* [Fix] Implemented 3 suggestions

* [Fix]improved/corrected test structure

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* [Fix] added functionality test for the discard button

* [Fix] added necessary comment

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* [Fix] Implemented suggested changes in test/discard text prompt

* [Fix] Implemented UI suggestions and removed discard text confirmation

* [Fix] added missing imports

* Fix imports in test file

* [Fix] Implemented suggested cursor behavior and reworked test code

* [Fix] Corrected failed test

* [Fix] atempting to fix the test timeout issue

* [Fix] Undoing latest attempt

* [Fix] Implemented suggestions to fix broken tests

* Reviews

* [Fix] replaced icon images

* [Fix] Updated jsons to match new icons and removed pokeball icon from legacy mode

* Optimized new images

* [Fix] Fixed referenced bug and added similar confirmation box to release

* [Fix] Updated tests to handle the corfirmation box

* [Fix] Added back the accidentally removed changes

* [Fix]updated incorrect import path

* [fix] add description for the manageItemMode function

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update src/ui/party-ui-handler.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* [Fix] corrected formating issue

---------

Co-authored-by: Mikhail Shueb <mikhail.shueb@tecnico.ulisboa.pt>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: damocleas <damocleas25@gmail.com>
Co-authored-by: Bertie690 <taylormw163@gmail.com>
Co-authored-by: Adri1 <adrien.grivel@hotmail.fr>
2025-07-31 16:14:51 -04:00
Bertie690
8b304adf14
[Refactor] Added PhaseManager.toTitleScreen (#6114)
* Added `toTitlePhase`; documented phase manager

* Documented phase methods

* Fixed syntax errors + updated signature

* Reverted all the goodies

* Fixed missing shift phase call

GHAG

* Reverted change
2025-07-31 06:27:54 +00:00
Bertie690
f7b87f3d1e
[Move Bug] Fully implemented Future Sight, Doom Desire; fixed Wish Double battle oversight (#5862)
* Mostly implemented Future Sight/Doom Desire

* Fixed a few docs

* Fixed com

* Update magic_guard.test.ts

* Update documentation

* Update documentation on arena-tag.ts

* Update arena-tag.ts docs

* Update arena-tag.ts

* Update turn-end-phase.ts

* Update move.ts documentation

* Fixed tpyo

* Update move.ts documentation

* Add assorted TODO test cases

* Refactored FS to use a positional tag manager

* Added strong typing to the manager, finished save load stufff

* Fixed locales + tests

* Fixed tests and documentation

* sh
Fixed tests for good

* Fixed MEP

* Reverted overrides changse

* Fixed issues with merging

* Fixed locales update & heal block test

* Fixed wish tests

* Fixed test typo

* Fixed wish test flaking out due to speed ties

* Fixed tests fr fr

* actually fixed tests bc i'm stupid

* Fixed tests for real

* Remove locales update

* Update arena-tag.ts

Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com>

* Update move.ts

Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com>

* Update arena-tag.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Applied review suggestions and added a _wee_ bit more docs

* fixed wish condition

* Applied kev's reviews

* Minor nits

* Minor formatting change in `heal-block.test.ts`

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-30 22:43:06 -06:00
Bertie690
12acaa9590
[Balance] Updated SF/Triage interactions for moves (#6179)
* Fixed move flags

* Disabled order up interactionn with sheer force

* Update src/data/moves/move.ts

* Removed order up test that no longer applies

shouldn't have been there in the first place
2025-07-31 03:55:52 +00:00
Sirz Benjie
9475505cd2
[Misc] Improve type signatures of serialized arena/battler tags (#6180)
* Improve type signatures of serialized arena/battler tags

* Minor adjustments to tsdocs from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

---------

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-30 20:59:14 -06:00
Bertie690
1ae69a4183
[Dev] Moved type helpers to separate directory; (#6123)
* [Dev] Moved type helpers to separate directory; renamed `EnumValues` to `ObjectValues` and enforced usage

* Update tsconfig.json

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fixed import issue

* Updated documentation slightly

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com>
2025-07-30 18:17:17 -07:00
fabske0
17eeceb4f3
[UI/UX] Fix button and input field overlaps (#6013)
* [Fix] Fix button overlap

* [Fix] Fix input field overlaps

* use getWidth to determine if label should be shortened

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: damocleas <damocleas25@gmail.com>
2025-07-30 19:58:10 +02:00
NightKev
6ae2bd70cf [Test] Add missing single battle override to CheckInterludePhase test 2025-07-29 20:02:30 -07:00
NightKev
10b9cfcdb0
[Balance] End of turn triggers won't occur when you end a biome (#6169)
* [Balance] End of turn triggers won't occur when you end a biome

* Add tests

* Move phase manipulation logic into `PhaseManager`

* Rename "biome end" to "interlude"

* Rename `TurnEndPhase#endOfBiome` to `upcomingInterlude`

---------

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-07-29 22:50:57 +00:00
NightKev
ede2a947ca [Docs] Adjust @module doc comment in battler-tags.ts
Note that currently Typedoc is not parsing `@module` docs,
but this comment adjustment would be required if and when
it gets fixed
2025-07-29 15:31:44 -07:00
Sirz Benjie
32faab05d5
[Refactor] Minor refactor of battler tags (#6129)
* Minor refactor battler tags

* Improve documentation

* Update type when loading in pokemon-data constructor for battler tags

* Fix issues in tsdoc comments with Wlowscha's suggestions

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>

* Apply bertie's suggestions from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Remove unnecessary as const from tagType

* Remove missed `as const`

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update src/data/battler-tags.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update src/data/battler-tags.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

---------

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-29 17:47:24 -04:00
AJ Fontaine
b1561ce741
[ME] [Bug] Disable trades in GTS ME with only 1 valid party member
https://github.com/pagefaultgames/pokerogue/pull/6167
2025-07-29 20:15:17 +00:00
NightKev
9f74bfff94
[Dev] Update Vite from 6.3.5 to 7.0.6 (#6163) 2025-07-29 15:59:41 +00:00
Sirz Benjie
0517d5704a
[Refactor] Mark nickname in pokemon as optional (#6168)
Mark nickname in pokemon as optional
2025-07-28 22:13:10 -04:00
Bertie690
48db9491c6
[Test] Add support for custom boilerplates to create-test.js (#6158)
* Added support for custom boilerplates to test:create script

* Added support for custom boilerplates to create-test.js

* Fixed syntax error

* Update create-test.js

Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>

* Fix pluralization error in `create-test.js`

---------

Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>
2025-07-28 18:51:43 +00:00
Bertie690
c92b895946
[Dev] Add workflow-dispatch trigger to tests github workflow (#6152)
Add `workflow-dispatch` trigger to github workflow

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-07-28 20:43:36 +02:00
AJ Fontaine
903fad89d9
[Balance][Challenge] Added expanded Fresh Start options (#6162) 2025-07-27 22:46:11 -07:00
Sirz Benjie
d41e6055e7
Merge pull request #5873 from SirzBenjie/refactor-command-phase
[Refactor] Refactor command phase
2025-07-27 23:32:30 -06:00
Sirz Benjie
0c82b3f514
Improve documentation
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-27 22:24:07 -06:00
Sirz Benjie
ed915dcb58
Apply kev's suggestions from code review
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-27 22:24:06 -06:00
NightKev
c0a42985bf
Fix imports 2025-07-27 22:24:06 -06:00
Sirz Benjie
26cbf2db8c
Update with Bertie's comments
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-27 22:24:05 -06:00
Sirz Benjie
1df3ac0962
Explicitly check against Moves.NONE
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-27 22:24:05 -06:00
Sirz Benjie
e1e7287919
Improve canUse computation 2025-07-27 22:24:04 -06:00
Sirz Benjie
adb5900497
Fix improperly named computeMoveId method 2025-07-27 22:24:04 -06:00
Sirz Benjie
9218d35938
Add overload for handle command 2025-07-27 22:24:03 -06:00
Sirz Benjie
22d2b4a436
Minor touchups 2025-07-27 22:24:03 -06:00
Sirz Benjie
958eb00566
Breakup commandPhase#start
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-27 22:24:02 -06:00
Sirz Benjie
22b9a19ba6
Breakup run and pokemon commands 2025-07-27 22:24:01 -06:00
Sirz Benjie
0935d817e9
breakup fight and ball commands into their own methods 2025-07-27 22:24:01 -06:00
NightKev
462b423cb8
[Dev] Change target to ES2023 in tsconfig.json (#6160) 2025-07-28 00:20:02 -04:00
Bertie690
157b662f9e
[Bug] Fix camel case bug in strings.ts (#6161) 2025-07-27 20:17:46 -07:00
NightKev
3434078329 [Docs] Add @module modifier tag to tsdoc.json 2025-07-27 18:03:34 -07:00
Sirz Benjie
c0e755c3c3
[Refactor] Prevent serialization of full species in pokemon summon data
https://github.com/pagefaultgames/pokerogue/pull/6145

* Prevent serialization of entire species form in pokemon summon data

* Apply suggestions from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Apply Kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-27 18:01:44 -07:00
Bertie690
19730f9cf0
[Misc] Moved + cleaned up string manipulation functions (#6112)
* Added string utility package to replace util functions

* Changed string manipulation functions fully over to `change-case`

* Fixed missing comma in package.json

trailing commas when :(

* fixed lockfile

* Hopefully re-added all the string utils

* fixed package json

* Fixed remaining cases of regex + code dupliation

* Fixed more bugs and errors

* Moved around functions and hopefully fixed the regex issues

* Minor renaming

* Fixed incorrect casing on setting strings

pascal snake case 💀

* ran biome
2025-07-27 13:59:03 -07:00
Bertie690
29d9bb6e7b
[Dev] Turned on checkJs in TSConfig; fixed script type errors (#6115) 2025-07-27 20:42:57 +00:00
NightKev
7cb2c560ab [Misc] Fix import in vitest.d.ts 2025-07-27 13:32:47 -07:00
Bertie690
f3854abc16
[Test] Added custom equality matchers (#6157)
* Added rudimentary test matchers for `toEqualArrayUnsorted` and `toHaveTypes`

Might port the rest at a later date

* Actually run the effing setup matchers file + fixed ls lint to not be angy

* added dev dep

* Update .ls-lint.yml

* Update .ls-lint.yml

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>
2025-07-27 20:16:04 +00:00
Sirz Benjie
1b8082a177
[Refactor] Refactor UI text ts (#5946)
* Add destroy method to pokemon-sprite-sparkle-handler

* Move TextStyle to enums, convert into const object

* Cleanup text.ts file

* Add necessary explicit types for TextStyle let vars

* Fix locales submodule commit

* Fix merge issue

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-27 17:46:56 +00:00
Sirz Benjie
ed8858e07d
[Bug][Beta] Make bounce delay use fixed int (#6156)
Make bounce delay use fixed int
2025-07-26 21:58:06 -05:00
Sirz Benjie
2f1cf2fc13
[Beta] [Bug] Fix shiny display issues (#6154)
Fix shininess check
2025-07-27 02:35:39 +00:00
damocleas
a117ff9bc8 [i18n] Update Locales 2025-07-26 22:31:55 -04:00
NightKev
30a6f47081 [Dev] Add dist/ to ls-lint ignore list 2025-07-26 19:23:18 -07:00
SmhMyHead
08d7216424
[UI/UX] Added "Hide Username" Setting (#6105)
* [UI/UX] Added "Hide Username" Setting

* Mask tid with asterisk instead of hiding completely

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-07-26 22:34:21 +00:00
Sirz Benjie
0ef1a34030
[Refactor][Bug] Illusion no longer overwrites data of original Pokemon
https://github.com/pagefaultgames/pokerogue/pull/6140
2025-07-26 16:07:16 -06:00
Sirz Benjie
4f259e2c2f
[Misc] Fix import in decrypt-save.js (#6149) 2025-07-25 22:30:58 -07:00
Bertie690
bb46ba9f60
[Dev] Added typedoc deployments for Beta (#6147) 2025-07-25 21:58:15 -07:00
damocleas
556d588d67
[UI/UX] Replace 'Neutral' in the Arena Flyout with 'Field' (#6139)
Update arena-flyout.ts for Field > Neutral
2025-07-25 21:20:48 -04:00
Acelynn Zhang
2e3a7d47e0
[Bug] Fix Thrash continuing on caught Pokemon (#6144)
Fix Thrash continuing on caught Pokemon
2025-07-25 23:55:13 +00:00
Bertie690
ab394db9cf
[Refactor] Minor cleanup of initExpKeys (#6127) 2025-07-25 18:39:25 -05:00
NightKev
7b7edbb474
[Test] MoveHelper#changeMoveset disables moveset overrides (#5915)
Also fix Assist tests and add `expect` for max moveset length
2025-07-25 16:22:52 -07:00
Sirz Benjie
ffa3d1cfe3
[UI/UX] [Bug] Fix ModifierSelectPhase animation delay (#6121)
* Rework promise handling to ensure no races

* Add delay to ensure pokeball opening animation can be seen

* Remove leftover debug statements.

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Add tween bouncing pokeball to tweens that must complete for promise to resolve

* Fix typo in tsdoc

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-25 20:36:21 +00:00
Acelynn Zhang
fc128a2f4c
[Bug] Fix when variable move power is called (#6126)
* Apply variable power attribute before type boost

* Update test/abilities/normal-move-type-change.test.ts

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Minor test improvements

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-24 23:16:23 -07:00
Madmadness65
99545cf3c7
[Misc] Sinistea and Poltchageist line alt forms now available (#4989)
* Sinistea and Poltchageist line alt forms now available

* Unmark Poltchageist line as unobtainable, fix sprite key of alt forms

* Correct forms not being marked as starter selectable

* Reduce wild chance for Antique/Masterpiece forms

Instead of being 1/2 chance to get the Antique or Masterpiece forms, it is now only a 1/16 chance to get them.

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-07-25 01:45:09 +00:00
Bertie690
6ad11015f7
[Dev] Remove sanitizeOverrides, consolidate initialization code into 1 file
https://github.com/pagefaultgames/pokerogue/pull/6134

* Removed `sanitizeOverrides`

* Moved initialization code to its own file

* Hopefully fixed test contamination

* Actually listened to people now

* fixed the thingy

* Run stub setup on init because

* Update testFileInitialization.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-25 01:23:13 +00:00
Acelynn Zhang
6211fbd471
[Bug] Unblock priority spread under Psychic Terrain (#6136)
Unblock priority spread under Psychic Terrain

Co-authored-by: Acelynn Zhang <acelynnzhang@Acelynns-MacBook-Pro.local>
2025-07-25 01:05:14 +00:00
Bertie690
3940abbeaf
[Dev] test:silent now passes --silent='passed-only' to Vitest (#6131)
* [Dev] test:silent now passes --silent='passed-only' to Vitest

* Update test shard to actually use `test-silent`

* Removed obselete `project` flag
2025-07-24 17:56:11 -07:00
Sirz Benjie
51d4c33de0
[Misc] Standardize-file-names (#6137)
* Standardize filenames to kebab-case

Co-authored-by: pymilkmaiden <cassiopeiamahler56@gmail.com>

* Move script outside of public folder

* Move update_exp_sprites to scripts

* Add ls-lint to lint file and directory names

* Update lefthook.yml to skip merge / rebase on all pre-commit commands

---------

Co-authored-by: pymilkmaiden <cassiopeiamahler56@gmail.com>
2025-07-24 16:38:31 -04:00
Lugiad
58876a2086
[UI/UX] [Localization] Apply single-column Game Stats to more languages (#6135)
Apply sigle-column Game Stats to more languages
2025-07-24 11:48:52 -04:00
Sirz Benjie
ef843debee
[UI/UX] Allow adjustable column count in stats-ui-handler
https://github.com/pagefaultgames/pokerogue/pull/6087

* Make column count modular

Co-authored by: ShinigamiHolo <128856544+ShinigamiHolo@users.noreply.github.com>

* Make game stats ui handler use phaser method chaining

* Adjust max cursor calculation

* Make arrowUp start invisible

* Add implementations for setFlip methods in MockSprite

* Misc cleanup

* Address kev's review comments

* Address kev's review comments

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* improve clarity of doc comment

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-23 23:06:17 -04:00
Lugiad
adee68a6d5
[UI/UX] Optimized Pokémon PNGs (#6130)
Optimized Pokémon PNGs
2025-07-23 11:16:09 -07:00
Sirz Benjie
b1e1a383fb
[Bug] Appropriately load delayed attack when target index was player
https://github.com/pagefaultgames/pokerogue/pull/6128
2025-07-22 16:10:43 -07:00
Sirz Benjie
069e8a47d6
[Bug][Refactor] Fix loading arena tags (#6110)
* Improve type safety; add missing loadTag overrides to wish and neutralizing gas

* More automatic type safety for arena tags

* Fixup wording of lead comment in arena-tag.ts

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Allow abstract constructors for arena methods

* Address dean's comments from code review

* Add missing newline after interface definition

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Format with biome

* Update tsdoc of ConditionalProtectTag

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-22 11:26:27 -07:00
Bertie690
6937effa16
[Misc/Docs] Assorted code cleanups + doc updates (#5745)
* Squashed changes into 1 commit, reverted unneeded stuff

* Update ability-class.ts comments

* Update move.ts comments

* Fixed flaky test

* Applied PR reviews

* Update move.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fixed ab code

* Added comment for BattlerIndex

* ddd

* ren biome

* Update battler-tags.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update battler-tags.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update pokemon.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update pokemon.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update pokemon.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fixed the things

* Fixed up a few `default` stuff and random enum stuff

* Update move.ts comments

* Revert change to pokemon.ts

* Update battle-scene.ts

* fixed import oopsie

* Update src/field/pokemon.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update src/data/abilities/ability.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update src/data/abilities/ability.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fix incorrect TSDoc

* Update ability.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-22 10:28:10 -07:00
podar
56e3402c81
[Bug] [QoL] Updating manifest fetching to be more resilient for local development and offline builds. (#4735)
* Fixing local development and offline builds

* Update src/main.ts

---------

Co-authored-by: Moka <54149968+MokaStitcher@users.noreply.github.com>
2025-07-22 00:08:17 -05:00
Bertie690
6aa5c03b75
[Test] Removed unnecessary calls to PhaseInterceptor.to("CommandPhase") (#6108)
* [Test] Removed unnecessary calls to `PhaseInterceptor.to("CommandPhase")`

* minor cleanup to final_boss.test.ts

* Made run to final boss encounter actually go to command phase

* fix final_boss.test.ts select bug

* actually fixed test fr this time

* Fix magnet_rise.test.ts

* Fixed test

* Update test/moves/stockpile.test.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update stockpile.test.ts

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-21 17:44:39 +00:00
Bertie690
a382554256
[Test/Ability] Cleaned up Magic Guard/battle tests; fixed innards out interaction (#5911)
* Fixed tests for Magic Guard, Battle phase; fixed innards out stuff

* Fixde magic guard aftermath

* fixed tests

* Fixed innards out

* fixed using sizzly slide instead of will o wisp to inflict burn

* ran boime

* Readd simulated oopsie

* Fix HJK test to use protect + docs and such

* Apply Biome

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-21 17:42:27 +00:00
Lugiad
8c825f1714
[UI/UX] Optimized images (#6125) 2025-07-21 10:40:21 -07:00
Bertie690
02cdec25a8
[Dev] Disabled biome noAwaitInLoop rule (#6124) 2025-07-21 09:25:42 -07:00
Madmadness65
1428d8b870
[Balance] Add faint trigger to various form changes (#6122)
* [Balance] Add faint trigger to Battle Bond Greninja's form change

The form change functionality will now be slightly closer to Generation 7/8, as the Greninja will now revert from Ash form to Battle Bond form upon fainting.

* Change how the form change on faint is triggered

It is no longer directly handled by the faint phase, and is instead part of the abilities now, as more than Battle Bond Greninja revert via this method (Disguise Mimikyu, Power Construct Zygarde).

* Adjust Disguise test
2025-07-20 18:59:01 +00:00
NightKev
8dd6608e10
[UI] Status moves only show 1x or 0x for effectiveness hints (#6119) 2025-07-20 09:48:27 +02:00
Lugiad
275ea48744
[UI/UX] [Localization] Optimized type/status icons + new translations (#6120)
* Optimised type/status icons pngs + zh-TW translation

* Optimised type/status icons pngs + zh-TW trans.

* Updated German status icons
2025-07-19 15:57:58 -07:00
Sirz Benjie
2388372cca
[Dev] Add support for manually rolling polyfills. Add polyfill for promise.withResolvers (#6103)
* Add polyfill for Promise.withResolvers

* Import polyfills in main

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Address comments from code review

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-19 09:06:32 -07:00
NightKev
556721127c [i18n] Update locales submodule 2025-07-19 02:39:00 -07:00
damocleas
4f4ca5f0c7
[Art][Sprite] Improve Plains Background, add Biome Props (#6118)
* Plains Background Improvement, add Props

* Update CREDITS.md for new biome assets

* Update flower and everstone props
2025-07-19 02:04:15 -04:00
Bertie690
626eb3da87
[Dev] Fixed lefthook to no longer reset submodules on file checkouts
https://github.com/pagefaultgames/pokerogue/pull/6113
2025-07-18 22:42:23 -07:00
NightKev
a81e187164
[i18n] Pokemon#getOpponentDescriptor no longer returns a pokemon name
https://github.com/pagefaultgames/pokerogue/pull/6053
2025-07-18 23:42:51 +00:00
SmhMyHead
def80f2e10
[UI/UX] Baton shows on top, De/Activate form shows on bottom (#6104)
[UI/UX] Batton shows on top, De/Activate form shows on bottom
2025-07-18 03:36:53 +00:00
NightKev
a6e4459ecd
[Dev] Fix if statement in beta deploy script (#6107) 2025-07-17 03:38:58 -07:00
NightKev
4dca988823
[Dev] Update packages (#6088)
* Update packages

* Add default values for tweens

* Add mocks for `InputText` and `BBCodeText`

* Delete deprecated `vitest.workspace.ts`

* Replace `new InputText` with `globalScene.add.rexInputText`

* Disable broken Magic Bounce test

* Disable broken test in `stockpiling.test.ts`
2025-07-16 22:28:17 -07:00
Sirz Benjie
de2d4c8b0e
[AI] Minor fixup of matchup score (#6100)
* Minor fixup of matchup score

* Add some comments discussing deficiencies

* Fixup incomplete comment

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-16 19:52:57 +00:00
Sirz Benjie
b3f4005a16
[Bug] Fix return in applyChosenModifier; prevent race condition in modifier-ui-handler (#6099)
* Fix return in applyChosenModifier

* Stop race condition in modifier-select-ui

* Fix null errors inside the tween's onUpdate method

* Minor cleanup of tween chains

* Minor cleanup of tween chains

* Minor fixup
2025-07-16 17:25:58 +00:00
damocleas
3d42e976b7
[Balance] Encounter condition adjustments for Legendaries and Random Trainers (#6084)
* Adjust Trainer Chances, Legendary Encounter Waves

* Poipole, Kubfu, and Type: Null checked

* 55 made the default

* Update src/field/arena.ts

Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com>

* Replace `switch (true)` with `if/else`

* fix comment

Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com>

* Update arena.ts random trainer chances in biomes

* Update arena.ts random trainer chances in biomes

* beach.,

---------

Co-authored-by: Madmadness65 <blaze.the.fireman@gmail.com>
Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-16 11:21:52 -05:00
NightKev
fcdbf16bc3 [Test] Fix first-attack-double-power.test.ts tests
The trainer type overrides appear to be bugged currently
2025-07-15 23:40:27 -07:00
Bertie690
268605a5e3
[Dev] Move typedoc settings to typedoc.json and add tsdoc.json
https://github.com/pagefaultgames/pokerogue/pull/6102

* Move typedoc settings out of tsconfig

* Create typedoc.json

* Apply Biome

* Add `tsdoc.json` for `@todo` and `@linkcode`

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-15 23:28:02 -07:00
AJ Fontaine
583b3758c0
[Dev] Move Fixed Battle Configs to own file (#6054) 2025-07-15 21:54:15 -07:00
Bertie690
e05d85977e
[Dev] Updated enum utils to have strong typing (#6024)
* Updated enum utils to refuse non-enum values;
added strong typing on return values

* Moved Enum functions to own file; added type helpers for enums

* Cleaned up some code

* Fixed up tests

* Fix training-session-encounter.ts
2025-07-15 01:14:02 -07:00
NightKev
2e06b10f40 [Test] Fix Bolt Beak/etc test 2025-07-15 00:34:03 -07:00
Sirz Benjie
971a86d20a
[Beta][Bug][UI/UX] Ensure setCursor is called if not first turn (#6098)
Ensure setCursor is called if not first turn
2025-07-14 19:07:12 -04:00
Blitzy
773229effd
[Balance] 1.10 Passive, Egg Move, and Starter Cost Changes (#6097)
* Update egg-moves.ts 38 egg move changes

* Update passives.ts - 23 passive changes

* Updates starters.ts - 2 cost changes

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-07-14 19:06:34 -04:00
Sirz Benjie
6e6f9da1fd
[Bug] Fix grey caught indicator for genderless pokemon (#6095)
Fix grey caught indicator for genderless pokemon
2025-07-14 16:57:38 -04:00
Sirz Benjie
374fb9613a
Revert "[Bug] Genderless Pokemon no longer grey out the caught icon" (#6094)
Revert "[Bug] grey caught indicator for genderless pokemon (#5935)"

This reverts commit 5104f5712f.
2025-07-14 16:35:15 -04:00
fabske0
5104f5712f
[Bug] grey caught indicator for genderless pokemon (#5935)
* grey caught indicator for genderless pokemon

* adding suggestions

---------

Co-authored-by: damocleas <damocleas25@gmail.com>
2025-07-14 15:37:59 -04:00
Sirz Benjie
de8491505b
[Test] Address flaky tests and add Metronome mock helper (#6093)
- Fix `copycat`, `first-attack-double-power` and `ability-ignore-moves`

* Add utility method for forcing metronome move

* Stop bolt beak / fiscious rend flakiness
2025-07-13 22:20:09 -07:00
NightKev
22e399be8b [Test] Disable flaky test 2025-07-13 21:23:34 -07:00
NightKev
6863044698 [Test] Fix Intimidate test 2025-07-13 20:14:59 -07:00
Lugiad
362dd9e2b9
[UI/UX] HEADER_LABEL TextStyle Fix (#6089) 2025-07-13 17:59:51 -07:00
Madmadness65
d22a4d5c9f [i18n] Update locales submodule 2025-07-13 02:59:50 -05:00
NightKev
8cf1b9f766
[Dev] Enable Biome import sorting (#6052)
* [Dev] Enable Biome import sorting

Additional changes:

- Implement import aliases

- Convert default exports to named exports

- Remove relative imports

* Apply changes

* Misc fixes

* Merge cleanup
2025-07-13 00:21:25 -07:00
Jonathan Bankston
22c386ea9e
[BUG] Fix Transform and Imposter issues (#6008)
* Fixed Transform and Imposter Bug

* Updated Comments

* Revised Comments

* Revised Changes on how tranformed pokemon are referenced to align with reviewer's suggestions

* Removed unused BattlerTag type for transform

* Removed addition of the transform tag to a pokemon in the PokemonTransformPhase

* Moved the check for whether Transform can be used within the TransformAttr class as suggested and removed uneccesary moveId check

* Consolidated if statement regarding isTransformed

* Removed overrides

* Added move condition to Transform + fixed up imposter target selection

* Condensed tests into 1 file + added more automated tests

This includes a couple regression tests for the fusion shenanigans

* Fixed comment

* Updated override typo for unimplemented methods

* Remove redundant parentheses

* Apply suggestions from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

---------

Co-authored-by: Bertie690 <taylormw163@gmail.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-07-12 23:39:48 -07:00
Bertie690
664f2fab0d
[Refactor/Bug] Fix Protean not applying due to terrain + minor cleanup of move phase (#5855)
* Squashed protean/libero changes

* Update protean-libero.test.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update protean-libero.test.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update ability.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update move-phase.ts

* Fixed counter move logic using inverted conditional

* Update move-phase.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update move-phase.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update ability.ts commentfix

* Update src/data/abilities/ability.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-13 05:59:38 +00:00
Bertie690
12fbff71d2
[Test] Added tests for Intimidate, Fishious Rend/Bolt Beak, Payback and Moongeist Beam & co. (#5858)
* Added additional tests for intimidate & ability-ignoring moves

* Added a few basic tests for Fishious Rend and Bolt Beak

* Fixed comment

* Fixe test and added commetn

* Update first-attack-double-power.test.ts

* Fixed incorrect ignore-abilities.test.ts test suite description

* Update ignore-abilities.test.ts suite name

* Fix first-attack-double-power.test.ts

* Actually fixed import

* Update intimidate.test.ts

* Fix test imprts

* Added guard dog tests

* Fixed tests

* Renamed test file

* Added Payback tests

* Fixed accidental unusde class

* Fixed tests

* Fixed flaky test due to 1 length trainer thing

* dd

---------

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-07-13 05:55:05 +00:00
Sirz Benjie
940c3c6f42
[Refactor] Cleanup fight UI (#5883)
* Cleanup fight ui handler

* Add types to fight-ui-handler#show

* Fix poor logic in toggleInfo

* Make addInfoToggle capable of taking in multiple toggles
2025-07-12 17:54:43 -07:00
Sirz Benjie
edbba6e635
[Bug][Performance] Plug memory leak related to enemy pokemon lingering around (#6083)
Remove animationupdate in sprite cleanupAndComplete
2025-07-11 12:57:19 -07:00
Lugiad
ca4df7233f
[UI/UX] [Localization] Japanese font change and custom size edits (#6026)
* Delete Japanese Galmuri11 font

* Delete Japanese Galmuri9 font

* Added pokemon-bw font for Japanese

* Changed Japanese Font + removed font size adjustment

* Added Japanese Custom Adjustments

* Slightly increased spacing for Ability name+desc labels

* Japanese starterInfoText adjustments

* Japanese custom lineSpacing adjustment

* Spacing for Ability desc labels adjusted

* Friendship count text adjustment

* Japanese former custom adjustments removal

* TextStyle adjustments

* TextStyle.PARTY adjustments

* Added new TextStyle

* Added new TextStyle

* Added new TextStyle

* Added new TextStyle

* Added new TextStyle

* Add new TextStyle

* Add new Text Style

* Add new TextStyle

* Add new TextStyle

* Add new TextStyle

* Add new TextStyle

* Add new TextStyle

* PARTY_CANCEL_BUTTON TextStyle Correction

* PARTY_CANCEL_BUTTON TextStyle Correction

* Removal of old Japanese line spacing parameter

* Removed old Japanese adjustments

* Apply Biome

* PARTY_CANCEL_BUTTON Adjustments

* partyCancelText position adjustment

* Update i18n.ts

* Change TextStyle of valueLimitLabel

* Added new TextStyle

* Add MOVE_LABEL TextStyle

* Add MOVE_LABEL TextStyle

* Line formatting correction

* MOVE_LABEL TextStyle padding correction

* Added GROWTH_RATE_TYPE TextStyle

* Add GROWTH_RATE_TYPE TextStyle

* Line formatting correction

* Egg Moves title text indepentent from pokemonEggMovesContainer

* Egg Moves title text indepentent from pokemonEggMovesContainer

* Update src/ui/starter-select-ui-handler.ts

* Correction to eggMovesLabel

* Update starter-select-ui-handler.ts

* Added SUMMARY_STATS_GOLD

* Added SUMMARY_STATS_GOLD

* Added proper multiplication symbol

* Added proper multiplication symbol

* Added proper multiplication symbol

* Added proper multiplication symbol

* Added GROWTH_RATE_TYPE

* Added INSTRUCTIONS_TEXT TextStyle

* Added INSTRUCTIONS_TEXT TextStyle

* Added INSTRUCTIONS_TEXT TextStyle

* Added INSTRUCTIONS_TEXT TextStyle

* Added INSTRUCTIONS_TEXT TextStyle

* INSTRUCTIONS_TEXT adjustments

* Added proper multiplication symbol

* Added SUMMARY_DEX_NUM TextStyle

* Added SUMMARY_DEX_NUM

* Revert SUMMARY_DEX_NUM to wrong text

* Add SUMMARY_DEX_NUM

* Removed outdated Japanese custom line spacing

* Removed outdated Japanese custom line spacing

* Removed outdated Japanese custom line spacing

* Correction outdated Japanese custom line spacing

* Added MOVE_LABEL TextStyle

* Fixed corped tooltipbox and tooltipbox scrolling

* Corrected ME descriptiuon scrolling

* Added MOVE_LABEL

* Apply HEADER_LABEL TextStyle

* Apply HEADER_LABEL

* Added custom values for SETTINGS_VALUE

* Apply MOVE_LABEL

* Added STATS_HEXAGON TextStyle

* Apply STATS_HEXAGON TextStyle

* Typo correction

* Delete outadated pokemon-bw font

* Add updated pokemon-bw font

* Update pokemon-bw format

* Added EGG_SUMMARY_NAME and EGG_SUMMARY_DEX TextStyles

* Apply EGG_SUMMARY_NAME and EGG_SUMMARY_DEX

* Add LUCK_VALUE TextStyle

* Apply LUCK_VALUE TextStyle

* Apply LUCK_VALUE TextStyle

* Adjusted LUCK_VALUE

* Apply LUCK_VALUE TextStyle

* Adjustments for Japanese

* Adjusted Japanese custom

* Added FILTER_BAR_MAIN TextStyle

* Apply FILTER_BAR_MAIN TextStyle

* Added japanese to custom TextStyle

* Added English language settings

* Apply Biome

* pokemon-bw font update

* pokemon-bw font updated

* pokemon-bw font update

* pokemon-bw font update

* pokemon-bw font update

* pokemon-bw font update

* pokemon-bw font update

* pokemon-bw font update

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-07-11 13:51:59 -04:00
Sirz Benjie
bc45869912
[Performance] [Refactor] [UI/UX] Cleanup egg gacha UI, Speed Up Machines (#5889)
* Convert egg gacha type into an object literal

* Refactor egg gacha ui handler

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Condense Object.freeze inside of gacha-type.ts

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-11 17:38:35 +00:00
Bertie690
9958e4fe13
[Test] Remove duplicate tests (#6082)
* Remove duplicate tests from parental bond test file

* Remove duplicate multi lens + pollen puff test
2025-07-11 19:33:15 +02:00
Sirz Benjie
ee02366ccf
[Misc] Make FixedInt support coercion to number primitive (#6081) 2025-07-11 02:09:09 -05:00
Bertie690
8c05693b83
[Docs] Fix typos in localization.md (#6076) 2025-07-09 22:15:16 +00:00
damocleas
c3bad86ae0
[Audio] Replace Abyss biome BGM with custom BGM by Firel (#6075)
* Replace End biome BGM with custom BGM by Firel

* Update locales submodule

* Replaced PMD Abyss music

Penumbra Chasm

* Update arena.ts

* Trim track, update loop point

* Update track

---------

Co-authored-by: Madmadness65 <blaze.the.fireman@gmail.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-09 20:42:06 +00:00
Bertie690
4ba6e69aa1
[Docs] Add localization.md (#5970)
* Create localization.md (WIP)

Not done yet but want to save my changes

* Fix up first half of doc

* Update localization.md 0.75

* Update localization.md .8

* Update localization.md

* Update localization.md

* Nearly finished locales md!!!!

just gotta upload images to github so we don't track em

* Fix images in locales md

* Updated README.md to mention new locales markdown & other notable files

Tbh this thing needs an overhaul

* Update CONTRIBUTING.md 0.5

* Fix CONTRIBUTING.md

* Update localization.md

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update localization.md

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update localization.md

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update localization.md

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update localization.md

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fix typo in CONTRIBUTING.md

Reach out reach out oops

* Revert half of CONTRIBUTING.md

* Fix localization.md

* Update localization.md

* Update localization.md

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Revert unneeded step in CONTRIBUTING.md

i am 99% sure flag not needed

* Update localization.md to remove unneeded step

* Update CONTRIBUTING.md

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>

* Revert change to CONTRIBUTING.md

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-07-09 14:28:23 +00:00
Madmadness65
cab15c36f0
[Balance] Update biome pools for wild Pokémon (#6074)
* Update biome pools for wild Pokémon

`outputPools` has been run, correcting evolution delays for some Pokémon like Grapploct and Cosmoem, and generally adding spaces to all bracketed lines.

* Revert change to Pawniard line evo delays

Kingambit was evolving before Bisharp due to being an item evolution. The evolution delay for it is now back to level 64.
2025-07-09 14:36:32 +02:00
NightKev
9b0f0b7a0f
[Refactor] Replace .fill().map "loops" with real for loops (#6071) 2025-07-08 00:53:36 -07:00
Sirz Benjie
2fbaca7b5e
[Bug] Prevent save corruption when loading a pokemonData that has no moves (#6070)
Prevent save corruption when loading a pokemonData that has no moves
2025-07-07 23:10:32 -04:00
Sirz Benjie
115d63d0c5
[Bug] Fix anger point procing on every hit if first hit in multi hit was a crit
https://github.com/pagefaultgames/pokerogue/pull/6067

* Fix anger point always procing on multi-hit

when first strike was a crit

* Fix comment spacing

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Rename PostDefendCritStatStageChangeAbAttr

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-07 18:38:18 -07:00
Madmadness65
e82c788585
[Audio] Add non-final boss Eternatus battle music (#6065)
This battle music will play in Endless when you fight Eternatus (p1 for the 250 waves, p2 for the 1000 waves).
2025-07-06 19:48:33 +00:00
damocleas
aecb6fcb88
[Sprite] Replace Foul Berry Juice sprite (#6066)
* replace bad berry juice

* Update item atlas

Updated bad berry juice sprite is now included

---------

Co-authored-by: Madmadness65 <blaze.the.fireman@gmail.com>
2025-07-06 12:22:06 -07:00
Bertie690
5f8e665a1e
[Test] Fix incorrect reverse mapping in overridesHelper.ts log message
https://github.com/pagefaultgames/pokerogue/pull/6068
2025-07-06 12:00:33 -07:00
AJ Fontaine
bff8cffe14
[Bug] Fix fusion name not showing on evolution (#6055)
Fix evolution phase not using new fusion name
2025-07-04 19:40:28 +00:00
Sirz Benjie
8f0c864547
[Dev] Remove warnings from pnpm interactions (#6061)
* Add pnpm-workspace.yaml to configure dependencies that are allowed to build

* Remove dependency-graph.json

* Go back to && which is cross-platform

* Remove obsolete `depcruise:graph` command

* Set `shellEmulator` config key to `true`

This makes `package.json` scripts work more reliably cross-platform

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-04 04:08:53 +00:00
Wlowscha
f6a434689c
[Balance] Berry Juice and Old Gateau do not depend on the instance
https://github.com/pagefaultgames/pokerogue/pull/6016

* Refactored items and respective MEs

* Changed icon names, added bad berry juice, fixed locales

* Berry juice uses a number parameter again, allowing to convert from old saves without a migrator

* Updated encounter with correct sprite

* Update src/data/mystery-encounters/encounters/weird-dream-encounter.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Replaced bad berry juice icon

* Repacked atlas

* Re-export item atlas

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Madmadness65 <blaze.the.fireman@gmail.com>
2025-07-03 21:04:59 -07:00
damocleas
e20313e22c [i18n] Update Locales
update locales, hasn't been done in a while
2025-07-03 20:05:05 -04:00
Bertie690
9926a6e799
[Docs] Add links to CONTRIBUTING.md for forking/cloning (#6060)
[Docs] Add links to CONTRIBUTING.md for cloning repo
2025-07-02 21:27:13 +00:00
Bertie690
2fe50cb761
[Test] Made game.move.select fail if move not in moveset (#5998)
* Made `game.phaseInterceptor` fail if move not in moveset

also added a few assorted doc fixes

* Fixed fail comment

* added `map` statement

* Fixed tests

* Fixed test

* Fixed test and comment

* Fixed tests

* Fixed test v2

* Fixed various tests

* Update error msg to not use fullcaps

* Fixed remaining tests

* Fixed test 0.5

* Fixed up tetss

* Fixed test

* Fixed imposter tests

* Fixed imposter tests

* Fiexd remainig tests

* Marked test as TODO

wasn't as if it was doing anything beforehand but w/e

* Update moveHelper.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update moveHelper.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Apply Biome

* Update comment in `spikes.test.ts`

* Add faint checks to Spikes test

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-02 12:46:26 -07:00
Jonathan Bankston
12aaa31454
[Refactor] Minor run phase rework (#6017)
* Minor Attempt run phase rework to abstract logic to whole team

* Decoupled individual pokemon from run phase logic

* Formatting

* Completed run phase refactor implementation and updated tests

* Updated run phase to extend field phase instead of pokemon phase

* Removed unused phase decleration in tests

* Removed unecessary arg in turn start phase as refactor no longer needs it

* Cleaned up getPlayerField

* Made adjustments based on reviewer suggestions

* Reintrocuded calculateEscapeChance into AttemptRunPhase and removed run utils

* Resolve merge issues

* Minor TSDoc improvement to `BattleScene#getPlayerField`

* Moved early override check to top of calculateEscapeChance

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-07-02 02:57:08 -07:00
Bertie690
a54cd953a6
[Bug] Fix Shields Down blocking status in Core Form, unnecessarily resetting before battle (#6044)
* Fix Minior Form Change issues

* Fix bug

* Update Power Construct conditionals to be less janky

* Fix syntax error

* Fix ability.ts
2025-06-30 00:19:59 -04:00
Bertie690
1bd152a738
[Refactor] Moved various classes/interfaces to own files (#5870)
* Split up Pokemon data types to own files

* Moved `AttackMoveResult` and `TurnMove` to own files

* Moved `customPokemonData` into types folder + fixed comments

* Moved files around + fixed stuff

* Moved `DamageResult` into new file

* Fixed imports

* ran biome

* Fix merge issue
2025-06-28 01:55:47 -07:00
Lugiad
40a92df190
[i18n] [Localization] Translatable Manaphy Egg Tier (#6038)
Translatable Manaphy Egg Tier
2025-06-26 19:04:14 -07:00
Bertie690
25757ca649
[Docs] Fix typo in CONTRIBUTING.md (#6034)
Fix typo in CONTRIBUTING.md
2025-06-27 00:38:31 +00:00
NightKev
07f5c3009c
[Dev] Add player and enemy Nature and IV overrides (#6032)
* [Dev] Add player and enemy Nature and IV overrides

* Fix broken tests
2025-06-26 12:01:54 -07:00
NightKev
c389b7acdb
[Dev] Mark the fixer for Biome's useBlockStatements as "safe" (#6031) 2025-06-25 18:16:30 -07:00
NightKev
ecdaac20fa [Test] Fix Gorilla Tactics tests 2025-06-24 18:40:15 -07:00
Bertie690
3b490e7ab4
[Bug] Status moves blocked by terrain now use correct message
https://github.com/pagefaultgames/pokerogue/pull/5931

* Moved terrain messages to `terrain.ts`, made status failures use correct text

* Revert overrides.ts

* Comment fix

* Fixed confusion message not appearing for misty terrain blockages

* Fixed bug

* re-added import

* Update battler-tags.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Added exhaustiveness checking

* ran boime

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-24 17:50:35 -07:00
NightKev
232f26a60d
[Dev] Migrate from npm to pnpm (#6018)
* Replace `package-lock.json` with `pnpm-lock.yaml`

* Update `package.json`

* Update `lefthook.yml`

* Update GitHub workflows

* Update references to `npm`/`npx`

* Update `CONTRIBUTING.md`

* Update `linting.md` and `comments.md`

* Update comment in `create-test.js`

* Add missing dependency `chalk` for `create-test.js`
2025-06-23 17:05:59 -07:00
Bertie690
6547e1d5ce
[Dev] Update depcruiser to enforce no non-type export in src/@types/
https://github.com/pagefaultgames/pokerogue/pull/5949

* Add depcruiser rule to enforce no non-type export in `src/@types`

* Add missing field in config

* Fixed type import inside `move.ts`
2025-06-22 18:34:06 -07:00
Sirz Benjie
8afedc33d7
[Refactor] [Ability] Ab attr apply type safety (#6002)
* [WIP] Refactor ability attribute apply args

* [WIP] update ability signatures

* Update callsites in pokemon.ts

* Update callsites in moves.ts

* Update abattr callsites in move-phase

* Update abattr callsites in battler-tags

Also removed stat drop ability application from cancelling ME stat boost effects

* format with biome and remove cancelled from weather lapse

* Update abattr callsites in MEP

* Update callsites in turn-start-phase

* Update abAttr callsites in misc phases

* Remove latent test functionality

* update ability attribute callsite in shield dust test

* update abattr callsite in winstrate challenge encounter

* Fix some tests to mock proper methods

* Remove improper condition in mimicry's ability application

* Fix improper simulated check in moody's apply method

* Pass source to postApplyDamage in pokemon.ts

* [wip] fix cud chew tests

* Make cud chew consumption not subclass postTurnAbAttr

* Fix regression in flower veil

* Update trySetStatus test in pokemon to respect new return value for undefined

* Remove empty, unused file

* Fix blockCrit method broken in merge

* Fix unnecessary attr type cast in move phase

* Address typing issue in safeguard test

* Improve documentation and get rid of ts-expect-error directive

* Minor comment/TSDoc updates and fixes

* Apply suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Apply suggestions from code review

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-22 18:23:08 -07:00
Sirz Benjie
9fd79edcb2
[Refactor] Refactor evo phase (#5735)
* Cleanup evolution phase

* Update evolution phase and types

* Refactor form change phase

* Simplify game-speed.ts and update evo phase

* Move delay in formChangePhase to first element

* Fix mock video object return methods

* Fix tween chain mock

* Add todo comment to mock phaser's tween manager

* Remove jarring flash when evolution begins

* Fix missing method chaining in evo phase

* Apply biome formatting
2025-06-22 18:11:38 -07:00
Bertie690
36c79a9a69
[Bug] Reworked BattlerTag/ArenaTag code to prevent breakage on 0 PIDs
https://github.com/pagefaultgames/pokerogue/pull/5932

* Fixed modifier code, removed instances of "0 ID = no mon"

* corrected casing + dejanked seed tag

* Added test file, added overload to `findModifier` if given type predicate

* fixed test

* Revert predicate stuff for now

going in separate PR

* Fix id check syrup bomb test

Wasn't running phase due to being a turn end effect

* [WIP] Changed test to use destiny bond as proper regression

* Removed `instant` and `ignoreUpdate` parameters from `tryTransferHeldItemModifier`; fixed post-battle loot code to _not_ break type safety

* Fixed up tests

* Reverted unneeded changes

* Removed outdated modifier test

* Fix import

* Apply Biome

* Update battler-tags.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update battler-tags.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update arena-tag.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update arena-tag.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-22 17:29:37 -07:00
Lugiad
7b95b41da3
[i18n] Large Numbers Abbreviations Translation (#6021)
* Large Number Abbreviations opended for transaltion

* Large Number Abbreviations opended for transaltion

* Apply Biome

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-22 17:11:16 -06:00
Lugiad
9c0c163257
[UI/UX] [Localization] Pokémon summary background update (#6019) 2025-06-21 12:22:07 -07:00
Dean
2de9aa83cd
[Misc] Add CONTRIBUTING.md and rewrite README.md (#5621)
* Add CONTRIBUTING.md

* Update CONTRIBUTING.md

* Update code tags

* Fix missing space

* Fix pokecorpus link

* Apply suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Update links

* Update node version

Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>

* Add Discord server link to `CONTRIBUTING.md`

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Bertie690 <136088738+Bertie690@users.noreply.github.com>
2025-06-20 23:59:28 -07:00
NightKev
4fc77e4de9
[Dev] Update Biome to 2.0.0 (#6004)
* Run `npm audit fix`

* Update Biome to 2.0.0

* Migrate `biome.jsonc` to 2.0

* Apply Biome and fix some suppression comments

* Fix some suppression comments and update config

* More config updates

Added at "error": `noUnusedLabels`, `noThisInStatic`

Changed `useDefaultParameterLast` from "off" to "warn"

Changed `noDocumentCookie` (from recommended) from "warn" to "off"

Changed `noExcessiveCognitiveComplexity` from "warn" to "info"

* Add a bunch of rules

* Apply Biome safe fixes

* Apply Biome unsafe fixes

* Remove irrelevant `useSelfClosingElements` rule

* Upgrade already followed rules to "error"

* Remove unnecessary type cast

* Disable fixer for `useDefaultParameterLast`

* Disable `useJsonImportAttribute` rule and revert changes

* Fix `mockImage.ts`

* ...there's a `@ts-nocheck` in this file

* Use whole-file lint suppression comment in `version_converter.ts`

* Add a couple comments to `biome.jsonc`

* Remove ESLint packages and GitHub workflow
2025-06-20 23:24:11 -07:00
Matilde Simões
9f67e06279
[Balance] [AI] Trainer Pokémon will be less likely to switch out on low health (#5981)
* Implemented AI improvements:

The changes in the game AI were as follows ("pokemon.ts"):
- More accurately accounts for the Pokémon's actual moves and their
 effectiveness against the player instead of only the pokemon type
- Introduced logic to decide when a Pokémon should be sacrificed or
switched based on its HP and speed.

Signed-off-by: Matilde Simões <matilde.simoes@tecnico.ulisboa.pt>
Co-authored-by: Fuad Ali <fuad.ali@tecnico.ulisboa.pt>

* Corrected grammar error in variable declaration in getMatchupScore
Signed-off-by: Fuad Ali <fuad.ali@tecnico.ulisboa.pt>
Co-authored-by: Matilde Simões <matilde.simoes@tecnico.ulisboa.pt>

---------

Signed-off-by: Matilde Simões <matilde.simoes@tecnico.ulisboa.pt>
Co-authored-by: Fuad Ali <fuad.ali@tecnico.ulisboa.pt>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: damocleas <damocleas25@gmail.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-20 17:06:37 -04:00
AJ Fontaine
e00c9e02fb
[Balance] Change Kirlia and Snorunt evolutions to match mainline (#5994)
* Gallade and Froslass use the Dawn Stone

* Dawn Stone still shows up when Kirlia/Snorunt evo paused

* Fix lint
2025-06-20 20:51:19 +00:00
NightKev
4b70fab608
[Bug] Remove message for Rock Head activation (#6014) 2025-06-19 20:59:55 -07:00
lnuvy
1ff2701964
[Bug] Fix when using arrow keys in Pokédex after catching a Pokémon from mystery event (#6000)
fix: wrap setOverlayMode args in array to mystery-encounter

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-06-19 20:45:54 -04:00
Bertie690
1e306e25b5
[Move] Fixed Chilly Reception displaying message when used virtually
https://github.com/pagefaultgames/pokerogue/pull/5843

* Fixed Chilly Reception displaying message when used virtually

* Fixed lack of message causing Chilly Reception to fail

* Fixed tests

* Reverted bool change + fixed test

* Fixed test
2025-06-19 17:14:05 -07:00
Madmadness65
43aa772603
[UI/UX] Add Pokémon category flavor text to Pokédex (#5957)
* Add Pokémon category flavor text to Pokédex

* Append `_category` to locale entry
2025-06-20 00:04:57 +00:00
damocleas
6873a89296
1.9.6 to Beta
1.9.6 to Beta
2025-06-18 23:29:29 -04:00
NightKev
0ba3e52f77 Fix merge issue 2025-06-18 18:30:22 -07:00
NightKev
560ebbaee2 Merge branch 'beta' into minor-1.9.6 2025-06-18 18:27:37 -07:00
AJ Fontaine
4de7858f00
[i18n] Update locales (#6010)
Update locales
2025-06-18 21:19:25 -04:00
NightKev
e3c8e3141e
Merge pull request #6009 from Fontbane/locafix
[i18n] Map "biome" namespace to the filename change to "biomes" (#6001)
2025-06-18 18:14:37 -07:00
NightKev
30b2f95a30 [i18n] Map "biome" namespace to the filename change to "biomes" (#6001)
* [i18n] Map "biome" to the filename "biomes"

* Update locales submodule to bring in file rename
2025-06-18 21:11:15 -04:00
AJ Fontaine
1d669719a0
Bump version name to 1.9.6 2025-06-18 19:53:13 -04:00
AJ Fontaine
663e047af8
[Event] W event (#6006)
W event
2025-06-18 19:52:40 -04:00
AJ Fontaine
80ae42d3ba
[Sprite] Minior and Ferrothorn variants (#6005)
* Minior variants

* Add Ferrothorn variants

* Fix shiny Minior front and icons
2025-06-18 19:49:21 -04:00
Sirz Benjie
182397411e
[Bug] Fix infinite memory mushrooms (#5993)
* Set cost to -1 for modifiers chosen as rewards

* Ensure apply modifier conditional retains original behavior
2025-06-18 17:23:16 -04:00
AJ Fontaine
59a00e0af3
[Sprite] Fix Appletun variants (#6003)
Fix Appletun variants
2025-06-17 23:54:58 -04:00
Bertie690
4119dfbfec
[Test] Fix flaky gastro acid test (#5996) 2025-06-17 13:51:19 -07:00
NightKev
28b6c7e50d
[i18n] Map "biome" namespace to the filename change to "biomes" (#6001)
* [i18n] Map "biome" to the filename "biomes"

* Update locales submodule to bring in file rename
2025-06-17 12:35:39 -07:00
AJ Fontaine
2065f4fd7f
[Bug] Fix incorrect form key being checked for evo items (#5995) 2025-06-17 10:08:20 -07:00
Sirz Benjie
6ff258fb37
[Bug] Fix weather form changes not changing with weather abilities
https://github.com/pagefaultgames/pokerogue/pull/5857

* Add test for forecast

* Fix PostSummonFormChangeByWeatherAbAttr

* Fix overrides in forecast test

* Remove a test whose trigger conditions can no longer happen

* Update src/data/abilities/ability.ts

Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com>

* Fix missing tsdoc param

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Simplify PostSummonFormChangeByWeather's canApplyPostSummon

* Fix unused params that messed up after rebase

* Fix form change import

Messed up due to improper rebase

---------

Co-authored-by: Dean <69436131+emdeann@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-16 06:02:09 -07:00
AJ Fontaine
e3108603e3
[Refactor] Rework evolution conditions and descriptions (#5679)
* Refactor evo conditions and descriptions

* Fix test

* Fix Shedinja

* Simplify Gimmighoul evolution

* Primeape and Stantler evolve by using their move 10 times

* Basculin white stripe evolves by taking 294 recoil damage

* Primeape and Stantler use modifiers for tracking

* Basculin uses modifier too

* Remove evo count from pokemon data

* No more evo counter data, Gallade/Froslass

* Fix allmoves import

* Clamperl

* Struggle shouldn't count for Basc recoil

* Change to nicer type

* Apply Benjie's suggestions

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>

* Address formatting

* Undo new evolution changes

* Remove unused imports

* Fix speciesid

* Fixed up descriptions a little

* Change a key name

* Fix Gimmighoul

* Apply Biome

* Apply Biome unsafe fixes

* Review suggestions

- Convert `EvoCondKey` enum to `const` object

- Use early returns in `SpeciesEvolutionCondition#description`
and `SpeciesFormEvolution#description`

- Replace `!!x.find` with `x.some`
and `y.indexOf() > -1` with `y.includes()`

- Implement `coerceArray`

- Fix Shelmet evolution condition
checking for Shelmet and not Karrablast

- Remove unnecessary type casting in `battle-scene.ts`

* Remove leftover enforce func loop

* Fix circular imports issue

- `getPokemonSpecies` moved to `src/utils/pokemon-utils.ts`
- `allSpecies` moved to `src/data/data-lists.ts`

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-16 05:57:51 -07:00
Bertie690
ccceaac877
[Test] Reworked crit override to allow for forced crits (#5738)
* Crit override stuff

* Update ability.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update pokemon.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update game-mode.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-16 05:36:09 -07:00
AJ Fontaine
ebc6ff2ed3
[Refactor] Clean up shiny/HA reroll methods (#5803) 2025-06-16 05:18:44 -07:00
Bertie690
5efdb0dc0b
[Refactor] Fix issues with "last move selected" vs "used" (#5810)
* Added `MoveUseType` and refactored MEP

* Fixed Wimp out tests & ME code

finally i think all the booleans are gone
i hope

* Added version migration for last resort and co.

buh gumbug

* Fixed various bugs and added tests for previous bugfixes

* Reverted a couple doc changes

* WIP

* Update pokemon-species.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update pokemon-phase.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fixed remaining tests (I think)

* Reverted rollout test changes

* Fixed command phase bug causing metronome test timeout

* Revert early_bird.test.ts

* Fix biome.jsonc

* Made `MoveUseType` start at 1

As per @DayKev's request

* Fixed a thing

* Fixed bolt beak condition to be marginally less jank

* Applied some review suggestions

* Reverted move phase operations

* Added helper functions complete with markdown tables

* Fixed things

* Update battler-tags.ts

* Fixed random issues

* Fixed code

* Fixed comment

* Fixed import issues

* Fix disable.test.ts conflicts

* Update instruct.test.ts

* Update `biome.jsonc`

* Renamed `MoveUseType` to `MoveUseMode`; applied review comments

* Fixed space

* Fixed phasemanager bugs

* Fixed instruct test to not bork

* Fixed gorilla tactics bug

* Battler Tags doc fixes

* Fixed formatting and suttff

* Minor comment updates and remove unused imports in `move.ts`

* Re-add `public`, remove unnecessary default value in `battler-tags.ts`

* Restore `{}` in `turn-start-phase.ts`

Fixes `lint/correctness/noSwitchDeclarations`

* Remove extra space in TSDoc in `move-phase.ts`

* Use `game.field` instead of `game.scene` in `instruct.test.ts`

Also `game.toEndOfTurn()` instead of
`game.phaseInterceptor.to("BerryPhase")`

* Use `game.field` instead of `game.scene` in `metronome.test.ts`

* Use `toEndOfTurn()` instead of `to("BerryPhase")` in `powder.test.ts`

* Convert `MoveUseMode` enum to `const` object

* Update move-phase.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Add `enumValueToKey` utility function

* Apply Biome

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-15 10:52:44 -07:00
NightKev
f8d8a3de84
[Dev] Enable dependency cruiser workflow (#5966)
* Update `.dependency-cruiser.cjs` config file

* Update GitHub workflow

* Have `depcruise` check `test/` as well

* Remove circular import between `battle-anims.ts` and `battler-tags.ts`
2025-06-15 00:51:21 -07:00
Bertie690
0918985a63
[Test] Remove unneeded mockRestore and testTimeout calls in tests
https://github.com/pagefaultgames/pokerogue/pull/5927/

* Removed unnecessary test timeout parameters from test files

We set it in vitest config anyways

* Removed unneeded `mockRestore` calls

We call `restoreAllMocks` after each test runs anyhow

* Removed accidentall forgotten-about timeout

* Revdrt magic bounce test file for now

* Fixed ting

* Fixed bug

* Fixed import

* Update test/data/status_effect.test.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update battle.test.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Ran bim

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-15 00:48:16 -07:00
Bertie690
061c987265
[Test] Convert game.override calls into chained line where possible
https://github.com/pagefaultgames/pokerogue/pull/5926

* Condensed all overrides into 1 line where possible

I hope I got them all...

* Fixed tests 0.5

* Cleaned up safeguard test to not use outdated code; fixed rest of errors

* Fixed illusion test

* Revert safeguart etst

* Fixed battle tets

* Fixed stuff

* Fixed things2.0

* Fixed import issues

* Revert changes outside of the tests directory

* Revert changes outside of the tests directory

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-15 00:40:41 -07:00
Dean
18ba33e6f0
[Bug] Fix zombie pokemon in Fun+Games ME (#5992) 2025-06-15 00:36:28 -07:00
damocleas
73e0a2905b
[Beta] Revert "[UI/UX] Default cursor to no when stop trying to teach move" (#5990)
Revert "[UI/UX] Default cursor to no when stop trying to teach move"

This reverts commit ba2158ec64.
2025-06-14 17:40:18 -04:00
NightKev
7cf51d48a7 [Test] Make sure items are removed from enemies in Last Respects test 2025-06-14 05:06:46 -07:00
Wlowscha
fd1404706a
[Bug] Remove empty modifierPool (#5988) 2025-06-14 12:01:29 +00:00
Bertie690
a41de39d4f
[Misc] Run biome on all files; update some rules to be errors now
https://github.com/pagefaultgames/pokerogue/pull/5962/

* Fixed lint issue; ran biome on entire repository

* Fixed biome.jsonc

* Trimmed trailing whitespace... again...

* Fixed PR template md

* Fixed package json

* Fixed void return issues + ran biome again

* ran biome
2025-06-14 00:59:34 -07:00
fabske0
9a525ac8fd
[UI/UX] Position setting Icons dynamically (#5969)
* position setting icons dynamically

* add comment for potential overlap
2025-06-14 03:19:05 +00:00
Bertie690
d91a6ee11e
[Github] Update pull_request_template.md with more labels
https://github.com/pagefaultgames/pokerogue/pull/5974

* Update pull_request_template.md with more labels

More better

* Fix create test script name post refactor

Forgot to change it earlier
2025-06-14 01:38:54 +00:00
damocleas
718d6f61cf
[Bug] Fix Fog interactions with Morning Sun/Synthesis/Moonlight and Solar Beam/Blade (#5987)
Fix Weather based Healing Moves and Solar Beam/Blade not interacting with Fog

Update move.ts
2025-06-13 21:10:38 -04:00
NightKev
7c6189e812
[Refactor] Create utility function coerceArray (#5723)
* [Refactor] Create utility function `makeArray`

This replaces the `if(!Array.isArray(var)) { var = [var] }` pattern

* Replace `if` with ternary, rename to `coerceArray`

* Add TSDocs

* Improve type inferencing

* Replace missed `Array.isArray` checks

* Apply Biome

* Re-apply changes to phase manager

* Re-apply to `SpeciesFormChangeStatusEffectTrigger` constructor

Apply to new instances in test mocks
2025-06-12 21:30:01 -07:00
Mourouh
425985a056
[Balance] Add wild encounter chance to Maushold and Dudunsparce forms (#5975)
Added wild encounter chance to Maushold and Dudunsparce forms
2025-06-12 16:56:37 -05:00
Dean
ff9aefb0e5
[Bug] Activate PostSummon Abilities in Speed and Priority Order
https://github.com/pagefaultgames/pokerogue/pull/5513

* Add prependToPhaseWithCondition and use it in SummonPhase to determine speed order

* Move logic to PostSummonPhase

* Add test base

* Pivot to using sort strategy instead

* Add and update tests

* Support priority ability activations

* Ensure priority abilities are still activated on switch in

* Add test for priority

* Update to use priority numbers instead of a boolean

* Add ability priorities to constructors

* Move sorting to BattleScene

* Rename phase file

* Update import

* Move application to applyPostSummonAbAttrs and stop assuming no other phases in queue

* Ensure all PostSummonPhases from encounters are added at the same time

* Switch to priority queue approach

* Ensure that zero/negative priority activations happen after postsummonphase

* Revert 07646fe (not needed due to stable sort)

* Always create separate ability phases for passive and use boolean instead of priority number when applying

* Add test for dynamic updates

* Add BattlerIndex import

* Clear queues for testing

* Benjie suggestion

* Split files

* Update import in battlescene

* Remove extra spaces added by VSCode

* Fix other conflicts

* Update PhaseManager

* Update to use PhaseManager

* Immediately start postsummons

* Fix test

* Fix BattlerIndex import

* Remove unused imports

* Fix postsummon application

* Make priority readonly
2025-06-11 22:28:27 -07:00
Sirz Benjie
1029afcdbf
[Refactor] Remove circular dependencies (part 4) (#5964)
* Add abilityAttr.is methods

* [WIP] move modifier stuff around

* Untangle circular deps from modifiers

* Move unlockables to own file

* Untangle all circular deps outside of MEs

* Move constants in MEs to their own files

* Re-add missing import to battle.ts

* Add necessary overload for getTag

* Add missing type import in weather.ts

* Init modifier types and pools in loading-scene

* Remove stray commented code

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-11 19:42:04 -07:00
Dobin Shin
ba2158ec64
[UI/UX] Default cursor to no when stop trying to teach move
https://github.com/pagefaultgames/pokerogue/pull/5924

* [UI/UX] "Stop trying to teach move" Defaulting to "No"

* [Test] setCursor to 0, 'Yes' to end learning move

* Move confirmUIMode to its own file in enums, add docs

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-06-11 16:24:27 -07:00
Lugiad
f499ea0568
[UI/UX] [Localization] Type icons corrections (#5952)
* Updated both Spanish type icons

* Update Brazilian Portuguese type icons

* Update Catalan type icons

* Update Traditional Chinese type icons

* Update Turkish type icons

* Update Russian type icons

* Update Catalan type icons

* Delete error

* Update Russian type icon

* Update Russian type icons
2025-06-11 04:44:30 +00:00
Bertie690
aea2c178c9
[i18n] Added locales text for force switch moves (#5930) 2025-06-10 19:54:44 -04:00
Sirz Benjie
a9869569fa
Fix sprite variant recolor 2025-06-09 23:24:39 -05:00
Bertie690
581348ec0a
[Misc] Remove extra newline in test-boilerplate.ts (#5965) 2025-06-09 18:28:39 -07:00
NightKev
60105f0402
[Dev] Update test creation script (#5939) 2025-06-09 17:48:41 -07:00
Sirz Benjie
48e911e03c
[Refactor] Remove circular deps 3 (#5959)
* Move game-mode to its own file

Reduces circular imports to 325

* Move battler-index to own file

Reduces circular deps to 314

* Move trainer-variant to own file

Reduces circ deps to 313

* Move enums in pokemon to their own file

* Move arena-tag-type to its own file

* Move pokemon-moves to its own file

* Move command to own file

* Move learnMoveType to own file

* Move form change item to own file

* Move battlerTagLapseType to own file

* Move anim enums to own shared file

* Move enums out of challenges

* Move species form change triggers to own file

Reduces circ imports to 291

* Update test importing pokemon move

* Replace move attribute imports with string names

* Untangle circular deps from game data

* Fix missing string call in switch summon phase

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Ensure ChargeMove's is method calls super

* Use InstanceType for proper narrowing

* Apply kev's suggestions from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-09 16:24:13 -07:00
AJ Fontaine
b1c50dd69f
[Bug] Fix TM compatibility for Terapagos and Knock Off (#5958)
Fix TM compatibility for Terapagos and Knock Off
2025-06-08 16:49:50 -07:00
NightKev
d2ace47e1e [Test] Add missing ability override to Dancer tests 2025-06-08 15:36:01 -07:00
Wlowscha
5ef88a6d4d
[Refactor] Refactor select-modifier-phase.ts (#5886)
* Refactored select-modifier-phase.ts

* Added some missing type signatures

* Changes from suggestions

* Added ModifierSelectCallback type
2025-06-08 15:13:26 -07:00
Tiago Rodrigues
37767799cd
[Bug] Gorilla Tactics now activates on protect and miss (#5567)
* [Bug] Fix #5112: Gorilla Tactics only registers succesful moves as move usage

* Apply small fixes from code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-08 12:52:48 -04:00
Sirz Benjie
1c4edabd1d
[Refactor] Ensure that new phases are created through the phase manager
https://github.com/pagefaultgames/pokerogue/pull/5955

* Add newPhase method to phase-manager

* Update calls to append/prepend phase to use string phase

* Replace instantiations of new phase with phase manager
2025-06-07 23:55:30 -07:00
NightKev
75beec12a8
[Dev] Enable Biome checking of ability.ts (#5948) 2025-06-07 21:43:30 -07:00
Bertie690
35a09af475
[Utils] Create utility function randSeedFloat (#5767) 2025-06-07 19:29:10 -07:00
Bertie690
09e30070f9
[Docs] Fixed test helper functions to conform with TSDoc standard; deprecated runToSummon/startBattle without args (#5912)
* Updated doc comments for test-related functions

* Marked `classicMode.runToSummon` and `classicMode.startBattle` without species as deprecated

Having the species being used depend on daily run RNG is both unintuitive, janky and prone to flaking out (as happened with the Gastro Acid tests)

* Fixed the bug

* Update field-helper.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-07 18:02:25 -07:00
Sirz Benjie
93745f14b7
[Refactor] Decouple phase system from battle-scene (#5953)
* Move phase logic into its own class

* Move ts ignore comment
2025-06-07 17:59:30 -07:00
Jimmybald1
3114035673
[Balance] Update catch rates to Gen 9 (#5954)
Updated catch rates to gen 9w

Co-authored-by: Jimmybald1 <147992650+IBBCalc@users.noreply.github.com>
2025-06-07 20:54:33 -04:00
Bertie690
ef6029ae4b
[Refactor] Add methods isPlayer and isEnemy to reduce circular imports
https://github.com/pagefaultgames/pokerogue/pull/5902

* Added functions `isPlayer` and `isEnemy` for type checking

* Apply suggestions from Kev code review

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Fix merge issue

* Split imports

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-07 17:44:58 -07:00
NightKev
d3bc33cd4e [Misc] Remove debug.js reference from index.html 2025-06-07 17:37:09 -07:00
Bertie690
1ff45687c5
[Refactor] Merged interfaces/ into @types/; removed runtime orphan modules
https://github.com/pagefaultgames/pokerogue/pull/5951
2025-06-07 17:28:01 -07:00
NightKev
c5db827381
[Dev] Enable Biome linting of move-effect-phase.ts (#5947) 2025-06-06 23:09:23 -07:00
Bertie690
a818c2b33f
[Bug] Dancer no longer breaks "last hit only" moves, respects flinch + steadfast (#5945)
* WIP

* Fixed Dancer last hit, flinch move interaction

* Fixed steadfast interaction

* Fixed comment + flaky test

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-06 20:50:16 -07:00
Bertie690
88e4ab978b
[Misc] Removed cases of a ? true : false and useless super calls from subclasses (#5943)
* Removed cases of `if (a) {return true}' return false`

* Removed useless `super.xyz` calls from functions

* Fixde missing issur

* Use early return in `Pokemon#isOffsetBySubstitute`

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-06 17:00:09 -07:00
Bertie690
3ca11e83a6
[Dev] Add lefthook script to update submodules post-checkout (#5941) 2025-06-06 23:27:58 +00:00
SmhMyHead
0336858708
[UI/UX] Legendary UP Gacha timer (#5921)
* [UI/UIX] Legendary UP Gacha timer

* Update egg-gacha-ui-handler.ts

Seems "fixedInt" was needed on the delay of the playTimeTimer so the game speed doesn't affect it.

* New timer container by damocleas.

* gacha_legendary.png second version from @damocleas

* Use phaser object chaining methods

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-06-06 21:20:02 +00:00
Sirz Benjie
855868bfea
[Refactor] Cleanup achvs ui handler (#5919) 2025-06-06 21:15:13 +00:00
Sirz Benjie
1fc42b3231
[Misc] Add phase#is method to help reduce circular imports (#5868)
* Move phase types out of phase interceptor

* Create isXPhase method and add properties to each phase

* Replace instanceof phase with isXPhase

* Fix missing union types for phaseName

* Update doc comment in phase.ts

* Fix incomplete comment in encounter-phase

* Make phaseName as public and fix more uses

* Move phaseName property declaration before constructor in move anim phase

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Rename isXPhase to is

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-06 21:08:23 +00:00
Lugiad
9021e4b41e
[i18n] More Controller settings localization (#5920) 2025-06-06 19:52:35 +00:00
ShinigamiHolo
2a769e2733
[UI/UX] Adding more space in Egg Gacha for another languge (#5934) 2025-06-06 19:45:12 +00:00
Sirz Benjie
178de207f1
[Refactor] Cleanup egg list ui handler (#5890)
Cleanup egg list ui handler

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-06-06 21:34:38 +02:00
Lugiad
e82e182507
[UI/UX] [Localization] Russian Gatcha Text Resize (#5929)
Russian Gatch Text Resize

Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com>
2025-06-06 18:33:13 +02:00
PrabbyDD
0c54fc1be0
[Bug] Fix no EXP awarded if all active pokemon faint (#4688)
Party pokemon will now gain EXP from EXP Share
even if all the active pokemon are fainted

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-06-05 18:22:27 -04:00
Sirz Benjie
193c5ffb0c
[UI/UX] Move Reload Required text to bottom of settings (#5928)
* Move Reload Required text to bottom of settings

* Remove unneeded reloadRequiredText field
2025-06-05 15:18:07 -07:00
Wlowscha
39b8dc9a85
[Refactor] Removing unused logic for mbh/grip claw (#5914)
* Removing unused logic for mbh/grip claw

* Updated docstring

---------

Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
2025-06-05 21:54:50 +00:00
Sirz Benjie
fb6d6f5b69
[Dev] Add non type imports depcruiser check (#5901)
* Forbid non type imports in type and enum files

* Allow orphans in src/@types
2025-06-04 21:57:10 -07:00
NightKev
9dcb904649
[Misc] Improve enum naming (#5933)
* Rename `Abilities` to `AbilityId`

* Rename `abilities.ts` to `ability-id.ts`

* Rename `Moves` to `MoveId`

* Rename `moves.ts` to `move-id.ts`

* Rename `Species` to `SpeciesId`

* Rename `species.ts` to `species-id.ts`

* Rename `Biome` to `BiomeId`

* Rename `biome.ts` to `biome-id.ts`

* Replace `Abilities` with `AbilityId` in comments

* Replace `Biome` with `BiomeId` in comments

* Replace `Moves` with `MoveId` in comments

* Replace `Species` with `SpeciesId` in comments
2025-06-04 14:54:27 -07:00
NightKev
dd2f475ded
Merge pull request #5923 from pagefaultgames/main
Sync beta with main
2025-06-02 17:03:54 -07:00
NightKev
a26a930980
Fix Version Number 1.9.4 -> 1.9.5 2025-06-02 20:00:23 -04:00
NightKev
6586790768 [Test] Fix Last Respects test 2025-06-02 16:12:45 -07:00
NightKev
1b038c5a11 [Test] Fix flaky test logging 2025-06-02 14:16:06 -07:00
damocleas
7cd89cd4f7
Update Discord Invite Link 2025-06-02 14:33:39 -04:00
Madmadness65
ea64024e09
[P3 Bug] Remove Expert Breeder trainer type from ME egg source (#5893)
Remove Expert Breeder trainer type from ME eggs

It effectively duplicated the text in the egg source text box,
and overflowed the visual text box as a result.
2025-06-02 14:32:34 +00:00
Sirz Benjie
9f892b906c
[Beta][Bug][UI/UX] Fix name position and types not being updated in battle info (#5913)
Fix name position and types not being updated in battle info
2025-06-02 12:59:10 +00:00
NightKev
88b8e05ee8 [Test] Add extra logging to flaky Last Respects test 2025-06-01 16:18:15 -07:00
Bertie690
cdda539ac5
[Test] Remove redundant entries and Array.fill() in moveset overrides (#5907)
* Removed unneeded duplicate entries from movesets

* Removed `array.fill` in moveset overrides

* Reverted accidental changes
2025-06-01 22:45:30 +00:00
Lugiad
369b3307cd
[UI/UX] Moves menu position adjustments (#5917) 2025-06-01 15:40:57 -07:00
Lugiad
7859fea26b
[i18n] Translatable Game Speed values (#5916) 2025-06-01 12:37:47 -07:00
SmhMyHead
831381e4ce
[UI/UIX] Default cursor to new move when learning a move (#5908) 2025-05-31 11:54:02 -04:00
Lugiad
ccd9480240
[Localization] Secondary pending languages inclusion (#5903)
* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Update mysterious-chest-dialogue.json

* Update mysterious-chest-dialogue.json

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Update i18n.ts

* Update settings.ts

* Update settings-display-ui-handler.ts

* Update starter-select-ui-handler.ts

* Update i18n.ts

* Update i18n.ts

* Update settings.ts

* Update settings-display-ui-handler.ts

* Update i18n.ts

* Update starter-select-ui-handler.ts

* Update utils.ts

* Update utils.ts

* Add files via upload

* Rename statuses_dk.json to statuses_da.json

* Update statuses_da.json

* Update and rename types_dk.json to types_da.json

* Rename statuses_dk.png to statuses_da.png

* Rename types_dk.png to types_da.png

* Delete src/locales/dk directory

* Add files via upload

* Apply suggestions from code review

* Delete src/locales/da directory

* Delete src/locales/tr directory

* Update i18n.ts

* Update i18n.ts

* Update utils.ts

* Main -> Beta (1.1.6) (#4751)

* Comment out startGame call on manifest fetch failure

* [Hotfix] Fix status damage triggering before berry usage (#4732)

* [Hotfix] Fix Eternatus egg tier (#4734)

* [Hotfix] Fix manifest getting loaded before the game is initialized (#4739)

* fix locales path for offline builds (#4739)

* [Sprite] Hotfix cut off Binacle sprite (#4741)

* [Sprite][hotfix] Fixed cropping on 658 static greninja and ash greninja (#4743)

* [Sprite][hotfix] Fixed cropping on static greninja and ash greninja

* [Hotfix] Fix crash when Mist would block a stat drop (#4746)

---------

Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt>
Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com>
Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com>
Co-authored-by: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com>
Co-authored-by: pom-eranian <lrlrliwoo@gmail.com>

* Update settings-display-ui-handler.ts

* Delete src/utils.ts

* Update common.ts

* Delete src/utils.ts

* Update common.ts

* Romanian workspace (#25)

* Russian workspace (#26)

* Update settings-display-ui-handler.ts

* Update settings-display-ui-handler.ts

* Update settings.ts

* Update settings-display-ui-handler.ts

* Update i18n.ts

* Update settings.ts

* Update settings-display-ui-handler.ts

* Update common.ts

* Update and rename statuses_ca-ES.json to statuses_ca.json

* Update and rename types_ca-ES.json to types_ca.json

* Add files via upload

* Delete public/images/statuses_ca-ES.png

* Delete public/images/types_ca-ES.png

* Update locales submodule

---------

Co-authored-by: Moka <54149968+MokaStitcher@users.noreply.github.com>
Co-authored-by: Frederico Santos <frederico.f.santos@tecnico.ulisboa.pt>
Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com>
Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com>
Co-authored-by: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com>
Co-authored-by: pom-eranian <lrlrliwoo@gmail.com>
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
2025-05-30 23:54:17 +00:00
Bertie690
a33638a7a3
[Test] Remove deprecated test funcs (#5906)
* Removed `game.startBattle`

* Removed `game.forceEnemyMove`

* Removed near-unused learn move macro
2025-05-30 16:50:25 -07:00
damocleas
3ab4b8baf2
[Refactor] Cleanup evolution scene handler
[Refactor] Cleanup evolution scene handler
2025-05-30 19:30:41 -04:00
damocleas
0988cacc48
Merge branch 'beta' into cleanup-evolution-scene-handler 2025-05-30 19:29:00 -04:00
Sirz Benjie
9a60cc9c71
[Refactor] Cleanup filter bar (#5896)
* Cleanup filter bar

* Move DropDownColumn to its own file

---------

Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com>
2025-05-30 23:12:35 +00:00
Sirz Benjie
ed0251ea90
[Refactor] Cleanup egg-counter-container (#5892) 2025-05-30 23:08:52 +00:00
Sirz Benjie
901ed73247
Cleanup evolution scene handler 2025-05-29 22:51:36 -05:00
damocleas
ddc160b862
Hotfix 1.9.5 to Main
Hotfix 1.9.5 to main
2025-05-27 23:56:48 -04:00
9945 changed files with 283228 additions and 219427 deletions

View File

@ -1,9 +1,33 @@
/** @type {import('dependency-cruiser').IConfiguration} */
module.exports = {
forbidden: [
{
name: "no-non-type-@type-exports",
severity: "error",
comment:
"Files in @types should not export anything but types and interfaces. " +
"The folder is intended to house imports that are removed at runtime, " +
"and thus should not contain anything with a bearing on runtime code.",
from: {},
to: {
path: "(^|/)src/@types",
dependencyTypesNot: ["type-only"],
},
},
{
name: "only-type-imports",
severity: "error",
comment: "Files in 'enums/' and '@types/' must only use type imports.",
from: {
path: ["(^|/)src/@types", "(^|/)src/enums"],
},
to: {
dependencyTypesNot: ["type-only"],
},
},
{
name: "no-circular-at-runtime",
severity: "warn",
severity: "error",
comment:
"This dependency is part of a circular relationship. You might want to revise " +
"your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ",
@ -23,7 +47,7 @@ module.exports = {
"add an exception for it in your dependency-cruiser configuration. By default " +
"this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " +
"files (.d.ts), tsconfig.json and some of the babel and webpack configs.",
severity: "warn",
severity: "error",
from: {
orphan: true,
pathNot: [
@ -31,6 +55,7 @@ module.exports = {
"[.]d[.]ts$", // TypeScript declaration files
"(^|/)tsconfig[.]json$", // TypeScript config
"(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$", // other configs
"(^|/)test/.+[.]setup[.]ts", // Vitest setup files
],
},
to: {},
@ -40,7 +65,7 @@ module.exports = {
comment:
"A module depends on a node core module that has been deprecated. Find an alternative - these are " +
"bound to exist - node doesn't deprecate lightly.",
severity: "warn",
severity: "error",
from: {},
to: {
dependencyTypes: ["core"],
@ -73,7 +98,7 @@ module.exports = {
comment:
"This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later " +
"version of that module, or find an alternative. Deprecated modules are a security risk.",
severity: "warn",
severity: "error",
from: {},
to: {
dependencyTypes: ["deprecated"],
@ -109,7 +134,7 @@ module.exports = {
"Likely this module depends on an external ('npm') package that occurs more than once " +
"in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " +
"maintenance problems later on.",
severity: "warn",
severity: "error",
from: {},
to: {
moreThanOneDependencyType: true,
@ -120,7 +145,7 @@ module.exports = {
},
},
/* rules you might want to tweak for your specific situation: */
// rules you might want to tweak for your specific situation:
{
name: "not-to-spec",
@ -175,7 +200,7 @@ module.exports = {
"in your package.json. This makes sense if your package is e.g. a plugin, but in " +
"other cases - maybe not so much. If the use of a peer dependency is intentional " +
"add an exception to your dependency-cruiser configuration.",
severity: "warn",
severity: "error",
from: {},
to: {
dependencyTypes: ["npm-peer"],
@ -183,6 +208,7 @@ module.exports = {
},
],
options: {
exclude: ["src/plugins/vite/*", "src/vite.env.d.ts"],
/* Which modules not to follow further when encountered */
doNotFollow: {
/* path: an array of regular expressions in strings to match against */
@ -222,7 +248,7 @@ module.exports = {
true: also detect dependencies that only exist before typescript-to-javascript compilation
"specify": for each dependency identify whether it only exists before compilation or also after
*/
// tsPreCompilationDeps: false,
tsPreCompilationDeps: true,
/* list of extensions to scan that aren't javascript or compile-to-javascript.
Empty by default. Only put extensions in here that you want to take into
@ -297,7 +323,7 @@ module.exports = {
conditionNames: ["import", "require", "node", "default", "types"],
/*
The extensions, by default are the same as the ones dependency-cruiser
can access (run `npx depcruise --info` to see which ones that are in
can access (run `pnpm exec depcruise --info` to see which ones that are in
_your_ environment). If that list is larger than you need you can pass
the extensions you actually use (e.g. [".js", ".jsx"]). This can speed
up module resolution, which is the most expensive step.

View File

@ -1,6 +1,7 @@
VITE_BYPASS_LOGIN=1
VITE_BYPASS_TUTORIAL=0
VITE_SERVER_URL=http://localhost:8001
# IDs for discord/google auth go unused due to VITE_BYPASS_LOGIN
VITE_DISCORD_CLIENT_ID=1234567890
VITE_GOOGLE_CLIENT_ID=1234567890
VITE_I18N_DEBUG=0

10
.github/CODEOWNERS vendored
View File

@ -3,9 +3,6 @@
# everything (whole code-base) - Junior Devs
* @pagefaultgames/junior-dev-team
# github actions/templates etc. - Dev Leads
/.github @pagefaultgames/senior-dev-team
# Art Team
/public/**/*.png @pagefaultgames/art-team
/public/**/*.json @pagefaultgames/art-team
@ -20,3 +17,10 @@
# Balance Files; contain actual code logic and must also be owned by dev team
/src/data/balance @pagefaultgames/balance-team @pagefaultgames/junior-dev-team
/src/data/trainers @pagefaultgames/balance-team @pagefaultgames/junior-dev-team
# GitHub actions/templates etc. - Senior Devs
# Should be defined last in the file to make sure these always override all other definitions
/.github @pagefaultgames/senior-dev-team
package.json @pagefaultgames/senior-dev-team
pnpm-lock.yaml @pagefaultgames/senior-dev-team

View File

@ -14,13 +14,16 @@ Make sure the title includes categorization (choose the one that best fits):
- [Balance]: If the PR is related to game balance
- [Challenge]: If the PR is adding or modifying challenges
- [Refactor]: If the PR is primarily rewriting existing code
- [Docs]: If the PR is just adding or modifying documentation (such as tsdocs/code comments)
- [Dev]: If the PR is primarily changing something pertaining to development (lefthook hooks, linter rules, etc.)
- [i18n]: If the PR is primarily adding/changing locale keys or key usage (may come with an associated locales PR)
- [Docs]: If the PR is adding or modifying documentation (such as tsdocs/code comments)
- [GitHub]: For changes to GitHub workflows/templates/etc
- [Misc]: If no other category fits the PR
-->
<!--
Make sure that this PR is not overlapping with someone else's work
Please try to keep the PR self-contained (and small)
Please try to keep the PR self-contained (and small!)
-->
## What are the changes the user will see?
@ -65,8 +68,8 @@ Do the reviewers need to do something special in order to test your changes?
- [ ] The PR is self-contained and cannot be split into smaller PRs?
- [ ] Have I provided a clear explanation of the changes?
- [ ] Have I tested the changes manually?
- [ ] Are all unit tests still passing? (`npm run test:silent`)
- [ ] Have I created new automated tests (`npm run create-test`) or updated existing tests related to the PR's changes?
- [ ] Are all unit tests still passing? (`pnpm test:silent`)
- [ ] Have I created new automated tests (`pnpm test:create`) or updated existing tests related to the PR's changes?
- [ ] Have I provided screenshots/videos of the changes (if applicable)?
- [ ] Have I made sure that any UI change works for both UI themes (default and legacy)?

View File

@ -11,22 +11,31 @@ on:
jobs:
deploy:
if: github.repository == 'pagefaultgames/pokerogue' && github.ref_name == ${{ vars.BETA_DEPLOY_BRANCH || 'beta' }}
if: github.repository == 'pagefaultgames/pokerogue' && github.ref_name == (vars.BETA_DEPLOY_BRANCH || 'beta')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: "recursive"
ref: ${{ vars.BETA_DEPLOY_BRANCH || 'beta'}}
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
- name: Install dependencies
run: npm ci
run: pnpm i
- name: Build
run: npm run build:beta
run: pnpm build:beta
env:
NODE_ENV: production
- name: Set up SSH
run: |
mkdir ~/.ssh
@ -34,6 +43,7 @@ jobs:
echo "${{ secrets.BETA_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/*
ssh-keyscan -H ${{ secrets.BETA_SSH_HOST }} >> ~/.ssh/known_hosts
- name: Deploy build on server
run: |
rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }}

View File

@ -16,15 +16,24 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
- name: Install dependencies
run: npm ci
run: pnpm i
- name: Build
run: npm run build
run: pnpm build
env:
NODE_ENV: production
- name: Set up SSH
if: github.event_name == 'push' && github.ref_name == 'main'
run: |
@ -33,11 +42,13 @@ jobs:
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/*
ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
- name: Deploy build on server
if: github.event_name == 'push' && github.ref_name == 'main'
run: |
rsync --del --no-times --checksum -vrm dist/* ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DESTINATION_DIR }}
ssh -t ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "~/prmanifest --inpath ${{ secrets.DESTINATION_DIR }} --outpath ${{ secrets.DESTINATION_DIR }}/manifest.json"
- name: Purge Cloudflare Cache
if: github.event_name == 'push' && github.ref_name == 'main'
id: purge-cache

View File

@ -4,6 +4,7 @@ on:
push:
branches:
- main
- beta
pull_request:
branches:
- main
@ -34,6 +35,11 @@ jobs:
sudo apt update
sudo apt install -y git openssh-client
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node 22.14.1
uses: actions/setup-node@v4
with:
@ -50,13 +56,13 @@ jobs:
working-directory: ${{env.api-dir}}
run: |
cd pokerogue_docs
npm ci
pnpm i
- name: Generate Typedoc docs
working-directory: ${{env.api-dir}}
run: |
cd pokerogue_docs
npm run docs -- --out /tmp/docs --githubPages false --entryPoints ./src/
pnpm exec typedoc --out /tmp/docs --githubPages false --entryPoints ./src/
- name: Commit & Push docs
if: github.event_name == 'push'

47
.github/workflows/linting.yml vendored Normal file
View File

@ -0,0 +1,47 @@
name: Linting
on:
push:
branches:
- main
- beta
pull_request:
branches:
- main
- beta
merge_group:
types: [checks_requested]
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'pnpm'
- name: Install Node.js dependencies
run: pnpm i
- name: Lint with Biome
run: pnpm biome-ci
- name: Check dependencies with depcruise
run: pnpm depcruise
- name: Lint with ls-lint
run: pnpm ls-lint

View File

@ -1,41 +0,0 @@
name: Biome Code Quality
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main # Trigger on push events to the main branch
- beta # Trigger on push events to the beta branch
pull_request:
branches:
- main # Trigger on pull request events targeting the main branch
- beta # Trigger on pull request events targeting the beta branch
merge_group:
types: [checks_requested]
jobs:
run-linters: # Define a job named "run-linters"
name: Run linters # Human-readable name for the job
runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job
steps:
- name: Check out Git repository # Step to check out the repository
uses: actions/checkout@v4 # Use the checkout action version 4
with:
submodules: 'recursive'
- name: Set up Node.js # Step to set up Node.js environment
uses: actions/setup-node@v4 # Use the setup-node action version 4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: Install Node.js dependencies # Step to install Node.js dependencies
run: npm ci # Use 'npm ci' to install dependencies
- name: eslint # Step to run linters
run: npm run eslint-ci
- name: Lint with Biome # Step to run linters
run: npm run biome-ci

View File

@ -28,12 +28,20 @@ jobs:
uses: actions/checkout@v4.2.2
with:
submodules: "recursive"
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "npm"
cache: "pnpm"
- name: Install Node.js dependencies
run: npm ci
run: pnpm i
- name: Run tests
run: npx vitest --project ${{ inputs.project }} --no-isolate --shard=${{ inputs.shard }}/${{ inputs.totalShards }} ${{ !runner.debug && '--silent' || '' }}
run: pnpm test:silent --shard=${{ inputs.shard }}/${{ inputs.totalShards }}

View File

@ -1,18 +1,17 @@
name: Tests
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main # Trigger on push events to the main branch
- beta # Trigger on push events to the beta branch
- main
- beta
pull_request:
branches:
- main # Trigger on pull request events targeting the main branch
- beta # Trigger on pull request events targeting the beta branch
- main
- beta
merge_group:
types: [checks_requested]
workflow_dispatch:
jobs:
check-path-change-filter:
@ -24,6 +23,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@v4
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36
id: filter
with:

28
.ls-lint.yml Normal file
View File

@ -0,0 +1,28 @@
# Base settings to use
# Note that the `_cfg` key isn't part of ls-lint's configuration, it's just a YAML anchor for reuse.
_cfg: &cfg
.ps1: kebab-case
.ts: kebab-case
.js: kebab-case
.*.ts: kebab-case
.*.js: kebab-case
.dir: kebab-case
.py: snake_case # python files should always use snake_case
ls:
<<: *cfg
src: &src
<<: *cfg
.dir: kebab-case | regex:@types
.js: exists:0
src/system/version-migration/versions:
.ts: snake_case
<<: *cfg
test: *src
ignore:
- node_modules
- .vscode
- .github
- .git
- public
- dist

110
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,110 @@
# Contributing to PokéRogue
Thank you for taking the time to contribute, every little bit helps. This project is entirely open-source and unmonetized - community contributions are what keep it alive!
Please make sure you understand everything relevant to your changes from the [Table of Contents](#-table-of-contents), and absolutely *feel free to reach out in the **#dev-corner** channel on [Discord](https://discord.gg/pokerogue)*.
We are here to help and the better you understand what you're working on, the easier it will be for it to find its way into the game.
## 📄 Table of Contents
- [Development Basics](#-development-basics)
- [Environment Setup](#-environment-setup)
- [Getting Started](#-getting-started)
- [Documentation](#-documentation)
- [Testing Your Changes](#-testing-your-changes)
- [Development Save File (Unlock Everything)](#-development-save-file)
## 🛠️ Development Basics
PokéRogue is built with [Typescript](https://www.typescriptlang.org/docs/handbook/intro.html), using the [Phaser](https://github.com/phaserjs/phaser) game framework.
If you have the motivation and experience with Typescript/Javascript (or are willing to learn) you can contribute by forking the repository and making pull requests with contributions.
## 💻 Environment Setup
### Prerequisites
- node: >=22.14.0 - [manage with pnpm](https://pnpm.io/cli/env) | [manage with fnm](https://github.com/Schniz/fnm) | [manage with nvm](https://github.com/nvm-sh/nvm)
- pnpm: 10.x - [how to install](https://pnpm.io/installation) (not recommended to install via `npm` on Windows native) | [alternate method - volta.sh](https://volta.sh/)
- The repository [forked](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) and [cloned](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) locally on your device
### Running Locally
1. Run `pnpm install` from the repository root
- *if you run into any errors, reach out in the **#dev-corner** channel on Discord*
2. Run `pnpm start:dev` to locally run the project at `localhost:8000`
## 🚀 Getting Started
A great way to develop an understanding of how the project works is to look at test cases (located in [the `test` folder](./test/)).
Tests show you both how things are supposed to work and the expected "flow" to get from point A to point B in battles.
*This is a big project and you will be confused at times - never be afraid to reach out and ask questions in **#dev-corner***!
### Where to Look
Once you have your feet under you, check out the [Issues](https://github.com/pagefaultgames/pokerogue/issues) page to see how you can help us!
Most issues are bugs and are labeled with their area, such as `Move`, `Ability`, `UI/UX`, etc. There are also priority labels:
- `P0`: Completely gamebreaking (very rare)
- `P1`: Major - Game crash
- `P2`: Minor - Incorrect (but non-crashing) move/ability/interaction
- `P3`: No gameplay impact - typo, minor graphical error, etc.
Also under issues, you can take a look at the [List of Partial / Unimplemented Moves and Abilities](https://github.com/pagefaultgames/pokerogue/issues/3503) and the [Bug Board](https://github.com/orgs/pagefaultgames/projects/3) (the latter is essentially the same as the issues page but easier to work with).
You are free to comment on any issue so that you may be assigned to it and we can avoid multiple people working on the same thing.
## 📚 Documentation
You can find the auto-generated documentation [here](https://pagefaultgames.github.io/pokerogue/main/index.html).
Additionally, the [docs folder](./docs) contains a variety of in-depth documents and guides useful for aspiring contributors.
Notable topics include:
- [Commenting your code](./docs/comments.md)
- [Linting & Formatting](./docs/linting.md)
- [Localization](./docs/localization.md)
- [Enemy AI move selection](./docs/enemy-ai.md)
Again, if you have unanswered questions please feel free to ask!
## 🧪 Testing Your Changes
You've just made a change - how can you check if it works? You have two areas to hit:
### 1 - Manual Testing
> This will likely be your first stop. After making a change, you'll want to spin the game up and make sure everything is as you expect. To do this, you will need a way to manipulate the game to produce the situation you're looking to test.
[src/overrides.ts](../src/overrides.ts) contains overrides for most values you'll need to change for testing, controlled through the `overrides` object.
For example, here is how you could test a scenario where the player Pokemon has the ability Drought and the enemy Pokemon has the move Water Gun:
```typescript
const overrides = {
ABILITY_OVERRIDE: AbilityId.DROUGHT,
ENEMY_MOVESET_OVERRIDE: MoveId.WATER_GUN,
} satisfies Partial<InstanceType<typeof DefaultOverrides>>;
```
Read through `src/overrides.ts` file to find the override that fits your needs - there are a lot of them!
If the situation you're trying to test can't be created using existing overrides (or with the [Dev Save](#-development-save-file)), reach out in **#dev-corner**.
You can get help testing your specific changes, and you might have found a new override that needs to be created!
### 2 - Automatic Testing
> PokéRogue uses [Vitest](https://vitest.dev/) for automatic testing. Checking out the existing tests in the [test](./test/) folder is a great way to understand how this works, and to get familiar with the project as a whole.
To make sure your changes didn't break any existing test cases, run `pnpm test:silent` in your terminal. You can also provide an argument to the command: to run only the Dancer (ability) tests, you could write `pnpm test:silent dancer`.
- __Note that passing all test cases does *not* guarantee that everything is working properly__. The project does not have complete regression testing.
Most non-trivial changes (*especially bug fixes*) should come along with new test cases.
- To make a new test file, run `pnpm test:create` and follow the prompts. If the move/ability/etc. you're modifying already has tests, simply add new cases to the end of the file. As mentioned before, the easiest way to get familiar with the system and understand how to write your own tests is simply to read the existing tests, particularly ones similar to the tests you intend to write.
- Ensure that new tests:
- Are deterministic. In other words, the test should never pass or fail when it shouldn't due to randomness. This involves primarily ensuring that abilities and moves are never randomly selected.
- As much as possible, are unit tests. If you have made two distinct changes, they should be tested in two separate cases.
- Test edge cases. A good strategy is to think of edge cases beforehand and create tests for them using `it.todo`. Once the edge case has been handled, you can remove the `todo` marker.
## 😈 Development Save File
> Some issues may require you to have unlocks on your save file which go beyond normal overrides. For this reason, the repository contains a [save file](../test/test-utils/saves/everything.psrv) with _everything_ unlocked (even ones not legitimately obtainable, like unimplemented variant shinies).
1. Start the game up locally and navigate to `Menu -> Manage Data -> Import Data`
2. Select [everything.prsv](test/test-utils/saves/everything.prsv) (`test/test-utils/saves/everything.prsv`) and confirm.

View File

@ -40,6 +40,7 @@
## Backgrounds
- Squip (Paid Commissions)
- Contributions by Someonealive-QN
- Contributions by redactedinlight
## UI
- GAMEFREAK

View File

@ -4,47 +4,7 @@ PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite
# Contributing
## 🛠️ Development
If you have the motivation and experience with Typescript/Javascript (or are willing to learn) please feel free to fork the repository and make pull requests with contributions. If you don't know what to work on but want to help, reference the below **To-Do** section or the **#feature-vote** channel in the discord.
### 💻 Environment Setup
#### Prerequisites
- node: 22.14.0
- npm: [how to install](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
#### Running Locally
1. Clone the repo and in the root directory run `npm install`
- *if you run into any errors, reach out in the **#dev-corner** channel in discord*
2. Run `npm run start:dev` to locally run the project in `localhost:8000`
#### Linting
We're using Biome as our common linter and formatter. It will run automatically during the pre-commit hook but if you would like to manually run it, use the `npm run biome` script. To view the complete rules, check out the [biome.jsonc](./biome.jsonc) file.
### 📚 Documentation
You can find the auto-generated documentation [here](https://pagefaultgames.github.io/pokerogue/main/index.html).
For information on enemy AI, check out the [enemy-ai.md](./docs/enemy-ai.md) file.
For detailed guidelines on documenting your code, refer to the [comments.md](./docs/comments.md) file.
### ❔ FAQ
**How do I test a new _______?**
- In the `src/overrides.ts` file there are overrides for most values you'll need to change for testing
**How do I retrieve the translations?**
- The translations were moved to the [dedicated translation repository](https://github.com/pagefaultgames/pokerogue-locales) and are now applied as a submodule in this project.
- The command to retrieve the translations is `git submodule update --init --recursive`. If you still struggle to get it working, please reach out to #dev-corner channel in Discord.
## 🪧 To Do
Check out [Github Issues](https://github.com/pagefaultgames/pokerogue/issues) to see how can you help us!
See [CONTRIBUTING.md](./CONTRIBUTING.md), this includes instructions on how to set up the game locally.
# 📝 Credits
>

View File

@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
"$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
"vcs": {
"enabled": false,
"clientKind": "git",
@ -10,65 +10,98 @@
"enabled": true,
"useEditorconfig": true,
"indentStyle": "space",
"ignore": ["src/enums/*", "src/data/balance/*"],
"includes": ["**", "!**/src/enums/**/*", "!**/src/data/balance/**/*"],
"lineWidth": 120
},
"files": {
"ignoreUnknown": true,
// Adding folders to the ignore list is GREAT for performance because it prevents biome from descending into them
// and having to verify whether each individual file is ignored
"ignore": [
"**/*.d.ts",
"dist/*",
"build/*",
"coverage/*",
"public/*",
".github/*",
"node_modules/*",
".vscode/*",
"*.css", // TODO?
"*.html", // TODO?
"src/overrides.ts",
// TODO: these files are too big and complex, ignore them until their respective refactors
"src/data/moves/move.ts",
"src/data/abilities/ability.ts",
// this file is just too big:
"src/data/balance/tms.ts"
"includes": [
"**",
"!**/dist/**/*",
"!**/build/**/*",
"!**/coverage/**/*",
"!**/public/**/*",
"!**/.github/**/*",
"!**/node_modules/**/*",
"!**/.vscode/**/*",
"!**/typedoc/**/*",
// TODO: lint css and html?
"!**/*.css",
"!**/*.html",
// TODO: enable linting this file
"!**/src/data/moves/move.ts",
// this file is too big
"!**/src/data/balance/tms.ts"
]
},
// While it'd be nice to enable consistent sorting, enabling this causes issues due to circular import resolution order
// TODO: Remove if we ever get down to 0 circular imports
"organizeImports": { "enabled": false },
"assist": {
"actions": {
"source": {
"organizeImports": {
"level": "on",
"options": {
"groups": [":ALIAS:", ":NODE:", ":PACKAGE_WITH_PROTOCOL:", ":PACKAGE:", ":PATH:"]
}
}
}
}
},
"linter": {
"ignore": [
"src/phases/move-effect-phase.ts" // TODO: unignore after move-effect-phase refactor
],
"enabled": true,
"rules": {
"recommended": true,
"correctness": {
"noUndeclaredVariables": "off",
"noUnusedVariables": "error",
"noSwitchDeclarations": "warn", // TODO: refactor and make this an error
"noVoidTypeReturn": "warn", // TODO: Refactor and make this an error
"noUnusedImports": "error"
"noSwitchDeclarations": "error",
"noVoidTypeReturn": "error",
"noUnusedImports": {
"level": "error",
"fix": "safe"
},
"noUnusedFunctionParameters": "error",
"noUnusedLabels": "error",
"noPrivateImports": "error"
},
"style": {
"noVar": "error",
"useEnumInitializers": "off", // large enums like Moves/Species would make this cumbersome
"useBlockStatements": "error",
"useBlockStatements": {
"level": "error",
"fix": "safe"
},
"useConst": "error",
"useImportType": "error",
"noNonNullAssertion": "off", // TODO: Turn this on ASAP and fix all non-null assertions in non-test files
"noParameterAssign": "off",
"useExponentiationOperator": "off", // Too typo-prone and easy to mixup with standard multiplication (* vs **)
"useDefaultParameterLast": "off", // TODO: Fix spots in the codebase where this flag would be triggered, and then enable
"useDefaultParameterLast": {
// TODO: Fix spots in the codebase where this flag would be triggered
// and then set to "error" and re-enable the fixer
"level": "warn",
"fix": "none"
},
"useSingleVarDeclarator": "off",
"useNodejsImportProtocol": "off",
"useTemplate": "off", // string concatenation is faster: https://stackoverflow.com/questions/29055518/are-es6-template-literals-faster-than-string-concatenation
"noNamespaceImport": "error"
"useAsConstAssertion": "error",
"noUnusedTemplateLiteral": "error",
"useNumberNamespace": "error",
"noInferrableTypes": "error",
"noUselessElse": "error",
"noRestrictedTypes": {
"level": "error",
"options": {
"types": {
"integer": {
"message": "This is an alias for 'number' that can provide false impressions of what values can actually be contained in this variable. Use 'number' instead.",
"use": "number"
}
}
}
}
},
"suspicious": {
"noDoubleEquals": "error",
@ -82,45 +115,85 @@
"noImplicitAnyLet": "warn", // TODO: Refactor and make this an error
"noRedeclare": "info", // TODO: Refactor and make this an error
"noGlobalIsNan": "off",
"noAsyncPromiseExecutor": "warn" // TODO: Refactor and make this an error
"noAsyncPromiseExecutor": "warn", // TODO: Refactor and make this an error
"noVar": "error",
"noDocumentCookie": "off" // Firefox has minimal support for the "Cookie Store API"
},
"complexity": {
"noExcessiveCognitiveComplexity": "warn", // TODO: Refactor and make this an error
"noExcessiveCognitiveComplexity": "info", // TODO: Refactor and make this an error
"useLiteralKeys": "off",
"noForEach": "off", // Foreach vs for of is not that simple.
"noUselessSwitchCase": "off", // Explicit > Implicit
"noUselessConstructor": "warn", // TODO: Refactor and make this an error
"noBannedTypes": "warn" // TODO: Refactor and make this an error
"noUselessConstructor": "error",
"noBannedTypes": "warn", // TODO: Refactor and make this an error
"noThisInStatic": "error",
"noUselessThisAlias": "error",
"noUselessTernary": "error"
},
"performance": {
"noNamespaceImport": "error",
"noDelete": "error"
},
"nursery": {
"noRestrictedTypes": {
"level": "error",
"options": {
"types": {
"integer": {
"message": "This is an alias for 'number' that can provide false impressions of what values can actually be contained in this variable. Use 'number' instead.",
"use": "number"
}
}
}
}
"useAdjacentGetterSetter": "error",
"noConstantBinaryExpression": "error",
"noTsIgnore": "error",
"noAwaitInLoop": "off",
"useJsonImportAttribute": "off", // "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'. ts(2823)"
"useIndexOf": "error",
"useObjectSpread": "error",
"useNumericSeparators": "off", // TODO: enable?
"useIterableCallbackReturn": "warn", // TODO: refactor and make "error"
"noShadow": "warn" // TODO: refactor and make "error"
}
}
},
"javascript": {
"formatter": { "quoteStyle": "double", "arrowParentheses": "asNeeded" }
"formatter": {
"quoteStyle": "double",
"arrowParentheses": "asNeeded"
},
"parser": {
"jsxEverywhere": false
}
},
"overrides": [
{
"include": ["test/**/*.test.ts"],
"javascript": { "globals": [] },
"includes": ["**/test/**/*.test.ts"],
"linter": {
"rules": {
"performance": {
"noDelete": "off" // TODO: evaluate if this is necessary for the test(s) to function
"noDelete": "off", // TODO: evaluate if this is necessary for the test(s) to function
"noNamespaceImport": "off" // this is required for `vi.spyOn` to work in some tests
},
"style": {
"noNamespaceImport": "off" // this is required for `vi.spyOn` to work in some tests
"noNonNullAssertion": "off"
},
"nursery": {
"noFloatingPromises": "error"
}
}
}
},
// Overrides to prevent unused import removal inside `overrides.ts` and enums files (for TSDoc linkcodes),
// as well as in all TS files in `scripts/` (which are assumed to be boilerplate templates).
{
"includes": ["**/src/overrides.ts", "**/src/enums/**/*", "**/scripts/**/*.ts", "**/*.d.ts"],
"linter": {
"rules": {
"correctness": {
"noUnusedImports": "off"
}
}
}
},
{
"includes": ["**/src/overrides.ts", "**/scripts/**/*.ts"],
"linter": {
"rules": {
"style": {
"useImportType": "off"
}
}
}

View File

@ -1,172 +0,0 @@
/**
* This script creates a test boilerplate file in the appropriate
* directory based on the type selected.
* @example npm run create-test
*/
import fs from "fs";
import inquirer from "inquirer";
import path from "path";
import { fileURLToPath } from "url";
// Get the directory name of the current module file
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const typeChoices = ["Move", "Ability", "Item", "Mystery Encounter"];
/**
* Prompts the user to select a type via list.
* @returns {Promise<{selectedOption: string}>} the selected type
*/
async function promptTestType() {
const typeAnswer = await inquirer.prompt([
{
type: "list",
name: "selectedOption",
message: "What type of test would you like to create:",
choices: [...typeChoices, "EXIT"],
},
]);
if (typeAnswer.selectedOption === "EXIT") {
console.log("Exiting...");
return process.exit();
}
if (!typeChoices.includes(typeAnswer.selectedOption)) {
console.error(`Please provide a valid type (${typeChoices.join(", ")})!`);
return await promptTestType();
}
return typeAnswer;
}
/**
* Prompts the user to provide a file name.
* @param {string} selectedType
* @returns {Promise<{userInput: string}>} the selected file name
*/
async function promptFileName(selectedType) {
const fileNameAnswer = await inquirer.prompt([
{
type: "input",
name: "userInput",
message: `Please provide the name of the ${selectedType}:`,
},
]);
if (!fileNameAnswer.userInput || fileNameAnswer.userInput.trim().length === 0) {
console.error("Please provide a valid file name!");
return await promptFileName(selectedType);
}
return fileNameAnswer;
}
/**
* Runs the interactive create-test "CLI"
* @returns {Promise<void>}
*/
async function runInteractive() {
const typeAnswer = await promptTestType();
const fileNameAnswer = await promptFileName(typeAnswer.selectedOption);
const type = typeAnswer.selectedOption.toLowerCase();
// Convert fileName from kebab-case or camelCase to snake_case
const fileName = fileNameAnswer.userInput
.replace(/-+/g, "_") // Convert kebab-case (dashes) to underscores
.replace(/([a-z])([A-Z])/g, "$1_$2") // Convert camelCase to snake_case
.replace(/\s+/g, "_") // Replace spaces with underscores
.toLowerCase(); // Ensure all lowercase
// Format the description for the test case
const formattedName = fileName.replace(/_/g, " ").replace(/\b\w/g, char => char.toUpperCase());
// Determine the directory based on the type
let dir;
let description;
switch (type) {
case "move":
dir = path.join(__dirname, "test", "moves");
description = `Moves - ${formattedName}`;
break;
case "ability":
dir = path.join(__dirname, "test", "abilities");
description = `Abilities - ${formattedName}`;
break;
case "item":
dir = path.join(__dirname, "test", "items");
description = `Items - ${formattedName}`;
break;
case "mystery encounter":
dir = path.join(__dirname, "test", "mystery-encounter", "encounters");
description = `Mystery Encounter - ${formattedName}`;
break;
default:
console.error(`Invalid type. Please use one of the following: ${typeChoices.join(", ")}.`);
process.exit(1);
}
// Define the content template
const content = `import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/testUtils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
describe("${description}", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
beforeAll(() => {
phaserGame = new Phaser.Game({
type: Phaser.HEADLESS,
});
});
afterEach(() => {
game.phaseInterceptor.restoreOg();
});
beforeEach(() => {
game = new GameManager(phaserGame);
game.override
.moveset([ Moves.SPLASH ])
.ability(Abilities.BALL_FETCH)
.battleType("single")
.disableCrits()
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.BALL_FETCH)
.enemyMoveset(Moves.SPLASH);
});
it("should do X", async () => {
await game.classicMode.startBattle([ Species.FEEBAS ]);
game.move.select(Moves.SPLASH);
await game.phaseInterceptor.to("BerryPhase");
expect(true).toBe(true);
});
});
`;
// Ensure the directory exists
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
// Create the file with the given name
const filePath = path.join(dir, `${fileName}.test.ts`);
if (fs.existsSync(filePath)) {
console.error(`File "${fileName}.test.ts" already exists.`);
process.exit(1);
}
// Write the template content to the file
fs.writeFileSync(filePath, content, "utf8");
console.log(`File created at: ${filePath}`);
}
runInteractive();

View File

@ -1,13 +0,0 @@
import { Graphviz } from "@hpcc-js/wasm/graphviz";
const graphviz = await Graphviz.load();
const inputFile = [];
for await (const chunk of process.stdin) {
inputFile.push(chunk);
}
const file = Buffer.concat(inputFile).toString("utf-8");
const svg = graphviz.dot(file, "svg");
process.stdout.write(svg);

View File

@ -23,7 +23,7 @@ When formatted correctly, these comments are shown within VS Code or similar IDE
- Functions also show the comment for each parameter as you type them, making keeping track of arguments inside lengthy functions much more clear.
They can also be used to generate a commentated overview of the codebase. There is a GitHub action that automatically updates [this docs site](https://pagefaultgames.github.io/pokerogue/main/index.html)
and you can generate it locally as well via `npm run docs` which will generate into the `typedoc/` directory.
and you can generate it locally as well via `pnpm run docs` which will generate into the `typedoc/` directory.
## Syntax
For an example of how TSDoc comments work, here are some TSDoc comments taken from `src/data/moves/move.ts`:

View File

@ -1,14 +1,10 @@
# Linting & Formatting
> "Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
>
> — Martin Fowler
Writing clean, readable code is important, and linters and formatters are an integral part of ensuring code quality and readability.
It is for this reason we are using [Biome](https://biomejs.dev), an opinionated linter/formatter (akin to Prettier) with a heavy focus on speed and performance.
### Installation
You probably installed Biome already without noticing it - it's included inside `package.json` and should've been downloaded when you ran `npm install` after cloning the repo (assuming you followed proper instructions, that is). If you haven't done that yet, go do it.
You probably installed Biome already without noticing it - it's included inside `package.json` and should've been downloaded when you ran `pnpm install` after cloning the repo. If you haven't done that yet, go do it.
# Using Biome
@ -24,17 +20,11 @@ You will **not** be able to push code with `error`-level linting problems - fix
We also have a [Github Action](../.github/workflows/quality.yml) to verify code quality each time a PR is updated, preventing bad code from inadvertently making its way upstream.
### Why am I getting errors for code I didn't write?
<!-- TODO: Remove this if/when we perform a project wide linting spree -->
To save time and minimize friction with existing code, both the pre-commit hook and workflow run will only check files **directly changed** by a given PR or commit.
As a result, changes to files not updated since Biome's introduction can cause any _prior_ linting errors in them to resurface and get flagged.
This should occur less and less often as time passes and more files are updated to the new standard.
## Running Biome via CLI
If you want Biome to check your files manually, you can run it from the command line like so:
```sh
npx biome check --[flags]
pnpm exec biome check --[flags]
```
A full list of flags and options can be found on [their website](https://biomejs.dev/reference/cli/), but here's a few useful ones to keep in mind:
@ -56,10 +46,3 @@ Some things to consider:
Any questions about linting rules should be brought up in the `#dev-corner` channel in the discord.
[^1]: A complete list of rules can be found in the `biome.jsonc` file in the project root.
## What about ESLint?
<!-- Remove if/when we finally ditch eslint for good -->
Our project migrated away from ESLint around March 2025 due to it simply not scaling well enough with the codebase's ever-growing size. The [existing eslint rules](../eslint.config.js) are considered _deprecated_, only kept due to Biome lacking the corresponding rules in its current ruleset.
No additional ESLint rules should be added under any circumstances - even the few currently in circulation take longer to run than the entire Biome formatting/linting suite combined.

146
docs/localization.md Normal file
View File

@ -0,0 +1,146 @@
# Localization 101
PokéRogue's localization team puts immense effort into making the game accessible around the world, supporting over 12 different languages at the time of writing this document.
As a developer, it's important to help maintain global accessibility by effectively coordinating with the Translation Team on any new features or enhancements.
This document aims to cover everything you need to know to help keep the integration process for localization smooth and simple.
# Prerequisites
Before you continue, this document assumes:
- You have already forked the repository and set up a development environment according to [CONTRIBUTING.md](../CONTRIBUTING.md).
- You have a basic level of familiarity with Git commands and GitHub repositories.
- You have joined the [community Discord](https://discord.gg/pokerogue) and have access to `#dev-corner` and related channels via **[#select-roles](https://discord.com/channels/1125469663833370665/1194825607738052621)**.
This is the easiest way to keep in touch with both the Translation Team and other like-minded contributors!
# About the `pokerogue-locales` submodule
PokéRogue's translations are managed under a separate dedicated repository, [`pokerogue-locales`](https://github.com/pagefaultgames/pokerogue-locales/).
This repository is integrated into the main one as a [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) within the `public/locales` folder.
## What Is a Submodule?
In essence, a submodule is a way for one repository (i.e. `pokerogue`) to use another repository (i.e. `pokerogue-locales`) internally.
The parent repo (the "superproject") houses a cloned version of the 2nd repository (the "submodule") inside it, making locales effectively a "repository within a repository", so to speak.
>[!TIP]
> Many popular IDEs have integrated `git` support with special handling around submodules:
> ![Image showing Visual Studio Code's `git` integration in the File Explorer. A blue "S" in the top right hand corner indicates the `public/locales` folder is a submodule.](https://github.com/user-attachments/assets/bd42d354-c65b-4cbe-8873-23d760dc1714 "What the `public/locales` submodule looks like in VS Code's File Explorer")
>
> ![Image showing Visual Studio Code's Source Control tab. A separate dropdown can be seen for each individual submodule.](https://github.com/user-attachments/assets/8b4d3f64-aec1-4474-91df-03dc1252a2fa "Making commits on submodules without even changing directories!")
## Fetching Changes from Submodules
The following command will initialize your branch's locales repository and update its HEAD:
```bash
git submodule update --init --recursive
```
> [!TIP]
> This command is run _automatically_ after cloning, merging or changing branches, so you should rarely have to run it manually.
> [!IMPORTANT]
> If you run into issues with the `locales` submodule, try deleting the `.git/modules/public` and `public/locales` folders before re-running the command.
## How Are Translations Integrated?
This project uses the [i18next library](https://www.i18next.com/) to integrate translations from `public/locales` into the source code.
The basic process for fetching translated text goes roughly as follows:
1. The source code fetches text by a given key.
```ts
globalScene.phaseManager.queueMessage(
i18next.t("fileName:keyName", { arg1: "Hello", arg2: "an example", ... })
);
```
2. The game looks up the key in the corresponding JSON file for the user's language.
```jsonc
// from "en/file-name.json"...
{
"keyName": "{{arg1}}! This is {{arg2}} of translated text!"
}
```
If the key doesn't exist for the given language, the game will default to an appropriate fallback (usually the corresponding English key).
3. The game shows the translated text to the user.
```ts
"Hello! This is an example of translated text!"
```
# Submitting Locales Changes
If you have a feature or enhancement that requires additions or changes to in-game text, you will need to make a fork of the `pokerogue-locales` repo and submit your text changes as a pull request _in addition_ to your pull request to the main project.
Since these two PRs aren't _technically_ linked, it's important to coordinate with the Translation Team to ensure that both PRs are integrated safely into the project.
> [!CAUTION]
> **DO NOT HARDCODE PLAYER-FACING TEXT INTO THE CODE!**
## Making Changes
One perk of submodules is you don't actually _need_ to clone the locales repository to start contributing - initializing the submodule already does that for you.
Given `pokerogue-locales` is a full-fledged `git` repository _inside_ `pokerogue`, making changes is roughly the same as normal, merely using `public/locales` as your root directory.
> [!WARNING]
> Make sure to checkout or rebase onto `upstream/HEAD` **BEFORE** creating a PR!
> The checked-out commit is based on the superproject's SHA-1 by default, so hastily making changes may see you basing your commits on last week's `HEAD`.
## Requirements for Adding Translated Text
When your new feature or enhancement requires adding a new locales key **without changing text in existing keys**, we require the following workflow with regards to localization:
1. You (the developer) make a pull request to the main repository for your new feature.
If this feature requires new text, the text should be integrated into the code with a new `i18next` key pointing to where you plan to add it into the locales repository.
2. You then make another pull request — this time to the `pokerogue-locales` repository — adding a new entry with text for each key you added to your main PR.
- You must add the corresponding **English keys** while making the PR; the Translation Team can take care of the rest[^2].
- For any feature pulled from the mainline Pokémon games (e.g. a Move or Ability implementation), it's best practice to include a source link for any added text.
[Poké Corpus](https://abcboy101.github.io/poke-corpus/) is a great resource for finding text from the mainline games; otherwise, a video/picture showing the text being displayed should suffice.
- You should also [notify the current Head of Translation](#notifying-translation) to ensure a fast response.
3. Your locales should use the following format:
- File names should be in `kebab-case`. Example: `trainer-names.json`
- Key names should be in `camelCase`. Example: `aceTrainer`
- If you make use of i18next's inbuilt [context support](https://www.i18next.com/translation-function/context), you need to use `snake_case` for the context key. Example: `aceTrainer_male`
4. At this point, you may begin [testing locales integration in your main PR](#documenting-locales-changes).
5. The Translation Team will approve the locale PR (after corrections, if necessary), then merge it into `pokerogue-locales`.
6. The Dev Team will approve your main PR for your feature, then merge it into PokéRogue's beta environment.
[^2]: For those wondering, the reason for choosing English specifically is due to it being the master language set in Pontoon (the program used by the Translation Team to perform locale updates).
If a key is present in any language _except_ the master language, it won't appear anywhere else in the translation tool, rendering missing English keys quite a hassle.
### Requirements for Modifying Translated Text
PRs that modify existing text have different risks with respect to coordination between development and translation, so their requirements are slightly different:
- As above, you set up 2 PRs: one for the feature itself in the main repo, and another for the associated locales changes in the locale repo.
- Now, however, you need to have your main PR be approved by the Dev Team **before** your corresponding locale changes are merged in.
- After your main PR is approved, the Translation Team will merge your locale PR, and you may update the submodule and post video evidence of integration into the **locales PR**.
- A Lead or Senior Translator from the Translation Team will then approve your main PR (if all is well), clearing your feature for merging into `beta`.
## Documenting Locales Changes
After making a PR involving any outwards-facing behavior (but _especially_ locales-related ones), it's generally considered good practice to attach proof of those changes working in-game.
The basic procedure is roughly as follows:
1. Update your locales submodule to point to **the branch you used to make the locales PR**. \
Many IDEs with `git` integration support doing this from the GUI, \
or you can simply do it via command-line:
```bash
cd public/locales
git checkout your-branch-name-here
```
2. Set some of the [in-game overrides](../CONTRIBUTING.md#1---manual-testing) inside `overrides.ts` to values corresponding to the interactions being tested.
3. Start a local dev server (`pnpm start:dev`) and open localhost in your browser.
4. Take screenshots or record a video of the locales changes being displayed in-game using the software of your choice[^2].
[^2]: For those lacking a screen capture device, [OBS Studio](https://obsproject.com) is a popular open-source option.
> [!NOTE]
> For those aiming to film their changes, bear in mind that GitHub has a hard **10mB limit** on uploaded media content.
> If your video is too large, consider making it shorter or downscaling the quality.
## Notifying Translation
Put simply, stating that a PR exists makes it much easier to review and merge.
The easiest way to do this is by **pinging the current Head of Translation** in the [community Discord](https://discord.gg/pokerogue) (ideally in `#dev-corner` or similar).
<!-- Remember to update this everytime the head of translation changes! -->
> [!IMPORTANT]
> The current Head of Translation is: \
> ** @lugiadrien **
# Closing Remarks
If you have any questions about the developer process for localization, don't hesitate to ask!
Feel free to contact us on Discord - the Dev Team and Translation Team will be happy to answer any questions.

View File

@ -1,43 +0,0 @@
/** @ts-check */
import tseslint from "typescript-eslint";
import stylisticTs from "@stylistic/eslint-plugin-ts";
import parser from "@typescript-eslint/parser";
import importX from "eslint-plugin-import-x";
export default tseslint.config(
{
name: "eslint-config",
files: ["src/**/*.{ts,tsx,js,jsx}", "test/**/*.{ts,tsx,js,jsx}"],
ignores: ["dist/*", "build/*", "coverage/*", "public/*", ".github/*", "node_modules/*", ".vscode/*"],
languageOptions: {
parser: parser,
},
plugins: {
"import-x": importX,
"@stylistic/ts": stylisticTs,
"@typescript-eslint": tseslint.plugin,
},
rules: {
"no-undef": "off", // Disables the rule that disallows the use of undeclared variables (TypeScript handles this)
"no-extra-semi": "error", // Disallows unnecessary semicolons for TypeScript-specific syntax
"import-x/extensions": ["error", "never", { json: "always" }], // Enforces no extension for imports unless json
},
},
{
name: "eslint-tests",
files: ["test/**/**.test.ts"],
languageOptions: {
parser: parser,
parserOptions: {
project: ["./tsconfig.json"],
},
},
plugins: {
"@typescript-eslint": tseslint.plugin,
},
rules: {
"@typescript-eslint/no-floating-promises": "error", // Require Promise-like statements to be handled appropriately. - https://typescript-eslint.io/rules/no-floating-promises/
"@typescript-eslint/no-misused-promises": "error", // Disallow Promises in places not designed to handle them. - https://typescript-eslint.io/rules/no-misused-promises/
},
},
);

12
global.d.ts vendored
View File

@ -1,14 +1,20 @@
import type { AnyFn } from "#types/type-helpers";
import type { SetupServerApi } from "msw/node";
export {};
declare global {
/**
* Only used in testing.
* Can technically be undefined/null but for ease of use we are going to assume it is always defined.
* Used to load i18n files exclusively.
*
* To set up your own server in a test see `game_data.test.ts`
* To set up your own server in a test see `game-data.test.ts`
*/
var server: SetupServerApi;
// Overloads for `Function.apply` and `Function.call` to add type safety on matching argument types
interface Function {
apply<T extends AnyFn>(this: T, thisArg: ThisParameterType<T>, argArray: Parameters<T>): ReturnType<T>;
call<T extends AnyFn>(this: T, thisArg: ThisParameterType<T>, ...argArray: Parameters<T>): ReturnType<T>;
}
}

View File

@ -145,6 +145,5 @@
</div>
<script type="module" src="./src/main.ts"></script>
<script src="./src/touch-controls.ts" type="module"></script>
<script src="./src/debug.js" type="module"></script>
</body>
</html>

View File

@ -1,14 +1,22 @@
pre-commit:
parallel: true
commands:
biome-lint:
run: npx biome check --write --reporter=summary --staged --no-errors-on-unmatched
stage_fixed: true
skip:
- merge
- rebase
commands:
biome-lint:
run: pnpm exec biome check --write --reporter=summary --staged --no-errors-on-unmatched
stage_fixed: true
ls-lint:
run: pnpm exec ls-lint
post-merge:
commands:
update-submodules:
run: git submodule update --init --recursive
post-checkout:
commands:
update-submodules:
# cf https://git-scm.com/docs/githooks#_post_checkout:
# The 3rd argument is 1 for branch checkouts and 0 for file checkouts.
run: if test {3} -eq "1"; then git submodule update --init --recursive; fi

8029
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "pokemon-rogue-battle",
"private": true,
"version": "1.9.4",
"version": "1.9.6",
"type": "module",
"scripts": {
"start": "vite",
@ -12,59 +12,54 @@
"test": "vitest run --no-isolate",
"test:cov": "vitest run --coverage --no-isolate",
"test:watch": "vitest watch --coverage --no-isolate",
"test:silent": "vitest run --silent --no-isolate",
"test:silent": "vitest run --silent='passed-only' --no-isolate",
"test:create": "node scripts/create-test/create-test.js",
"typecheck": "tsc --noEmit",
"eslint": "eslint --fix .",
"eslint-ci": "eslint .",
"biome": "biome check --write --changed --no-errors-on-unmatched",
"biome-ci": "biome ci --diagnostic-level=error --reporter=github --changed --no-errors-on-unmatched",
"biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error",
"biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched",
"docs": "typedoc",
"depcruise": "depcruise src",
"depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg",
"create-test": "node ./create-test-boilerplate.js",
"postinstall": "npx lefthook install && npx lefthook run post-merge",
"update-version:patch": "npm version patch --force --no-git-tag-version",
"update-version:minor": "npm version minor --force --no-git-tag-version",
"depcruise": "depcruise src test",
"postinstall": "lefthook install; git submodule update --init --recursive",
"update-version:patch": "pnpm version patch --force --no-git-tag-version",
"update-version:minor": "pnpm version minor --force --no-git-tag-version",
"update-locales:remote": "git submodule update --progress --init --recursive --force --remote"
},
"devDependencies": {
"@biomejs/biome": "1.9.4",
"@eslint/js": "^9.23.0",
"@hpcc-js/wasm": "^2.22.4",
"@stylistic/eslint-plugin-ts": "^4.1.0",
"@biomejs/biome": "2.0.0",
"@ls-lint/ls-lint": "2.3.1",
"@types/crypto-js": "^4.2.0",
"@types/jsdom": "^21.1.7",
"@types/node": "^22.13.14",
"@typescript-eslint/eslint-plugin": "^8.28.0",
"@typescript-eslint/parser": "^8.28.0",
"@vitest/coverage-istanbul": "^3.0.9",
"dependency-cruiser": "^16.3.10",
"eslint": "^9.23.0",
"eslint-plugin-import-x": "^4.9.4",
"inquirer": "^12.4.2",
"jsdom": "^26.0.0",
"lefthook": "^1.11.5",
"msw": "^2.7.3",
"@types/node": "^22.16.5",
"@vitest/coverage-istanbul": "^3.2.4",
"@vitest/expect": "^3.2.4",
"chalk": "^5.4.1",
"dependency-cruiser": "^16.10.4",
"inquirer": "^12.8.2",
"jsdom": "^26.1.0",
"lefthook": "^1.12.2",
"msw": "^2.10.4",
"phaser3spectorjs": "^0.0.8",
"typedoc": "^0.28.1",
"typescript": "^5.8.2",
"typescript-eslint": "^8.28.0",
"vite": "^6.3.4",
"typedoc": "^0.28.8",
"typescript": "^5.8.3",
"vite": "^7.0.6",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.0.9",
"vitest": "^3.2.4",
"vitest-canvas-mock": "^0.3.3"
},
"dependencies": {
"@material/material-color-utilities": "^0.2.7",
"compare-versions": "^6.1.1",
"crypto-js": "^4.2.0",
"i18next": "^24.2.2",
"i18next-browser-languagedetector": "^8.0.4",
"i18next": "^24.2.3",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^3.0.2",
"i18next-korean-postposition-processor": "^1.0.0",
"json-stable-stringify": "^1.2.0",
"json-stable-stringify": "^1.3.0",
"jszip": "^3.10.1",
"phaser": "^3.88.2",
"phaser3-rex-plugins": "^1.80.15"
"phaser": "^3.90.0",
"phaser3-rex-plugins": "^1.80.16"
},
"engines": {
"node": ">=22.0.0"

3838
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

6
pnpm-workspace.yaml Normal file
View File

@ -0,0 +1,6 @@
onlyBuiltDependencies:
- esbuild
- msw
- lefthook
shellEmulator: true

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -333,8 +333,6 @@
"671-yellow",
"6713",
"6713",
"672",
"672",
"6724",
"6724",
"673",
@ -377,10 +375,6 @@
"690",
"691",
"691",
"692",
"692",
"693",
"693",
"695",
"695",
"696",
@ -503,10 +497,6 @@
"751",
"752",
"752",
"753",
"753",
"754",
"754",
"755",
"755",
"756",
@ -535,10 +525,6 @@
"767",
"768",
"768",
"769",
"769",
"770",
"770",
"771",
"771",
"772",
@ -595,6 +581,20 @@
"774-yellow",
"774",
"774",
"774-blue-meteor",
"774-blue-meteor",
"774-green-meteor",
"774-green-meteor",
"774-indigo-meteor",
"774-indigo-meteor",
"774-orange-meteor",
"774-orange-meteor",
"774-red-meteor",
"774-red-meteor",
"774-violet-meteor",
"774-violet-meteor",
"774-yellow-meteor",
"774-yellow-meteor",
"775",
"775",
"776",
@ -747,10 +747,6 @@
"841",
"842",
"842",
"843",
"843",
"844",
"844",
"845-gorging",
"845-gorging",
"845-gulping",
@ -889,10 +885,6 @@
"900",
"901",
"901",
"902-female",
"902-female",
"902",
"902",
"903",
"903",
"904",
@ -1445,8 +1437,6 @@
"671b-yellow",
"6713b",
"6713b",
"672b",
"672b",
"6724b",
"6724b",
"673b",
@ -1489,10 +1479,6 @@
"690b",
"691b",
"691b",
"692b",
"692b",
"693b",
"693b",
"695b",
"695b",
"696b",
@ -1615,10 +1601,6 @@
"751b",
"752b",
"752b",
"753b",
"753b",
"754b",
"754b",
"755b",
"755b",
"756b",
@ -1647,10 +1629,6 @@
"767b",
"768b",
"768b",
"769b",
"769b",
"770b",
"770b",
"771b",
"771b",
"772b",
@ -1705,6 +1683,20 @@
"774b-violet",
"774b-yellow",
"774b-yellow",
"774b-blue-meteor",
"774b-blue-meteor",
"774b-green-meteor",
"774b-green-meteor",
"774b-indigo-meteor",
"774b-indigo-meteor",
"774b-orange-meteor",
"774b-orange-meteor",
"774b-red-meteor",
"774b-red-meteor",
"774b-violet-meteor",
"774b-violet-meteor",
"774b-yellow-meteor",
"774b-yellow-meteor",
"774b",
"774b",
"775b",
@ -1859,10 +1851,6 @@
"841b",
"842b",
"842b",
"843b",
"843b",
"844b",
"844b",
"845b-gorging",
"845b-gorging",
"845b-gulping",
@ -2001,10 +1989,6 @@
"900b",
"901b",
"901b",
"902b-female",
"902b-female",
"902b",
"902b",
"903b",
"903b",
"904b",
@ -2557,8 +2541,6 @@
"671sb-yellow",
"6713sb",
"6713sb",
"672sb",
"672sb",
"6724sb",
"6724sb",
"673sb",
@ -2601,10 +2583,6 @@
"690sb",
"691sb",
"691sb",
"692sb",
"692sb",
"693sb",
"693sb",
"695sb",
"695sb",
"696sb",
@ -2727,10 +2705,6 @@
"751sb",
"752sb",
"752sb",
"753sb",
"753sb",
"754sb",
"754sb",
"755sb",
"755sb",
"756sb",
@ -2759,10 +2733,6 @@
"767sb",
"768sb",
"768sb",
"769sb",
"769sb",
"770sb",
"770sb",
"771sb",
"771sb",
"772sb",
@ -2817,6 +2787,20 @@
"774sb-violet",
"774sb-yellow",
"774sb-yellow",
"774sb-blue-meteor",
"774sb-blue-meteor",
"774sb-green-meteor",
"774sb-green-meteor",
"774sb-indigo-meteor",
"774sb-indigo-meteor",
"774sb-orange-meteor",
"774sb-orange-meteor",
"774sb-red-meteor",
"774sb-red-meteor",
"774sb-violet-meteor",
"774sb-violet-meteor",
"774sb-yellow-meteor",
"774sb-yellow-meteor",
"774sb",
"774sb",
"775sb",
@ -2971,10 +2955,6 @@
"841sb",
"842sb",
"842sb",
"843sb",
"843sb",
"844sb",
"844sb",
"845sb-gorging",
"845sb-gorging",
"845sb-gulping",
@ -3113,10 +3093,6 @@
"900sb",
"901sb",
"901sb",
"902sb-female",
"902sb-female",
"902sb",
"902sb",
"903sb",
"903sb",
"904sb",
@ -3674,8 +3650,6 @@
"671s-yellow",
"6713s",
"6713s",
"672s",
"672s",
"6724s",
"6724s",
"673s",
@ -3718,10 +3692,6 @@
"690s",
"691s",
"691s",
"692s",
"692s",
"693s",
"693s",
"695s",
"695s",
"696s",
@ -3844,10 +3814,6 @@
"751s",
"752s",
"752s",
"753s",
"753s",
"754s",
"754s",
"755s",
"755s",
"756s",
@ -3876,10 +3842,6 @@
"767s",
"768s",
"768s",
"769s",
"769s",
"770s",
"770s",
"771s",
"771s",
"772s",
@ -3934,6 +3896,20 @@
"774s-violet",
"774s-yellow",
"774s-yellow",
"774s-blue-meteor",
"774s-blue-meteor",
"774s-green-meteor",
"774s-green-meteor",
"774s-indigo-meteor",
"774s-indigo-meteor",
"774s-orange-meteor",
"774s-orange-meteor",
"774s-red-meteor",
"774s-red-meteor",
"774s-violet-meteor",
"774s-violet-meteor",
"774s-yellow-meteor",
"774s-yellow-meteor",
"774s",
"774s",
"775s",
@ -4088,10 +4064,6 @@
"841s",
"842s",
"842s",
"843s",
"843s",
"844s",
"844s",
"845s-gorging",
"845s-gorging",
"845s-gulping",
@ -4230,10 +4202,6 @@
"900s",
"901s",
"901s",
"902s-female",
"902s-female",
"902s",
"902s",
"903s",
"903s",
"904s",
@ -4569,8 +4537,6 @@
"730",
"747",
"748",
"753",
"754",
"755",
"756",
"761",

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 607 B

After

Width:  |  Height:  |  Size: 333 B

BIN
public/fonts/pokemon-bw.ttf Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 773 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 772 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 767 B

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1008 B

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 789 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 779 B

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 B

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 789 B

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 943 B

After

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 909 B

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 B

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 868 B

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 788 B

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 624 B

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 617 B

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 667 B

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 B

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 785 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 858 B

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 713 B

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 B

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 B

After

Width:  |  Height:  |  Size: 265 B

Some files were not shown because too many files have changed in this diff Show More