summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml4
-rw-r--r--CMakeLists.txt20
-rw-r--r--INSTALL-MXE.md25
-rw-r--r--INSTALL-MacOSX.md60
-rw-r--r--INSTALL.md154
-rw-r--r--README.md37
-rw-r--r--cmake/msys.cmake1
-rw-r--r--cmake/mxe.cmake4
m---------data0
-rw-r--r--desktop/CMakeLists.txt261
-rw-r--r--desktop/Info.plist.cmake27
-rw-r--r--desktop/colobot_nsis.bmpbin0 -> 9744 bytes
-rw-r--r--desktop/colobot_nsis_left.bmpbin0 -> 103048 bytes
-rw-r--r--po/ru.po1827
-rw-r--r--src/CBot/CBot.cpp29
-rw-r--r--src/CBot/CBot.h7
-rw-r--r--src/CBot/CBotFunction.cpp5
-rw-r--r--src/CBot/CBotStack.cpp12
-rw-r--r--src/CBot/CBotTwoOpExpr.cpp4
-rw-r--r--src/CBot/CBotVar.cpp114
-rw-r--r--src/CMakeLists.txt15
-rw-r--r--src/app/app.cpp30
-rw-r--r--src/app/system.cpp14
-rw-r--r--src/app/system.h6
-rw-r--r--src/app/system_macosx.cpp116
-rw-r--r--src/app/system_macosx.h39
-rw-r--r--src/common/config.h.cmake5
-rw-r--r--src/common/global.h3
-rw-r--r--src/common/image.cpp30
-rw-r--r--src/common/image.h6
-rw-r--r--src/object/robotmain.cpp4
-rw-r--r--src/ui/control.cpp2
-rw-r--r--src/ui/window.cpp4
-rw-r--r--test/envs/opengl/CMakeLists.txt13
-rw-r--r--test/envs/opengl/README.txt2
-rw-r--r--test/envs/opengl/light_test.cpp3
-rw-r--r--test/envs/opengl/model_test.cpp5
-rw-r--r--test/envs/opengl/transform_test.cpp3
-rw-r--r--test/unit/CMakeLists.txt10
-rw-r--r--test/unit/common/CMakeLists.txt11
-rw-r--r--test/unit/ui/CMakeLists.txt5
41 files changed, 2616 insertions, 301 deletions
diff --git a/.travis.yml b/.travis.yml
index 038e4c2..1abfb51 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,11 +2,11 @@ language: cpp
compiler:
- gcc
- clang
-script: mkdir build; cd build; cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON -DOPENAL_SOUND=0 -DTESTS=1 && make all doc test && DESTDIR=. make install
+script: mkdir build; cd build; cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON -DOPENAL_SOUND=1 -DTESTS=1 && make all doc test && DESTDIR=. make install
before_install:
- git submodule update --init --recursive
- sudo add-apt-repository ppa:mapnik/boost -y
- sudo apt-get update -qq
- - sudo apt-get install -qq --no-install-recommends libgl1-mesa-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev libpng12-dev libglew-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev google-mock libgtest-dev doxygen graphviz po4a librsvg2-bin libsndfile-dev
+ - sudo apt-get install -qq --no-install-recommends libgl1-mesa-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev libpng12-dev libglew-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev google-mock libgtest-dev doxygen graphviz po4a librsvg2-bin libsndfile-dev libopenal-dev
notifications:
email: false
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9ed8f8a..e793b6a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@ project(colobot C CXX)
set(COLOBOT_VERSION_CODENAME "Gold")
set(COLOBOT_VERSION_MAJOR 0)
set(COLOBOT_VERSION_MINOR 1)
-set(COLOBOT_VERSION_REVISION 1)
+set(COLOBOT_VERSION_REVISION 2)
# Used on official releases
set(COLOBOT_VERSION_RELEASE_CODENAME "-alpha")
@@ -45,12 +45,18 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
set(PLATFORM_LINUX 0)
set(PLATFORM_MACOSX 0)
set(PLATFORM_OTHER 0)
+
+ # Platform-dependent implementation of system.h
+ set(SYSTEM_CPP_MODULE "system_windows.cpp")
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
message(STATUS "Build for Linux system")
set(PLATFORM_WINDOWS 0)
set(PLATFORM_LINUX 1)
set(PLATFORM_MACOSX 0)
set(PLATFORM_OTHER 0)
+
+ # Platform-dependent implementation of system.h
+ set(SYSTEM_CPP_MODULE "system_linux.cpp")
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
message(STATUS "Build for Mac OSX system")
set(PLATFORM_WINDOWS 0)
@@ -58,6 +64,9 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
set(PLATFORM_MACOSX 1)
set(PLATFORM_OTHER 0)
+ # Platform-dependent implementation of system.h
+ set(SYSTEM_CPP_MODULE "system_macosx.cpp")
+
set(USE_SDL_MAIN 1) # fixes SDL_main
else()
message(STATUS "Build for other system")
@@ -65,6 +74,9 @@ else()
set(PLATFORM_LINUX 0)
set(PLATFORM_MACOSX 0)
set(PLATFORM_OTHER 1)
+
+ # Platform-dependent implementation of system.h
+ set(SYSTEM_CPP_MODULE "system_other.cpp")
endif()
@@ -309,6 +321,12 @@ if(PLATFORM_WINDOWS)
set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE PATH "Colobot translations directory")
set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE PATH "Colobot documentation directory")
endif()
+elseif(PLATFORM_MACOSX)
+ set(COLOBOT_INSTALL_BIN_DIR ../MacOS CACHE STRING "Colobot binary directory")
+ set(COLOBOT_INSTALL_LIB_DIR ../MacOS CACHE STRING "Colobot libraries directory")
+ set(COLOBOT_INSTALL_DATA_DIR . CACHE STRING "Colobot shared data directory")
+ set(COLOBOT_INSTALL_I18N_DIR i18n CACHE SRING "Colobot translations directory")
+ set(COLOBOT_INSTALL_DOC_DIR doc CACHE STRING "Colobot documentation directory")
else()
set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Colobot binary directory")
set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory")
diff --git a/INSTALL-MXE.md b/INSTALL-MXE.md
index f12ed88..2074de0 100644
--- a/INSTALL-MXE.md
+++ b/INSTALL-MXE.md
@@ -29,7 +29,6 @@ To cross-compile Colobot using MXE:
* check-requirements
* expat
* flac
- * flac
* freetype
* gcc
* gcc-gmp
@@ -55,15 +54,25 @@ To cross-compile Colobot using MXE:
* xz
* zlib
-4. Now `cd` to directory with colobot sources. To cross-compile a CMake project,
- you have to specify a CMake toolchain file. MXE has such file in MXE's directory:
- `usr/i686-pc-mingw32/share/cmake/mxe-conf.cmake`
- Toolchain file is specified thus:`cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/mxe-conf.cmake .`
+4. Now `cd` to directory with colobot sources.
+ It is recommended that you create a separate directory for out-of-source build:
+ `mkdir build-mxe && cd build-mxe`
+
+ In order to cross-compile a CMake project, you have to specify a CMake toolchain file.
+ MXE has such file in MXE's directory: `usr/i686-pc-mingw32/share/cmake/mxe-conf.cmake`
+ So you should use the following cmake command: `cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/mxe-conf.cmake ..`
CMake files in Colobot should detect that MXE is being used and they will
modify flags, paths, etc. as required. You should not run into any problems.
- *Note:* you may also want to use a separate out-of-source build directory for MXE.
-5. `make` should now compile the game with the resulting exe in `bin/colobot.exe`.
+5. `make` should now compile the game with the resulting executable as `colobot.exe`.
The exe is linked against all libraries *statically*, so there are no dependencies
on external DLLs. However, the resulting binary will be huge with all these libraries,
- so you might want to do: `strip bin/colobot.exe`.
+ so you might want to do: `strip colobot.exe`.
+
+6. If you want to create a Colobot installer, you need to additionally build 'nsis'
+ in MXE. Then you can create the NSIS installer that way:
+ `PATH=/path/to/mxe/binaries:$PATH make package`
+ where `/path/to/mxe/binaries` is path to cross-compiled MXE binaries available
+ in MXE's directory under `usr/i686-pc-mingw32/bin`.
+ This will create a versioned colobot-$version.exe installer that will install Colobot
+ in system directories, add a shortcut in the start menu and setup an uninstaller.
diff --git a/INSTALL-MacOSX.md b/INSTALL-MacOSX.md
new file mode 100644
index 0000000..862fda4
--- /dev/null
+++ b/INSTALL-MacOSX.md
@@ -0,0 +1,60 @@
+# Compile and install instructions on MacOSX
+
+To compile Colobot on MacOS X, you need to first get all tools, all
+building dependencies (including the recompilation of some of them), and
+finally compile colobot.
+
+* Install git from [git-osx-installer on Google Code](https://code.google.com/p/git-osx-installer/)
+* Install Xcode through the Mac AppStore
+* Accept the Xcode license
+
+ xcodebuild -license
+
+* Download and install Apple's Command Line Developer Tools from within Xcode (Preferences, Download, Components)
+* Download and install [Mac Ports](http://www.macports.org/install.php#requirements)
+* Install GCC 4.8 through MacPorts
+
+ sudo port install gcc48
+
+* Install all colobot build depends
+
+ sudo port install cmake libsdl libsdl_image libsdl_ttf boost libsndfile glew libicns librsvg
+
+ > [po4a](http://po4a.alioth.debian.org/) should also be installed for the translation of levels, but the [MacPorts' Portfiles have not been accepted yet](http://trac.macports.org/ticket/41227).
+
+* Rebuild libtiff locally
+
+ This is needed because of the following error:
+
+ > libtiff.5.dylib (for architecture x86_64) because larger updated load
+ > commands do not fit (the program must be relinked, and you may need to
+ > use -headerpad or -headerpad_max_install_names)
+
+ MacPorts changed the default linker flag, a simple local rebuild suffices:
+
+ sudo port -ns upgrade --force tiff
+
+* Rebuild boost with the same gcc that we want to use
+
+ This is needed because boost is compiled against Mac's system libstdc++
+ which is older than the one used by gcc-4.8
+
+ sudo port -ns upgrade --force boost configure.compiler=macports-gcc-4.8
+
+* Build colobot with gcc-4.8
+
+ mkdir -p build
+ cd build
+ CC=/opt/local/bin/gcc-mp-4.8 CXX=/opt/local/bin/g++-mp-4.8 cmake ..
+ make
+
+* Build a Colobot drag-n-drop package
+
+ make package
+
+* Open the package
+
+ open colobot-*.dmg
+
+* Once opened, drag the Colobot application and drop it in the
+ Application directory. Then just launch it as any other application.
diff --git a/INSTALL.md b/INSTALL.md
index b7d356a..d33a224 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -3,15 +3,40 @@
## Source and data files
Colobot source files can be downloaded from Github repository (https://github.com/colobot/colobot). You can either download
-the repository as a ZIP archive, or, clone the repository using git or a GUI frontent for git.
+the repository as a ZIP archive, or, clone the repository using git or a GUI frontend for git.
-Make sure that once you download/clone the repository, you have the neeeded data files in `data/` subdirectory.These files
+Make sure that once you download/clone the repository, you have the needed data files in `data/` subdirectory.These files
are provided as git submodule, hosted at a separate Github repository (https://github.com/colobot/colobot-data).
If you don't have them, you can either download the repository manually and unpack its content into `data/` or,
if you're working with git cloned repository, `git submodule update --init` will download the data submodule repository.
-## Compiling on Windows
+## Important notes
+
+It is highly recommended that while compiling, you do an out-of-source build, that is create a separate directory where all build files
+will be created. This isolates the generated CMake files and makes it easy to clean them (simply remove the build directory)
+as CMake lacks "make clean" command.
+
+As of 0.1.2-alpha, running the game with source data directory is no longer supported as the data files
+are now generated to support multiple languages. You have to perform installation, at least of the data files, to a destination
+directory. If you fail to do that, and try to run the game with source data directory, the game will run, but you will not be able to access
+any of the missions.
+
+
+## Compilation
+
+### Compiling on Windows
+
+The recommended way of compiling for Windows is using Linux in a cross-compilation environment called MXE.
+This is the way our build bot service (http://colobot.info/files/compiled.php) prepares the release packages.
+You can also try to compile with MSYS/MinGW but this is more difficult.
+
+#### Cross-compiling using MXE
+
+MXE (M cross environment, http://mxe.cc/) is a very good cross-compiling framework, complete with a suite of libraries
+that make it extremely easy to port applications to Win32. It runs on pretty much any *nix flavor and generates generic,
+statically linked Win32 binaries. More information is available in
+[INSTALL-MXE.md](https://github.com/colobot/colobot/blob/master/INSTALL-MXE.md) file.
#### Compiling with MSYS/MinGW
@@ -19,47 +44,53 @@ If you like challenges ;-), you can try to compile Colobot directly under MSYS/M
You need to manually compile about 20 packages and resolve many problems. Fortunately, the developers took pity on you,
and provide a download package containing all the necessary libraries and tools.
-To use this package, you must first install a vanilla MSYS/MinGW enviromnent. To do this, download and run
+To use this package, you must first install a vanilla MSYS/MinGW environment. To do this, download and run
mingw-get installer (http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/).
When installing, select **all** possible packages in the installer.
-Next, download the development package available at Colobot site (http://colobot.info/) and unpack the files
-from the archive to MinGW directory. This should provide a working environment, including CMake and
+Next, download the development package available at Colobot site (http://colobot.info/files/ - files named msys-devpack-*)
+and unpack the files from the archive to MinGW directory. This should provide a working environment, including CMake and
all necessary packages. However, make sure you get the right package. There are slight changes between GCC 4.6 and 4.7,
especially with boost library which will result in build failure or error in runtime.
-To compile Colobot, `cd` to directory with sources and run:
- $ cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release .
-and then:
- $ make
+Once you have installed the development package, run the MSYS shell. This shell works as a hybrid *nix/Windows environment,
+so you have regular bash commands but can specify paths using Windows syntax: "C:\some\path", CRLF is the endline separator and so forth.
+CMake should automatically detect this build environment and use the Windows options to compile.
-Everything should compile just fine. If you see any errors, it most likely means missing libraries or invalid installation.
-Warnings may occur, but are mostly harmless.
+To compile colobot, change the directory to where you have downloaded the source files:
+ $ cd "C:\path\to\colobot\sources"
-You'll get the binary `colobot.exe`, which you can run directly, pointing it to the data directory:
- $ colobot.exe -datadir ./data
+It is recommended that you create a build directory:
+ $ mkdir build
+ $ cd build
-You can also install Colobot in your system using
- $ make install
+Then you have to configure CMake. You should specify the following options:
+ $ cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="C:\some\directory" ..
+where "C:\some\directory" is the directory you want to run colobot from. It can be a proper installation path if you want
+to install it in system, or some temporary directory like "..\colobot-temporary-install" if you just want to try the game.
+You can also skip this argument and use the default install path: "C:\Program Files\colobot".
+Make sure you specify "MSYS Makefiles" as the CMake generator because otherwise, the default for Windows is to use MSVC nmake
+and it will not work.
-The default install path is `C:\Program Files\colobot`, but you can change it by adding `-DCMAKE_INSTALL_PREFIX="C:\your\path"`
-to CMake arguments.
+Then to compile:
+ $ make
-See also "Hints and notes" below on some useful advice.
+Everything should compile just fine. If you see any errors, it most likely means missing libraries or invalid installation.
+Warnings may occur, but are mostly harmless.
-#### Cross-compiling using MXE
+Now you need to perform the installation:
+ $ make install
-MXE (http://mxe.cc/) is a very good cross-compiling framework, complete with a suite of libraries
-that make it extremely easy to port applications to Win32. It runs on pretty much any *nix flavor and generates generic,
-statically linked Win32 binaries. More information is available in INSTALL-MXE.md file.
+You should get all files ready to use under the installation prefix you specified. Run `colobot.exe` and enjoy the game.
+### Compiling on Linux
-## Compiling on Linux
+Since there are so many Linux flavors, it is difficult to write generic instructions. However, here is the general gist of what
+you will need to compile colobot.
-Depending on your distribution, you'll need to install different packages, so here's just an outline, the details will
-be different for different distros:
- * recent compiler (GCC >= 4.6 or a newer clang) since we are using some features of C++11.
- * CMake >= 2.8.
+You will need:
+ * recent compiler (GCC >= 4.6 or a newer clang) since we are using some features of C++11
+ * CMake >= 2.8
* Boost >= 1.51 (header files + components: filesystem and regex)
* SDL >= 1.2.10
* SDL_image >= 1.2
@@ -71,45 +102,66 @@ be different for different distros:
* libvorbis >= 1.3.2
* libogg >= 1.3.0
* OpenAL (OpenAL-Soft) >= 1.13
+ * po4a >= 0.45 (to generate translated data files)
+
+Make sure you install the packages along with header files (often distributed in separate *-dev packages). If you miss any requirements,
+CMake should warn you.
+
+To compile colobot, run your favorite shell and change the directory to where you downloaded colobot source files:
+ $ cd /path/to/colobot/sources
+
+It is recommended that you create a build directory:
+ $ mkdir build
+ $ cd build
+
+Now to configure CMake:
+ $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/some/prefix ..
+where "/some/prefix" is installation prefix where you want to put the game files. It could be a proper installation directory
+if you want to install colobot in the system or simply temporary directory like "/tmp/colobot-temporary-install" if you just want to try it.
+You can also use clang as the compiler. In that case, before issuing cmake, set the following variables:
+ $ export CC=clang CXX=clang++
-Instructions for compiling are universal:
- $ cmake -DCMAKE_BUILD_TYPE=Release .
- $ make
+Then to compile:
+ $ make
Everything should compile just fine. If you see any errors, it most likely means missing libraries. Warnings may occur,
but are mostly harmless.
-You'll get the binary in `bin/colobot`, which you can run directly, pointing it to the data directory:
- $ bin/colobot -datadir ./data
-
-To install colobot in the system, you can run:
+Now you need to install the game files:
$ make install
-The default installation path is `/usr/local/` but you can change it by adding `-DCMAKE_INSTALL_PREFIX="/your/custom/path"`
-to CMake arguments.
+You can now run the game from the prefix you specified. Note that colobot binary is installed in `games/` subdirectory.
+So if you provided prefix "/some/prefix", you can run:
+ $ /some/prefix/games/colobot
-See also "Hints and notes" below on some useful advice.
+### Compiling on MacOS X
+As of 0.1.2-alpha, we have added MacOS X support. See [INSTALL-MacOSX.md](https://github.com/colobot/colobot/blob/master/INSTALL-MacOSX.md)
+file for details.
-## Compiling on other platforms
+## Other platforms
-We haven't checked other platforms yet but the code isn't particularly tied to any compiler or platform, so in theory
-it should work. If you can, please try to compile the code on your platform and let us know how it goes.
+The code isn't particularly tied to any compiler or platform, so in theory it should work on any platform provided you have
+the required libraries there. Also, other compilers than currently supported GCC >= 4.6 and Clang may happen to work with our code.
+If you can, please try to compile the code on your platform and let us know how it goes.
-## Hints and notes
-
-CMake has a very useful feature - out-of-source builds - using a separate directory for the output of CMake and compiler.
-This way, you can keep clean the directory with your source files. Example of use (starting from directory with sources):
- $ mkdir build/
- $ cd build/
- $ cmake ../
- $ make
+## Error reports and debugging
+Before reporting errors, please make sure you compile the dev branch to make sure that the issue is not yet fixed there. Also, search the
+existing issues (https://github.com/colobot/colobot/issues) to check if a similar error has not been already reported.
-If you want to submit debug reports, please use special Debug and Dev builds (`-DDEV_BUILD=1 -DCMAKE_BUILD_TYPE=Debug`)
+If you want to submit error reports, please use special Debug and Dev builds (add `-DDEV_BUILD=1 -DCMAKE_BUILD_TYPE=Debug` to CMake arguments)
and run the game in debug mode and with logging on higher level (commandline arguments: `-loglevel debug`).
-Also, `-help` will give full list of available arguments.
+## Language support
+
+In order to run colobot in different language, you need to run with fully installed data files.
+If you run a system with locale settings set to your language, colobot should auto-detect it and use appropriate language. If that does not happen,
+you can force a specific language using option `-language xx` where xx is language code like `en` or `de`. `-help` will show all possible settings.
+
+
+## Help
+
If you encounter any problems, you can get help at our forum or IRC channels.
diff --git a/README.md b/README.md
index 21f7158..c67b755 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,11 @@
Welcome to the Colobot project code repository
-This is official repository for the open-source Colobot project developed by Polish Portal of Colobot (PPC; in Polish: Polski Portal Colobota) with the official site at: http://colobot.info/.
+This is official repository for the open-source Colobot project developed by Polish Portal of Colobot (PPC; in Polish: Polski Portal Colobota) with the official site at: [colobot.info](http://colobot.info/joomla).
The source code contained here was released by Epsitec -- the original creator of the game -- on open source (GPLv3) license. The code was given and the rights granted specifically to PPC community in March 2012. Since then, we have been developing the game further.
-More information for developers (in English) can be found on the [developer wiki](https://colobot.info/wiki/Dev:Main_Page) or [our forum](http://colobot.info/forum/). However, the freshest source of information is our IRC channels (see below).
+More information for developers (in English) can be found on the [developer wiki](http://colobot.info/w/Dev:Main_Page) or (in Polish) [our forum](http://colobot.info/forum/). However, the freshest source of information is our IRC channels (see below).
This repository contains only the source code of the project. The game requires also data files which are now provided as git submodule and are hosted in [separate repository](https://github.com/colobot/colobot-data).
@@ -17,14 +17,23 @@ The original version of the game, as released to us by Epsitec, is available as
We are now working on refreshed and updated version of original game, codename Colobot Gold and this is the version currently hosted in this repository. The goal is to rewrite the game engine to be multi-platform, refresh the graphics, include some enhancements and refactor the code to make the game easier to modify.
-The project at this point is in alpha stage - the game is mostly playable, both on Windows and Linux, and most major bugs have been corrected. However, there is still a lot of work to be done. We are now working steadily towards subsequent beta releases, correcting other bugs and introducing enhancements and new features. There is a lot of work ahead and we will gladly accept any and all help.
+The project at this point is in alpha stage - the game is mostly playable, both on Windows and Linux, and most major bugs have been corrected. We are now working steadily towards subsequent beta releases, correcting other bugs and introducing enhancements and new features. There is a lot of work ahead and we will gladly accept any and all help.
In the future, we will begin development on a new installment in the Colobot series, codename Colobot 2. We have many ideas for the new game and we are still discussing them. Generally, the development of this version will begin only after finishing Colobot Gold (it will be probably hosted in another repository, forked off the Colobot Gold code).
+## Download packages
+
+We provide compiled packages of most recent versions using an [automated build bot service](http://colobot.info/files/compiled.php). Available versions include packages for Windows and Linux in both Release and Debug configurations.
+
+On some Linux distributions there are also distribution packages available:
+ * Debian Sid (unstable): http://packages.debian.org/sid/colobot
+ * Arch Linux (AUR): https://aur.archlinux.org/packages/colobot-gold
+
+
## Compiling and running the game
-For these instructions see INSTALL.md file.
+If you want to compile colobot yourself, see [INSTALL.md](https://github.com/colobot/colobot/blob/master/INSTALL.md) file.
## Contact
@@ -41,11 +50,11 @@ If you want to help in the project, please contact us on our IRC channels or [ou
Witamy w repozytorium projektu Colobot
-To jest oficjalne repozytorium z kodem projektu open-source Colobot rozwijanego przez Polski Portal Colobota (PPC; po angielsku: Polish Portal of Colobot) z oficjalną stroną: http://colobot.info/.
+To jest oficjalne repozytorium z kodem projektu open-source Colobot rozwijanego przez Polski Portal Colobota (PPC; po angielsku: Polish Portal of Colobot) z oficjalną stroną: [colobot.info](http://colobot.info/joomla/?lang=pl).
Kod źródłowy zawarty tutaj został wydany przez Epsitec -- oryginalnego twórcę gry -- na otwartej licencji (GPLv3). Kod został wydany i prawa nadane specjalnie dla społeczności PPC w marcu 2012. Od tamtej pory, zajmowaliśmy się dalszym rozwojem gry.
-Więcej informacji dla developerów projektu (po angielsku) można znaleźć na [wiki dla developerów](http://colobot.info/wiki/Dev:Main_Page) lub [naszym forum](http://colobot.info/forum/). Jednak źródłem najświeższych informacji są nasze kanały IRC (patrz niżej).
+Więcej informacji dla developerów projektu (po angielsku) można znaleźć na [wiki dla developerów](htt://colobot.info/w/Dev:Main_Page) lub (po polsku) na [naszym forum](http://colobot.info/forum/). Jednak źródłem najświeższych informacji są nasze kanały IRC (patrz niżej).
To repozytorium zawiera jedynie kod źródłowy projektu. Gra wymaga jeszcze plików danych, które są teraz udostępniane jako submoduł gita i hostowane w [osobnym repozytorium]((https://github.com/colobot/colobot-data).
@@ -56,20 +65,30 @@ Oryginalna wersja gry, jaka została udostępniona nam przez Epsitec, jest dost
Obecnie pracujemy nad odświeżoną i uaktualnioną wersją oryginalnej gry, którą nazywamy Colobot Gold i jest to wersja obecnie dostępna w tym repozytorium. Celem tego projektu jest przepisanie silnika gry na wersję wieloplatformową, odświeżenie grafiki, dodanie pewnych usprawnień i zrefaktorowanie kodu tak, by dało się łatwiej modyfikować grę.
-W tym momencie, gra jest w stadium alpha - gra jest w większości grywalna, pod Windowsem i Linuksem i większość poważnych bugów została poprawiona. Jednakże, jest nadal sporo pracy do zrobienia. Teraz systematycznie pracujemy do kolejnych wydań w fazie beta, poprawiając pozostałe bugi i wprowadzając usprawnienia i nowe funkcje. Jest sporo pracy przed nami i chętnie przyjmiemy pomoc w jakielkolwiek formie.
+W tym momencie, gra jest w stadium alpha - gra jest w większości grywalna, pod Windowsem i Linuksem i większość poważnych bugów została poprawiona. Teraz systematycznie pracujemy do kolejnych wydań w fazie beta, poprawiając pozostałe bugi i wprowadzając usprawnienia i nowe funkcje. Jest sporo pracy przed nami i chętnie przyjmiemy pomoc w jakiejkolwiek formie.
+
+W przyszłości, planujemy rozpocząć prace nad nową częścią z serii Colobot, pod nazwą Colobot 2. Mamy wiele pomysłów na nową grę i nadal dyskutujemy nad nimi. Ogólnie, rozwój tej wersji zacznie się po skończeniu wersji Colobot Gold (prawdopodobnie będzie hostowane w osobnym repozytorium, sforkowanym z kodu Colobot Gold).
-W przyszłości, planujemy rozpocząć prace nad nową częścią z serii Colobot, pod nazwą Colobot 2.Mamy wiele pomysłów na nową grę i nadal dyskutujemy nad nimi. Ogólnie, rozwój tej wersji zacznie się po skończeniu wersji Colobot Gold (prawdopodobnie będzie hostowane w osobnym repozytorium, sforkowanym z kodu Colobot Gold).
+
+## Paczki do pobrania
+
+Udostępniamy gotowe skompilowane paczki z ostatnich wersji używając [automatycznego build bota](http://colobot.info/files/compiled.php?lang=pl). Dostępne są paczki dla Windowsa i Linuksa w konfiguracjach Release i Debug.
+
+Dla niektórych dystrybucji Linuksa, dostępne są pakiety danej dystrybucji:
+ * Debian Sid (unstable): http://packages.debian.org/sid/colobot
+ * Arch Linux (AUR): https://aur.archlinux.org/packages/colobot-gold
## Kompilacja i uruchomienie gry
-Instrukcje te znajdują się w pliku INSTALL.md (po angielsku).
+Jeżeli chcesz sam skompilować colobota, zobacz plik [INSTALL.md](https://github.com/colobot/colobot/blob/master/INSTALL.md) (po angielsku).
## Kontakt
Jeżeli chcesz pomóc w projekcie, prosimy o kontakt na naszych kanałach IRC lub [naszym forum](http://colobot.info/forum/).
+
### Kanały IRC
* [#colobot on pirc.pl](irc://pirc.pl#colobot) polski;
diff --git a/cmake/msys.cmake b/cmake/msys.cmake
index 26b25b2..230ceb6 100644
--- a/cmake/msys.cmake
+++ b/cmake/msys.cmake
@@ -8,5 +8,4 @@ if (MSYS AND (NOT MXE))
set(COLOBOT_CXX_FLAGS "${COLOBOT_CXX_FLAGS} -U__STRICT_ANSI__") # fixes putenv()
set(USE_SDL_MAIN 1) # fixes SDL_main
- set(DESKTOP OFF) # MSYS doesn't have the necessary tools
endif()
diff --git a/cmake/mxe.cmake b/cmake/mxe.cmake
index 9bb38d0..2c24b1b 100644
--- a/cmake/mxe.cmake
+++ b/cmake/mxe.cmake
@@ -41,6 +41,8 @@ if((${CMAKE_CROSSCOMPILING}) AND (DEFINED MSYS))
${CMAKE_FIND_ROOT_PATH}/lib/libbz2.a
${OPENAL_MXE_LIBS}
)
+ # This fixes problem with multiple definition of `IID_IDirectSoundNotify'
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-multiple-definition")
else()
set(MXE 0)
-endif() \ No newline at end of file
+endif()
diff --git a/data b/data
-Subproject bab520ebec08a3a8e8763918e3db52b95f0d29d
+Subproject 456ab4d4806ffe9aad93b7046f1b8074501f28f
diff --git a/desktop/CMakeLists.txt b/desktop/CMakeLists.txt
index bf9be06..9fa0c5e 100644
--- a/desktop/CMakeLists.txt
+++ b/desktop/CMakeLists.txt
@@ -1,105 +1,180 @@
cmake_minimum_required(VERSION 2.8)
-if(NOT PLATFORM_WINDOWS)
- # Install Desktop Entry file
- set(COLOBOT_DESKTOP_FILE colobot.desktop)
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
- COMMAND ./create_desktop_file.sh > ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- COMMENT "Build ${COLOBOT_DESKTOP_FILE}"
- )
- add_custom_target(desktopfile ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE})
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications/
- )
-
- # Install Icon
- set(COLOBOT_ICON_FILE colobot.svg)
- install(
- FILES ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE}
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/
- )
-
- # Render SVG icon in various sizes
- find_program(RSVG_CONVERT rsvg-convert)
- if(RSVG_CONVERT)
- foreach(PNGSIZE "48" "32" "16")
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE})
- add_custom_target(resize_icon_${PNGSIZE} ALL
- COMMAND ${RSVG_CONVERT} -w ${PNGSIZE} -h ${PNGSIZE} ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE}
- > ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
- )
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/${PNGSIZE}x${PNGSIZE}/apps/
- )
- endforeach()
- endif()
-
- # Create manpage from pod-formatted file
- find_program(POD2MAN pod2man)
- if(POD2MAN)
- set(COLOBOT_MANPAGE_SECTION 6)
-
- macro(podman)
- cmake_parse_arguments(PM "" "PODFILE;LOCALE;" "" ${ARGN})
- if(PM_LOCALE)
- # This copes with the fact that english has no "/LANG" in the paths and filenames.
- set(SLASHLOCALE /${PM_LOCALE})
- endif()
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE})
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PM_PODFILE}
- COMMAND ${POD2MAN} ARGS --section=${COLOBOT_MANPAGE_SECTION}
- --center="Colobot" --stderr --utf8
- --release="${COLOBOT_VERSION_FULL}"
- ${CMAKE_CURRENT_SOURCE_DIR}/${PM_PODFILE}
- ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
- COMMENT "Create ${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION} manpage"
- )
- add_custom_target(man${PM_LOCALE} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION})
-
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man${SLASHLOCALE}/man${COLOBOT_MANPAGE_SECTION}/ )
-
- add_dependencies(man man${PM_LOCALE})
- endmacro()
-
- # Create the english manpage
- podman(PODFILE colobot.pod)
-
- endif()
-
-else() # if(NOT PLATFORM_WINDOWS)
- set(COLOBOT_VERSION_4COMMAS "${COLOBOT_VERSION_MAJOR},${COLOBOT_VERSION_MINOR},${COLOBOT_VERSION_REVISION},0")
- configure_file(colobot.rc.cmake ${CMAKE_CURRENT_BINARY_DIR}/colobot.rc)
+set(COLOBOT_ICON_FILE colobot.svg)
+
+# Render SVG icon in various sizes
+find_program(RSVG_CONVERT rsvg-convert)
+if(RSVG_CONVERT AND (PLATFORM_LINUX OR PLATFORM_MACOSX))
+ add_custom_target(png-icons ALL)
+ foreach(PNGSIZE 512 256 128 48 32 16)
+ add_custom_command(
+ OUTPUT ${PNGSIZE}/colobot.png
+ COMMAND mkdir -p ${PNGSIZE}
+ COMMAND ${RSVG_CONVERT} -w ${PNGSIZE} -h ${PNGSIZE} ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE} > ${PNGSIZE}/colobot.png
+ )
+ add_custom_target(png-icon-${PNGSIZE} ALL DEPENDS ${PNGSIZE}/colobot.png)
+ add_dependencies(png-icons png-icon-${PNGSIZE})
+
+ if(PLATFORM_LINUX)
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/${PNGSIZE}x${PNGSIZE}/apps/
+ )
+ endif()
+ # Prepare the ICNS icon generation
+ list(APPEND ICNS_SRCS "${PNGSIZE}/colobot.png")
+ endforeach()
+
+ # Pack icon for Mac OS
+ find_program(PNG2ICNS png2icns)
+ if(PNG2ICNS AND PLATFORM_MACOSX)
+ add_custom_command(OUTPUT Colobot.icns
+ COMMAND ${PNG2ICNS} Colobot.icns ${ICNS_SRCS}
+ DEPENDS png-icons
+ )
+ add_custom_target(icns-icon ALL DEPENDS Colobot.icns)
+ endif()
+
endif()
-# Translate translatable material
-find_program(PO4A po4a)
+if(PLATFORM_LINUX)
+ # Install Desktop Entry file
+ set(COLOBOT_DESKTOP_FILE colobot.desktop)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
+ COMMAND ./create_desktop_file.sh > ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Build ${COLOBOT_DESKTOP_FILE}"
+ )
+ add_custom_target(desktopfile ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE})
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications/
+ )
-if(PO4A)
- add_custom_target(desktop_po4a
- COMMAND ${PO4A} po4a.cfg
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- )
- add_dependencies(desktopfile desktop_po4a)
+ # Install Icon
+ install(
+ FILES ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/
+ )
- if(POD2MAN)
- add_custom_target(man_po4a
+ # Translate translatable material
+ find_program(PO4A po4a)
+ if(PO4A)
+ add_custom_target(desktop_po4a
COMMAND ${PO4A} po4a.cfg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
- add_dependencies(man man_po4a)
- file(GLOB LINGUAS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po/ ${CMAKE_CURRENT_SOURCE_DIR}/po/*.po)
- string(REGEX REPLACE ".po$" "" LINGUAS ${LINGUAS_PO})
- foreach(LOCALE ${LINGUAS})
- podman(PODFILE lang/${LOCALE}/colobot.pod LOCALE ${LOCALE})
- add_dependencies(man${PM_LOCALE} man_po4a)
- endforeach()
+ add_dependencies(desktopfile desktop_po4a)
endif()
+
+ # Create manpage from pod-formatted file
+ find_program(POD2MAN pod2man)
+ if(POD2MAN)
+ set(COLOBOT_MANPAGE_SECTION 6)
+
+ macro(podman)
+ cmake_parse_arguments(PM "" "PODFILE;LOCALE;" "" ${ARGN})
+ if(PM_LOCALE)
+ # This copes with the fact that english has no "/LANG" in the paths and filenames.
+ set(SLASHLOCALE /${PM_LOCALE})
+ endif()
+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE})
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PM_PODFILE}
+ COMMAND ${POD2MAN} ARGS --section=${COLOBOT_MANPAGE_SECTION}
+ --center="Colobot" --stderr --utf8
+ --release="${COLOBOT_VERSION_FULL}"
+ ${CMAKE_CURRENT_SOURCE_DIR}/${PM_PODFILE}
+ ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
+ COMMENT "Create ${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION} manpage"
+ )
+ add_custom_target(man${PM_LOCALE} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION})
+
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man${SLASHLOCALE}/man${COLOBOT_MANPAGE_SECTION}/ )
+
+ add_dependencies(man man${PM_LOCALE})
+ endmacro()
+
+ # Create the english manpage
+ podman(PODFILE colobot.pod)
+
+ if(PO4A)
+ # Translate the manpage to other languages
+ add_dependencies(man desktop_po4a)
+ file(GLOB LINGUAS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po/ ${CMAKE_CURRENT_SOURCE_DIR}/po/*.po)
+ string(REGEX REPLACE ".po$" "" LINGUAS ${LINGUAS_PO})
+ foreach(LOCALE ${LINGUAS})
+ podman(PODFILE lang/${LOCALE}/colobot.pod LOCALE ${LOCALE})
+ add_dependencies(man${PM_LOCALE} desktop_po4a)
+ endforeach()
+ endif()
+ endif()
+endif(PLATFORM_LINUX)
+
+if(PLATFORM_MACOSX)
+ configure_file(Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
+endif(PLATFORM_MACOSX)
+
+if(PLATFORM_WINDOWS)
+ set(COLOBOT_VERSION_4COMMAS "${COLOBOT_VERSION_MAJOR},${COLOBOT_VERSION_MINOR},${COLOBOT_VERSION_REVISION},0")
+ configure_file(colobot.rc.cmake ${CMAKE_CURRENT_BINARY_DIR}/colobot.rc)
+endif(PLATFORM_WINDOWS)
+
+
+##
+# Packaging
+##
+set(CPACK_BUNDLE_NAME "Colobot")
+set(CPACK_PACKAGE_FILE_NAME "colobot-${COLOBOT_VERSION_FULL}")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../README.md")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Colobot - Colonize with Bots")
+set(CPACK_PACKAGE_VENDOR "Polish Portal of Colobot")
+
+set(CPACK_PACKAGE_VERSION_MAJOR ${COLOBOT_VERSION_MAJOR})
+set(CPACK_PACKAGE_VERSION_MINOR ${COLOBOT_VERSION_MINOR})
+set(CPACK_PACKAGE_VERSION_PATCH ${COLOBOT_VERSION_REVISION})
+
+if(PLATFORM_WINDOWS)
+ set(CPACK_STRIP_FILES TRUE)
+
+ # Don't version the install directory, and allow overwriting
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY "Colobot")
+ set(CPACK_NSIS_DEFINES "SetOverwrite on\nBrandingText \\\"Colobot ${COLOBOT_VERSION_CODENAME} (${COLOBOT_VERSION_FULL})\\\"")
+ # Install the executable directly in Program Files/Colobot/
+ set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
+ set(CPACK_PACKAGE_EXECUTABLES "colobot" "Colobot ${COLOBOT_VERSION_CODENAME}")
+
+ # Branding
+ ## Installation and uninstallation icons
+ set(CPACK_NSIS_MUI_ICON ${CMAKE_CURRENT_SOURCE_DIR}/colobot.ico)
+ set(CPACK_NSIS_MUI_UNIICON ${CMAKE_CURRENT_SOURCE_DIR}/colobot.ico)
+ ## Header and Left banner images
+ set(CPACK_PACKAGE_ICON "")
+ set(CPACK_NSIS_INSTALLER_ICON_CODE "!define MUI_HEADERIMAGE_BITMAP \\\"${CMAKE_CURRENT_SOURCE_DIR}/colobot_nsis.bmp\\\"
+ !define MUI_WELCOMEFINISHPAGE_BITMAP \\\"${CMAKE_CURRENT_SOURCE_DIR}/colobot_nsis_left.bmp\\\"")
+
+ ## Allow to directly run Colobot at the end of the installation
+ set(CPACK_NSIS_MUI_FINISHPAGE_RUN "colobot.exe")
+
+ ## TODO: Find a way to have no license prompt. Until that, display the GPL-3
+ set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE.txt)
+
+elseif(PLATFORM_MACOSX)
+ set(CPACK_GENERATOR "Bundle")
+ set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_BINARY_DIR}/Colobot.icns)
+ set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_BINARY_DIR}/Colobot.icns)
+ set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
+
+ set(CPACK_BINARY_DRAGNDROP ON)
+
+ install(CODE "
+ include(BundleUtilities)
+ message(STATUS \"fixup_bundle(\${CMAKE_INSTALL_PREFIX}/${COLOBOT_INSTALL_BIN_DIR}/colobot/\")
+ fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${COLOBOT_INSTALL_BIN_DIR}/colobot\" \"\" \"\")
+ ")
endif()
+include(CPack)
diff --git a/desktop/Info.plist.cmake b/desktop/Info.plist.cmake
new file mode 100644
index 0000000..2114909
--- /dev/null
+++ b/desktop/Info.plist.cmake
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+
+ <key>CFBundleDisplayName</key>
+ <string>Colobot</string>
+ <key>CFBundleExecutable</key>
+ <string>colobot</string>
+ <key>CFBundleIconFile</key>
+ <string>Colobot</string>
+ <key>CFBundleIdentifier</key>
+ <string>info.colobot.colobot</string>
+ <key>CFBundleName</key>
+ <string>Colobot</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>cbot</string>
+ <key>CFBundleVersion</key>
+ <string>@COLOBOT_VERSION_FULL@</string>
+ </dict>
+</plist>
diff --git a/desktop/colobot_nsis.bmp b/desktop/colobot_nsis.bmp
new file mode 100644
index 0000000..529a0cf
--- /dev/null
+++ b/desktop/colobot_nsis.bmp
Binary files differ
diff --git a/desktop/colobot_nsis_left.bmp b/desktop/colobot_nsis_left.bmp
new file mode 100644
index 0000000..06cbce4
--- /dev/null
+++ b/desktop/colobot_nsis_left.bmp
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..012395a
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1827 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-27 17:09+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Language: ru_RU\n"
+"X-Source-Language: en_US\n"
+
+msgid " "
+msgstr " "
+
+msgid " Challenges in the chapter:"
+msgstr " Задачи к главе:"
+
+msgid " Chapters:"
+msgstr " Разделы:"
+
+msgid " Drivers:"
+msgstr " Драйверы:"
+
+msgid " Exercises in the chapter:"
+msgstr " Упражнения в разделе:"
+
+msgid " Free game on this chapter:"
+msgstr " Свободная игра на этой главе:"
+
+msgid " Free game on this planet:"
+msgstr " Свободная игра на этой планете:"
+
+msgid " Missions on this level:"
+msgstr " Миссии на этом уровне:"
+
+msgid " Missions on this planet:"
+msgstr "Миссии на этой планете:"
+
+msgid " Planets:"
+msgstr " Планеты:"
+
+msgid " Prototypes on this planet:"
+msgstr "Прототипы на этой планете:"
+
+msgid " Resolution:"
+msgstr " Разрешение:"
+
+msgid " Summary:"
+msgstr " Итог:"
+
+msgid " User levels:"
+msgstr " Пользовательские уровни:"
+
+msgid " or "
+msgstr " или "
+
+msgid "\" [ \" expected"
+msgstr "Ожидалось \" [ \""
+
+msgid "\" ] \" missing"
+msgstr "Отсутствует \"]\" "
+
+#, c-format
+msgid "\"%s\" missing in this exercise"
+msgstr "\"%s\" отсутствует в этом упражнении"
+
+msgid "%1"
+msgstr "%1"
+
+msgid "..behind"
+msgstr "Сзади"
+
+msgid "..in front"
+msgstr "Спереди"
+
+msgid "..power cell"
+msgstr "Батарею"
+
+msgid "1) First click on the key you want to redefine."
+msgstr "1) Сначала нажми на клавишу, которую вы хотите переопределить."
+
+msgid "2) Then press the key you want to use instead."
+msgstr "2) После этого нажмите на клавишу, которую вы хотите использовать."
+
+msgid "3D sound\\3D positioning of the sound"
+msgstr "3D-звук\\Стерео звук"
+
+msgid "<< Back \\Back to the previous screen"
+msgstr "<< Назад \\Вернуться на предыдущую страницу"
+
+msgid "<<< Sorry; mission failed >>>"
+msgstr "<<< Миссия провалена >>>"
+
+msgid "<<< Well done; mission accomplished >>>"
+msgstr "<<< Отлично, миссия выполнена >>>"
+
+msgid "A label must be followed by \"for\"; \"while\"; \"do\" or \"switch\""
+msgstr "За меткой должен быть \"for\", \"while\", \"do\" или \"switch\""
+
+msgid "A variable can not be declared twice"
+msgstr "Переменная не может быть объявлена дважды"
+
+msgid "Abort\\Abort the current mission"
+msgstr "Выход\\Прервать текущую миссию"
+
+msgid "Access beyond array limit"
+msgstr "Доступ к массиву за предел"
+
+msgid ""
+"Access to solution\\Shows the solution (detailed instructions for missions)"
+msgstr "Доступ к решению\\Показывает решение (подробные инструкции для миссий)"
+
+msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
+msgstr "Доступ к решению\\Показывает решение \"4: Решение\" в упражнениях"
+
+msgid "Alien Queen"
+msgstr "Королева чужих"
+
+msgid "Alien Queen killed"
+msgstr "Королева чужих убита"
+
+msgid "Already carrying something"
+msgstr "Уже что-то несу"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Analysis already performed"
+msgstr "Анализ уже выполнен"
+
+msgid "Analysis performed"
+msgstr "Анализ выполнен"
+
+msgid "Analyzes only organic matter"
+msgstr "Анализирую только органические вещества"
+
+msgid "Ant"
+msgstr "Муравей"
+
+msgid "Ant fatally wounded"
+msgstr "Муравей смертельно ранен"
+
+msgid "Appearance\\Choose your appearance"
+msgstr "Внешность\\Настройка внешности"
+
+msgid "Apply changes\\Activates the changed settings"
+msgstr "Принять\\Принять изменения настроек"
+
+msgid "Appropriate constructor missing"
+msgstr "Соответствующий конструктор отсутствует"
+
+msgid "Assignment impossible"
+msgstr "Назначение невозможно"
+
+msgid "Autolab"
+msgstr "Лаборатория"
+
+msgid "Automatic indent\\When program editing"
+msgstr "Автоматический отступ\\При редактировании программы"
+
+msgid "Back"
+msgstr "Назад"
+
+msgid "Background sound :\\Volume of audio tracks on the CD"
+msgstr "Фоновый звук:\\Громкость звуковых дорожек на CD"
+
+msgid "Backward (\\key down;)"
+msgstr "Назад (\\key down;)"
+
+msgid "Backward\\Moves backward"
+msgstr "Назад\\Двигаться назад"
+
+msgid "Bad argument for \"new\""
+msgstr "Неверный аргумент для \"new\""
+
+msgid "Big indent\\Indent 2 or 4 spaces per level defined by braces"
+msgstr "Большой отступ\\Отступать на 2 или 4 пробела, в зависимости от скобок"
+
+msgid "Black box"
+msgstr "Черный ящик"
+
+msgid "Blue"
+msgstr "Синий"
+
+msgid "Blue flag"
+msgstr "Синий флаг"
+
+msgid "Bot destroyed"
+msgstr "Бот уничтожен"
+
+msgid "Bot factory"
+msgstr "Завод ботов"
+
+msgid "Build a bot factory"
+msgstr "Построить завод ботов"
+
+msgid "Build a converter"
+msgstr "Построить преобразователь"
+
+msgid "Build a defense tower"
+msgstr "Построить защитную башню"
+
+msgid "Build a derrick"
+msgstr "Построить буровую вышку"
+
+msgid "Build a exchange post"
+msgstr "Построить пост по обмену сообщениями"
+
+msgid "Build a legged grabber"
+msgstr "Собрать шагающего сборщика"
+
+msgid "Build a legged orga shooter"
+msgstr "Собрать шагающего орга-стрелка"
+
+msgid "Build a legged shooter"
+msgstr "Собрать шагающего стрелка"
+
+msgid "Build a legged sniffer"
+msgstr "Собрать шагающего искателя"
+
+msgid "Build a lightning conductor"
+msgstr "Построить громоотвод"
+
+msgid "Build a nuclear power plant"
+msgstr "Построить завод атомных батарей (неперезаряж.)"
+
+msgid "Build a phazer shooter"
+msgstr "Собрать фазового стрелка"
+
+msgid "Build a power cell factory"
+msgstr "Построить завод перезаряжаемых батарей"
+
+msgid "Build a power station"
+msgstr "Построить электростанцию"
+
+msgid "Build a radar station"
+msgstr "Построить радарную станцию"
+
+msgid "Build a recycler"
+msgstr "Собрать утилизатор"
+
+msgid "Build a repair center"
+msgstr "Построить ремонтный пункт"
+
+msgid "Build a research center"
+msgstr "Построить научно-исследовательский центр"
+
+msgid "Build a shielder"
+msgstr "Собрать передвижной щит"
+
+msgid "Build a subber"
+msgstr "Собрать саббера"
+
+msgid "Build a thumper"
+msgstr "Собрать ударника"
+
+msgid "Build a tracked grabber"
+msgstr "Собрать гусеничного сборщика"
+
+msgid "Build a tracked orga shooter"
+msgstr "Собрать гусеничного орга-стрелка"
+
+msgid "Build a tracked shooter"
+msgstr "Собрать гусеничного стрелка"
+
+msgid "Build a tracked sniffer"
+msgstr "Собрать гусеничного искателя"
+
+msgid "Build a wheeled grabber"
+msgstr "Собрать колесного сборщика"
+
+msgid "Build a wheeled orga shooter"
+msgstr "Собрать колесного орга-стрелка"
+
+msgid "Build a wheeled shooter"
+msgstr "Собрать колесного стрелка"
+
+msgid "Build a wheeled sniffer"
+msgstr "Собрать колесного искателя"
+
+msgid "Build a winged grabber"
+msgstr "Собрать летающего сборщика"
+
+msgid "Build a winged orga shooter"
+msgstr "Собрать летающего орга-стрелка"
+
+msgid "Build a winged shooter"
+msgstr "Собрать летающего стрелка"
+
+msgid "Build a winged sniffer"
+msgstr "Собрать летающего искателя"
+
+msgid "Build an autolab"
+msgstr "Построить лабораторию"
+
+msgid "Building completed"
+msgstr "Здание построено"
+
+msgid "Building destroyed"
+msgstr "Здание разрушено"
+
+msgid "Building too close"
+msgstr "Здание слишком близко"
+
+msgid "Button %1"
+msgstr "Кнопка %1"
+
+msgid "COLOBOT"
+msgstr "КОЛОБОТ"
+
+msgid "Calling an unknown function"
+msgstr "Вызов неизвестной функции"
+
+msgid "Camera (\\key camera;)"
+msgstr "Камера (\\key camera;)"
+
+msgid "Camera awayest"
+msgstr "Отдалить камеру"
+
+msgid "Camera back\\Moves the camera backward"
+msgstr "Отдалить камеру\\Перемещение камеры назад"
+
+msgid "Camera closer\\Moves the camera forward"
+msgstr "Приблизать камеру\\Перемещение камеры вперед"
+
+msgid "Camera nearest"
+msgstr "Приблизить камеру"
+
+msgid "Camera to left"
+msgstr "Камеру влево"
+
+msgid "Camera to right"
+msgstr "Камеру вправо"
+
+msgid "Can not create this; there are too many objects"
+msgstr "Не удается это создать, слишком много объектов"
+
+msgid "Can't open file"
+msgstr "Невозможно открыть файл"
+
+msgid "Cancel"
+msgstr "Отмена"
+
+msgid "Cancel\\Cancel all changes"
+msgstr "Отмена\\Отменить все изменения"
+
+msgid "Cancel\\Keep current player name"
+msgstr "Отмена\\Отмена"
+
+msgid "Challenges"
+msgstr "Задания"
+
+msgid "Challenges\\Programming challenges"
+msgstr "Задания\\Практика программирования"
+
+msgid "Change camera\\Switches between onboard camera and following camera"
+msgstr "Изменить вид\\Переключение между бортовой камерой и следящей камерой"
+
+msgid "Checkpoint"
+msgstr "Контрольная точка"
+
+msgid "Checkpoint crossed"
+msgstr "Вы прошли контрольную точку"
+
+msgid "Climb\\Increases the power of the jet"
+msgstr "Взлет и подъем\\Увеличивает мощность реактивного двигателя"
+
+msgid "Close"
+msgstr "Закрыть"
+
+msgid "Closing bracket missing "
+msgstr "Закрывающая скобка отсутствует"
+
+msgid "Colobot rules!"
+msgstr "Правила игры!"
+
+msgid "Command line"
+msgstr "Командная строка"
+
+msgid "Compass"
+msgstr "Компас"
+
+msgid "Compilation ok (0 errors)"
+msgstr "Компиляция завершена (0 ошибок)"
+
+msgid "Compile"
+msgstr "Компилировать"
+
+msgid "Continue"
+msgstr "Продолжить"
+
+msgid "Continue\\Continue the current mission"
+msgstr "Продолжить\\Продолжить текущую миссию"
+
+msgid "Continue\\Continue the game"
+msgstr "Продолжить\\Продолжить игру"
+
+msgid "Controls\\Keyboard, joystick and mouse settings"
+msgstr "Управление\\Настройки клавиатуры, джойстика и мыши"
+
+msgid "Converts ore to titanium"
+msgstr "Преобразует руду в титан"
+
+msgid "Copy"
+msgstr "Копировать"
+
+msgid "Copy (Ctrl+c)"
+msgstr "Копировать (Ctrl+C)"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Current mission saved"
+msgstr "Текущая миссия сохранена"
+
+msgid "Customize your appearance"
+msgstr "Настроить свой внешний вид"
+
+msgid "Cut (Ctrl+x)"
+msgstr "Вырезать (Ctrl+X)"
+
+msgid "Defense tower"
+msgstr "Защитная башня"
+
+msgid "Delete"
+msgstr "Удалить"
+
+msgid "Delete player\\Deletes the player from the list"
+msgstr "Удалить игрока\\Удаление игрока из списка"
+
+msgid "Delete\\Deletes the selected file"
+msgstr "Удалить\\Удаление выбранного файла"
+
+msgid "Depth of field\\Maximum visibility"
+msgstr "Дальность прорисовки\\Максимальная видимость"
+
+msgid "Derrick"
+msgstr "Космический корабль"
+
+msgid "Descend\\Reduces the power of the jet"
+msgstr "Снижение и посадка\\Понижение мощности реактивного двигателя"
+
+msgid "Destroy the building"
+msgstr "Уничтожить здание"
+
+msgid "Destroyer"
+msgstr "Уничтожитель"
+
+msgid "Details\\Visual quality of 3D objects"
+msgstr "Детали\\Визуальное качество 3D-объектов"
+
+msgid "Developed by :"
+msgstr "Разработка :"
+
+msgid "Device\\Driver and resolution settings"
+msgstr "Устройство\\Драйвер и настройки разрешения"
+
+msgid "Dividing by zero"
+msgstr "Деление на ноль (запрещено!)"
+
+msgid "Do not use in this exercise"
+msgstr "Не используй в этом упражнении"
+
+msgid "Do you really want to destroy the selected building?"
+msgstr "Вы действительно хотите уничтожить выбранное здание?"
+
+#, c-format
+msgid "Do you want to delete %s's saved games? "
+msgstr "Вы действительно хотите удалить сохраненные игры игрока %s?"
+
+msgid "Do you want to quit COLOBOT ?"
+msgstr "Вы хотите закрыть COLOBOT?"
+
+msgid "Doors blocked by a robot or another object "
+msgstr "Двери заблокированы роботом или другим объектом"
+
+msgid "Down (\\key gdown;)"
+msgstr "Вниз (\\key gdown;)"
+
+msgid "Drawer bot"
+msgstr "Рисовальщик"
+
+msgid "Dust\\Dust and dirt on bots and buildings"
+msgstr "Пыль\\Пыль и грязь на ботах и зданиях"
+
+msgid "Dynamic lighting\\Mobile light sources"
+msgstr "Динамическое освещение\\Подвижные источники света"
+
+msgid "Edit the selected program"
+msgstr "Изменить выбранную программу"
+
+msgid "Egg"
+msgstr "Яйцо"
+
+msgid "End of block missing"
+msgstr "Отсутствует конец блока"
+
+msgid "Energy deposit (site for power station)"
+msgstr "Запасы энергии (место для электростанций)"
+
+msgid "Energy level"
+msgstr "Уровень энергии"
+
+msgid "Engineer"
+msgstr "Инженер"
+
+msgid "Error in instruction move"
+msgstr "Ошибка движения"
+
+msgid "Execute the selected program"
+msgstr "Выполнить выбранную программу"
+
+msgid "Execute/stop"
+msgstr "Выполнить/стоп"
+
+msgid "Exercises\\Programming exercises"
+msgstr "Упражнения\\Упражнения по программированию"
+
+msgid "Exit film\\Film at the exit of exercises"
+msgstr "Ролик при выходе\\Ролик во время выхода из упражнения"
+
+msgid "Explosive"
+msgstr "Взрывчатка"
+
+msgid "Extend shield (\\key action;)"
+msgstr "Поднять щит (\\key action;)"
+
+msgid "Eyeglasses:"
+msgstr "Очки:"
+
+msgid "Face type:"
+msgstr "Лицо:"
+
+msgid "File not open"
+msgstr "Файл не открыт"
+
+msgid "Filename:"
+msgstr "Имя файла:"
+
+msgid "Film sequences\\Films before and after the missions"
+msgstr "Показывать видео\\Фильмы до и после миссий"
+
+msgid "Finish"
+msgstr "Финиш"
+
+msgid "Fixed mine"
+msgstr "Мина"
+
+msgid "Flat ground not large enough"
+msgstr "Недостаточно плоской земли"
+
+msgid "Fog\\Fog"
+msgstr "Туман\\Туман"
+
+msgid "Folder:"
+msgstr "Папка"
+
+#, c-format
+msgid "Folder: %s"
+msgstr "Папка: %s"
+
+msgid "Font size"
+msgstr "Размер шрифта"
+
+msgid "Forward"
+msgstr "Вперед"
+
+msgid "Forward (\\key up;)"
+msgstr "Вперед (\\key up;)"
+
+msgid "Forward\\Moves forward"
+msgstr "Вперед\\Двигаться вперед"
+
+msgid "Found a site for a derrick"
+msgstr "Найдено место для буровой вышки"
+
+msgid "Found a site for power station"
+msgstr "Найдено место для электростанции"
+
+msgid "Found key A (site for derrick)"
+msgstr "Найден ключ A (место для буровой вышки)"
+
+msgid "Found key B (site for derrick)"
+msgstr "Найден ключ B (место для буровой вышки)"
+
+msgid "Found key C (site for derrick)"
+msgstr "Найден ключ C (место для буровой вышки)"
+
+msgid "Found key D (site for derrick)"
+msgstr "Найден ключ D (место для буровой вышки)"
+
+msgid "Free game"
+msgstr "Свободная игра"
+
+msgid "Free game\\Free game without a specific goal"
+msgstr "Свобод. игра\\Игра без четкой цели"
+
+msgid "Friendly fire\\Your shooting can damage your own objects "
+msgstr "Огонь по своим\\Вы можете повредить собственные объекты"
+
+msgid "Full screen\\Full screen or window mode"
+msgstr "Во весь экран\\Выбор полноэкранного или оконного режима"
+
+msgid "Function already exists"
+msgstr "Функция уже существует"
+
+msgid "Function name missing"
+msgstr "Имя функции отсутствует"
+
+msgid "Game speed"
+msgstr "Скорость игры"
+
+msgid "Game\\Game settings"
+msgstr "Игра\\Настройки игры"
+
+msgid "Gantry crane"
+msgstr "Козловой кран"
+
+#, c-format
+msgid "GetResource event num out of range: %d\n"
+msgstr "событие GetResource, число вне диапазона: %d\n"
+
+msgid "Goto: destination occupied"
+msgstr "Перейти: место занято"
+
+msgid "Goto: inaccessible destination"
+msgstr "Перейти: место недоступно"
+
+msgid "Grab or drop (\\key action;)"
+msgstr "Взять или бросить (\\key action;)"
+
+msgid "Graphics\\Graphics settings"
+msgstr "Графика\\Настройки графики"
+
+msgid "Green"
+msgstr "Зеленый"
+
+msgid "Green flag"
+msgstr "Зеленый флаг"
+
+msgid "Ground inappropriate"
+msgstr "Земля не подходит"
+
+msgid "Ground not flat enough"
+msgstr "Земля недостаточно плоская"
+
+msgid "Hair color:"
+msgstr "Волосы:"
+
+msgid "Head\\Face and hair"
+msgstr "Голова\\Лицо и волосы"
+
+msgid "Help about selected object"
+msgstr "Справка о выбранном объекте"
+
+msgid "Help balloons\\Explain the function of the buttons"
+msgstr "Подсказки\\Объяснение функций кнопок"
+
+msgid "Highest\\Highest graphic quality (lowest frame rate)"
+msgstr "Высок.\\Самые высокие настройки графики (лучшее качество)"
+
+msgid "Home"
+msgstr "Домой"
+
+msgid "Houston Mission Control"
+msgstr "Центр управления Хьюстон"
+
+msgid "Illegal object"
+msgstr "Запрещенный объект"
+
+msgid "Impossible under water"
+msgstr "Невозможно под водой"
+
+msgid "Impossible when carrying an object"
+msgstr "Невозможно при движении с объектом"
+
+msgid "Impossible when flying"
+msgstr "Невозможно в полете"
+
+msgid "Impossible when moving"
+msgstr "Невозможно в движении"
+
+msgid "Impossible when swimming"
+msgstr "Невозможно в воде"
+
+msgid "Inappropriate bot"
+msgstr "Неверный бот"
+
+msgid "Inappropriate cell type"
+msgstr "Батарея не подходит"
+
+msgid "Incorrect index type"
+msgstr "Неверный тип индекса"
+
+msgid "Infected by a virus; temporarily out of order"
+msgstr "Заражено вирусом. Временно вышел из строя"
+
+msgid "Information exchange post"
+msgstr "Пост обмена информацией"
+
+msgid "Instruction \"break\" outside a loop"
+msgstr "Инструкция \"break\" вне цикла"
+
+msgid "Instruction \"case\" missing"
+msgstr "Отсутствует инструкция \"case\""
+
+msgid "Instruction \"case\" outside a block \"switch\""
+msgstr "Инструкция \"case\" вне блока \"switch\" "
+
+msgid "Instruction \"else\" without corresponding \"if\" "
+msgstr "Инструкция \"else\" без \"if\" "
+
+msgid "Instructions (\\key help;)"
+msgstr "Инструкции (\\key help;)"
+
+msgid "Instructions after the final closing brace"
+msgstr "Инструкция после последней закрывающей фигурной скобки"
+
+msgid "Instructions for the mission (\\key help;)"
+msgstr "Инструкции для миссии (\\key help;)"
+
+msgid "Instructions from Houston"
+msgstr "Инструкции из Хьюстона"
+
+msgid "Instructions\\Shows the instructions for the current mission"
+msgstr "Инструкции\\Показывает инструкции по текущей миссии"
+
+msgid "Jet temperature"
+msgstr "Температура реактивного двигателя"
+
+msgid "Key A"
+msgstr "Ключ А"
+
+msgid "Key B"
+msgstr "Ключ B"
+
+msgid "Key C"
+msgstr "Ключ C"
+
+msgid "Key D"
+msgstr "Ключ D"
+
+msgid "Key word help\\More detailed help about key words"
+msgstr "Помощь по командам\\Более подробная справку по командам"
+
+msgid "Keyword \"while\" missing"
+msgstr "Нет ключевого слова \"while\" "
+
+msgid "Keyword help(\\key cbot;)"
+msgstr "Помощь(\\key cbot;)"
+
+msgid "LOADING"
+msgstr "ЗАГРУЗКА"
+
+msgid "Legged grabber"
+msgstr "Шагающий сборщик"
+
+msgid "Legged orga shooter"
+msgstr "Шагающий орга-стрелка"
+
+msgid "Legged shooter"
+msgstr "Шагающий стрелок"
+
+msgid "Legged sniffer"
+msgstr "Шагающий искатель"
+
+msgid "Lightning conductor"
+msgstr "Громоотвод"
+
+msgid "List of objects"
+msgstr "Список объектов"
+
+msgid "List of saved missions"
+msgstr "Список сохраненных миссий"
+
+msgid "Load a saved mission"
+msgstr "Загрузить"
+
+msgid "Load\\Load a saved mission"
+msgstr "Загрузить\\Загрузить сохраненную миссию"
+
+msgid "Load\\Loads the selected mission"
+msgstr "Загрузить\\Загрузить выбранную миссию"
+
+msgid "Lowest\\Minimum graphic quality (highest frame rate)"
+msgstr "Низкое\\Минимальное качество графики (быстро)"
+
+msgid "Lunar Roving Vehicle"
+msgstr "Луноход"
+
+msgid "Marks on the ground\\Marks on the ground"
+msgstr "Метки на земле\\Метки на земле"
+
+msgid "Maximize"
+msgstr "Развернуть"
+
+msgid "Menu (\\key quit;)"
+msgstr "Меню (\\key выйти;)"
+
+msgid "Minimize"
+msgstr "Свернуть"
+
+msgid "Mission name"
+msgstr "Название миссии"
+
+msgid "Missions"
+msgstr "Миссии"
+
+msgid "Missions\\Select mission"
+msgstr "Миссии\\Выбор миссии"
+
+msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
+msgstr "Инверсия мыши по оси X\\Инверсия прокрутки по оси Х"
+
+msgid "Mouse inversion Y\\Inversion of the scrolling direction on the Y axis"
+msgstr "Инверсия мыши по оси Y\\Инверсия прокрутки по оси Y"
+
+msgid "Mouse shadow\\Gives the mouse a shadow"
+msgstr "Тень мыши\\Мышь отбрасывает тень"
+
+msgid "Mute\\No sound"
+msgstr "Без звука\\Без звука"
+
+msgid "Name:"
+msgstr "Имя:"
+
+msgid "Negative value rejected by \"throw\""
+msgstr "Отрицательное значение не принято"
+
+msgid "Nest"
+msgstr "Гнездо"
+
+msgid "New"
+msgstr "Новый"
+
+msgid "New ..."
+msgstr "Новый ..."
+
+msgid "New bot available"
+msgstr "Доступен новый бот"
+
+msgid "New player\\Choose player's name"
+msgstr "Новый игрок\\Выберите имя для игрока"
+
+msgid "Next"
+msgstr "Следующий"
+
+msgid "Next object\\Selects the next object"
+msgstr "Следующий объект\\Выбор следующего объекта"
+
+msgid "No energy in the subsoil"
+msgstr "Под землей нет запасов энергии"
+
+msgid "No flag nearby"
+msgstr "Слишком много флагов этого цвета (максимум 5)"
+
+msgid "No function running"
+msgstr "Нет запущенной функции"
+
+msgid "No function with this name accepts this kind of parameter"
+msgstr "Нет функции с этим именем для этого вида параметра"
+
+msgid "No function with this name accepts this number of parameters"
+msgstr "Нет функции с этим именем для этого числа параметра"
+
+msgid "No information exchange post within range"
+msgstr "Поста по обмену информацией нет рядом или он далеко"
+
+msgid "No more energy"
+msgstr "Нет энергии"
+
+msgid "No ore in the subsoil"
+msgstr ""
+
+msgid "No other robot"
+msgstr "Нет робота"
+
+msgid "No power cell"
+msgstr "Нет батареи"
+
+msgid "No titanium"
+msgstr "Нет титана"
+
+msgid "No titanium around"
+msgstr "Вокруг нет титана"
+
+msgid "No titanium ore to convert"
+msgstr "Нет титановых руд для преобразования"
+
+msgid "No titanium to transform"
+msgstr ""
+
+msgid "No uranium to transform"
+msgstr "Нет урана для преобразования"
+
+msgid "Normal size"
+msgstr "Нормальный размер"
+
+msgid "Normal\\Normal graphic quality"
+msgstr "Средн.\\Нормальное качество графики"
+
+msgid "Normal\\Normal sound volume"
+msgstr "Нормально\\Нормальная громкость"
+
+msgid "Not enough energy"
+msgstr "Не хватает энергии"
+
+msgid "Not enough energy yet"
+msgstr "Не хватает энергии"
+
+msgid "Not yet enough energy"
+msgstr "Не хватает энергии"
+
+msgid "Nothing to analyze"
+msgstr "Нечего анализировать"
+
+msgid "Nothing to drop"
+msgstr "Нечего бросить"
+
+msgid "Nothing to grab"
+msgstr "Нечего взять"
+
+msgid "Nothing to recycle"
+msgstr "Нечего утилизировать"
+
+msgid "Nuclear power cell"
+msgstr "Атомная батарея"
+
+msgid "Nuclear power cell available"
+msgstr "Доступна атомная батарея"
+
+msgid "Nuclear power station"
+msgstr "Завод атомных батарей (неперезаряж.)"
+
+msgid "Num of decorative objects\\Number of purely ornamental objects"
+msgstr "Количество декораций\\Количество декоративных объектов"
+
+msgid "Number missing"
+msgstr "Нет числа"
+
+msgid "Number of insects detected"
+msgstr "Количество обнаруженных насекомых"
+
+msgid "Number of particles\\Explosions, dust, reflections, etc."
+msgstr "Количество частиц\\Взрывы, пыль, отражения и т.д."
+
+msgid "OK"
+msgstr "ОК"
+
+msgid "OK\\Choose the selected player"
+msgstr "ОК\\Выбрать игрока"
+
+msgid "OK\\Close program editor and return to game"
+msgstr "ОК\\Закрыть редактор программ и вернуться к игре"
+
+msgid "Object not found"
+msgstr "Объект не найден"
+
+msgid "Object too close"
+msgstr "Объект слишком близок"
+
+msgid "One step"
+msgstr "Один шаг"
+
+msgid "Open"
+msgstr "Открыть"
+
+msgid "Open (Ctrl+o)"
+msgstr "Открыть (Ctrl+o)"
+
+msgid "Opening brace missing "
+msgstr "Открывающая скобка отсутствует "
+
+msgid "Opening bracket missing"
+msgstr "Открывающая скобка отсутствует"
+
+msgid "Operation impossible with value \"nan\""
+msgstr "Операция невозможна значение \"nan\""
+
+msgid "Options"
+msgstr "Опции"
+
+msgid "Options\\Preferences"
+msgstr "Опции\\Настройки"
+
+msgid "Organic matter"
+msgstr "Органическое вещество"
+
+msgid "Origin of last message\\Shows where the last message was sent from"
+msgstr ""
+"Источник сообщения\\Показывает место, откуда было отправлено последнеее "
+"сообщение"
+
+msgid "Parameters missing "
+msgstr "Отсутствуют параметры "
+
+msgid "Particles in the interface\\Steam clouds and sparks in the interface"
+msgstr "Частицы в интерфейсе меню\\Пар из труб и искры в интерфейсе меню"
+
+msgid "Paste (Ctrl+v)"
+msgstr "Вставить (Ctrl+V)"
+
+msgid "Pause/continue"
+msgstr "Пауза/продолжить"
+
+msgid "Phazer shooter"
+msgstr "Фазовый стрелок"
+
+msgid "Photography"
+msgstr "Фотография"
+
+msgid "Place occupied"
+msgstr "Место занято"
+
+msgid "Planets and stars\\Astronomical objects in the sky"
+msgstr "Планеты и звезды\\Астрономические объекты в небе"
+
+msgid "Plans for defense tower available"
+msgstr "Доступны схемы защитной башни"
+
+msgid "Plans for nuclear power plant available"
+msgstr "Доступны схемы АЭС"
+
+msgid "Plans for phazer shooter available"
+msgstr "Доступны схемы фазового стрелка"
+
+msgid "Plans for shielder available"
+msgstr "Доступны схемы передвижного щита"
+
+msgid "Plans for shooter available"
+msgstr "Доступны схемы стрелка"
+
+msgid "Plans for thumper available"
+msgstr "Доступны схемы ударника"
+
+msgid "Plans for tracked robots available "
+msgstr "Доступны схемы гусеничных роботов "
+
+msgid "Plant a flag"
+msgstr "Установить флаг"
+
+msgid "Play\\Start mission!"
+msgstr "Начать\\Перейти к выполнению миссии!"
+
+msgid "Player"
+msgstr "Игрок"
+
+msgid "Player name"
+msgstr "Имя игрока"
+
+msgid "Player's name"
+msgstr "Имя игрока"
+
+msgid "Power cell"
+msgstr "Батарея"
+
+msgid "Power cell available"
+msgstr "Доступна батарея"
+
+msgid "Power cell factory"
+msgstr "Завод перезаряжаемых батарей"
+
+msgid "Power station"
+msgstr "Электростанция"
+
+msgid "Practice bot"
+msgstr "Тренировочный бот"
+
+msgid "Press \\key help; to read instructions on your SatCom"
+msgstr "Нажмите \\key help; чтобы получить инструкции от SatCom"
+
+msgid "Previous"
+msgstr "Предыдущий"
+
+msgid "Previous object\\Selects the previous object"
+msgstr "Предыдущий объект\\Выбор предыдущего объекта"
+
+msgid "Previous selection (\\key desel;)"
+msgstr "Предыдущий выбор (\\key desel;)"
+
+msgid "Private element"
+msgstr "Частный элемент"
+
+msgid "Private\\Private folder"
+msgstr "Личное\\Личная папка"
+
+msgid "Program editor"
+msgstr "Редактор программ"
+
+msgid "Program finished"
+msgstr "Программа выполнена"
+
+msgid "Program infected by a virus"
+msgstr "Программа заражена вирусом"
+
+msgid "Programming exercises"
+msgstr "Упражнения"
+
+msgid "Programming help"
+msgstr "Помощь в программировании"
+
+msgid "Programming help (\\key prog;)"
+msgstr "Помощь в программировании (\\key prog;)"
+
+msgid "Programming help\\Gives more detailed help with programming"
+msgstr ""
+"Помощь в программировании\\Дает более детальную помощь в программировании"
+
+msgid "Programs dispatched by Houston"
+msgstr "Программы переданные с Хьюстона"
+
+msgid "Proto\\Prototypes under development"
+msgstr "Прототипы\\Прототипы в стадии разработки"
+
+msgid "Prototypes"
+msgstr "Прототипы"
+
+msgid "Public required"
+msgstr "Требуется общественное"
+
+msgid "Public\\Common folder"
+msgstr "Общее\\Общая папка"
+
+msgid "Quake at explosions\\The screen shakes at explosions"
+msgstr "Землетряс. при взрывах\\Тряска экрана при взрывах"
+
+msgid "Quit the mission?"
+msgstr "Завершить миссию?"
+
+msgid "Quit\\Quit COLOBOT"
+msgstr "Выход\\Выход из COLOBOT"
+
+msgid "Quit\\Quit the current mission or exercise"
+msgstr "Выход\\Выход из текущей миссии"
+
+msgid "Radar station"
+msgstr "Радар"
+
+msgid "Read error"
+msgstr "Ошибка чтения"
+
+msgid "Recorder"
+msgstr "Запись"
+
+msgid "Recycle (\\key action;)"
+msgstr "Утилизация (\\key action;)"
+
+msgid "Recycler"
+msgstr "Утилизатор"
+
+msgid "Red"
+msgstr "Красный"
+
+msgid "Red flag"
+msgstr "Красный флаг"
+
+msgid "Reflections on the buttons \\Shiny buttons"
+msgstr "Отражения кнопок \\Блестящие кнопки"
+
+msgid "Remains of Apollo mission"
+msgstr "Остатки миссии Аполлон"
+
+msgid "Remove a flag"
+msgstr "Удалить флаг"
+
+msgid "Repair center"
+msgstr "Ремонтный пункт"
+
+msgid "Research center"
+msgstr "Научно-исследовательский центр"
+
+msgid "Research program already performed"
+msgstr "Научно-исследовательская программа уже выполняется"
+
+msgid "Research program completed"
+msgstr "Научно-исследовательская программа завершена"
+
+msgid "Reserved keyword of CBOT language"
+msgstr "Резервное ключевое слово языка CBOT"
+
+msgid "Resolution"
+msgstr "Разрешение"
+
+msgid "Restart\\Restart the mission from the beginning"
+msgstr "Заново\\Начать данную миссию с начала"
+
+msgid "Return to start"
+msgstr "Вернуться в начало"
+
+msgid "Robbie"
+msgstr "Робби"
+
+msgid "Robbie\\Your assistant"
+msgstr "Робби\\Ваш помощник"
+
+msgid "Ruin"
+msgstr "Руины"
+
+msgid "Run research program for defense tower"
+msgstr "Начать исследование программы для защитной башни"
+
+msgid "Run research program for legged bots"
+msgstr "Начать исследование программы для шагающих ботов"
+
+msgid "Run research program for nuclear power"
+msgstr "Начать исследование программы для атомной энергетики"
+
+msgid "Run research program for orga shooter"
+msgstr "Начать исследование программы для орга-стерлка"
+
+msgid "Run research program for phazer shooter"
+msgstr "Начать исследование программы для фазового стрелка"
+
+msgid "Run research program for shielder"
+msgstr "Начать исследование программы для передвижного щита"
+
+msgid "Run research program for shooter"
+msgstr "Начать исследование программы для стрелка"
+
+msgid "Run research program for thumper"
+msgstr "Начать исследование программы для ударника"
+
+msgid "Run research program for tracked bots"
+msgstr "Начать исследование программы для гусеничного бота "
+
+msgid "Run research program for winged bots"
+msgstr "Начать исследование программы для летающего бота"
+
+msgid "SatCom"
+msgstr "SatCom"
+
+msgid "Satellite report"
+msgstr "Спутниковый отчет"
+
+msgid "Save"
+msgstr "Сохранить"
+
+msgid "Save (Ctrl+s)"
+msgstr "Сохранить (Ctrl+s)"
+
+msgid "Save the current mission"
+msgstr "Сохранить"
+
+msgid "Save\\Save the current mission "
+msgstr "Сохранить\\Сохранить текущую миссию"
+
+msgid "Save\\Saves the current mission"
+msgstr "Сохранить\\Сохранить текущую миссию"
+
+msgid "Scrolling\\Scrolling when the mouse touches right or left border"
+msgstr "Прокрутка\\Прокрутка, когда указатель мыши касается граней экрана"
+
+msgid "Select the astronaut\\Selects the astronaut"
+msgstr "Выбор астронавта\\Выбор астронавта"
+
+msgid "Semicolon terminator missing"
+msgstr "Отсутствует точка с запятой"
+
+msgid "Shadows\\Shadows on the ground"
+msgstr "Тени\\Тени на земле"
+
+msgid "Shield level"
+msgstr "Уровень брони"
+
+msgid "Shield radius"
+msgstr "Радиус щита"
+
+msgid "Shielder"
+msgstr "Передвижной щит"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "Shoot (\\key action;)"
+msgstr "Огонь (\\key action;)"
+
+msgid "Show if the ground is flat"
+msgstr "Показывать плоскую землю"
+
+msgid "Show the place"
+msgstr "Место"
+
+msgid "Show the range"
+msgstr "Дальность"
+
+msgid "Show the solution"
+msgstr "Показать решение"
+
+msgid "Sign \" : \" missing"
+msgstr "Знак \" : \" отсутствует"
+
+msgid "Size 1"
+msgstr "Размер 1"
+
+msgid "Size 2"
+msgstr "Размер 2"
+
+msgid "Size 3"
+msgstr "Размер 3"
+
+msgid "Size 4"
+msgstr "Размер 4"
+
+msgid "Size 5"
+msgstr "Размер 5"
+
+msgid "Sky\\Clouds and nebulae"
+msgstr "Небо\\Облака и туманности"
+
+msgid "Sniff (\\key action;)"
+msgstr "Искать (\\key action;)"
+
+msgid "Solution"
+msgstr "Решение"
+
+msgid "Sound effects:\\Volume of engines, voice, shooting, etc."
+msgstr "Общий звук:\\Гормкость двигателя, голоса, стрельбы и т.д."
+
+msgid "Sound\\Music and game sound volume"
+msgstr "Звук\\Громкость музыки и звуков"
+
+msgid "Spaceship"
+msgstr "Космический корабль"
+
+msgid "Spaceship ruin"
+msgstr "Обломки корабля"
+
+msgid "Speed 1.0x\\Normal speed"
+msgstr "Скорость 1.0х\\Нормальная скорость"
+
+msgid "Speed 1.5x\\1.5 times faster"
+msgstr "Скорость 1.5х\\В полтора раза быстрее"
+
+msgid "Speed 2.0x\\Double speed"
+msgstr "Скорость 2.0х\\В два раза скорость"
+
+msgid "Speed 3.0x\\Three times faster"
+msgstr "Скорость 3.0х\\В три раза быстрее"
+
+msgid "Spider"
+msgstr "Маук"
+
+msgid "Spider fatally wounded"
+msgstr "Паук смертельно ранен"
+
+msgid "Stack overflow"
+msgstr "Переполнение стека"
+
+msgid ""
+"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
+msgstr ""
+"Стандартное действие\\Стандартное действие бота (брать/взять, стрелять, "
+"искать и т.д.)"
+
+msgid "Standard controls\\Standard key functions"
+msgstr "Стандартное управление\\Сделать управление по умолчанию"
+
+msgid "Standard\\Standard appearance settings"
+msgstr "По умолчанию\\Настройки внешнего вида по умолчанию"
+
+msgid "Start"
+msgstr "Начало"
+
+msgid "Still working ..."
+msgstr "Работает ..."
+
+msgid "String missing"
+msgstr "Отсутствует строка"
+
+msgid "Strip color:"
+msgstr "Цвет полос"
+
+msgid "Subber"
+msgstr "Саббер"
+
+msgid "Suit color:"
+msgstr "Костюм:"
+
+msgid "Suit\\Astronaut suit"
+msgstr "Костюм\\Костюм астронавта"
+
+msgid "Sunbeams\\Sunbeams in the sky"
+msgstr "Солнечные лучи\\Солнечные лучи в небе"
+
+msgid "Survival kit"
+msgstr "Аптечка"
+
+msgid "Switch bots <-> buildings"
+msgstr "Переключение между ботами и зданиями"
+
+msgid "Take off to finish the mission"
+msgstr "Взлететь, чтобы закончить миссию"
+
+msgid "Target"
+msgstr "Цель"
+
+msgid "Target bot"
+msgstr "Целевой бот"
+
+msgid "Textures\\Quality of textures "
+msgstr "Текстуры\\Качество текстур "
+
+msgid "The expression must return a boolean value"
+msgstr "Выражение должно возвращать логическое значение"
+
+msgid "The function returned no value "
+msgstr "Функция не возвратила значения"
+
+msgid ""
+"The list is only available if a \\l;radar station\\u object\\radar; is "
+"working.\n"
+msgstr ""
+"Список доступен только если \\l;radar station\\u object\\radar; работают\n"
+
+msgid ""
+"The mission is not accomplished yet (press \\key help; for more details)"
+msgstr ""
+"Миссия еще не выполнена (нажмите \\key help; для более подробной информации)"
+
+msgid "The types of the two operands are incompatible "
+msgstr "Типы операндов несовместимы"
+
+msgid "This class already exists"
+msgstr "Этот класс уже существует"
+
+msgid "This class does not exist"
+msgstr "Этот класс не существует"
+
+msgid "This is not a member of this class"
+msgstr "Это не член этого класса"
+
+msgid "This label does not exist"
+msgstr "Эта метка не существует"
+
+msgid "This object is not a member of a class"
+msgstr "Этот объект не член класса"
+
+msgid "Thump (\\key action;)"
+msgstr "Удар (\\key action;)"
+
+msgid "Thumper"
+msgstr "Ударник"
+
+msgid "Titanium"
+msgstr "Титан"
+
+msgid "Titanium available"
+msgstr "Титан доступен"
+
+msgid "Titanium deposit (site for derrick)"
+msgstr "Запасы титана (место для буровой вышки)"
+
+msgid "Titanium ore"
+msgstr "Титановая руда"
+
+msgid "Titanium too close"
+msgstr "Титан слишком близко"
+
+msgid "Titanium too far away"
+msgstr "Титан слишком далеко"
+
+msgid "Too close to a building"
+msgstr "Слишком близко к зданию"
+
+msgid "Too close to an existing flag"
+msgstr ""
+
+msgid "Too close to space ship"
+msgstr "Слишком близко к кораблю"
+
+msgid "Too many flags of this color (maximum 5)"
+msgstr ""
+
+msgid "Too many parameters"
+msgstr "Слишком много параметров"
+
+msgid "Tracked grabber"
+msgstr "Гусеничный сборщик"
+
+msgid "Tracked orga shooter"
+msgstr "Гусеничный орга-стрелок"
+
+msgid "Tracked shooter"
+msgstr "Гусеничный стрелок"
+
+msgid "Tracked sniffer"
+msgstr "Гусеничный искатель"
+
+msgid "Transforms only titanium"
+msgstr "Нет титана для преобразования"
+
+msgid "Transforms only uranium"
+msgstr "Преобразовывается только уран"
+
+msgid "Transmitted information"
+msgstr "Переданная информация"
+
+msgid "Turn left (\\key left;)"
+msgstr "Налево (\\key left;)"
+
+msgid "Turn left\\turns the bot to the left"
+msgstr "Повернуть налево\\Поворот налево"
+
+msgid "Turn right (\\key right;)"
+msgstr "Направо (\\key right;)"
+
+msgid "Turn right\\turns the bot to the right"
+msgstr "Повернуть налево\\Поворот налево"
+
+msgid "Type declaration missing"
+msgstr "Не задан тип"
+
+msgid "Undo (Ctrl+z)"
+msgstr "Отмена (Ctrl+Z)"
+
+msgid "Unit"
+msgstr "Юнит"
+
+msgid "Unknown Object"
+msgstr "Неизвестный объект"
+
+msgid "Unknown command"
+msgstr "Неизвестная команда"
+
+msgid "Unknown function"
+msgstr "Неизвестная функция"
+
+msgid "Up (\\key gup;)"
+msgstr "Вверх (\\key gup;)"
+
+msgid "Uranium deposit (site for derrick)"
+msgstr "Запасы урана (место для буровой вышки)"
+
+msgid "Uranium ore"
+msgstr "Урановая руда"
+
+msgid "Use a joystick\\Joystick or keyboard"
+msgstr "Использовать джойстик\\Джойстик или клавиатура"
+
+msgid "User levels"
+msgstr "Пользовательские уровни"
+
+msgid "User\\User levels"
+msgstr "Польз.\\Пользовательские уровни"
+
+msgid "Variable name missing"
+msgstr "Нет имени переменной"
+
+msgid "Variable not declared"
+msgstr "Переменная не объявлена"
+
+msgid "Variable not initialized"
+msgstr "Переменная не инициализирована"
+
+msgid "Vault"
+msgstr "Хранилище"
+
+msgid "Violet flag"
+msgstr "Фиолетовый флаг"
+
+msgid "Void parameter"
+msgstr "Пустой параметр"
+
+msgid "Wasp"
+msgstr "Оса"
+
+msgid "Wasp fatally wounded"
+msgstr "Оса смертельно ранена"
+
+msgid "Waste"
+msgstr "Мусор"
+
+msgid "Wheeled grabber"
+msgstr "Колесный сборщик"
+
+msgid "Wheeled orga shooter"
+msgstr "Колесный орга-стрелок"
+
+msgid "Wheeled shooter"
+msgstr "Колесный стрелок"
+
+msgid "Wheeled sniffer"
+msgstr "Колесный искатель"
+
+msgid "Win"
+msgstr "Win"
+
+msgid "Winged grabber"
+msgstr "Летающий сборщик"
+
+msgid "Winged orga shooter"
+msgstr "Летающий орга-стрелок"
+
+msgid "Winged shooter"
+msgstr "Летающий стрелок"
+
+msgid "Winged sniffer"
+msgstr "Летающий искатель"
+
+msgid "Withdraw shield (\\key action;)"
+msgstr "Снять щит (\\key action;)"
+
+msgid "Worm"
+msgstr "Червь"
+
+msgid "Worm fatally wounded"
+msgstr "Червь смертельно ранен"
+
+msgid "Wreckage"
+msgstr "Обломки"
+
+msgid "Write error"
+msgstr "Ошибка записи"
+
+msgid "Wrong type for the assignment"
+msgstr "Неверный тип для назначения"
+
+msgid "Yellow flag"
+msgstr "Желтый флаг"
+
+msgid "You can fly with the keys (\\key gup;) and (\\key gdown;)"
+msgstr "Вы можете лететь с помощью клавиш (\\key gup;) и (\\key gdown;)"
+
+msgid "You can not carry a radioactive object"
+msgstr "Вы не можете нести радиоактивные объекты"
+
+msgid "You can not carry an object under water"
+msgstr "Вы не можете нести объекты под водой"
+
+msgid "You found a usable object"
+msgstr "Вы нашли рабочий объект"
+
+msgid "You must get on the spaceship to take off "
+msgstr "Вы должны быть на борту корабля, чтобы взлететь"
+
+msgid "Zoom mini-map"
+msgstr "Масштаб мини-карты"
+
+msgid "\\Blue flags"
+msgstr "\\Синий флаг"
+
+msgid "\\Eyeglasses 1"
+msgstr "\\Очки 1"
+
+msgid "\\Eyeglasses 2"
+msgstr "\\Очки 2"
+
+msgid "\\Eyeglasses 3"
+msgstr "\\Очки 3"
+
+msgid "\\Eyeglasses 4"
+msgstr "\\Очки 4"
+
+msgid "\\Eyeglasses 5"
+msgstr "\\Очки 5"
+
+msgid "\\Face 1"
+msgstr "Лицо 1"
+
+msgid "\\Face 2"
+msgstr "\\Лицо 4"
+
+msgid "\\Face 3"
+msgstr "\\Лицо 3"
+
+msgid "\\Face 4"
+msgstr "\\Лицо 4"
+
+msgid "\\Green flags"
+msgstr "\\Зеленый флаг"
+
+msgid "\\New player name"
+msgstr "\\Новое имя"
+
+msgid "\\No eyeglasses"
+msgstr "\\Без очков"
+
+msgid "\\Raise the pencil"
+msgstr "\\Поднять перо"
+
+msgid "\\Red flags"
+msgstr "\\Красный флаг"
+
+msgid "\\Return to COLOBOT"
+msgstr "\\Вернуться в COLOBOT"
+
+msgid "\\SatCom on standby"
+msgstr "\\SatCom ждет"
+
+msgid "\\Start recording"
+msgstr "\\Начать запись"
+
+msgid "\\Stop recording"
+msgstr "\\Остановить запись"
+
+msgid "\\Turn left"
+msgstr "\\Повернуть налево"
+
+msgid "\\Turn right"
+msgstr "\\Повернуть направо"
+
+msgid "\\Use the black pencil"
+msgstr "\\Использовать черное перо"
+
+msgid "\\Use the blue pencil"
+msgstr "\\Использовать синее перо"
+
+msgid "\\Use the brown pencil"
+msgstr "Использовать коричневое перо"
+
+msgid "\\Use the green pencil"
+msgstr "\\Использовать зеленое перо"
+
+msgid "\\Use the orange pencil"
+msgstr "\\Использовать оранжевое перо"
+
+msgid "\\Use the purple pencil"
+msgstr ""
+
+msgid "\\Use the red pencil"
+msgstr "\\Использовать красное перо"
+
+msgid "\\Use the yellow pencil"
+msgstr "\\Использовать желтое перо"
+
+msgid "\\Violet flags"
+msgstr "\\Фиолетовый флаг"
+
+msgid "\\Yellow flags"
+msgstr "\\Желтый флаг"
+
+msgid "\\b;Aliens\n"
+msgstr "\\b;Чужаки\n"
+
+msgid "\\b;Buildings\n"
+msgstr "\\b;Здания\n"
+
+msgid "\\b;Error\n"
+msgstr "\\b;Ошибка\n"
+
+msgid "\\b;List of objects\n"
+msgstr "\\b;Список объектов\n"
+
+msgid "\\b;Moveable objects\n"
+msgstr "\\b;Подвижные объекты\n"
+
+msgid "\\b;Robots\n"
+msgstr "\\b;Роботы\n"
+
+msgid "\\c; (none)\\n;\n"
+msgstr "\\c; (нет)\\n;\n"
+
+msgid "action;"
+msgstr "действие"
+
+msgid "away;"
+msgstr "дальше"
+
+msgid "camera;"
+msgstr "камера"
+
+msgid "cbot;"
+msgstr "cobt"
+
+msgid "desel;"
+msgstr "отмена"
+
+msgid "down;"
+msgstr "вниз"
+
+msgid "gdown;"
+msgstr "вниз"
+
+msgid "gup;"
+msgstr "вверх"
+
+msgid "help;"
+msgstr "помощь"
+
+msgid "human;"
+msgstr "человек"
+
+msgid "left;"
+msgstr "влево"
+
+msgid "near;"
+msgstr "ближе"
+
+msgid "next;"
+msgstr "следующий"
+
+msgid "prog;"
+msgstr "прог."
+
+msgid "quit;"
+msgstr "выйти"
+
+msgid "right;"
+msgstr "вправо"
+
+msgid "speed10;"
+msgstr "скорость10"
+
+msgid "speed15;"
+msgstr "скорость15"
+
+msgid "speed20;"
+msgstr "скорость20"
+
+msgid "up;"
+msgstr "вверх"
+
+msgid "visit;"
+msgstr "посетить"
+
+msgid "www.epsitec.com"
+msgstr "www.epsitec.com"
diff --git a/src/CBot/CBot.cpp b/src/CBot/CBot.cpp
index 513b803..403be6e 100644
--- a/src/CBot/CBot.cpp
+++ b/src/CBot/CBot.cpp
@@ -33,6 +33,9 @@
#include "CBot.h"
+#include <cassert>
+
+
CBotInstr::CBotInstr()
{
name = "CBotInstr";
@@ -285,7 +288,7 @@ CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
bool CBotInstr::Execute(CBotStack* &pj)
{
CBotString ClassManquante = name;
- ASM_TRAP(); // should never go through this routine
+ assert(0); // should never go through this routine
// but use the routines of the subclasses
return false;
}
@@ -300,26 +303,26 @@ bool CBotInstr::Execute(CBotStack* &pj, CBotVar* pVar)
void CBotInstr::RestoreState(CBotStack* &pj, bool bMain)
{
CBotString ClassManquante = name;
- ASM_TRAP(); // should never go through this routine
+ assert(0); // should never go through this routine
// but use the routines of the subclasses
}
bool CBotInstr::ExecuteVar(CBotVar* &pVar, CBotCStack* &pile)
{
- ASM_TRAP(); // dad do not know, see the girls
+ assert(0); // dad do not know, see the girls
return false;
}
bool CBotInstr::ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prevToken, bool bStep, bool bExtend)
{
- ASM_TRAP(); // dad do not know, see the girls
+ assert(0); // dad do not know, see the girls
return false;
}
void CBotInstr::RestoreStateVar(CBotStack* &pile, bool bMain)
{
- ASM_TRAP(); // dad do not know, see the girls
+ assert(0); // dad do not know, see the girls
}
// this routine is defined only for the subclass CBotCase
@@ -531,7 +534,7 @@ void CBotLeftExprVar::RestoreState(CBotStack* &pj, bool bMain)
CBotVar* var1;
var1 = pj->FindVar(m_token.GetString());
- if (var1 == NULL) ASM_TRAP();
+ if (var1 == NULL) assert(0);
var1->SetUniqNum(m_nIdent); // with the unique identifier
}
@@ -1747,7 +1750,7 @@ bool CBotExpression::Execute(CBotStack* &pj)
pile2->SetVar(result);
break;
default:
- ASM_TRAP();
+ assert(0);
}
if (!IsInit)
pile2->SetError(TX_NOTINIT, m_leftop->GetToken());
@@ -2270,7 +2273,7 @@ CBotIndexExpr::~CBotIndexExpr()
bool CBotIndexExpr::ExecuteVar(CBotVar* &pVar, CBotCStack* &pile)
{
if (pVar->GetType(1) != CBotTypArrayPointer)
- ASM_TRAP();
+ assert(0);
pVar = (static_cast<CBotVarArray*>(pVar))->GetItem(0, false); // at compile time makes the element [0]
if (pVar == NULL)
@@ -2291,7 +2294,7 @@ bool CBotIndexExpr::ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prev
CBotStack* pj = pile;
if (pVar->GetType(1) != CBotTypArrayPointer)
- ASM_TRAP();
+ assert(0);
pile = pile->AddStack();
@@ -2372,7 +2375,7 @@ void CBotFieldExpr::SetUniqNum(int num)
bool CBotFieldExpr::ExecuteVar(CBotVar* &pVar, CBotCStack* &pile)
{
if (pVar->GetType(1) != CBotTypPointer)
- ASM_TRAP();
+ assert(0);
pVar = pVar->GetItemRef(m_nIdent);
if (pVar == NULL)
@@ -2395,7 +2398,7 @@ bool CBotFieldExpr::ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prev
if (pVar->GetType(1) != CBotTypPointer)
- ASM_TRAP();
+ assert(0);
CBotVarClass* pItem = pVar->GetPointer();
if (pItem == NULL)
@@ -2648,7 +2651,7 @@ bool CBotLeftExpr::ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prevT
if (pVar == NULL)
{
#ifdef _DEBUG
- ASM_TRAP();
+ assert(0);
#endif
pile->SetError(2, &m_token);
return false;
@@ -3289,7 +3292,7 @@ bool CBotExprVar::ExecuteVar(CBotVar* &pVar, CBotStack* &pj, CBotToken* prevToke
if (pVar == NULL)
{
#ifdef _DEBUG
- ASM_TRAP();
+ assert(0);
#endif
pj->SetError(1, &m_token);
return false;
diff --git a/src/CBot/CBot.h b/src/CBot/CBot.h
index 8313252..df6614e 100644
--- a/src/CBot/CBot.h
+++ b/src/CBot/CBot.h
@@ -32,13 +32,6 @@
#define EOX (reinterpret_cast<CBotStack*>(-1)) /// \def tag special condition
-// fix for MSVC instruction __asm int 3 (setting a trap)
-#if defined(__MINGW32__) || defined(__GNUC__)
-#define ASM_TRAP() asm("int $3");
-#else
-#define ASM_TRAP() __asm int 3;
-#endif
-
/////////////////////////////////////////////////////////////////////
// forward declaration
diff --git a/src/CBot/CBotFunction.cpp b/src/CBot/CBotFunction.cpp
index 862554e..e6aa2c9 100644
--- a/src/CBot/CBotFunction.cpp
+++ b/src/CBot/CBotFunction.cpp
@@ -20,6 +20,9 @@
#include "CBot.h"
+#include <cassert>
+
+
// various constructors / destructors
// \TODO translation:to liberate all according to esteblished tree
// pour libérer tout selon l'arbre établi
@@ -1046,7 +1049,7 @@ bool CBotDefParam::Execute(CBotVar** ppVars, CBotStack* &pj)
}
break;
default:
- ASM_TRAP();
+ assert(0);
}
}
newvar->SetUniqNum(p->m_nIdent);
diff --git a/src/CBot/CBotStack.cpp b/src/CBot/CBotStack.cpp
index 086442d..1679e5e 100644
--- a/src/CBot/CBotStack.cpp
+++ b/src/CBot/CBotStack.cpp
@@ -18,6 +18,8 @@
#include "CBot.h"
+
+#include <cassert>
#include <cstdlib>
#include <cstring>
@@ -80,12 +82,12 @@ CBotStack* CBotStack::FirstStack()
CBotStack::CBotStack(CBotStack* ppapa)
{
// constructor must exist or the destructor is never called!
- ASM_TRAP();
+ assert(0);
}
CBotStack::~CBotStack()
{
- ASM_TRAP(); // use Delete () instead
+ assert(0); // use Delete () instead
}
void CBotStack::Delete()
@@ -693,7 +695,7 @@ void CBotStack::AddVar(CBotVar* pVar)
*pp = pVar; // added after
#ifdef _DEBUG
- if ( pVar->GetUniqNum() == 0 ) ASM_TRAP();
+ if ( pVar->GetUniqNum() == 0 ) assert(0);
#endif
}
@@ -1091,7 +1093,7 @@ bool CBotVar::RestoreState(FILE* pf, CBotVar* &pVar)
}
break;
default:
- ASM_TRAP();
+ assert(0);
}
if ( pPrev != NULL ) pPrev->m_next = pNew;
@@ -1388,7 +1390,7 @@ void CBotCStack::AddVar(CBotVar* pVar)
*pp = pVar; // added after
#ifdef _DEBUG
- if ( pVar->GetUniqNum() == 0 ) ASM_TRAP();
+ if ( pVar->GetUniqNum() == 0 ) assert(0);
#endif
}
diff --git a/src/CBot/CBotTwoOpExpr.cpp b/src/CBot/CBotTwoOpExpr.cpp
index 6a0d636..4d4add8 100644
--- a/src/CBot/CBotTwoOpExpr.cpp
+++ b/src/CBot/CBotTwoOpExpr.cpp
@@ -20,6 +20,8 @@
#include "CBot.h"
+#include <cassert>
+
// various constructors
CBotTwoOpExpr::CBotTwoOpExpr()
@@ -466,7 +468,7 @@ bool CBotTwoOpExpr::Execute(CBotStack* &pStack)
if ( !IsNan(left, right, &err) ) result->SL(left , right);
break;
default:
- ASM_TRAP();
+ assert(0);
}
delete temp;
diff --git a/src/CBot/CBotVar.cpp b/src/CBot/CBotVar.cpp
index ad3708d..b84006f 100644
--- a/src/CBot/CBotVar.cpp
+++ b/src/CBot/CBotVar.cpp
@@ -21,8 +21,10 @@
// it never creates an instance of the class mother CBotVar
#include "CBot.h"
-#include <math.h>
-#include <stdio.h>
+
+#include <cassert>
+#include <cmath>
+#include <cstdio>
long CBotVar::m_identcpt = 0;
@@ -124,7 +126,7 @@ void CBotVarClass::InitCBotVarClass( const CBotToken* name, CBotTypResult& type
!type.Eq(CBotTypIntrinsic) && // by convenience there accepts these types
!type.Eq(CBotTypPointer) &&
!type.Eq(CBotTypArrayPointer) &&
- !type.Eq(CBotTypArrayBody)) ASM_TRAP();
+ !type.Eq(CBotTypArrayBody)) assert(0);
m_token = new CBotToken(name);
m_next = NULL;
@@ -169,7 +171,7 @@ void CBotVarClass::InitCBotVarClass( const CBotToken* name, CBotTypResult& type
CBotVarClass::~CBotVarClass( )
{
if ( m_CptUse != 0 )
- ASM_TRAP();
+ assert(0);
if ( m_pParent ) delete m_pParent;
m_pParent = NULL;
@@ -242,7 +244,7 @@ void CBotVar::SetUniqNum(long n)
{
m_ident = n;
- if ( n == 0 ) ASM_TRAP();
+ if ( n == 0 ) assert(0);
}
long CBotVar::NextUniqNum()
@@ -267,7 +269,7 @@ bool CBotVar::Save1State(FILE* pf)
// this routine "virtual" must never be called,
// there must be a routine for each of the subclasses (CBotVarInt, CBotVarFloat, etc)
// ( see the type in m_type )
- ASM_TRAP();
+ assert(0);
return false;
}
@@ -335,7 +337,7 @@ CBotVar* CBotVar::Create(const CBotToken* name, CBotTypResult type)
}
}
- ASM_TRAP();
+ assert(0);
return NULL;
}
@@ -406,7 +408,7 @@ CBotVar* CBotVar::Create( const char* n, CBotTypResult type)
}
}
- ASM_TRAP();
+ assert(0);
return NULL;
}
@@ -519,25 +521,25 @@ CBotToken* CBotVar::GetToken()
CBotVar* CBotVar::GetItem(const char* name)
{
- ASM_TRAP();
+ assert(0);
return NULL;
}
CBotVar* CBotVar::GetItemRef(int nIdent)
{
- ASM_TRAP();
+ assert(0);
return NULL;
}
CBotVar* CBotVar::GetItemList()
{
- ASM_TRAP();
+ assert(0);
return NULL;
}
CBotVar* CBotVar::GetItem(int row, bool bGrow)
{
- ASM_TRAP();
+ assert(0);
return NULL;
}
@@ -617,7 +619,7 @@ void CBotVar::SetVal(CBotVar* var)
}
break;
default:
- ASM_TRAP();
+ assert(0);
}
m_binit = var->m_binit; // copie l'état nan s'il y a
@@ -651,12 +653,12 @@ int CBotVar::GetPrivate()
void CBotVar::SetPointer(CBotVar* pVarClass)
{
- ASM_TRAP();
+ assert(0);
}
CBotVarClass* CBotVar::GetPointer()
{
- ASM_TRAP();
+ assert(0);
return NULL;
}
@@ -665,167 +667,167 @@ CBotVarClass* CBotVar::GetPointer()
int CBotVar::GetValInt()
{
- ASM_TRAP();
+ assert(0);
return 0;
}
float CBotVar::GetValFloat()
{
- ASM_TRAP();
+ assert(0);
return 0;
}
void CBotVar::SetValInt(int c, const char* s)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::SetValFloat(float c)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Mul(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Power(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
int CBotVar::Div(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return 0;
}
int CBotVar::Modulo(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return 0;
}
void CBotVar::Add(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Sub(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
bool CBotVar::Lo(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return false;
}
bool CBotVar::Hi(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return false;
}
bool CBotVar::Ls(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return false;
}
bool CBotVar::Hs(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return false;
}
bool CBotVar::Eq(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return false;
}
bool CBotVar::Ne(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
return false;
}
void CBotVar::And(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Or(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::XOr(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::ASR(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::SR(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::SL(CBotVar* left, CBotVar* right)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Neg()
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Not()
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Inc()
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Dec()
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::Copy(CBotVar* pSrc, bool bName)
{
- ASM_TRAP();
+ assert(0);
}
void CBotVar::SetValString(const char* p)
{
- ASM_TRAP();
+ assert(0);
}
CBotString CBotVar::GetValString()
{
- ASM_TRAP();
+ assert(0);
return CBotString();
}
void CBotVar::SetClass(CBotClass* pClass)
{
- ASM_TRAP();
+ assert(0);
}
CBotClass* CBotVar::GetClass()
{
- ASM_TRAP();
+ assert(0);
return NULL;
}
@@ -1398,7 +1400,7 @@ void CBotVarClass::Copy(CBotVar* pSrc, bool bName)
pSrc = pSrc->GetPointer(); // if source given by a pointer
if ( pSrc->GetType() != CBotTypClass )
- ASM_TRAP();
+ assert(0);
CBotVarClass* p = static_cast<CBotVarClass*>(pSrc);
@@ -1410,7 +1412,7 @@ void CBotVarClass::Copy(CBotVar* pSrc, bool bName)
m_pClass = p->m_pClass;
if ( p->m_pParent )
{
- ASM_TRAP(); // "que faire du pParent";
+ assert(0); // "que faire du pParent";
}
// m_next = NULL;
@@ -1768,7 +1770,7 @@ bool CBotVarClass::Ne(CBotVar* left, CBotVar* right)
CBotVarArray::CBotVarArray(const CBotToken* name, CBotTypResult& type )
{
if ( !type.Eq(CBotTypArrayPointer) &&
- !type.Eq(CBotTypArrayBody)) ASM_TRAP();
+ !type.Eq(CBotTypArrayBody)) assert(0);
m_token = new CBotToken(name);
m_next = NULL;
@@ -1791,7 +1793,7 @@ CBotVarArray::~CBotVarArray()
void CBotVarArray::Copy(CBotVar* pSrc, bool bName)
{
if ( pSrc->GetType() != CBotTypArrayPointer )
- ASM_TRAP();
+ assert(0);
CBotVarArray* p = static_cast<CBotVarArray*>(pSrc);
@@ -1825,7 +1827,7 @@ void CBotVarArray::SetPointer(CBotVar* pVarClass)
if ( !pVarClass->m_type.Eq(CBotTypClass) &&
!pVarClass->m_type.Eq(CBotTypArrayBody))
- ASM_TRAP();
+ assert(0);
(static_cast<CBotVarClass*>(pVarClass))->IncrementUse(); // incement the reference
}
@@ -1882,7 +1884,7 @@ CBotVarPointer::CBotVarPointer(const CBotToken* name, CBotTypResult& type )
if ( !type.Eq(CBotTypPointer) &&
!type.Eq(CBotTypNullPointer) &&
!type.Eq(CBotTypClass) && // for convenience accepts Class and Intrinsic
- !type.Eq(CBotTypIntrinsic) ) ASM_TRAP();
+ !type.Eq(CBotTypIntrinsic) ) assert(0);
m_token = new CBotToken(name);
m_next = NULL;
@@ -1965,7 +1967,7 @@ void CBotVarPointer::SetPointer(CBotVar* pVarClass)
// if ( pVarClass->GetType() != CBotTypClass )
if ( !pVarClass->m_type.Eq(CBotTypClass) )
- ASM_TRAP();
+ assert(0);
(static_cast<CBotVarClass*>(pVarClass))->IncrementUse(); // increment the reference
m_pClass = (static_cast<CBotVarClass*>(pVarClass))->m_pClass;
@@ -2034,7 +2036,7 @@ void CBotVarPointer::Copy(CBotVar* pSrc, bool bName)
{
if ( pSrc->GetType() != CBotTypPointer &&
pSrc->GetType() != CBotTypNullPointer)
- ASM_TRAP();
+ assert(0);
CBotVarPointer* p = static_cast<CBotVarPointer*>(pSrc);
@@ -2162,11 +2164,11 @@ int CBotTypResult::GetType(int mode) const
m_type == CBotTypClass ||
m_type == CBotTypIntrinsic )
- if ( m_pClass == NULL ) ASM_TRAP();
+ if ( m_pClass == NULL ) assert(0);
if ( m_type == CBotTypArrayPointer )
- if ( m_pNext == NULL ) ASM_TRAP();
+ if ( m_pNext == NULL ) assert(0);
#endif
if ( mode == 3 && m_type == CBotTypNullPointer ) return CBotTypPointer;
return m_type;
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2fab853..ef59973 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -56,21 +56,13 @@ if(PLATFORM_WINDOWS)
set(RES_FILES "../desktop/colobot.rc")
endif()
-# Platform-dependent implementation of system.h
-if(PLATFORM_WINDOWS)
- set(SYSTEM_CPP_MODULE "system_windows.cpp")
-elseif(PLATFORM_LINUX)
- set(SYSTEM_CPP_MODULE "system_linux.cpp")
-else()
- set(SYSTEM_CPP_MODULE "system_other.cpp")
-endif()
-
# Source files
set(SOURCES
app/app.cpp
app/main.cpp
app/system.cpp
app/${SYSTEM_CPP_MODULE}
+app/system_other.cpp
common/event.cpp
common/image.cpp
common/iman.cpp
@@ -237,5 +229,6 @@ add_executable(colobot ${SOURCES})
target_link_libraries(colobot ${LIBS})
install(TARGETS colobot RUNTIME DESTINATION ${COLOBOT_INSTALL_BIN_DIR})
-set_target_properties(colobot PROPERTIES INSTALL_RPATH ${COLOBOT_INSTALL_LIB_DIR})
-
+if(NOT CBOT_STATIC)
+ set_target_properties(colobot PROPERTIES INSTALL_RPATH ${COLOBOT_INSTALL_LIB_DIR})
+endif()
diff --git a/src/app/app.cpp b/src/app/app.cpp
index d2994a9..4484e2a 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -147,8 +147,8 @@ CApplication::CApplication()
m_mouseButtonsState = 0;
m_trackedKeys = 0;
- m_dataPath = COLOBOT_DEFAULT_DATADIR;
- m_langPath = COLOBOT_I18N_DIR;
+ m_dataPath = GetSystemUtils()->GetDataPath();
+ m_langPath = GetSystemUtils()->GetLangPath();
m_texPackPath = "";
m_runSceneName = "";
@@ -280,7 +280,7 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
GetLogger()->Message(" -debug modes enable debug modes (more info printed in logs; see code for reference of modes)\n");
GetLogger()->Message(" -runscene sceneNNN run given scene on start\n");
GetLogger()->Message(" -loglevel level set log level to level (one of: trace, debug, info, warn, error, none)\n");
- GetLogger()->Message(" -language lang set language (one of: en, de, fr, pl)\n");
+ GetLogger()->Message(" -language lang set language (one of: en, de, fr, pl, ru)\n");
GetLogger()->Message(" -datadir path set custom data directory path\n");
GetLogger()->Message(" -langdir path set custom language directory path\n");
GetLogger()->Message(" -texpack path set path to custom texture pack\n");
@@ -421,7 +421,10 @@ bool CApplication::Create()
return false;
}
+#if !defined(PLATFORM_MACOSX)
+ // On Mac OSX, the bundle can potentially change place, it doesn't make sense to cache it to the configuration file
GetProfile().SetLocalProfileString("Resources", "Data", m_dataPath);
+#endif
SetLanguage(m_language);
@@ -435,12 +438,16 @@ bool CApplication::Create()
m_sound->Create(true);
+#if !defined(PLATFORM_MACOSX)
+ // On Mac OSX, the bundle can potentially change place, it doesn't make sense to cache it to the configuration file
+
// Cache sound files
if (defaultValues)
{
GetProfile().SetLocalProfileString("Resources", "Sound", GetDataSubdirPath(DIR_SOUND));
GetProfile().SetLocalProfileString("Resources", "Music", GetDataSubdirPath(DIR_MUSIC));
}
+#endif
if (!m_customDataPath && GetProfile().GetLocalProfileString("Resources", "Sound", path))
{
@@ -1681,6 +1688,10 @@ char CApplication::GetLanguageChar() const
case LANGUAGE_POLISH:
langChar = 'P';
break;
+
+ case LANGUAGE_RUSSIAN:
+ langChar = 'R';
+ break;
}
return langChar;
}
@@ -1707,6 +1718,11 @@ bool CApplication::ParseLanguage(const std::string& str, Language& language)
language = LANGUAGE_POLISH;
return true;
}
+ else if (str == "ru")
+ {
+ language = LANGUAGE_RUSSIAN;
+ return true;
+ }
return false;
}
@@ -1740,6 +1756,10 @@ void CApplication::SetLanguage(Language language)
case LANGUAGE_POLISH:
locale = "pl_PL.utf8";
break;
+
+ case LANGUAGE_RUSSIAN:
+ locale = "ru_RU.utf8";
+ break;
}
if (locale.empty())
@@ -1770,6 +1790,10 @@ void CApplication::SetLanguage(Language language)
{
m_language = LANGUAGE_POLISH;
}
+ else if (strncmp(envLang,"ru",2) == 0)
+ {
+ m_language = LANGUAGE_RUSSIAN;
+ }
else
{
GetLogger()->Warn("Enviromnent locale ('%s') is not supported, setting default language\n", envLang);
diff --git a/src/app/system.cpp b/src/app/system.cpp
index 2eb68ba..eaa9e4c 100644
--- a/src/app/system.cpp
+++ b/src/app/system.cpp
@@ -25,6 +25,8 @@
#include "app/system_windows.h"
#elif defined(PLATFORM_LINUX)
#include "app/system_linux.h"
+#elif defined(PLATFORM_MACOSX)
+ #include "app/system_macosx.h"
#else
#include "app/system_other.h"
#endif
@@ -48,6 +50,8 @@ CSystemUtils* CSystemUtils::Create()
m_instance = new CSystemUtilsWindows();
#elif defined(PLATFORM_LINUX)
m_instance = new CSystemUtilsLinux();
+#elif defined(PLATFORM_MACOSX)
+ m_instance = new CSystemUtilsMacOSX();
#else
m_instance = new CSystemUtilsOther();
#endif
@@ -188,6 +192,16 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte
return result;
}
+std::string CSystemUtils::GetDataPath()
+{
+ return COLOBOT_DEFAULT_DATADIR;
+}
+
+std::string CSystemUtils::GetLangPath()
+{
+ return COLOBOT_I18N_DIR;
+}
+
std::string CSystemUtils::GetProfileFileLocation()
{
return std::string("colobot.ini");
diff --git a/src/app/system.h b/src/app/system.h
index d22a519..c2125fe 100644
--- a/src/app/system.h
+++ b/src/app/system.h
@@ -130,6 +130,12 @@ public:
/** The difference is \a after - \a before. */
virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0;
+ //! Returns the data path (containing textures, levels, helpfiles, etc)
+ virtual std::string GetDataPath();
+
+ //! Returns the translations path
+ virtual std::string GetLangPath();
+
//! Returns the profile (colobot.ini) file location
virtual std::string GetProfileFileLocation();
diff --git a/src/app/system_macosx.cpp b/src/app/system_macosx.cpp
new file mode 100644
index 0000000..68f5c79
--- /dev/null
+++ b/src/app/system_macosx.cpp
@@ -0,0 +1,116 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
+// * Copyright (C) 2013, Polish Portal of Colobot (PPC)
+// *
+// * 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, either version 3 of the License, or
+// * (at your option) any later version.
+// *
+// * 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, see http://www.gnu.org/licenses/.
+
+#include "app/system_macosx.h"
+
+#include "common/logger.h"
+
+#include <stdlib.h>
+
+// MacOS-specific headers
+#include <CoreFoundation/CFBundle.h>
+#include <CoreServices/CoreServices.h>
+
+#include <boost/filesystem.hpp>
+
+inline std::string CFStringRefToStdString(CFStringRef str) {
+
+ std::string stdstr;
+
+ char *fullPath;
+ CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
+
+ // 1st try for English system
+ fullPath = const_cast<char*>(CFStringGetCStringPtr(str, encodingMethod));
+ if( fullPath == NULL )
+ {
+ // 2nd try for Japanese system
+ encodingMethod = kCFStringEncodingUTF8;
+ fullPath = const_cast<char*>(CFStringGetCStringPtr(str, encodingMethod));
+ }
+
+ // for safer operation.
+ if( fullPath == NULL )
+ {
+ CFIndex length = CFStringGetLength(str);
+ fullPath = static_cast<char *>(malloc( length + 1 ));
+
+ // TODO: Check boolean result of that conversion
+ CFStringGetCString(str, fullPath, length, kCFStringEncodingUTF8 );
+
+ stdstr = fullPath;
+
+ free( fullPath );
+ }
+ else
+ stdstr = fullPath;
+
+ return stdstr;
+}
+
+void CSystemUtilsMacOSX::Init()
+{
+ // These functions are a deprecated way to get the 'Application Support' folder, but they do work, in plain C++
+ FSRef ref;
+ OSType folderType = kApplicationSupportFolderType;
+ char path[PATH_MAX];
+ FSFindFolder( kUserDomain, folderType, kCreateFolder, &ref );
+ FSRefMakePath( &ref, reinterpret_cast<UInt8*>(&path), PATH_MAX );
+
+ m_ASPath = path;
+ m_ASPath.append("/colobot/");
+
+ // Make sure the directory exists
+ boost::filesystem::create_directories(m_ASPath.c_str());
+
+ // Get the Resources bundle URL
+ CFBundleRef mainBundle = CFBundleGetMainBundle();
+ CFURLRef resourcesURL = CFBundleCopyBundleURL(mainBundle);
+ CFStringRef str = CFURLCopyFileSystemPath( resourcesURL, kCFURLPOSIXPathStyle );
+ CFRelease(resourcesURL);
+
+ m_dataPath = CFStringRefToStdString(str);
+ m_dataPath += "/Contents/Resources";
+}
+
+std::string CSystemUtilsMacOSX::GetDataPath()
+{
+ return m_dataPath;
+}
+
+std::string CSystemUtilsMacOSX::GetLangPath()
+{
+ return m_dataPath + "/i18n";
+}
+
+std::string CSystemUtilsMacOSX::GetProfileFileLocation()
+{
+ std::string profileFile = m_ASPath + "/colobot.ini";
+
+ GetLogger()->Trace("Profile file is %s\n", profileFile.c_str());
+ return profileFile;
+}
+
+std::string CSystemUtilsMacOSX::GetSavegameDirectoryLocation()
+{
+ std::string savegameDir = m_ASPath + "/savegame";
+ boost::filesystem::create_directories(savegameDir.c_str());
+ GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str());
+
+ return savegameDir;
+}
+
diff --git a/src/app/system_macosx.h b/src/app/system_macosx.h
new file mode 100644
index 0000000..b6a044b
--- /dev/null
+++ b/src/app/system_macosx.h
@@ -0,0 +1,39 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
+// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
+// *
+// * 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, either version 3 of the License, or
+// * (at your option) any later version.
+// *
+// * 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, see http://www.gnu.org/licenses/.
+
+/**
+ * \file app/system_macosx.h
+ * \brief MacOSX-specific implementation of system functions
+ */
+
+#include "app/system.h"
+#include "app/system_other.h"
+
+class CSystemUtilsMacOSX : public CSystemUtilsOther
+{
+public:
+ virtual void Init() override;
+
+ virtual std::string GetDataPath() override;
+ virtual std::string GetLangPath() override;
+ virtual std::string GetProfileFileLocation() override;
+ virtual std::string GetSavegameDirectoryLocation() override;
+private:
+ std::string m_ASPath;
+ std::string m_dataPath;
+};
+
diff --git a/src/common/config.h.cmake b/src/common/config.h.cmake
index 2f403fa..63cd93b 100644
--- a/src/common/config.h.cmake
+++ b/src/common/config.h.cmake
@@ -6,6 +6,11 @@
#cmakedefine PLATFORM_MACOSX @PLATFORM_MACOSX@
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
+#ifdef PLATFORM_MACOSX
+// Assume we have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework
+#define HAVE_CFLOCALECOPYCURRENT 1
+#endif
+
#cmakedefine GLEW_STATIC
#cmakedefine OPENAL_SOUND
diff --git a/src/common/global.h b/src/common/global.h
index a322057..da62bac 100644
--- a/src/common/global.h
+++ b/src/common/global.h
@@ -173,7 +173,8 @@ enum Language
LANGUAGE_ENGLISH = 0,
LANGUAGE_FRENCH = 1,
LANGUAGE_GERMAN = 2,
- LANGUAGE_POLISH = 3
+ LANGUAGE_POLISH = 3,
+ LANGUAGE_RUSSIAN = 4
};
/**
diff --git a/src/common/image.cpp b/src/common/image.cpp
index a9587ef..8a876e3 100644
--- a/src/common/image.cpp
+++ b/src/common/image.cpp
@@ -218,15 +218,30 @@ void CImage::PadToNearestPowerOfTwo()
int w = Math::NextPowerOfTwo(m_data->surface->w);
int h = Math::NextPowerOfTwo(m_data->surface->h);
+ BlitToNewRGBASurface(w, h);
+}
+
+void CImage::ConvertToRGBA()
+{
+ assert(m_data != nullptr);
+
+ int w = m_data->surface->w;
+ int h = m_data->surface->h;
+
+ BlitToNewRGBASurface(w, h);
+}
+
+void CImage::BlitToNewRGBASurface(int width, int height)
+{
m_data->surface->flags &= (~SDL_SRCALPHA);
- SDL_Surface* resizedSurface = SDL_CreateRGBSurface(0, w, h, 32, 0x00ff0000, 0x0000ff00,
- 0x000000ff, 0xff000000);
- assert(resizedSurface != NULL);
- SDL_BlitSurface(m_data->surface, NULL, resizedSurface, NULL);
+ SDL_Surface* convertedSurface = SDL_CreateRGBSurface(0, width, height, 32, 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0xFF000000);
+ assert(convertedSurface != nullptr);
+ SDL_BlitSurface(m_data->surface, nullptr, convertedSurface, nullptr);
SDL_FreeSurface(m_data->surface);
- m_data->surface = resizedSurface;
+ m_data->surface = convertedSurface;
}
/**
@@ -376,6 +391,11 @@ bool CImage::Load(const std::string& fileName)
return false;
}
+ if (m_data->surface->format->palette != nullptr)
+ {
+ ConvertToRGBA();
+ }
+
return true;
}
diff --git a/src/common/image.h b/src/common/image.h
index 44aedf1..31dab2d 100644
--- a/src/common/image.h
+++ b/src/common/image.h
@@ -97,6 +97,9 @@ public:
//! Pads the image to nearest power of 2 dimensions
void PadToNearestPowerOfTwo();
+ //! Convert the image to RGBA surface
+ void ConvertToRGBA();
+
//! Loads an image from the specified file
bool Load(const std::string &fileName);
@@ -107,6 +110,9 @@ public:
std::string GetError();
private:
+ //! Blit to new RGBA surface with given size
+ void BlitToNewRGBASurface(int width, int height);
+
//! Last encountered error
std::string m_error;
//! Image data
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 6fe85d3..26fa827 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -3138,9 +3138,9 @@ void CRobotMain::CreateTooltip(Math::Point pos, const char* text)
start, end);
start.x -= 0.010f;
- start.y -= 0.002f;
+ start.y -= 0.006f;
end.x += 0.010f;
- end.y += 0.004f; // ch'tite (?) margin
+ end.y += 0.008f; // small'ish margin
pos.x = start.x;
pos.y = start.y;
diff --git a/src/ui/control.cpp b/src/ui/control.cpp
index 7c77c95..bed84dd 100644
--- a/src/ui/control.cpp
+++ b/src/ui/control.cpp
@@ -57,7 +57,7 @@ CControl::~CControl()
bool CControl::Create(Math::Point pos, Math::Point dim, int icon, EventType eventType)
{
- char text[100];
+ char text[200];
std::string str_text;
if ( eventType == EVENT_NULL )
diff --git a/src/ui/window.cpp b/src/ui/window.cpp
index 8005939..6e082e6 100644
--- a/src/ui/window.cpp
+++ b/src/ui/window.cpp
@@ -1191,8 +1191,8 @@ void CWindow::DrawVertex(Math::Point pos, Math::Point dim, int icon)
else if ( icon == 1 )
{
m_engine->SetTexture("button1.png");
- m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
- uv1.x = 128.0f/256.0f; // yellow tooltip
+ m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
+ uv1.x = 128.0f/256.0f; // white tooltip
uv1.y = 0.0f/256.0f;
uv2.x = 224.0f/256.0f;
uv2.y = 16.0f/256.0f;
diff --git a/test/envs/opengl/CMakeLists.txt b/test/envs/opengl/CMakeLists.txt
index 2855318..a78962c 100644
--- a/test/envs/opengl/CMakeLists.txt
+++ b/test/envs/opengl/CMakeLists.txt
@@ -2,15 +2,6 @@ set(SRC_DIR ${colobot_SOURCE_DIR}/src)
configure_file(${SRC_DIR}/common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
-# Platform-dependent implementation of system.h
-if(PLATFORM_WINDOWS)
- set(SYSTEM_CPP_MODULE "system_windows.cpp")
-elseif(PLATFORM_LINUX)
- set(SYSTEM_CPP_MODULE "system_linux.cpp")
-else()
- set(SYSTEM_CPP_MODULE "system_other.cpp")
-endif()
-
set(TEXTURE_SOURCES
${SRC_DIR}/graphics/core/color.cpp
${SRC_DIR}/graphics/opengl/gldevice.cpp
@@ -28,6 +19,7 @@ ${SRC_DIR}/common/image.cpp
${SRC_DIR}/common/stringutils.cpp
${SRC_DIR}/app/system.cpp
${SRC_DIR}/app/${SYSTEM_CPP_MODULE}
+${SRC_DIR}/app/system_other.cpp
model_test.cpp
)
@@ -38,6 +30,7 @@ ${SRC_DIR}/common/logger.cpp
${SRC_DIR}/common/image.cpp
${SRC_DIR}/app/system.cpp
${SRC_DIR}/app/${SYSTEM_CPP_MODULE}
+${SRC_DIR}/app/system_other.cpp
transform_test.cpp
)
@@ -48,6 +41,7 @@ ${SRC_DIR}/common/logger.cpp
${SRC_DIR}/common/image.cpp
${SRC_DIR}/app/system.cpp
${SRC_DIR}/app/${SYSTEM_CPP_MODULE}
+${SRC_DIR}/app/system_other.cpp
light_test.cpp
)
@@ -68,6 +62,7 @@ ${SDLIMAGE_LIBRARY}
${OPENGL_LIBRARY}
${GLEW_LIBRARY}
${PNG_LIBRARIES}
+${Boost_LIBRARIES}
)
add_executable(texture_test ${TEXTURE_SOURCES})
diff --git a/test/envs/opengl/README.txt b/test/envs/opengl/README.txt
index c618415..f64f185 100644
--- a/test/envs/opengl/README.txt
+++ b/test/envs/opengl/README.txt
@@ -1,7 +1,7 @@
Test programs for OpenGL engine:
- texture_test -> multitexturing test with 2 textures (included as files: ./tex1.png, ./tex2.png)
- model_test -> simple model viewer to test model loading
- usage: ./model_test {dxf|mod} model_file
+ usage: ./model_test {old|new_txt|new_bin} model_file
second argument is the loaded format (DXF or Colobot .mod files)
requires ./tex folder (or symlink) with Colobot textures
viewer is controlled from keyboard - the bindings can be found in code
diff --git a/test/envs/opengl/light_test.cpp b/test/envs/opengl/light_test.cpp
index 0baf6d3..227ca2a 100644
--- a/test/envs/opengl/light_test.cpp
+++ b/test/envs/opengl/light_test.cpp
@@ -365,6 +365,9 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
{
CLogger logger;
+ CSystemUtils* systemUtils = CSystemUtils::Create(); // platform-specific utils
+ systemUtils->Init();
+
PREV_TIME = GetSystemUtils()->CreateTimeStamp();
CURR_TIME = GetSystemUtils()->CreateTimeStamp();
diff --git a/test/envs/opengl/model_test.cpp b/test/envs/opengl/model_test.cpp
index 1dda69c..fa4042c 100644
--- a/test/envs/opengl/model_test.cpp
+++ b/test/envs/opengl/model_test.cpp
@@ -265,6 +265,9 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
{
CLogger logger;
+ CSystemUtils* systemUtils = CSystemUtils::Create(); // platform-specific utils
+ systemUtils->Init();
+
PREV_TIME = GetSystemUtils()->CreateTimeStamp();
CURR_TIME = GetSystemUtils()->CreateTimeStamp();
@@ -273,7 +276,7 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
if (argc != 3)
{
- std::cerr << "Usage: " << argv[0] << "{old|new_txt|new_bin} model_file" << std::endl;
+ std::cerr << "Usage: " << argv[0] << " {old|new_txt|new_bin} model_file" << std::endl;
return 1;
}
diff --git a/test/envs/opengl/transform_test.cpp b/test/envs/opengl/transform_test.cpp
index 1d5ccf1..58d8e9e 100644
--- a/test/envs/opengl/transform_test.cpp
+++ b/test/envs/opengl/transform_test.cpp
@@ -243,6 +243,9 @@ int SDL_MAIN_FUNC(int argc, char *argv[])
{
CLogger logger;
+ CSystemUtils* systemUtils = CSystemUtils::Create(); // platform-specific utils
+ systemUtils->Init();
+
PREV_TIME = GetSystemUtils()->CreateTimeStamp();
CURR_TIME = GetSystemUtils()->CreateTimeStamp();
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index 1f5e1bc..38bffda 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -18,20 +18,12 @@ endif()
# Configure file
configure_file(${SRC_DIR}/common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
-# Platform-dependent implementation of system.h
-if(PLATFORM_WINDOWS)
- set(SYSTEM_CPP_MODULE "system_windows.cpp")
-elseif(PLATFORM_LINUX)
- set(SYSTEM_CPP_MODULE "system_linux.cpp")
-else()
- set(SYSTEM_CPP_MODULE "system_other.cpp")
-endif()
-
# Code sources
set(COLOBOT_SOURCES
${SRC_DIR}/app/app.cpp
${SRC_DIR}/app/system.cpp
${SRC_DIR}/app/${SYSTEM_CPP_MODULE}
+${SRC_DIR}/app/system_other.cpp
${SRC_DIR}/common/event.cpp
${SRC_DIR}/common/image.cpp
${SRC_DIR}/common/iman.cpp
diff --git a/test/unit/common/CMakeLists.txt b/test/unit/common/CMakeLists.txt
index aebf17a..cf37961 100644
--- a/test/unit/common/CMakeLists.txt
+++ b/test/unit/common/CMakeLists.txt
@@ -7,10 +7,15 @@ ${GTEST_INCLUDE_DIR}
add_executable(image_test ${SRC_DIR}/common/image.cpp image_test.cpp)
target_link_libraries(image_test ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${PNG_LIBRARIES})
+add_test(NAME image_test
+ COMMAND ${CMAKE_BINARY_DIR}/image_test ${CMAKE_SOURCE_DIR}/test/envs/opengl/tex1.png ${CMAKE_BINARY_DIR}/tex1_test.png)
file(COPY colobot.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-# add_executable(profile_test ${SRC_DIR}/common/profile.cpp ${SRC_DIR}/common/logger.cpp profile_test.cpp)
-# target_link_libraries(profile_test gtest ${Boost_LIBRARIES})
+add_executable(profile_test ${SRC_DIR}/common/profile.cpp ${SRC_DIR}/common/logger.cpp profile_test.cpp)
+set_target_properties(profile_test PROPERTIES COMPILE_DEFINITIONS "DEV_BUILD=1")
+target_link_libraries(profile_test gtest ${Boost_LIBRARIES})
-# add_test(profile_test ./profile_test)
+add_test(NAME profile_test
+ COMMAND ${CMAKE_BINARY_DIR}/profile_test
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/test/unit/ui/CMakeLists.txt b/test/unit/ui/CMakeLists.txt
index 97dd681..8086967 100644
--- a/test/unit/ui/CMakeLists.txt
+++ b/test/unit/ui/CMakeLists.txt
@@ -10,21 +10,18 @@ ${CLIPBOARD_INCLUDE_DIR}
# Platform-dependent implementation of CSystemUtils
if(PLATFORM_WINDOWS)
- set(SYSTEM_CPP_MODULE "system_windows.cpp")
elseif(PLATFORM_LINUX)
- set(SYSTEM_CPP_MODULE "system_linux.cpp")
set(ADDITIONAL_LIB "-lX11")
elseif(PLATFORM_MACOSX)
- set(SYSTEM_CPP_MODULE "system_other.cpp")
set(ADDITIONAL_LIB "${X11_X11_LIB}")
else()
- set(SYSTEM_CPP_MODULE "system_other.cpp")
set(ADDITIONAL_LIB "-lX11")
endif()
add_executable(edit_test
${SRC_DIR}/app/system.cpp
${SRC_DIR}/app/${SYSTEM_CPP_MODULE}
+${SRC_DIR}/app/system_other.cpp
${SRC_DIR}/common/event.cpp
${SRC_DIR}/common/logger.cpp
${SRC_DIR}/common/misc.cpp