- CONTRIBUTING TO CM-SS13
- Reporting Issues
- Introduction
- Getting Started
- Meet the Team
- Issues Tracker
- Development Guides - Writing readable code - Writing sane code - Writing understandable code - Misc
- Pull Request Process
- Good Boy Points
- Porting features/sprites/sounds/tools from other codebases
- Things you can work on
- What we don't want
- Banned content
If you ever encounter a bug in-game, the best way to let a coder know about it is with our GitHub Issue Tracker. Please make sure you use the supplied issue template.
(If you don't have an account, making a new one takes only one minute.)
If you have difficulty, ask for help in the #development channel on our discord.
Hello and welcome to CM-SS13's contributing page. You are here because you are curious or interested in contributing - thank you! Everyone is free to contribute to this project as long as they follow the simple guidelines and specifications below; at CM-SS13, we strive to maintain code stability and maintainability, and to do that, we need all pull requests to hold up to those specifications. It's in everyone's best interests - including yours! - if the same bug doesn't have to be fixed twice because of duplicated code.
First things first, we want to make it clear how you can contribute (if you've never contributed before), as well as the kinds of powers the team has over your additions, to avoid any unpleasant surprises if your pull request is closed for a reason you didn't foresee.
CM-SS13 doesn't have a list of goals and features to add; we instead allow freedom for contributors to suggest and create their ideas for the game. That doesn't mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful starting guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure.
There is an open list of approachable issues for your inspiration here.
You can of course, as always, ask for help on the Discord channels or the forums. We're just here to have fun and help out, so please don't expect professional support.
The Head Maintainer and Project Manager are responsible for controlling, adding, and removing maintainers from the project. In addition to filling the role of a normal maintainer, they have sole authority on who becomes a maintainer, as well as who remains a maintainer and who does not.
Maintainers are quality control. If a proposed pull request doesn't meet the following specifications, they can request you to change it, or simply just close the pull request. Maintainers are required to give a reason for closing the pull request.
Maintainers can revert your changes if they feel they are not worth maintaining or if they did not live up to the quality specifications.
Maintainer Guidelines
These are the few directives we have for project maintainers.
- Do not merge PRs you create.
- Do not merge PRs until 24 hours have passed since it was opened. Exceptions include:
- Emergency fixes.
- Try to get secondary maintainer approval before merging if you are able to.
- PRs with empty commits intended to generate a changelog.
- Emergency fixes.
- Do not merge PRs that contain content from the banned content list.
- Do not merge PRs that contain balance changes without GA approval. Exceptions include:
- Any PR that has been un-reviewed by a GA for 7 days.
- Do not remove the DNM label that another Maintainer has applied. Exceptions include:
- GAs removing a DNM label placed by a Maintainer for Balance/Design reasons
These are not steadfast rules as maintainers are expected to use their best judgement when operating.
Our team is entirely voluntary, as such we extend our thanks to maintainers, issue managers, and contributors alike for helping keep the project alive.
PR’s that affect staff tools/major rules rewrite (adding/removing/editing etc.) requires certain Head Staff oversight and can be blocked from being merged. The Head Maintainer must be informed about why so a discussion can be had. The Host makes a final decision if the PR is to be merged after changes have been implemented stemming from the discussion.
Issue Managers help out the project by labelling bug reports and PRs and closing bug reports which are duplicates or are no longer applicable.
What You Can and Can't Do as an Issue Manager
This should help you understand what you can and can't do with your newfound github permissions.
Things you CAN do:
- Label issues appropriately
- Close issues when appropriate
Things you CAN'T do:
- Close PRs: Only maintainers are allowed to close PRs. Do not hit that button.
- Label PRs, leave that for maintainers to handle.
Potential bugs can be submitted to the project issue tracker on GitLab. While we appreciate suggestions, they should not be posted here to make triaging technical issues and fixing bugs easier.
When submitting an issue, use the provided template. A few things to keep in mind for a good issue report maximizing the chance of finding and fixing it:
- Search quickly for existing related issues - add info there if applicable rather than duplicating them
- Stay factual and as concise as possible
- If possible, attempt to reproduce and confirm the issue, and detail steps
The tracker is a powerful tool - it might look pointless, but ensures what's there can be known by anyone, team members and contributors alike, and won't be forgotten. This maximizes chances of issues being resolved. Don't be afraid to use it.
Embedding tgui components in chat
There is no strict process when it comes to merging pull requests. Pull requests will sometimes take a while before they are looked at by a maintainer; the bigger the change, the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be courteous and respectful. Here are some helpful ways to make it easier for you and for the maintainers when making a pull request.
-
Make sure your pull request complies to the requirements outlined here
-
You are expected to have tested your pull requests if it is anything that would warrant testing. Text only changes, single number balance changes, and similar generally don't need testing, but anything else does. This means by extension web edits are disallowed for larger changes.
-
You are going to be expected to document all your changes in the pull request. Failing to do so will mean delaying it as we will have to question why you made the change. On the other hand, you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data. Should you be optimizing a routine you must provide proof by way of profiling that your changes are faster.
-
We ask that you use the changelog system to document your player facing changes, which prevents our players from being caught unaware by said changes - you can find more information about this on this wiki page.
-
If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable.
-
If your pull request is accepted, the code you add no longer belongs exclusively to you but to everyone; everyone is free to work on it, but you are also free to support or object to any changes being made, which will likely hold more weight, as you're the one who added the feature. It is a shame this has to be explicitly said, but there have been cases where this would've saved some trouble.
-
Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR.
-
If your pull request is not finished, you may open it as a draft for potential review. If you open it as a full-fledged PR make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement will be closed. You may request a maintainer reopen the pull request when you're ready, or make a new one.
-
While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality before you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes.
-
After leaving reviews on an open pull request, maintainers may convert it to a draft. Once you have addressed all their comments to the best of your ability, feel free to mark the pull as
Ready for Review
again.
Each GitHub account has a score known as Good Boy Points, or GBP. This is a system we use to ensure that the codebase stays maintained and that contributors fix bugs as well as add features.
The GBP gain or loss for a PR depends on the type of changes the PR makes, represented by the tags assigned to the PR by the CM-SS13 github bot or maintainers. Generally speaking, fixing bugs, updating sprites, or improving maps increases your GBP score, while adding mechanics, or rebalancing things will cost you GBP.
The GBP change of a PR is the sum of greatest positive and lowest negative values it has. For example, a PR that has tags worth +10, +4, -1, -7, will net 3 GBP (10 - 7).
Negative GBP increases the likelihood of a maintainer closing your PR. With that chance being higher the lower your GBP is. Be sure to use the proper tags in the changelog to prevent unnecessary GBP loss. Maintainers reserve the right to change tags as they deem appropriate.
There is no benefit to having a higher positive GBP score, since GBP only comes into consideration when it is negative.
You can see each tag and their GBP values Here.
If you are porting features/tools from other codebases, you must give them credit where it's due. Typically, crediting them in your pull request and the changelog is the recommended way of doing it. Take note of what license they use though, porting stuff from AGPLv3 and GPLv3 codebases are allowed.
Regarding sprites & sounds, you must credit the artist and possibly the codebase.
The following list is non-exhaustive, but should give you a good idea of what the dev team would like to see in Pull Requests.
- Replacements of legacy Bay12 sprites
- Strain specific designs for Aliens for ones that lack them
- Alternative Alien sprite sets
- Icon sheet sorting styled after firearms sheets
- New cosmetic loadout items, such as additional helmet garb
- Custom tilesets for maps that don’t have them
- Map specific props and details
- Map specific Colonist uniforms and equipment
- Additional HUD styles
- Bug fixes and inconsistency fixes
- Nightmare inserts
- Object placement quality of life improvements (such as widening hallways and combat lanes cluttered with props)
- Extra map detailing (so long as it doesn’t negatively impact performance)
- Removal of dead-ends or gameplay dead-space on existing maps
- New maps*
- Bug fixes and inconsistency fixes
A note on new maps. Entirely new maps are generally considered to be stepping stones into the Development team’s mapping dept. proper. However, making a new map is a months long process that requires dedication and constant communication and oversight from mappers on the Maintainer team. Mapping, like spriting and coding is an acquired skill, and it is highly likely your first map is going to suck. Maps are fluid entities that are never absolutely complete, don’t wed yourself to your initial layout, always be prepared to remap half the project when going in.
- Quality of life improvements that don’t impact gameplay, but improve it
- Latency optimizations and improvements
- Backend system refactors that improve server stability or performance
- Minor features that don’t impact the overall round loop
- Anything on the public task-board
- New Alien strains
- New Marine and Alien tech options
- Bay12 legacy feature removal (such as wizard backend, laser eyes, etc)
- Map specific survivor loadouts
- Bug fixes and inconsistency fixes
The following list is non-exhaustive, but should give you a good idea of what the dev team don't want to see in Pull Requests.
- Resprites of recently updated content, such as uniforms, guns, marine armor
- Donor item adjustments or changes
- Joke sprites
- Tacticool equipment and gear. We’re retro-future (or cassette punk if you will).
- Nightmare inserts with ridiculous loot or ones that are out of place (don’t put snow on LV, for example)
- Additional detailing that degrades arena space or hinders gameplay in any sort of way
- Only direct changes to balance numbers on an PR (damage, recoil, health, armor, movespeed, etc), with nothing else to add to the game (without prior approval)
- No additional species or races, even Arcturians
Remember that the following lists are not exhaustive. And you can freely contribute an PR with content that can be shuffled into the “What we don’t want” category, and still get it merged. It is just unlikely without prior talk/approval from a maintainer.
Do not add any of the following in a Pull Request or risk getting the PR closed:
- Any content that adds a specific character played by or reference to a single player, contributor, staff member, or maintainer. For example, a PR that adds a blue crab named after a staff member’s username is not permitted, as it directly references a specific individual.
- Code which violates GitHub's terms of service.