pokemon-showdown
pokemon-showdown copied to clipboard
Ideas for new developers
We're often asked, "Hi, I want to help develop for PS, where do I start?"
This issue is basically our answer to that: a list of suggestions for things people who want to start contributing to Pokémon Showdown can work on.
First, the Development room is the right place to discuss working on new features: http://psim.us/dev
You definitely want to talk in Dev before working on things – we'd like to get to know you and make sure you're doing things the right way before you spend (and hopefully not waste) too much time on a contribution.
Make sure you read CONTRIBUTING.md.
- Fix mechanics bugs – #2367 tracks the mechanics bugs we're aware of.
- The Suggestions forum on Smogon contains user suggestions - threads tagged with 'Approved' are suitable for implementation (though may be blocked on other work, check the specific thread to find out). Simple bugs will have
[Easy]
in their title to make it obvious to new developers where a good play to start might be. The old suggestions thread also contains a few possible features , the "More common Suggestions" list in the first post contains a host of user requested features (as does the rest of the thread), several which would be fairly straightforward to implement for a new developer. Reach out on http://psim.us/dev before starting work on any of them to determine if the suggested feature is actually a good fit. - Add a command for custom avatars – On side servers, it's possible to set custom avatars, but it's a lot of work. A command might make it easier. Some work exists in #6666.
- Bug reports from Smogon – Not necessarily all valid (be sure to confirm with a researcher or on the cartridge whether any reported mechanics issues are actually issues), but often the first place recent regressions are reported.
- Teambuilder import folder – A way to import a single folder from the teambuilder.
- Improvements to Teambuilder folder management – Some way to quickly move a large list of teams from one folder to another would be nice. WARNING: if you work on this, work on this in the Preact rewrite – https://github.com/Zarel/Pokemon-Showdown-Client/pull/1156
Whats the current status on the Golang rewrite? I'm a Javascript dev looking to get into Golang. If possible id like to assist whoever is leading that.
@robotmayo No one's started on that yet. Feel free to try it yourself. In addition to golang, you'll need to be able to do IPC between Node and Go, which shouldn't be too difficult. You may be interested in https://github.com/jgranstrom/gonode
@robotmayo Maybe @xfix Would be interested in that (sorry if you aren't, xfix :)). If you start the project, I'd like to follow it, as I'd like to get more into Golang as well.
@Zarel, I see the list randomly growing with no notification. Each item should probably be its own issue.
I think that's unnecessary, but I guess I can comment every time I add something.
quick folder export implementation at Zarel/Pokemon-Showdown-Client#756
I'm working on the sockets.js Golang rewrite.
Is "Give battles a user list like chatrooms" done?
Nope. iirc Bumba was investigating it but no code's been written yet?
I gave up after a while, was thinking about picking it up again but if anyone else wants to give it a whirl feel free.
panpawn made it so /userlist displays those in a battle room but not an actual list (which would look bad anyways imo)
/userlist is a temporary solution, we still want the actual userlist.
^
Teambuilder import folder – A way to import a single folder from the teambuilder.
can't we just Ctrl-V?
Fixes to text hiding... iii. To support users who change usernames multiple times, scan the roomlog for the user's entire prevNames list.
Incidentally enough, this is actually kind of being worked on in https://github.com/Zarel/Pokemon-Showdown/pull/3750
The sockets.go rewrite description should probably be updated:
Fortunately, PS's architecture is multi-process which makes it possible to change language for one process without having to rewrite the entire thing from scratch. We'll need to figure out exactly how child_process's IPC works, though.
It uses TCP connections by default. On the Node end, some manual buffering is needed for messages received upstream from the child process because of an internal buffer cap for incoming messages in net.Connection
. cluster
IPC messages use objects with a message type and data values, but that's not an option for IPC with Go child processes since Node and Go cannot parse objects/structs sent by each other. Instead they stringify/parse messages as JSON and delimit them with characters that are escaped to hexadecimal/unicode escape codes as JSON to avoid exploits with message parsing.
Anything else to do with IPC is roughly the same between Node and Go child processes
Is anyone working on the userlist for battles? I can give that a try if no one is already
Is anyone working on the userlist for battles? I can give that a try if no one is already
Pretty sure no one is working on that right now, feel free! It should be minimized by default like the userlist in chat rooms are on mobile.
Also now is probably a bad time for client changes; we have a pending React rewrite for the client...
Is anyone working on refactoring the old tests to use makeChoices
? I'd like to try that if not.
Not currently; please feel free to do that.
Anyone working on the advanced search for teambuilding? If not I would like to give it a shot.
Anyone working on the import of a teambuilding folder? I'd like to attempt it nobody is.
took a shot at Advanced search in Teambuilder
https://github.com/Zarel/Pokemon-Showdown-Client/pull/1133
Added:
Support other mods in commands such as /weak – Other examples include /coverage, /effectiveness, and /statcalc. Should mostly be as simple as supporting an optional argument (/weak pokemon/types, mod). When used in a battle they should default to the format's mod, otherwise default to the current generation. See /data for a current implementation.
- ~~Migrate tests to Jest~~ – Jest (https://jestjs.io/) supports parallel test-running, which would be nice to have over Mocha. Most of its API surface is similar, so this shouldn't take too long.
Removed: Jest turned out to be much slower
- ~~Rewrite sockets.js in Go~~ (Morfent is working on this) – You'll probably need https://github.com/igm/sockjs-go – this is a pretty hard task but doesn't need anyone particularly familiar with the codebase. Node.js's support for WebSocket seems to have multiple bugs which are very hard to fix (see nodejs/node#3072 and nodejs/node#5469) so changing languages may be easier. Fortunately, PS's architecture is multi-process which makes it possible to change language for one process without having to rewrite the entire thing from scratch. We'll need to figure out exactly how
child_process
's IPC works, though.
Removed: SockJS no longer has the perf issues that were plaguing us when I suggested this, making this migration overall no longer worth it.
Hi, I am a TypeScript developer, and I noticed the point Migrate additional files to Typescript
. Is there any issue related to Typescript i could work on?
@asingh04 yes, you can just migrate files in server/
from .js
to .ts
. It'll require some screwing around; feel free to ask for help if you need it.
@Zarel do i need to create an issue/ticket on GitHub first, or can i start working on it and raise the PR?
@Zarel I have made a ticket as #5528 for migration of a file