This article covers questions regarding development of OpenTTD, e.g. using SVN, downloading the source, setting up compilers, etc..
Contributing to the project
What can I do to contribute to the project?
- This depends on your talents. If you are good at coding, you might want to help implementing new features or fixing bugs. Also other help is always welcome, like translating to other languages, drawing graphics, writing this manual, or make sounds and musics.
What language is OpenTTD written in?
- OpenTTD is programmed in C++, the ANSI-C flavor used by MS Visual Studio, to be specific. Read the Coding style (en) for reference how your code should be structured.
I've fixed a bug / added a feature. How can I submit it to the codebase?
- Make a diff file (aka patch file) of your changes and submit it to Flyspray. Please watch the patch tracker carefully to see if the developers have any suggestions. If everything is OK with your patch, it will get merged into the SVN tree.
I want to become an official OpenTTD developer! How?
- The only way to get there is by constantly making patches, especially for fixing bugs. Check out the list of known bugs and beware of the coding style. When the amount of time you spend with coding OpenTTD reaches our level, chances are high that you'll receive a SVN account and get added to the list.
What is source code?
¿Dónde puedo obtener el código fuente?
What is the SVN version?
- SVN aka Subversion is a version control system like CVS. Basically it tracks changes to the source code of the game. The SVN version is the latest (bleeding edge) source code for the game.
What operating systems does Subversion run on?
- All modern flavours of Unix, Win32, BeOS, OS/2, MacOS X. Subversion is written in ANSI C and uses APR, the Apache Portable Runtime library, as a portability layer. The Subversion client will run anywhere APR runs, which is most places.
How do I get the SVN version then?
First you need to download the client software for you operating system which will connect to the SVN server and download the source code. You can get it from the SVN project homepage at http://subversion.tigris.org/. If you are using Windows you may want to get TortoiseSVN as it integrates with Explorer nicely and you won't have to run command line stuff.
Next you need to set up the client to use the repository url which is "svn://svn.openttd.org/trunk". This will depend on which software you get, but you can find out how to do this with the documentation included with it.
On Linux (Unix) you can use command "svn co svn://svn.openttd.org/trunk/".
- First you need to download the client software for you operating system which will connect to the SVN server and download the source code. You can get it from the SVN project homepage at http://subversion.tigris.org/. If you are using Windows you may want to get TortoiseSVN as it integrates with Explorer nicely and you won't have to run command line stuff.
Subversion has not been ported to my platform / I don't want to install more software - is there any other way I can get to the source code?
Now I have got the source code how can I compile it?
I had a problem compiling! What should I do?
- This is not a compiling FAQ, try to ask your compiler vendor for help.
Why did the developers decide to use Subversion?
- Subversion (SVN) was chosen over CVS because it is more advanced and easier to use. Also a lot of the developers don't like CVS any more now they know SVN.
- SVN was "chosen" over distributed version control systems (DVCS) like Bazaar, Darcs, git, Mercurial and SVK because at the time the choice had to be made none of these existed. GNU arch was one of the few DVCSes that existed but was difficult to learn and understand. Later on a versioning API for NewGRFs was made out of the SVN revision so migrating to a DVCS would remove that capability breaking lots of existing NewGRFs.
What is the point of a version control system? Why don't they just upload the source code to an FTP directory?
- Version control systems keep track of all the changes, when they were made and by who. If the developers later find out something they did was a mistake and broke something important they may have to rewrite it from scratch. With this they can just 'checkout' a revision from when it was working. It also allows the developers to add comments so they know what changes have been done.
- In Linux, use the command "svn diff > mypatch.diff" from the source directory to create a diff file.
- In Windows, you can do the same from the command prompt, or, if you have Tortoise SVN, right button in the source directory and press Create Patch. It will ask for a location and filename.
How to apply a patch?
It's usually best to apply patches to the revision stated by the patch creator.
Different version control systems use different ways of expressing changes. Currently, there are SVN type patches and HG/GIT type patches. To know what you have, open the patch file with a text editor, and look at the first few lines.
A SVN type patch starts like
Index: src/gfx.cpp =================================================================== --- src/gfx.cpp (revision 20024) +++ src/gfx.cpp (working copy) @@ -641,14 +641,13 @@ ...
and a HG/GIT type patch starts like
diff --git a/src/gfx.cpp b/src/gfx.cpp --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -641,14 +641,13 @@ ...
The crucial difference is the
b/ additions at the lines starting with
- Linux: Type the following line into a console (replace patch_name with the filename of the patch):
patch -p0 < patch_name(for SVN type patches). However, in some cases you might need
patch -p1 < patch_name(for HG/GIT type patches).
- Windows: Make sure you have TortoiseSVN installed.
Right-click on the folder with the OpenTTD source code, open the TortoiseSVN submenu and select 'Apply Patch...'. Browse to the patch file and select it. Then, right click on the 'File Patches' window and click on 'Patch All'. After you're done, close the TortoiseMerge window.