# Development for Stratagus Version 2.1

This file should give you some information to help with development of Stratagus.

## Mailing list

If you want to help with development for Stratagus you should join the stratagus-devel mailing list.
You may also want to look at the archives.

## IRC - Internet Relay Chat

You can try to meet other Stratagus developers and users on the FreeNode IRC Network, in channel #Stratagus.

## Bugs and tasks

You can find known bugs and planned tasks on the Sourceforge pages for Stratagus.

Before starting on a bug or task, please ask on the mailing list or in the IRC channel whether anybody else is already working on it.

## Building Stratagus

### Installing CVS client

If you want to help develop, it is the best that you use CVS. To do so, first you need CVS for your system. Savannah has a guide that will help you get started.

### Getting Stratagus from CVS

#### There are 2 modules in the CVS repository.

- stratagus - The Stratagus engine source

  The source to the Stratagus engine. The source is licenced under the GNU General Public License. This module is needed for development.

- htdocs - The Stratagus Website

  The website is stored in CVS for easy updating and version management by mulitple people. This module is not needed unless you plan to update the stratagus website

#### How do I access to these modules?

The instructions for accessing the modules are on the project cvs page.
NOTE: it is highly recommended that you use the -z3 flag, this compresses the data and therefore speeds the transfer up. Also be warned that sourceforge has its anonymous CVS up to 5 hours behind developer CVS. Changes to developer CVS are not immediate for anonymous users.

For example:

cvs -d:pserver:anoncvs@cvs.sourceforge.net:/cvsroot/stratagus login
"When prompted for a password for anonymous, simply press the Enter key."
cvs -z3 -d:pserver:anoncvs@cvs.sourceforge.net:/cvsroot/stratagus co stratagus
This is done only once. To update your CVS directory, go into the module directory and type 'cvs -z3 -q update -dP'.

You may put these flags in your ~/.cvsrc file so that you only need to type 'cvs update', the cvs (1) man page will show you how.

### Getting Stratagus without CVS

Only releases are made outside of CVS. If you wish to be involved with development, it is best that you obtain CVS, or learn how to use it so you can get access to CVS. CVS usually remains quite stable and is easier for you to keep up to date. Release versions of stratagus are available here. Many of the games that use the stratagus engine will, and should bundle these files with their release, to ensure compatibility.

### Compiling Stratagus

You can find instructions for compiling Stratagus at install.html.
Since you already have a copy of the source, you may skip ahead to step 2.

## Source code documentation

Valery Shchedrin has introduced tagged source documentation for Stratagus.

You need either DoxyGen or DOC++ to generate source code documentation. You may then use the following commands to produce the documentation:

- If you use DoxyGen: make doc
- If you use DOC++: make doc++

### Tags used in source code

We use the doc++ tags:

Multi line source code documentation:

/** ... */

Single line source code documentation:

/// ...

Start grouping:

//@{ or /*@{*/

End grouping:

//@} or /*@}*/

- @name
  Name of file or group.
- @param
  Describes function/macro parameter
- @return
  Describes function return
- @see
  Links to other section

Please read the doxygen/doc++ documentation.

## Empty C prototype file

    //       _________ __                 __
    //      /   _____//  |_____________ _/  |______     ____  __ __  ______
    //      \_____  \\   __\_  __ \__  \\   __\__  \   / ___\|  |  \/  ___/
    //      /        \|  |  |  | \// __ \|  |  / __ \_/ /_/  >  |  /\___ \
    //     /_______  /|__|  |__|  (____  /__| (____  /\___  /|____//____  >
    //             \/                  \/          \//_____/            \/
    //  ______________________                           ______________________
    //                        T H E   W A R   B E G I N S
    //  Stratagus - A free fantasy real time strategy game engine
    //
    /**@name {filename}.c	-	{One line description of this file} */
    //
    //  (c) Copyright 2004 by {insert your name here}
    //
    //  This program is free software; you can redistribute it and/or modify
    //  it under the terms of the GNU General Public License as published by
    //  the Free Software Foundation; only version 2 of the License.
    //
    //  This program is distributed in the hope that it will be useful,
    //  but WITHOUT ANY WARRANTY; without even the implied warranty of
    //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    //  GNU General Public License for more details.
    //
    //  You should have received a copy of the GNU General Public License
    //  along with this program; if not, write to the Free Software
    //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    //  02111-1307, USA.
    //
    //  $Id: development.html,v 1.62 2004/06/06 06:22:25 mr-russ Exp $

    //@{

    /*----------------------------------------------------------------------------
    --  Includes
    ----------------------------------------------------------------------------*/

    #include <stdio.h>

    #include "stratagus.h"

    // More game includes.

    /*----------------------------------------------------------------------------
    --  Variables
    ----------------------------------------------------------------------------*/

    // Global and local variables of this module.

    /*----------------------------------------------------------------------------
    --  Functions
    ----------------------------------------------------------------------------*/

    // Local and global functions of this module.

    //@}

## Coding style

You can use your own coding style in your own modules. If you fix in other modules, please imitate the coding style of the original coder.

We suggest the Linux kernel coding style (also found online here).

- Write ANSI C.
- All Tabs (Developers use 4 columns for a tab).
- No line should be longer than 78 characters.
- All comments should be on their own line.
- Use { } even for one statement blocks.

Coding Examples:

        // Example for statement with i incremented
        for (i = 0; i < sample->Length >> 1; ++i) {
            ...
        }

        // if statement with brackets and functions.
        if ((i = CLread(f, &chunk, sizeof(chunk))) != sizeof(chunk)) {
            ...
        }

        // function with variables defined.
        int function(int a, int b)
    	{
            int x;
            int y;

            x = a;
            y = b;

            return 0;
        }

        // Example of a function
        static int CclLoadPud(lua_State* l)
        {
            const char* name;

            if (SaveGameLoading) {
                return 0;
            }

            if (lua_gettop(l) != 1) {
                LuaError(l, "incorrect argument");
            }
            name = LuaToString(l, 1);
            LoadPud(name, &TheMap);

            // FIXME: LoadPud should return an error
            return 0;
        }

NOTE: If you make big changes please always extend the copyright with your name, and always update the copyright year if required.

## Sending a patch

Once you have completed some work, you will probably want it to be included in the main Stratagus source.

Follow these steps:

- cvs -q update -d
- cvs -q diff -u > your-nickname.diff
- upload 'your-nickname.diff' to the patch tracker.

Please also read the Stratagus data directory description.

(C) Copyright 1998-2004 by The Stratagus Project under the GNU General Public License.
All trademarks and copyrights on this page are owned by their respective owners.