Contributing - efroemling/ballistica GitHub Wiki

If you'd like to contribute to the project, the following is a list of guidelines and potential ways to do so:

Bug Fixes:

These are always welcome, and often the easiest way to get started contributing to the project. During normal operation, the app should print nothing to stdout/logs, so if you see stack traces or other messages showing up there it generally means something is wrong that can potentially be fixed.

Code Cleanup:

Some of Ballistica's code dates back to 2004(!) and so there are numerous places that could be tidied up or modernized. Some examples include creating proper Python Enum classes to replaced hard-coded string values, creating Python Data Classes to replace simple dictionaries, or simply breaking down overly large or complex classes and methods into more manageable/extensible ones. Depending on how significant of a cleanup/refactoring project you decide to tackle, it may be a good idea to post a discussion in the Issues section first to get feedback/pre-approval for your change.

Wiki Additions:

Tutorials, tips, etc. are all welcome here on the Wiki. A useful example would be porting some of the old 1.4 tutorials to account for the changes in 1.5 or writing fresh tutorials to cover any topic that interests you. I may edit or relocate your contributions, but they are all welcome. Feel free to open an Issue if you aren't sure where to put something.

Tool/Pipeline Improvements:

There is lots that could be useful here. Some examples:

  • Scripts to generate Snap Packages or other common linux package types from linux prefab builds.
  • Scripts to generate a signed Android APK using Ballistica assets and a preexisting BombSquad apk.

External Projects:

  • Setting up a web based editor using Theia or Atom tied into the Ballistica SDK to allow editing of script files with code-completion, live Mypy/Pylint corrections, etc. In the future perhaps we could tie this into the cloud server system to allow scripting and launching online games purely though a browser.

Things NOT to Contribute:

While all forms of tinkering are fully encouraged in the Ballistica/BombSquad community, some things are better done externally (or with explicit approval beforehand):

  • MiniGames, Maps, and other Mods

    When developing these, it is recommended to fork this repo so you can use the tools and pipelines contained here, but please don't submit them back upstream unless explicitly asked. I would like to keep this core repo somewhat small and maintainable with a 'proof of concept' set of games, maps, etc. This is mainly to keep the amount of code needing to be tested and updated during major revisions reasonable.
  • Gameplay Changes

    Please do not submit PRs containing arbitrary gameplay changes without having a discussion first in the issues section. Feel free to write plugins and mods experimenting with different ideas, or to add hooks to the game allowing for such experimentation. But when it comes to gameplay, people have many different opinions and ideas and it is best to hold a proper discussion and make sure there is a consensus and approval before proceeding to avoid 'too many cooks in the kitchen' scenarios.