Tuxmino Logo

Tuxmino

Highly moddable free open source falling block puzzle game. Written in C.

Contributing


If you are interested in contributing to Tuxmino, that's great! Below is a link to TODO.md which is a list of all issues and things that haven't been implemented yet. Also make sure you read the Styling Guidelines below. Also if you contribute, please add yourself to the game credits in credits.c!

TODO.md

Styling Guidelines


General Guidelines


Naming Conventions

Do to the extensive use of the Raylib library in this project, the naming conventions are quite similar to Raylib's to avoid mixing different naming styles. However, some things are different. Here is a list of all of the naming conventions:

Code ElementConvention
DefinesALL_CAPS
MacrosALL_CAPS
Variables (all types)camelCase
PointersType* pointer
Floatsx.xf (ex: 10.0f)
Operators (all types)Value1 + value2
EnumTitleCase
Enum membersALL_CAPS
StructTitleCase
Struct memberscamelCase
FunctionscamelCase
Function ParamscamelCase


File Docstrings

At the top of every file should be a docstring stating:

Example:

/*
 * File: file.c
 * ------------
 * This is a file that does xyz, it should be used for xyz, etc.
 *
 * Original Author: John Doe
 * Contributors:
 *   - Tux: Added xyz
 * Date Created: MMM DD, YYYY
 * Last Modified: MMM DD, YYYY
 */


Functions

Functions should have descriptive names, and should use camelCase. The opening bracket for a function should be on its own line (this is only for functions, dont do this for if statements, loops, etc). Each function should have a small comment/docstring explaining what the function does. You do not need to go into detail on HOW the function works, only WHAT it does (or better yet, WHY its doing something). If the name of the function is super obvious, for example something like drawSquare(), you do not need to provide a docstring stating "This function draws a square". If a function doesn't need a docstring, you do not need to write one. All functions should have two line breaks in between them.

Example:

/*
 * This function does xyz
 */
void thisIsAFunction(int param)
{
    if (param == 3) {
        /* code */
    }
}


void superObviousFunction()
{
    /* code */
}


/*
 * This is another function with a docstring
 */
void anotherFunction()
{
    /* code */
}