Pokéternity 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!
Make sure to read our Code of Conduct before contributing!
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.
- node: 22.14.0 - manage with pnpm | manage with fnm | manage with nvm
- pnpm: 10.x - how to install (not recommended to install via
npm
on Windows native) | alternate method - volta.sh - git: how to install (needed to retrieve the translations)
- Clone the repo through git and in the root directory run
pnpm install
(aliaspnpm i
). If the install process seems to hang at the post-install step, you likely just need to pressEnter
for it continue.
- Run
pnpm start:dev
to locally run the project. You can then access it from the same machine by puttinghttp://localhost:8000/
in your browser's address bar. If you want to access the game from other devices on your local network, you can runpnpm start:dev --host
instead. You can then connect viahttp://[IP of your device]:8000/
(e.g.:http://192.168.1.101:8000/
).
Github Workflows are used on every PR to enforce the test suite being successful, proper linting, no compilation errors and no circular dependencies in the codebase.
- Use
pnpm typecheck
to invoke the Typescript compiler to check for basic code errors. - Use
pnpm depcruise
to check the codebase for any runtime circular dependency. - Use
pnpm run docs
to generate html documentation for the game, which can then be found in thetypedoc
folder. - Use
pnpm test:silent
to run the full test suite.
We are using Vitest as a testing framework for the game. Most PRs are expected to add tests for their new features or bug fixes to avoid future regression. A basic test file for a variety of cases can be created by running the pnpm test:create
command.
We are using Prettier to format our code. It will run automatically during the pre-commit hook so don't worry about having to format the code manually properly.
We are still using ESLint plus the ESLint Stylistic and Typescript ESLint plugins for linting. It will run automatically via the pre-commit hook, but if you would like to run it manually you can use the pnpm eslint
script. To view the currently applied ESLint rules, check out the eslint.config.js file.
We started transitioning over to Biome as it's significantly faster (~15x) than ESLint.
Note
We still require ESLint as some rules aren't covered by Biome yet. The plan is to migrate fully to Biome in the long run.
We use dependency-cruiser to check for runtime circular dependencies.
Tip
Use npm run depcruise
to check the codebase for any runtime circular dependency.
Pokéternity's translations are managed under a dedicated repository at https://github.com/Despair-Games/poketernity-locales/. There is a specific process involved in making PRs that impacts the in game text, which can be found in the localization.md file.
- In the
src/overrides.ts
file there are overrides for most values you'll need to change for testing
- The translations are found in a dedicated repository and are applied as a submodule in this project.
- The command to retrieve the translations is
git submodule update --init --recursive
.
- Check out our Project Board to see which issues are ready to be worked on!
- Check out Github Issues to see how can you help us!
- Check out our Checkup Board to see which abilities/moves etc. need to checked and covered!
Important
If this project contains assets you have produced and you do not see your name, please reach out here on GitHub.
Thank you to all the wonderful people that have contributed to the project! You can find the credits here.