Next: , Previous: C API reference, Up: Top


18 Enhancing the game

18.1 General ideas about contribution

18.1.1 License issues

Liquid War 6 is released under the GNU General Public License (GPL). Therefore, contribution to the main source tree is welcomed if submitted under the same license. While this is usually not a problem with C or Guile code, the situation gets complex when the material concerned is something else.

Documentation, for that matter, is released under the GNU Free Documentation License (FDL).

But as it is a game, graphical and interactive, Liquid War 6 also comes with many items such as maps, graphics, sounds, musics. And it is not always to figure out what is purely data, and what is purely code. A level for instance might come with a resource file containing constants, directive on how it should behave, which are not that far from code. It also happens that in the current implementation, levels are stored as images, but they really do contain some logical elements which could have been stored elsewhere, or even hardcoded in C. Conversely, some graphical aspects are hardcoded in the various graphical submodules. As for musics, there are plans to tweak Csound scores or even orchestras on the fly to adapt the music dynamically to the game context. So it is really not that easy to figure out what is artwork and what is code.

Problems raise when most artwork creators do not use code related licenses such as the GPL. Instead, they use artwork related licenses such as the Free Art License or the Creative Commons Attribution-ShareAlike 2.5. While this is perfectly understandable, it gets complicated to include such work directly in Liquid War 6. Therefore, when possible, contributors are asked to dual license their work so that it can be available under the terms of the GNU GPL for Liquid War 6 (which means dual license for any use, as the GNU GPL does not restrict the context in which you use the software). Of course, the work can be licensed under the GNU GPL in the first place, but this is obviously not mandatory, and it sometimes does not really make sense, when taken out of the Liquid War 6 context, graphics or musics can cease to have this code related aspect.

18.1.2 Coding guidelines

TODO...

18.2 Using GNU arch

18.2.1 Setting up an arch repository

Once you have installed GNU Arch (tla), take a look at arch meets hello-world, a usefull tutorial.

You can introduce yourself and create a repository by issuing commands like:

tla my-id me@@home.net
tla register-archive me@@home.net--2006 /home/me/tla-archives

Then, you can get create your own repository, with a command like:

tla tag -S liquidwar6@@sv.gnu.org/liquidwar6--beta--0.1 me@@home.net--2006/liquidwar6--beta--0.1 

The idea is that you create, locally, a depot which has a name that matches the name on sv.gnu.org (this is for convenience, you could technically give it any name...) and indicate that they represent, today, the same thing.

You can get a working copy of your depot with the command:

tla get me@@home.net--2006/liquidwar6--beta--0.1

This will create a complete source tree, which you are free to modify, this is where you should hack.

18.2.2 Synchronizing your repository with upstream releases

To synchronize yourself with upstream developments, go into your copy (the directory created by tla get) and type:

tla star-merge liquidwar6@@sv.gnu.org/liquidwar6--beta--0.1

This will apply locally all the changes that happened since the last synchronization. Of course this is one way to work, you can decide to cherry pick patches and such stuff, but for most dayly uses, a good'ol star-merge is fine.

Not that star-merge will only apply patches on your working copy, not on your repository. The only way to actually commit the modifications on the repository is to use the commit command.

18.2.3 Submitting patches

When using Arch, you can of course still send patches created with diff, or even send updated files directly, the way you would without revision control.

But it can be more convenient to either

Here's an example of an mkpatch command, and which will compute the differences between a previous liquidwar6--beta--0.1--patch-2 snapshot and a not yet commited latest version:

tla mkpatch {arch}/++pristine-trees/unlocked/liquidwar6/liquidwar6--beta/liquidwar6--beta--0.1/me@@home.net--2006/liquidwar6--beta--0.1--patch-2 . my-patch

This will create a my-patch directory, which can be gzipped and sent by mail.