Go to file
Matilde Simões f8a3352bb3 Implement NuzLocke related challenges and AI changes
The Nuzlocke challenges that were implemented were the following:
- "No Free Heal" which consists in disabling the auto heal
that occurs every 10th wave, replacing it with a normal shop phase.
Changes made:
   - Added a new challenge "NO_AUTO_HEAL" with a challenge type
"NO_HEAL_PHASE" and created a new function "applyNoHealPhase"
to determine whether the Pokémon can heal if the challenge
is active ("challenge.ts").
   - Added a confirmation on the healing phase to check if the
challenge is active or not, and if it is, it should skip
the phase ("party-heal-phase.ts").
   - Changed the logistic of when the shop should be displayed, so
when the challenge is active the shop appears every 10th wave
("modifier-type.ts") and actually push the shop phase
("victory-phase.ts").
- "Hardcore": Challenge divided into two modes, normal and hard,
where fainted Pokémon can't be revived, in addition, the hard mode
deletes the fainted Pokémon so the player can't switch it's items
after death.
Changes made:
   - Added a new challenge "HARDCORE" with several challenge
types with the correspondent apply functions ("challenge.ts"),
each one is used as follows:
   - RANDOM_ITEM_BLACKLIST: filter the reward items with only the valid
one's ("modifier-type.ts").
   - SHOP_ITEM_BLACKLIST: filter the shop items with only the valid
one's ("modifier-select-ui-handler.ts").
   - MOVE_BLACKLIST: checks if the move selected is allowed and if not
sends a message of no apply ("pokemon.ts").
   - DELETE_POKEMON: if hard mode was selected, automatically delete
the fainted Pokémon from the party ("battle-end-pahse.ts").
   - SHOULD_FUSE: changed the logic of should apply function to
prohibit the fusion with dead Pokémon ("modifier.ts").
   - PREVENT_REVIVE: prevent the gain of hp of fainted Pokémon
("party-heal-phase.ts").
- "Limited Catch": Only the first wild Pokémon encounter of
every biome can be added to the player's current party.
Changes made:
  - Added a new challenge LIMITED_CATCH with a challenge type
 ADD_POKEMON_TO_PARTY and created a new function
"applyAddPokemonToParty" to determine whether the Pokémon can be
added to the party, which should
only occur every 11th wave if it isn't a catchable mystery encounter
or every 12th wave if the 11th wave was a catchable mystery encounter
("challenge.ts").
   - Changed the logistic of adding a Pokémon where it can be
caught so that the "pokedex" is updated but the Pokémon isn't added
to the party of the player affecting specifically mystery encounters
("encounter-pokemon-utils.ts") and added the same logic to normal
encounters. ("attempt-capture-phase.ts")

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>
2025-06-12 21:16:12 +01:00
.github [GitHub] Change total shard numbers and change job name (#5905) 2025-05-30 14:42:12 -07:00
docs [Docs] Added changes to markdown files + comment fixes (#5682) 2025-05-02 00:24:37 +00:00
public [UI/UX] [Localization] Type icons corrections (#5952) 2025-06-11 04:44:30 +00:00
scripts [Misc] Remove extra newline in test-boilerplate.ts (#5965) 2025-06-09 18:28:39 -07:00
src Implement NuzLocke related challenges and AI changes 2025-06-12 21:16:12 +01:00
test [Bug] Activate PostSummon Abilities in Speed and Priority Order 2025-06-11 22:28:27 -07:00
.dependency-cruiser.cjs [Dev] Add non type imports depcruiser check (#5901) 2025-06-04 21:57:10 -07:00
.editorconfig [Misc] add .editorconfig (#5246) 2025-02-03 18:55:44 +01:00
.env Beta Merge 27/07 (#3141) 2024-07-28 00:47:00 +01:00
.env.beta [Misc] Disable some leftover debug code (#4546) 2024-10-02 13:13:16 -04:00
.env.development [Misc] Disable some leftover debug code (#4546) 2024-10-02 13:13:16 -04:00
.env.production Beta Merge 27/07 (#3141) 2024-07-28 00:47:00 +01:00
.env.test Beta Merge 27/07 (#3141) 2024-07-28 00:47:00 +01:00
.gitattributes [Misc] Add * -crlf to .gitattributes (#5539) 2025-03-18 21:52:49 -04:00
.gitignore [Docs] Added changes to markdown files + comment fixes (#5682) 2025-05-02 00:24:37 +00:00
.gitmodules [Refactor] External locales (#4529) 2024-10-01 23:41:09 +01:00
.nvmrc [Dev][GitHub] Update to node 22 (#5586) 2025-04-14 12:37:26 -05:00
biome.jsonc [Dev] Enable Biome checking of ability.ts (#5948) 2025-06-07 21:43:30 -07:00
CREDITS.md [Misc] Add Wlowscha and SirzBenjie to credits (#5498) 2025-03-08 22:31:36 -05:00
dependency-graph.js [Misc][Refactor][GitHub] Ditch eslint for biome, and add a formatter (#5495) 2025-03-09 14:13:25 -07:00
eslint.config.js [Code] Added and enforced no-fallthrough + added eslint type checking (#5705) 2025-04-29 23:21:28 +00:00
favicon.ico Replace favicon with no BG version 2024-03-25 12:45:45 -04:00
global.d.ts [Refactor] Pokerogue API client (#4583) 2024-11-04 15:57:21 -05:00
index.css [UI/UX] Autofill login text color changed to gray (#5523) 2025-03-25 18:06:28 -07:00
index.html [Misc] Remove debug.js reference from index.html 2025-06-07 17:37:09 -07:00
lefthook.yml [Dev] Add lefthook script to update submodules post-checkout (#5941) 2025-06-06 23:27:58 +00:00
LICENSE Update license to AGPL 3 2024-03-25 19:22:58 -04:00
package-lock.json Fix Version Number 1.9.4 -> 1.9.5 2025-06-02 20:00:23 -04:00
package.json [Dev] Update test creation script (#5939) 2025-06-09 17:48:41 -07:00
README.md [Dev][GitHub] Update to node 22 (#5586) 2025-04-14 12:37:26 -05:00
tsconfig.json [Code] Added and enforced no-fallthrough + added eslint type checking (#5705) 2025-04-29 23:21:28 +00:00
update_exp_sprites.ps1 Fix crash with certain animated variant sprites 2024-04-26 02:00:58 -04:00
vite.config.ts [Misc][Refactor][GitHub] Ditch eslint for biome, and add a formatter (#5495) 2025-03-09 14:13:25 -07:00
vitest.config.ts [Test] [Refactor] [GitHub] Enable no isolate for vitest (#5566) 2025-03-28 17:30:38 -04:00
vitest.workspace.ts [Test] Move test folder out of src (#5398) 2025-02-22 22:52:07 -06:00

PokéRogue

PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, fighting trainers, bosses, and more!

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

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 file.

📚 Documentation

You can find the auto-generated documentation here. For information on enemy AI, check out the enemy-ai.md file. For detailed guidelines on documenting your code, refer to the 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 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 to see how can you help us!

📝 Credits

If this project contains assets you have produced and you do not see your name, please reach out, either here on GitHub or via Discord.

Thank you to all the wonderful people that have contributed to the PokéRogue project! You can find the credits here.