# Contributing to Pokemon JS

First off, thank you for considering contributing to Pokemon JS! It's people like you that make Pokemon JS such a great tool.

## How Can I Contribute?

### Reporting Bugs

Before creating bug reports, please check the issue list as you might find out that you don't need to create one. When you are creating a bug report, please include as many details as possible:

- Use a clear and descriptive title
- Describe the exact steps which reproduce the problem
- Provide specific examples to demonstrate the steps
- Describe the behavior you observed after following the steps
- Explain which behavior you expected to see instead and why
- Include screenshots if possible

### Suggesting Enhancements

Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, please include:

- Use a clear and descriptive title
- Provide a step-by-step description of the suggested enhancement
- Provide specific examples to demonstrate the steps
- Describe the current behavior and explain which behavior you expected to see instead

### Pull Requests

- Fill in the required template
- Do not include issue numbers in the PR title
- Include screenshots and animated GIFs in your pull request whenever possible
- Follow the TypeScript and React styleguides
- Include thoughtfully-worded, well-structured tests
- Document new code
- End all files with a newline

## Styleguides

### Git Commit Messages

- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line

### TypeScript Styleguide

- Use 2 spaces for indentation
- Use semicolons
- Use `const` and `let` instead of `var`
- Use meaningful variable names
- Use TypeScript interfaces for type definitions
- Use proper type annotations

### React Styleguide

- Use functional components with hooks
- Use proper prop types
- Keep components small and focused
- Use meaningful component names
- Follow the container/presenter pattern when appropriate

## Development Process

1. Fork the repo
2. Create a new branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Commit your changes (`git commit -m 'Add some amazing feature'`)
5. Push to the branch (`git push origin feature/amazing-feature`)
6. Open a Pull Request

## Getting Started with Development

1. Install dependencies:

```bash
yarn install
```

2. Start the development server:

```bash
yarn start
```

3. Run tests:

```bash
yarn test
```

## Project Structure

- `/src/components`: React components
- `/src/maps`: Game map data
- `/src/state`: Redux store and state management
- `/src/assets`: Game assets (sprites, music, etc.)
- `/src/styles`: Global styles

## Questions?

Feel free to open an issue for any questions you might have about contributing.