Release 0.2.0-alpha: Merge branch 'dev'
commit
d9c966a95b
|
@ -0,0 +1,104 @@
|
||||||
|
name: Build
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ${{ matrix.host_os }}
|
||||||
|
container: ${{ matrix.container }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
target_os: [linux]
|
||||||
|
host_os: [ubuntu-18.04, ubuntu-20.04]
|
||||||
|
container: ['']
|
||||||
|
include:
|
||||||
|
- target_os: windows
|
||||||
|
host_os: ubuntu-latest
|
||||||
|
container: krzysh/colobot-build:latest
|
||||||
|
fail-fast: false
|
||||||
|
steps:
|
||||||
|
- name: Install Colobot dependencies
|
||||||
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools librsvg2-bin xmlstarlet
|
||||||
|
if: matrix.container == ''
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Create build directory
|
||||||
|
run: cmake -E make_directory build
|
||||||
|
- name: Run CMake (for Windows using MXE)
|
||||||
|
working-directory: build
|
||||||
|
# FIXME: without -lsetupapi linking sdl2 fails
|
||||||
|
run: /opt/mxe/usr/bin/i686-w64-mingw32.static-cmake -DCMAKE_CXX_STANDARD_LIBRARIES="-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lsetupapi" -DCMAKE_INSTALL_PREFIX=/install -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=0 -DMXE_USE_CCACHE=0 ..
|
||||||
|
if: matrix.target_os == 'windows'
|
||||||
|
- name: Run CMake (for Linux)
|
||||||
|
working-directory: build
|
||||||
|
run: cmake -DCMAKE_INSTALL_PREFIX=/install -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=1 -DDESKTOP=1 ..
|
||||||
|
if: matrix.target_os == 'linux'
|
||||||
|
- name: Build
|
||||||
|
working-directory: build
|
||||||
|
run: make -j `nproc`
|
||||||
|
- name: Install
|
||||||
|
working-directory: build
|
||||||
|
run: DESTDIR=. make install
|
||||||
|
- name: Patch library path
|
||||||
|
working-directory: build
|
||||||
|
run: patchelf --set-rpath '.' install/colobot
|
||||||
|
if: matrix.target_os == 'linux'
|
||||||
|
- name: Upload build
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{matrix.target_os}}-debug
|
||||||
|
path: build/install
|
||||||
|
if: matrix.target_os == 'windows' || matrix.host_os == 'ubuntu-18.04'
|
||||||
|
- name: Create AppImage
|
||||||
|
working-directory: build
|
||||||
|
run: |
|
||||||
|
# Download app image tool
|
||||||
|
wget -N https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
|
||||||
|
chmod +x linuxdeploy-x86_64.AppImage
|
||||||
|
./linuxdeploy-x86_64.AppImage --appimage-extract
|
||||||
|
|
||||||
|
# Create AppImage
|
||||||
|
NO_STRIP=1 ./squashfs-root/AppRun -e colobot --output appimage --appdir colobot.AppDir -d desktop/colobot.desktop -i ../desktop/colobot.svg
|
||||||
|
chmod +x Colobot-*-x86_64.AppImage
|
||||||
|
|
||||||
|
# Prepare folder for zip
|
||||||
|
mkdir -p appimage
|
||||||
|
cp -rp install/data appimage/data
|
||||||
|
cp -rp install/lang appimage/lang
|
||||||
|
cp -p Colobot-*-x86_64.AppImage appimage/colobot
|
||||||
|
if: matrix.target_os == 'linux'
|
||||||
|
- name: Upload AppImage
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: ${{matrix.target_os}}-debug-AppImage
|
||||||
|
path: build/appimage
|
||||||
|
if: matrix.target_os == 'linux' && matrix.host_os == 'ubuntu-18.04'
|
||||||
|
- name: Run tests
|
||||||
|
# TODO: Maybe run Windows tests using wine as well?
|
||||||
|
working-directory: build
|
||||||
|
run: ./colobot_ut --gtest_output=xml:gtestresults.xml
|
||||||
|
if: matrix.target_os == 'linux'
|
||||||
|
- name: Upload test results
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: Test results (${{ matrix.target_os }}, ${{ matrix.host_os }})
|
||||||
|
path: build/gtestresults.xml
|
||||||
|
if: matrix.target_os == 'linux'
|
||||||
|
doc:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install Colobot dependencies
|
||||||
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools librsvg2-bin xmlstarlet doxygen graphviz
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Create build directory
|
||||||
|
run: cmake -E make_directory build
|
||||||
|
- name: Run CMake
|
||||||
|
working-directory: build
|
||||||
|
run: cmake ..
|
||||||
|
- name: Build docs
|
||||||
|
working-directory: build
|
||||||
|
run: make doc
|
||||||
|
- name: Upload docs
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: doc
|
||||||
|
path: build/doc
|
|
@ -0,0 +1,21 @@
|
||||||
|
name: Verify pull request target
|
||||||
|
|
||||||
|
on: [pull_request_target]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check_pr_target:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Send comment if wrong pull request target
|
||||||
|
if: github.base_ref == 'master'
|
||||||
|
uses: peter-evans/create-or-update-comment@v1
|
||||||
|
with:
|
||||||
|
issue-number: ${{ github.event.number }}
|
||||||
|
body: |
|
||||||
|
Hey! This pull request targets the `master` branch. You should probably target `dev` instead. Make sure to read the [contributing guidelines](https://github.com/colobot/colobot/blob/master/CONTRIBUTING.md#submitting-pull-requests) and [edit the target branch if necessary](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/changing-the-base-branch-of-a-pull-request).
|
||||||
|
- name: Wrong pull request target
|
||||||
|
if: github.base_ref == 'master'
|
||||||
|
run: echo "This pull request targets the master branch. Please edit the pull request to target dev." && exit 1
|
||||||
|
- name: Correct pull request target
|
||||||
|
if: github.base_ref != 'master'
|
||||||
|
run: echo "This pull request targets the correct branch." && exit 0
|
|
@ -23,7 +23,7 @@ Makefile
|
||||||
/saves
|
/saves
|
||||||
|
|
||||||
# Standard build directory
|
# Standard build directory
|
||||||
/build
|
/build*
|
||||||
|
|
||||||
# Ignore KDevelop files
|
# Ignore KDevelop files
|
||||||
.kdev4
|
.kdev4
|
||||||
|
@ -39,6 +39,10 @@ CMakeLists.txt.user.*
|
||||||
# Ignore Visual Studio Code files
|
# Ignore Visual Studio Code files
|
||||||
/.vscode
|
/.vscode
|
||||||
|
|
||||||
|
# Ignore CLion files
|
||||||
|
/.idea
|
||||||
|
|
||||||
# Ignore Visual Studio files
|
# Ignore Visual Studio files
|
||||||
/CMakeSettings.json
|
/CMakeSettings.json
|
||||||
/.vs
|
/.vs
|
||||||
|
/out
|
||||||
|
|
|
@ -16,9 +16,9 @@ set(COLOBOT_VERSION_MINOR 1)
|
||||||
set(COLOBOT_VERSION_REVISION 12)
|
set(COLOBOT_VERSION_REVISION 12)
|
||||||
|
|
||||||
# Used on official releases
|
# Used on official releases
|
||||||
set(COLOBOT_VERSION_RELEASE_CODENAME "-alpha")
|
#set(COLOBOT_VERSION_RELEASE_CODENAME "-alpha")
|
||||||
# Used on unreleased, development builds
|
# Used on unreleased, development builds
|
||||||
#set(COLOBOT_VERSION_UNRELEASED "+alpha")
|
set(COLOBOT_VERSION_UNRELEASED "+alpha")
|
||||||
|
|
||||||
# Append git characteristics to version
|
# Append git characteristics to version
|
||||||
if(DEFINED COLOBOT_VERSION_UNRELEASED)
|
if(DEFINED COLOBOT_VERSION_UNRELEASED)
|
||||||
|
@ -60,6 +60,7 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
||||||
set(PLATFORM_GNU 0)
|
set(PLATFORM_GNU 0)
|
||||||
set(PLATFORM_LINUX 0)
|
set(PLATFORM_LINUX 0)
|
||||||
set(PLATFORM_MACOSX 0)
|
set(PLATFORM_MACOSX 0)
|
||||||
|
set(PLATFORM_FREEBSD 0)
|
||||||
set(PLATFORM_OTHER 0)
|
set(PLATFORM_OTHER 0)
|
||||||
|
|
||||||
# Platform-dependent implementation of system.h
|
# Platform-dependent implementation of system.h
|
||||||
|
@ -71,6 +72,7 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
||||||
set(PLATFORM_LINUX 1)
|
set(PLATFORM_LINUX 1)
|
||||||
set(PLATFORM_GNU 1)
|
set(PLATFORM_GNU 1)
|
||||||
set(PLATFORM_MACOSX 0)
|
set(PLATFORM_MACOSX 0)
|
||||||
|
set(PLATFORM_FREEBSD 0)
|
||||||
set(PLATFORM_OTHER 0)
|
set(PLATFORM_OTHER 0)
|
||||||
|
|
||||||
# Platform-dependent implementation of system.h
|
# Platform-dependent implementation of system.h
|
||||||
|
@ -82,6 +84,7 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "kFreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQ
|
||||||
set(PLATFORM_LINUX 0)
|
set(PLATFORM_LINUX 0)
|
||||||
set(PLATFORM_GNU 1)
|
set(PLATFORM_GNU 1)
|
||||||
set(PLATFORM_MACOSX 0)
|
set(PLATFORM_MACOSX 0)
|
||||||
|
set(PLATFORM_FREEBSD 0)
|
||||||
set(PLATFORM_OTHER 0)
|
set(PLATFORM_OTHER 0)
|
||||||
|
|
||||||
# Platform-dependent implementation of system.h
|
# Platform-dependent implementation of system.h
|
||||||
|
@ -94,18 +97,35 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
|
||||||
set(PLATFORM_GNU 0)
|
set(PLATFORM_GNU 0)
|
||||||
set(PLATFORM_MACOSX 1)
|
set(PLATFORM_MACOSX 1)
|
||||||
set(PLATFORM_OTHER 0)
|
set(PLATFORM_OTHER 0)
|
||||||
|
set(PLATFORM_FREEBSD 0)
|
||||||
|
|
||||||
# Platform-dependent implementation of system.h
|
# Platform-dependent implementation of system.h
|
||||||
set(SYSTEM_CPP_MODULE "system_macosx.cpp")
|
set(SYSTEM_CPP_MODULE "system_macosx.cpp")
|
||||||
set(SYSTEM_H_MODULE "system_macosx.h")
|
set(SYSTEM_H_MODULE "system_macosx.h")
|
||||||
# To avoid CMake warning
|
# To avoid CMake warning
|
||||||
set(CMAKE_MACOSX_RPATH 1)
|
set(CMAKE_MACOSX_RPATH 1)
|
||||||
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
||||||
|
message(STATUS "Build for FreeBSD system")
|
||||||
|
set(PLATFORM_WINDOWS 0)
|
||||||
|
set(PLATFORM_LINUX 0)
|
||||||
|
set(PLATFORM_GNU 0)
|
||||||
|
set(PLATFORM_MACOSX 0)
|
||||||
|
set(PLATFORM_FREEBSD 1)
|
||||||
|
set(PLATFORM_OTHER 0)
|
||||||
|
|
||||||
|
# Platform-dependent implementation of system.h
|
||||||
|
# On FreeBSD we can use *_other
|
||||||
|
set(SYSTEM_CPP_MODULE "system_other.cpp")
|
||||||
|
set(SYSTEM_H_MODULE "system_other.h")
|
||||||
|
# To avoid CMake warning
|
||||||
|
set(CMAKE_MACOSX_RPATH 1)
|
||||||
else()
|
else()
|
||||||
message(STATUS "Build for other system")
|
message(STATUS "Build for other system")
|
||||||
set(PLATFORM_WINDOWS 0)
|
set(PLATFORM_WINDOWS 0)
|
||||||
set(PLATFORM_LINUX 0)
|
set(PLATFORM_LINUX 0)
|
||||||
set(PLATFORM_GNU 0)
|
set(PLATFORM_GNU 0)
|
||||||
set(PLATFORM_MACOSX 0)
|
set(PLATFORM_MACOSX 0)
|
||||||
|
set(PLATFORM_FREEBSD 0)
|
||||||
set(PLATFORM_OTHER 1)
|
set(PLATFORM_OTHER 1)
|
||||||
|
|
||||||
# Platform-dependent implementation of system.h
|
# Platform-dependent implementation of system.h
|
||||||
|
@ -153,6 +173,10 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
|
||||||
message(STATUS "Detected Clang version 3.1+")
|
message(STATUS "Detected Clang version 3.1+")
|
||||||
|
|
||||||
|
if (${PLATFORM_FREEBSD})
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=bfd")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(NORMAL_CXX_FLAGS "-std=c++11 -Wall -Werror -Wold-style-cast -pedantic-errors -Wmissing-prototypes")
|
set(NORMAL_CXX_FLAGS "-std=c++11 -Wall -Werror -Wold-style-cast -pedantic-errors -Wmissing-prototypes")
|
||||||
set(NORMAL_CXX_FLAGS "${NORMAL_CXX_FLAGS} -Wno-error=deprecated-declarations") # updated version of physfs is not available on some platforms so we keep using deprecated functions, see #958
|
set(NORMAL_CXX_FLAGS "${NORMAL_CXX_FLAGS} -Wno-error=deprecated-declarations") # updated version of physfs is not available on some platforms so we keep using deprecated functions, see #958
|
||||||
set(RELEASE_CXX_FLAGS "-O2")
|
set(RELEASE_CXX_FLAGS "-O2")
|
||||||
|
@ -165,16 +189,16 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
set(NORMAL_CXX_FLAGS "/wd\"4244\" /wd\"4309\" /wd\"4800\" /wd\"4996\" /wd\"4351\" /EHsc") # disable some useless warnings
|
set(NORMAL_CXX_FLAGS "/wd\"4244\" /wd\"4309\" /wd\"4800\" /wd\"4996\" /wd\"4351\" /EHsc") # disable some useless warnings
|
||||||
if(MSVC_STATIC)
|
if(MSVC_STATIC)
|
||||||
set(RELEASE_CXX_FLAGS "/MT /Ox")
|
set(RELEASE_CXX_FLAGS "/MT /Ox")
|
||||||
set(DEBUG_CXX_FLAGS "/MTd /ZI")
|
set(DEBUG_CXX_FLAGS "/MTd /Od /ZI")
|
||||||
else(MSVC_STATIC)
|
else(MSVC_STATIC)
|
||||||
set(RELEASE_CXX_FLAGS "/MD /Ox")
|
set(RELEASE_CXX_FLAGS "/MD /Ox")
|
||||||
set(DEBUG_CXX_FLAGS "/MDd /ZI")
|
set(DEBUG_CXX_FLAGS "/MDd /Od /ZI")
|
||||||
endif()
|
endif()
|
||||||
set(TEST_CXX_FLAGS "")
|
set(TEST_CXX_FLAGS "${DEBUG_CXX_FLAGS}")
|
||||||
add_definitions(-DNOEXCEPT= -DHAS_MSVC_EXCEPTION_BUG)
|
add_definitions(-DNOEXCEPT= -DHAS_MSVC_EXCEPTION_BUG)
|
||||||
|
|
||||||
# Needed for Debug information (it's set to "No" by default for some reason)
|
# Needed for Debug information (it's set to "No" by default for some reason)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /NODEFAULTLIB:MSVCRTD /NODEFAULTLIB:LIBCMT")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
|
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS} /DEBUG")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Your C++ compiler doesn't seem to be supported.")
|
message(FATAL_ERROR "Your C++ compiler doesn't seem to be supported.")
|
||||||
|
@ -206,7 +230,10 @@ option(DEV_BUILD "Enable development build (enables some debugging tools, local
|
||||||
# PLEASE DO NOT USE ON UNOFFICIAL BUILDS. Thanks.
|
# PLEASE DO NOT USE ON UNOFFICIAL BUILDS. Thanks.
|
||||||
option(OFFICIAL_COLOBOT_BUILD "Official build (changes crash screen text)" OFF)
|
option(OFFICIAL_COLOBOT_BUILD "Official build (changes crash screen text)" OFF)
|
||||||
|
|
||||||
# Portable build - load all data from current directory
|
# Hardcode relative paths instead of absolute paths
|
||||||
|
option(USE_RELATIVE_PATHS "Generate relative paths from absolute paths" OFF)
|
||||||
|
|
||||||
|
# Portable build - load all data from the base directory
|
||||||
option(PORTABLE "Portable build" OFF)
|
option(PORTABLE "Portable build" OFF)
|
||||||
|
|
||||||
# Portable saves - suitable for e.g. putting the whole game on external storage and moving your saves with it
|
# Portable saves - suitable for e.g. putting the whole game on external storage and moving your saves with it
|
||||||
|
@ -367,12 +394,12 @@ endif()
|
||||||
|
|
||||||
# Installation paths defined before compiling sources
|
# Installation paths defined before compiling sources
|
||||||
if(PORTABLE OR (PLATFORM_WINDOWS AND MXE))
|
if(PORTABLE OR (PLATFORM_WINDOWS AND MXE))
|
||||||
# We need to use STRING because PATH doesn't accept relative paths
|
set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory")
|
||||||
set(COLOBOT_INSTALL_BIN_DIR ./ CACHE STRING "Colobot binary directory")
|
set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory")
|
||||||
set(COLOBOT_INSTALL_LIB_DIR ./ CACHE STRING "Colobot libraries directory")
|
set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE PATH "Colobot shared data directory")
|
||||||
set(COLOBOT_INSTALL_DATA_DIR ./data CACHE STRING "Colobot shared data directory")
|
set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE PATH "Colobot translations directory")
|
||||||
set(COLOBOT_INSTALL_I18N_DIR ./lang CACHE STRING "Colobot translations directory")
|
set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE PATH "Colobot documentation directory")
|
||||||
set(COLOBOT_INSTALL_DOC_DIR ./doc CACHE STRING "Colobot documentation directory")
|
set(USE_RELATIVE_PATHS ON)
|
||||||
elseif(PLATFORM_WINDOWS)
|
elseif(PLATFORM_WINDOWS)
|
||||||
set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory")
|
set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory")
|
||||||
set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory")
|
set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory")
|
||||||
|
@ -393,6 +420,18 @@ else()
|
||||||
set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory")
|
set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Generate relative paths from absolute paths
|
||||||
|
if(USE_RELATIVE_PATHS)
|
||||||
|
message(STATUS "Generating relative paths")
|
||||||
|
file(RELATIVE_PATH COLOBOT_DATA_DIR ${COLOBOT_INSTALL_BIN_DIR} ${COLOBOT_INSTALL_DATA_DIR})
|
||||||
|
file(RELATIVE_PATH COLOBOT_I18N_DIR ${COLOBOT_INSTALL_BIN_DIR} ${COLOBOT_INSTALL_I18N_DIR})
|
||||||
|
|
||||||
|
add_definitions(-DUSE_RELATIVE_PATHS)
|
||||||
|
else()
|
||||||
|
set(COLOBOT_DATA_DIR ${COLOBOT_INSTALL_DATA_DIR})
|
||||||
|
set(COLOBOT_I18N_DIR ${COLOBOT_INSTALL_I18N_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
# Subdirectory with sources
|
# Subdirectory with sources
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ Easy, isn't it?
|
||||||
If you are lazy, you can just use this one-line command, although there is no guarantee it will work or install everything (might be out of date):
|
If you are lazy, you can just use this one-line command, although there is no guarantee it will work or install everything (might be out of date):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pacman -S mingw-w64-i686-boost mingw-w64-i686-glew mingw-w64-i686-libpng gettext mingw-w64-i686-gettext mingw-w64-i686-libpng mingw-w64-i686-libsndfile mingw-w64-i686-libvorbis mingw-w64-i686-libogg mingw-w64-i686-openal mingw-w64-i686-SDL2 mingw-w64-i686-SDL2_image mingw-w64-i686-SDL2_ttf
|
pacman -S mingw-w64-i686-boost mingw-w64-i686-glew mingw-w64-i686-libpng gettext mingw-w64-i686-gettext mingw-w64-i686-libpng mingw-w64-i686-libsndfile mingw-w64-i686-libvorbis mingw-w64-i686-libogg mingw-w64-i686-openal mingw-w64_i686-physfs mingw-w64-i686-SDL2 mingw-w64-i686-SDL2_image mingw-w64-i686-SDL2_ttf
|
||||||
```
|
```
|
||||||
|
|
||||||
You should now have everything set up and working. You can close all instances of MSYS2 and autorebase to ensure everything installed properly.
|
You should now have everything set up and working. You can close all instances of MSYS2 and autorebase to ensure everything installed properly.
|
||||||
|
|
|
@ -71,7 +71,7 @@ You will need:
|
||||||
|
|
||||||
On Ubuntu (and probably any other Debian-based system), you can use the following command to install all required packages:
|
On Ubuntu (and probably any other Debian-based system), you can use the following command to install all required packages:
|
||||||
```
|
```
|
||||||
$ apt-get install build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng12-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools
|
$ apt-get install build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools
|
||||||
```
|
```
|
||||||
|
|
||||||
Make sure you install the packages along with header files (often distributed in separate *-dev packages). If you miss any requirements,
|
Make sure you install the packages along with header files (often distributed in separate *-dev packages). If you miss any requirements,
|
||||||
|
|
|
@ -27,10 +27,11 @@ pipeline {
|
||||||
dir('build/windows') {
|
dir('build/windows') {
|
||||||
sh '''
|
sh '''
|
||||||
# FIXME: without -lsetupapi linking sdl2 fails
|
# FIXME: without -lsetupapi linking sdl2 fails
|
||||||
|
rm -rf *
|
||||||
/opt/mxe/usr/bin/i686-w64-mingw32.static-cmake \
|
/opt/mxe/usr/bin/i686-w64-mingw32.static-cmake \
|
||||||
-DCMAKE_CXX_STANDARD_LIBRARIES="-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lsetupapi" \
|
-DCMAKE_CXX_STANDARD_LIBRARIES="-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lsetupapi" \
|
||||||
-DCMAKE_INSTALL_PREFIX=/install \
|
-DCMAKE_INSTALL_PREFIX=/install \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=0 ../..
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=0 -DMXE_USE_CCACHE=0 ../..
|
||||||
make
|
make
|
||||||
rm -rf install
|
rm -rf install
|
||||||
DESTDIR=. make install
|
DESTDIR=. make install
|
||||||
|
@ -53,6 +54,7 @@ pipeline {
|
||||||
sh 'mkdir -p build/linux'
|
sh 'mkdir -p build/linux'
|
||||||
dir('build/linux') {
|
dir('build/linux') {
|
||||||
sh '''
|
sh '''
|
||||||
|
rm -rf *
|
||||||
cmake \
|
cmake \
|
||||||
-DCMAKE_INSTALL_PREFIX=/install -DCMAKE_SKIP_INSTALL_RPATH=ON \
|
-DCMAKE_INSTALL_PREFIX=/install -DCMAKE_SKIP_INSTALL_RPATH=ON \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=1 -DDESKTOP=1 ../..
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=1 -DDESKTOP=1 ../..
|
||||||
|
@ -81,6 +83,8 @@ pipeline {
|
||||||
|
|
||||||
# Create AppImage
|
# Create AppImage
|
||||||
NO_STRIP=1 ./squashfs-root/AppRun -e colobot --output appimage --appdir colobot.AppDir -d desktop/colobot.desktop -i ../../desktop/colobot.svg
|
NO_STRIP=1 ./squashfs-root/AppRun -e colobot --output appimage --appdir colobot.AppDir -d desktop/colobot.desktop -i ../../desktop/colobot.svg
|
||||||
|
#rename AppImage file to avoid "No such file or directory" errors
|
||||||
|
find . -maxdepth 1 -type f -name '*AppImage' -name 'Colobot*' -exec sh -c 'x="{}"; mv "$x" "Colobot-x86_64.AppImage"' \\;
|
||||||
chmod +x Colobot-x86_64.AppImage
|
chmod +x Colobot-x86_64.AppImage
|
||||||
|
|
||||||
# Prepare folder for zip
|
# Prepare folder for zip
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -30,6 +30,8 @@ On some Linux distributions there are also distribution packages available:
|
||||||
* Debian Sid (unstable): http://packages.debian.org/sid/colobot
|
* Debian Sid (unstable): http://packages.debian.org/sid/colobot
|
||||||
* Arch Linux (AUR): https://aur.archlinux.org/packages/colobot-gold
|
* Arch Linux (AUR): https://aur.archlinux.org/packages/colobot-gold
|
||||||
* openSUSE: http://software.opensuse.org/download.html?project=games&package=colobot
|
* openSUSE: http://software.opensuse.org/download.html?project=games&package=colobot
|
||||||
|
* Fedora: https://src.fedoraproject.org/rpms/colobot
|
||||||
|
* Guix https://guix.gnu.org/en/packages/colobot-0.1.12-alpha/
|
||||||
|
|
||||||
|
|
||||||
## Compiling and running the game
|
## Compiling and running the game
|
||||||
|
@ -42,9 +44,4 @@ If you want to contribute to the project, see [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
If you want to help in the project, please contact us on our IRC channels or [our forum](http://colobot.info/forum/).
|
If you want to help in the project, please contact us on our [Discord server](https://discord.gg/56Fm9kb).
|
||||||
|
|
||||||
### IRC channels
|
|
||||||
|
|
||||||
* [#colobot on Freenode](irc://freenode.net#colobot) - main development channel (English);
|
|
||||||
* [#colobot on pirc.pl](irc://pirc.pl#colobot) - Polish community channel;
|
|
||||||
|
|
2
data
2
data
|
@ -1 +1 @@
|
||||||
Subproject commit c467bd994e60fb54cf977fbe8583f92957330695
|
Subproject commit 74c762b47fcac7c073a0afb5c82cf046e7ea42f3
|
|
@ -82,20 +82,6 @@ if(PLATFORM_GNU)
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/
|
||||||
)
|
)
|
||||||
|
|
||||||
# Translate translatable material
|
|
||||||
find_program(PO4A po4a)
|
|
||||||
if(NOT PO4A)
|
|
||||||
message(WARNING "po4a not found; desktop and manpage files will not be translated")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PO4A)
|
|
||||||
add_custom_target(desktop_po4a
|
|
||||||
COMMAND ${PO4A} po4a.cfg
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
)
|
|
||||||
add_dependencies(desktopfile desktop_po4a)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Create manpage from pod-formatted file
|
# Create manpage from pod-formatted file
|
||||||
find_program(POD2MAN pod2man)
|
find_program(POD2MAN pod2man)
|
||||||
if(NOT POD2MAN)
|
if(NOT POD2MAN)
|
||||||
|
@ -133,11 +119,30 @@ if(PLATFORM_GNU)
|
||||||
# Create the english manpage
|
# Create the english manpage
|
||||||
podman(PODFILE colobot.pod)
|
podman(PODFILE colobot.pod)
|
||||||
|
|
||||||
|
# Translate translatable material
|
||||||
|
find_program(PO4A po4a)
|
||||||
|
if(NOT PO4A)
|
||||||
|
message(WARNING "po4a not found; desktop and manpage files will not be translated")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(PO4A)
|
if(PO4A)
|
||||||
# Translate the manpage to other languages
|
# 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)
|
file(GLOB LINGUAS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po/ ${CMAKE_CURRENT_SOURCE_DIR}/po/*.po)
|
||||||
string(REGEX REPLACE ".po$" "" LINGUAS ${LINGUAS_PO})
|
string(REGEX REPLACE ".po$" "" LINGUAS ${LINGUAS_PO})
|
||||||
|
|
||||||
|
set(PO4A_OUTPUTS)
|
||||||
|
foreach(LOCALE ${LINGUAS})
|
||||||
|
list(APPEND PO4A_OUTPUTS ${CMAKE_CURRENT_SOURCE_DIR}/lang/${LOCALE}/colobot.pod)
|
||||||
|
endforeach()
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${PO4A_OUTPUTS}
|
||||||
|
COMMAND ${PO4A} po4a.cfg
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
add_custom_target(desktop_po4a DEPENDS ${PO4A_OUTPUTS})
|
||||||
|
add_dependencies(man desktop_po4a)
|
||||||
|
add_dependencies(desktopfile desktop_po4a)
|
||||||
|
|
||||||
foreach(LOCALE ${LINGUAS})
|
foreach(LOCALE ${LINGUAS})
|
||||||
podman(PODFILE lang/${LOCALE}/colobot.pod LOCALE ${LOCALE})
|
podman(PODFILE lang/${LOCALE}/colobot.pod LOCALE ${LOCALE})
|
||||||
add_dependencies(man${PM_LOCALE} desktop_po4a)
|
add_dependencies(man${PM_LOCALE} desktop_po4a)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Name="Colobot"
|
Name="Colobot"
|
||||||
GenericName="Game to learn programming"
|
GenericName="Game to learn programming"
|
||||||
Comment="Colonize with bots"
|
Comment="Colonize with bots"
|
||||||
Keywords="robots;3d;space;astronaut;java;c++"
|
Keywords="robots;3d;space;astronaut;java;c++;"
|
||||||
|
|
|
@ -37,7 +37,7 @@ msgstr ""
|
||||||
#. type: Keywords=
|
#. type: Keywords=
|
||||||
#: colobot.ini:4
|
#: colobot.ini:4
|
||||||
#, no-wrap
|
#, no-wrap
|
||||||
msgid "robots;3d;space;astronaut;java;c++"
|
msgid "robots;3d;space;astronaut;java;c++;"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. type: =head1
|
#. type: =head1
|
||||||
|
|
|
@ -3,18 +3,20 @@
|
||||||
# This file is distributed under the same license as the Colobot package.
|
# This file is distributed under the same license as the Colobot package.
|
||||||
#
|
#
|
||||||
# Didier Raboud <odyx@debian.org>, 2012, 2016.
|
# Didier Raboud <odyx@debian.org>, 2012, 2016.
|
||||||
|
# B-CE <.>, 2019.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: colobot 0.1.7\n"
|
"Project-Id-Version: colobot 0.1.12\n"
|
||||||
"POT-Creation-Date: 2016-03-30 13:45+0200\n"
|
"POT-Creation-Date: 2016-03-30 13:45+0200\n"
|
||||||
"PO-Revision-Date: 2016-03-30 13:49+0100\n"
|
"PO-Revision-Date: 2019-06-01 09:43+0200\n"
|
||||||
"Last-Translator: Didier Raboud <odyx@debian.org>\n"
|
"Last-Translator: BCE <.>\n"
|
||||||
|
"Language-Team: French <kde-i18n-doc@kde.org>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
"X-Generator: Lokalize 2.0\n"
|
"X-Generator: Lokalize 18.12.3\n"
|
||||||
|
|
||||||
#. type: Name=
|
#. type: Name=
|
||||||
#: colobot.ini:1
|
#: colobot.ini:1
|
||||||
|
@ -32,13 +34,13 @@ msgstr "Apprentissage de la programmation par le jeu"
|
||||||
#: colobot.ini:3
|
#: colobot.ini:3
|
||||||
#, no-wrap
|
#, no-wrap
|
||||||
msgid "Colonize with bots"
|
msgid "Colonize with bots"
|
||||||
msgstr "Colonise avec des roBots"
|
msgstr "COlonise avec des roBOTs"
|
||||||
|
|
||||||
#. type: Keywords=
|
#. type: Keywords=
|
||||||
#: colobot.ini:4
|
#: colobot.ini:4
|
||||||
#, no-wrap
|
#, no-wrap
|
||||||
msgid "robots;3d;space;astronaut;java;c++"
|
msgid "robots;3d;space;astronaut;java;c++;"
|
||||||
msgstr "robots;3d;espace;astronaute;cosmonaute;java;c++"
|
msgstr "robots;3d;espace;astronaute;cosmonaute;java;c++;programmation;jeux"
|
||||||
|
|
||||||
#. type: =head1
|
#. type: =head1
|
||||||
#: colobot.pod:3
|
#: colobot.pod:3
|
||||||
|
@ -74,12 +76,12 @@ msgid ""
|
||||||
"real-time graphics and a C++ and Java-like, object-oriented language, CBOT, "
|
"real-time graphics and a C++ and Java-like, object-oriented language, CBOT, "
|
||||||
"which can be used to program the robots available in the game."
|
"which can be used to program the robots available in the game."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Colobot (Colonise avec des roBots) est un jeu éducatif visant à "
|
"Colobot (Colonise avec des roBots) est un jeu éducatif visant "
|
||||||
"l'enseignement de la programmation par le jeu. Vous jouez un astronaute en "
|
"à l'enseignement de la programmation par le jeu. Vous jouez un astronaute en "
|
||||||
"voyage avec des robots à la recherche d'une planète à coloniser. Son "
|
"voyage avec des robots à la recherche d'une planète à coloniser. Son "
|
||||||
"interface est en trois-dimensions et en temps réel; le language utilisé "
|
"interface est en trois-dimensions et en temps réel. Le langage utilisé "
|
||||||
"(CBOT) ressemble au C++ et à Java et peut être utilisé pour programmer les "
|
"(CBOT), orienté objet , ressemble au C++ et à Java. Il peut être utilisé "
|
||||||
"robots disponibles dans le jeu."
|
"pour programmer les robots disponibles dans le jeu."
|
||||||
|
|
||||||
#. type: =head1
|
#. type: =head1
|
||||||
#: colobot.pod:19
|
#: colobot.pod:19
|
||||||
|
@ -208,9 +210,9 @@ msgid ""
|
||||||
"Enable debug mode (more info printed in logs). Possible values are as "
|
"Enable debug mode (more info printed in logs). Possible values are as "
|
||||||
"follows, as well as any comma-separated combination"
|
"follows, as well as any comma-separated combination"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Active le mode de I<debug> (plus d'informations dans les logs). Les valeurs"
|
"Active le mode de I<debug> (plus d'informations dans les logs). "
|
||||||
" possibles sont les suivantes, ainsi que toute combinaison séparée par des"
|
"Les valeurs possibles sont les suivantes, "
|
||||||
" virgules"
|
"ainsi que toute combinaison séparée par des virgules"
|
||||||
|
|
||||||
#. type: =item
|
#. type: =item
|
||||||
#: colobot.pod:81
|
#: colobot.pod:81
|
||||||
|
@ -260,7 +262,7 @@ msgstr "models"
|
||||||
#. type: textblock
|
#. type: textblock
|
||||||
#: colobot.pod:99
|
#: colobot.pod:99
|
||||||
msgid "Models-related debugging"
|
msgid "Models-related debugging"
|
||||||
msgstr "Debug pour les modèles"
|
msgstr "Débug pour les modèles"
|
||||||
|
|
||||||
#. type: =item
|
#. type: =item
|
||||||
#: colobot.pod:101
|
#: colobot.pod:101
|
||||||
|
@ -270,7 +272,7 @@ msgstr "all"
|
||||||
#. type: textblock
|
#. type: textblock
|
||||||
#: colobot.pod:103
|
#: colobot.pod:103
|
||||||
msgid "All above debugging statements"
|
msgid "All above debugging statements"
|
||||||
msgstr "Tout les messages de debug ci-dessus"
|
msgstr "Tous les messages de debug ci-dessus"
|
||||||
|
|
||||||
#. type: =item
|
#. type: =item
|
||||||
#: colobot.pod:107
|
#: colobot.pod:107
|
||||||
|
@ -280,9 +282,7 @@ msgstr "B<-headless>"
|
||||||
#. type: textblock
|
#. type: textblock
|
||||||
#: colobot.pod:109
|
#: colobot.pod:109
|
||||||
msgid "Run in headless mode - disables graphics, sound and user interaction"
|
msgid "Run in headless mode - disables graphics, sound and user interaction"
|
||||||
msgstr ""
|
msgstr "Lance en mode I<headless> - désactive les graphiques, sons et interactions utilisateurs"
|
||||||
"Lance en mode I<headless> - désactive les graphiques, sons et interactions"
|
|
||||||
" utilisateurs"
|
|
||||||
|
|
||||||
#. type: =item
|
#. type: =item
|
||||||
#: colobot.pod:111
|
#: colobot.pod:111
|
||||||
|
@ -292,7 +292,7 @@ msgstr "B<-runscene> I<scenecodename>"
|
||||||
#. type: textblock
|
#. type: textblock
|
||||||
#: colobot.pod:113
|
#: colobot.pod:113
|
||||||
msgid "Run given scene on start (skip menus)"
|
msgid "Run given scene on start (skip menus)"
|
||||||
msgstr "Lance une scène donnée au lancement (saute les menus)"
|
msgstr "Démarre directement une scène (saute les menus)"
|
||||||
|
|
||||||
#. type: =item
|
#. type: =item
|
||||||
#: colobot.pod:115
|
#: colobot.pod:115
|
||||||
|
@ -317,7 +317,7 @@ msgstr "LC_MESSAGES"
|
||||||
#. type: textblock
|
#. type: textblock
|
||||||
#: colobot.pod:127
|
#: colobot.pod:127
|
||||||
msgid "Used to determine the runtime language."
|
msgid "Used to determine the runtime language."
|
||||||
msgstr "Utilisé pour déterminer la langue au lancement"
|
msgstr "Utilisé pour déterminer la langue au lancement."
|
||||||
|
|
||||||
#. type: =head1
|
#. type: =head1
|
||||||
#: colobot.pod:131
|
#: colobot.pod:131
|
||||||
|
|
|
@ -12,7 +12,7 @@ add_custom_command(OUTPUT ${_potFile}
|
||||||
COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/app/app.cpp --output=${_potFile} --no-wrap
|
COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/app/app.cpp --output=${_potFile} --no-wrap
|
||||||
COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/common/restext.cpp --output=${_potFile} --no-wrap --join-existing --no-location --keyword=TR
|
COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/common/restext.cpp --output=${_potFile} --no-wrap --join-existing --no-location --keyword=TR
|
||||||
COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/script/script.cpp --output=${_potFile} --no-wrap --join-existing --no-location
|
COMMAND ${XGETTEXT_CMD} ${colobot_SOURCE_DIR}/src/script/script.cpp --output=${_potFile} --no-wrap --join-existing --no-location
|
||||||
COMMAND sed -i -e "s|^\\(\"POT-Creation-Date:\\).*$|\\1 DATE\\\\n\"|" ${_potFile}
|
COMMAND sed -bi -e "s/^\\(\"POT-Creation-Date:\\).*$/\\1 DATE\\\\n\"/" ${_potFile}
|
||||||
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Extract translatable messages to ${_potFile}"
|
COMMENT "Extract translatable messages to ${_potFile}"
|
||||||
|
|
153
po/colobot.pot
153
po/colobot.pot
|
@ -84,6 +84,12 @@ msgstr ""
|
||||||
msgid "Load a saved mission"
|
msgid "Load a saved mission"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -166,6 +172,23 @@ msgstr ""
|
||||||
msgid "This menu is for userlevels from mods, but you didn't install any"
|
msgid "This menu is for userlevels from mods, but you didn't install any"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Keyword help(\\key cbot;)"
|
msgid "Keyword help(\\key cbot;)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -206,6 +229,12 @@ msgstr ""
|
||||||
msgid "Public\\Common folder"
|
msgid "Public\\Common folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -274,6 +303,42 @@ msgstr ""
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Code battle"
|
msgid "Code battle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -286,6 +351,9 @@ msgstr ""
|
||||||
msgid "Previous"
|
msgid "Previous"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Exercises\\Programming exercises"
|
msgid "Exercises\\Programming exercises"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -307,6 +375,9 @@ msgstr ""
|
||||||
msgid "SatCom"
|
msgid "SatCom"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -331,9 +402,30 @@ msgstr ""
|
||||||
msgid "<< Back \\Back to the previous screen"
|
msgid "<< Back \\Back to the previous screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Play\\Start mission!"
|
msgid "Play\\Start mission!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -406,6 +498,9 @@ msgstr ""
|
||||||
msgid "Pause in background\\Pause the game when the window is unfocused"
|
msgid "Pause in background\\Pause the game when the window is unfocused"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Automatic indent\\When program editing"
|
msgid "Automatic indent\\When program editing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -571,6 +666,15 @@ msgstr ""
|
||||||
msgid "Invert\\Invert values on this axis"
|
msgid "Invert\\Invert values on this axis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "\\New player name"
|
msgid "\\New player name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -742,7 +846,7 @@ msgstr ""
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
msgid "Build a vault"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Show if the ground is flat"
|
msgid "Show if the ground is flat"
|
||||||
|
@ -817,6 +921,18 @@ msgstr ""
|
||||||
msgid "Build a legged sniffer"
|
msgid "Build a legged sniffer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -832,6 +948,9 @@ msgstr ""
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for tracked bots"
|
msgid "Run research program for tracked bots"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -862,6 +981,12 @@ msgstr ""
|
||||||
msgid "Run research program for orga shooter"
|
msgid "Run research program for orga shooter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Return to start"
|
msgid "Return to start"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -877,6 +1002,9 @@ msgstr ""
|
||||||
msgid "Explode (\\key action;)"
|
msgid "Explode (\\key action;)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Recycle (\\key action;)"
|
msgid "Recycle (\\key action;)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1255,6 +1383,18 @@ msgstr ""
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Winged shooter"
|
msgid "Winged shooter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1471,7 +1611,7 @@ msgstr ""
|
||||||
msgid "Nothing to analyze"
|
msgid "Nothing to analyze"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
msgid "Inappropriate sample"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Analysis already performed"
|
msgid "Analysis already performed"
|
||||||
|
@ -1570,6 +1710,9 @@ msgstr ""
|
||||||
msgid "Plans for nuclear power plant available"
|
msgid "Plans for nuclear power plant available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1795,6 +1938,12 @@ msgstr ""
|
||||||
msgid "Invalid universal character name"
|
msgid "Invalid universal character name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
164
po/cs.po
164
po/cs.po
|
@ -32,6 +32,9 @@ msgstr "Chybí \"]\""
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr "%s: %d bodů"
|
msgstr "%s: %d bodů"
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "..behind"
|
msgid "..behind"
|
||||||
msgstr "...za sebou"
|
msgstr "...za sebou"
|
||||||
|
|
||||||
|
@ -110,9 +113,6 @@ msgstr "Analýza již byla dokončena"
|
||||||
msgid "Analysis performed"
|
msgid "Analysis performed"
|
||||||
msgstr "Analýza dokončena"
|
msgstr "Analýza dokončena"
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
|
||||||
msgstr "Analyzuje pouze organickou hmotu"
|
|
||||||
|
|
||||||
msgid "Anisotropy level\\Anisotropy level"
|
msgid "Anisotropy level\\Anisotropy level"
|
||||||
msgstr "Úroveň anizotropie\\Úroveň anizotropie"
|
msgstr "Úroveň anizotropie\\Úroveň anizotropie"
|
||||||
|
|
||||||
|
@ -128,6 +128,9 @@ msgstr "Vzhled\\Upravte svůj vzhled"
|
||||||
msgid "Apply changes\\Activates the changed settings"
|
msgid "Apply changes\\Activates the changed settings"
|
||||||
msgstr "Uložit změny\\Aktivovat změny nastavení"
|
msgstr "Uložit změny\\Aktivovat změny nastavení"
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Appropriate constructor missing"
|
msgid "Appropriate constructor missing"
|
||||||
msgstr "Chybí vhodný konstruktor"
|
msgstr "Chybí vhodný konstruktor"
|
||||||
|
|
||||||
|
@ -185,6 +188,9 @@ msgstr "Robot zničen"
|
||||||
msgid "Bot factory"
|
msgid "Bot factory"
|
||||||
msgstr "Továrna na roboty"
|
msgstr "Továrna na roboty"
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a bot factory"
|
msgid "Build a bot factory"
|
||||||
msgstr "Postavit továrnu na roboty"
|
msgstr "Postavit továrnu na roboty"
|
||||||
|
|
||||||
|
@ -197,12 +203,12 @@ msgstr "Postavit obrannou věž"
|
||||||
msgid "Build a derrick"
|
msgid "Build a derrick"
|
||||||
msgstr "Postavit vrtnou věž"
|
msgstr "Postavit vrtnou věž"
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
|
||||||
msgstr "Postavit drtič"
|
|
||||||
|
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr "Postavit komunikační stanici"
|
msgstr "Postavit komunikační stanici"
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a legged grabber"
|
msgid "Build a legged grabber"
|
||||||
msgstr "Vyrobit chodící rameno"
|
msgstr "Vyrobit chodící rameno"
|
||||||
|
|
||||||
|
@ -248,9 +254,15 @@ msgstr "Vyrobit mobilní štít"
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr "Vyrobit ponorku"
|
msgstr "Vyrobit ponorku"
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr "Vyrobit buchar"
|
msgstr "Vyrobit buchar"
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a tracked grabber"
|
msgid "Build a tracked grabber"
|
||||||
msgstr "Vyrobit pásové rameno"
|
msgstr "Vyrobit pásové rameno"
|
||||||
|
|
||||||
|
@ -263,6 +275,12 @@ msgstr "Vyrobit pásový kanón"
|
||||||
msgid "Build a tracked sniffer"
|
msgid "Build a tracked sniffer"
|
||||||
msgstr "Vyrobit pásový detektor"
|
msgstr "Vyrobit pásový detektor"
|
||||||
|
|
||||||
|
msgid "Build a vault"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a wheeled grabber"
|
msgid "Build a wheeled grabber"
|
||||||
msgstr "Vyrobit pojízdné rameno"
|
msgstr "Vyrobit pojízdné rameno"
|
||||||
|
|
||||||
|
@ -275,6 +293,9 @@ msgstr "Vyrobit pojízdný kanón"
|
||||||
msgid "Build a wheeled sniffer"
|
msgid "Build a wheeled sniffer"
|
||||||
msgstr "Vyrobit pojízdný detektor"
|
msgstr "Vyrobit pojízdný detektor"
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a winged grabber"
|
msgid "Build a winged grabber"
|
||||||
msgstr "Vyrobit létající rameno"
|
msgstr "Vyrobit létající rameno"
|
||||||
|
|
||||||
|
@ -356,6 +377,9 @@ msgstr "Změnit kameru\\Přepíná mezi kamerou na robotu a za robotem"
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr "Změnit hráče\\Změnit hráče"
|
msgstr "Změnit hráče\\Změnit hráče"
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr "Kapitoly:"
|
msgstr "Kapitoly:"
|
||||||
|
|
||||||
|
@ -425,6 +449,12 @@ msgstr "Kopírovat"
|
||||||
msgid "Copy (Ctrl+C)"
|
msgid "Copy (Ctrl+C)"
|
||||||
msgstr "Kopírovat (Ctrl+C)"
|
msgstr "Kopírovat (Ctrl+C)"
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Current mission saved"
|
msgid "Current mission saved"
|
||||||
msgstr "Současná mise uložena"
|
msgstr "Současná mise uložena"
|
||||||
|
|
||||||
|
@ -458,6 +488,9 @@ msgstr "Vrtná věž"
|
||||||
msgid "Descend\\Reduces the power of the jet"
|
msgid "Descend\\Reduces the power of the jet"
|
||||||
msgstr "Klesat\\Snížit tah tryskového motoru"
|
msgstr "Klesat\\Snížit tah tryskového motoru"
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Destroy"
|
msgid "Destroy"
|
||||||
msgstr "Zbourat"
|
msgstr "Zbourat"
|
||||||
|
|
||||||
|
@ -470,6 +503,9 @@ msgstr "Drtič"
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr "Obrazovka\\Nastavení grafické karty a rozlišení"
|
msgstr "Obrazovka\\Nastavení grafické karty a rozlišení"
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr "Dělení nulou"
|
msgstr "Dělení nulou"
|
||||||
|
|
||||||
|
@ -486,9 +522,15 @@ msgstr "Dveře blokuje robot nebo jiný objekt"
|
||||||
msgid "Down (\\key gdown;)"
|
msgid "Down (\\key gdown;)"
|
||||||
msgstr "Dolů (\\key gdown;)"
|
msgstr "Dolů (\\key gdown;)"
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Drawer bot"
|
msgid "Drawer bot"
|
||||||
msgstr "Tužkobot"
|
msgstr "Tužkobot"
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dust\\Dust and dirt on bots and buildings"
|
msgid "Dust\\Dust and dirt on bots and buildings"
|
||||||
msgstr "Prach\\Prach a špína na robotech a budovách"
|
msgstr "Prach\\Prach a špína na robotech a budovách"
|
||||||
|
|
||||||
|
@ -507,6 +549,12 @@ msgstr "Upravit vybraný program"
|
||||||
msgid "Egg"
|
msgid "Egg"
|
||||||
msgstr "Vejce"
|
msgstr "Vejce"
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "End of block missing"
|
msgid "End of block missing"
|
||||||
msgstr "Chybí konec bloku"
|
msgstr "Chybí konec bloku"
|
||||||
|
|
||||||
|
@ -721,6 +769,9 @@ msgstr "Nevhodný typ baterie"
|
||||||
msgid "Inappropriate object"
|
msgid "Inappropriate object"
|
||||||
msgstr "Nevhodný objekt"
|
msgstr "Nevhodný objekt"
|
||||||
|
|
||||||
|
msgid "Inappropriate sample"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Incorrect index type"
|
msgid "Incorrect index type"
|
||||||
msgstr "Špatný datový typ indexu"
|
msgstr "Špatný datový typ indexu"
|
||||||
|
|
||||||
|
@ -730,6 +781,9 @@ msgstr "Infikováno virem; dočasně mimo provoz"
|
||||||
msgid "Information exchange post"
|
msgid "Information exchange post"
|
||||||
msgstr "Komunikační stanice"
|
msgstr "Komunikační stanice"
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Instruction \"break\" outside a loop"
|
msgid "Instruction \"break\" outside a loop"
|
||||||
msgstr "Příkaz \"break\" mimo cyklus"
|
msgstr "Příkaz \"break\" mimo cyklus"
|
||||||
|
|
||||||
|
@ -790,6 +844,9 @@ msgstr "Nápověda ke klíčovému slovu (\\key cbot;)"
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "NAČÍTÁNÍ"
|
msgstr "NAČÍTÁNÍ"
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr "Chodící rameno"
|
msgstr "Chodící rameno"
|
||||||
|
|
||||||
|
@ -874,9 +931,21 @@ msgstr "Mise"
|
||||||
msgid "Missions on this planet:"
|
msgid "Missions on this planet:"
|
||||||
msgstr "Mise na této planetě:"
|
msgstr "Mise na této planetě:"
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr "Mise+"
|
||||||
|
|
||||||
msgid "Missions\\Select mission"
|
msgid "Missions\\Select mission"
|
||||||
msgstr "Mise\\Vyberte misi"
|
msgstr "Mise\\Vyberte misi"
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
||||||
msgstr "Vodorovné převrácení posunu\\Při vodorovném posunu kamery myší pousouvat opačným směrem"
|
msgstr "Vodorovné převrácení posunu\\Při vodorovném posunu kamery myší pousouvat opačným směrem"
|
||||||
|
|
||||||
|
@ -889,6 +958,9 @@ msgstr "Posunout vybraný program níže"
|
||||||
msgid "Move selected program up"
|
msgid "Move selected program up"
|
||||||
msgstr "Posunout vybraný program výše"
|
msgstr "Posunout vybraný program výše"
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mute\\No sound"
|
msgid "Mute\\No sound"
|
||||||
msgstr "Ticho\\Bez zvuku"
|
msgstr "Ticho\\Bez zvuku"
|
||||||
|
|
||||||
|
@ -907,6 +979,9 @@ msgstr "Nový"
|
||||||
msgid "New ..."
|
msgid "New ..."
|
||||||
msgstr "Nový..."
|
msgstr "Nový..."
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr "Robot vyroben"
|
msgstr "Robot vyroben"
|
||||||
|
|
||||||
|
@ -919,6 +994,12 @@ msgstr "Další objekt\\Vybere následující objekt"
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Ne"
|
msgstr "Ne"
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No energy in the subsoil"
|
msgid "No energy in the subsoil"
|
||||||
msgstr "Pod povrchem není zdroj energie"
|
msgstr "Pod povrchem není zdroj energie"
|
||||||
|
|
||||||
|
@ -1039,6 +1120,9 @@ msgstr "Otevřít"
|
||||||
msgid "Open (Ctrl+O)"
|
msgid "Open (Ctrl+O)"
|
||||||
msgstr "Otevřít (Ctrl+O)"
|
msgstr "Otevřít (Ctrl+O)"
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Opening brace missing"
|
msgid "Opening brace missing"
|
||||||
msgstr "Chybí levá složená závorka"
|
msgstr "Chybí levá složená závorka"
|
||||||
|
|
||||||
|
@ -1063,6 +1147,9 @@ msgstr "Zdroj poslední zprávy\\Zobrazí objekt, který poslal poslední zpráv
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr "Vývojáři původní hry:"
|
msgstr "Vývojáři původní hry:"
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Parameters missing"
|
msgid "Parameters missing"
|
||||||
msgstr "Některé parametry nejsou vyplněné"
|
msgstr "Některé parametry nejsou vyplněné"
|
||||||
|
|
||||||
|
@ -1096,6 +1183,9 @@ msgstr "Místo je obsazeno"
|
||||||
msgid "Planets:"
|
msgid "Planets:"
|
||||||
msgstr "Planety:"
|
msgstr "Planety:"
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Plans for defense tower available"
|
msgid "Plans for defense tower available"
|
||||||
msgstr "Plány pro obrannou věž jsou k dispozici"
|
msgstr "Plány pro obrannou věž jsou k dispozici"
|
||||||
|
|
||||||
|
@ -1243,6 +1333,9 @@ msgstr "Červená vlajka"
|
||||||
msgid "Reflections on the buttons \\Shiny buttons"
|
msgid "Reflections on the buttons \\Shiny buttons"
|
||||||
msgstr "Odlesky na tlačítkách\\Blyštivá tlačítka"
|
msgstr "Odlesky na tlačítkách\\Blyštivá tlačítka"
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remains of Apollo mission"
|
msgid "Remains of Apollo mission"
|
||||||
msgstr "Pozůstatky mise Apollo"
|
msgstr "Pozůstatky mise Apollo"
|
||||||
|
|
||||||
|
@ -1300,6 +1393,9 @@ msgstr "Robbie"
|
||||||
msgid "Ruin"
|
msgid "Ruin"
|
||||||
msgstr "Trosky"
|
msgstr "Trosky"
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for defense tower"
|
msgid "Run research program for defense tower"
|
||||||
msgstr "Spustit výzkum obranných věží"
|
msgstr "Spustit výzkum obranných věží"
|
||||||
|
|
||||||
|
@ -1321,6 +1417,9 @@ msgstr "Spustit výzkum mobilního štítu"
|
||||||
msgid "Run research program for shooter"
|
msgid "Run research program for shooter"
|
||||||
msgstr "Spustit výzkum kanónů"
|
msgstr "Spustit výzkum kanónů"
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for thumper"
|
msgid "Run research program for thumper"
|
||||||
msgstr "Spustit výzkum bucharu"
|
msgstr "Spustit výzkum bucharu"
|
||||||
|
|
||||||
|
@ -1351,6 +1450,9 @@ msgstr "Uložit\\Uložit současnou misi"
|
||||||
msgid "Save\\Saves the current mission"
|
msgid "Save\\Saves the current mission"
|
||||||
msgstr "Uložit\\Uloží současnou misi"
|
msgstr "Uložit\\Uloží současnou misi"
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Select the astronaut\\Selects the astronaut"
|
msgid "Select the astronaut\\Selects the astronaut"
|
||||||
msgstr "Vybrat kosmonauta\\Vybere kosmonauta"
|
msgstr "Vybrat kosmonauta\\Vybere kosmonauta"
|
||||||
|
|
||||||
|
@ -1417,6 +1519,15 @@ msgstr "Zvukové efekty:\\Hlasitost motorů, hlasů, střelby, atd."
|
||||||
msgid "Sound\\Music and game sound volume"
|
msgid "Sound\\Music and game sound volume"
|
||||||
msgstr "Zvuk\\Hlasitost hudby a zvukových efektů"
|
msgstr "Zvuk\\Hlasitost hudby a zvukových efektů"
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Spaceship"
|
msgid "Spaceship"
|
||||||
msgstr "Raketa"
|
msgstr "Raketa"
|
||||||
|
|
||||||
|
@ -1495,6 +1606,10 @@ msgstr "Filtrování textur\\Filtrování textur"
|
||||||
msgid "Textures"
|
msgid "Textures"
|
||||||
msgstr "Textury"
|
msgstr "Textury"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The battle has ended"
|
msgid "The battle has ended"
|
||||||
msgstr "Souboj skončil"
|
msgstr "Souboj skončil"
|
||||||
|
|
||||||
|
@ -1507,9 +1622,16 @@ msgstr "Funkce nevrátila žádnou hodnotu"
|
||||||
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
||||||
msgstr "Mise ještě nebyla splněna (pro podrobnosti stiskněte \\key help;)"
|
msgstr "Mise ještě nebyla splněna (pro podrobnosti stiskněte \\key help;)"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The types of the two operands are incompatible"
|
msgid "The types of the two operands are incompatible"
|
||||||
msgstr "Operaci nelze provést s operandy těchto dvou typů"
|
msgstr "Operaci nelze provést s operandy těchto dvou typů"
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "This class already exists"
|
msgid "This class already exists"
|
||||||
msgstr "Tato třída již existuje"
|
msgstr "Tato třída již existuje"
|
||||||
|
|
||||||
|
@ -1583,6 +1705,9 @@ msgstr "Příliš mnoho vlajek této barvy (maximálně 5)"
|
||||||
msgid "Too many parameters"
|
msgid "Too many parameters"
|
||||||
msgstr "Příliš mnoho parametrů"
|
msgstr "Příliš mnoho parametrů"
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Tracked grabber"
|
msgid "Tracked grabber"
|
||||||
msgstr "Pásové rameno"
|
msgstr "Pásové rameno"
|
||||||
|
|
||||||
|
@ -1631,6 +1756,9 @@ msgstr "Jednotka"
|
||||||
msgid "Unknown Object"
|
msgid "Unknown Object"
|
||||||
msgstr "Neznámý objekt"
|
msgstr "Neznámý objekt"
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Unknown command"
|
msgid "Unknown command"
|
||||||
msgstr "Neznámý příkaz"
|
msgstr "Neznámý příkaz"
|
||||||
|
|
||||||
|
@ -1643,6 +1771,9 @@ msgstr "Neznámá funkce"
|
||||||
msgid "Up (\\key gup;)"
|
msgid "Up (\\key gup;)"
|
||||||
msgstr "Vzhůru (\\key gup;)"
|
msgstr "Vzhůru (\\key gup;)"
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Uranium deposit (site for derrick)"
|
msgid "Uranium deposit (site for derrick)"
|
||||||
msgstr "Uranové ložisko (místo pro vrtnou věž)"
|
msgstr "Uranové ložisko (místo pro vrtnou věž)"
|
||||||
|
|
||||||
|
@ -1664,6 +1795,9 @@ msgstr "Proměnná nebyla nastavena"
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "Trezor"
|
msgstr "Trezor"
|
||||||
|
|
||||||
|
msgid "Version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1682,6 +1816,12 @@ msgstr "Vosa byla smrtelně raněna"
|
||||||
msgid "Waste"
|
msgid "Waste"
|
||||||
msgstr "Odpad"
|
msgstr "Odpad"
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Wheeled grabber"
|
msgid "Wheeled grabber"
|
||||||
msgstr "Pojízdné rameno"
|
msgstr "Pojízdné rameno"
|
||||||
|
|
||||||
|
@ -1694,6 +1834,9 @@ msgstr "Pojízdný kanón"
|
||||||
msgid "Wheeled sniffer"
|
msgid "Wheeled sniffer"
|
||||||
msgstr "Pojízdný detektor"
|
msgstr "Pojízdný detektor"
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Winged grabber"
|
msgid "Winged grabber"
|
||||||
msgstr "Létající rameno"
|
msgstr "Létající rameno"
|
||||||
|
|
||||||
|
@ -1709,6 +1852,9 @@ msgstr "Létající detektor"
|
||||||
msgid "Withdraw shield (\\key action;)"
|
msgid "Withdraw shield (\\key action;)"
|
||||||
msgstr "Vypnout štít (\\key action;)"
|
msgstr "Vypnout štít (\\key action;)"
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Worm"
|
msgid "Worm"
|
||||||
msgstr "Červ"
|
msgstr "Červ"
|
||||||
|
|
||||||
|
@ -1859,8 +2005,14 @@ msgstr "\\Fialové vlajky"
|
||||||
msgid "\\Yellow flags"
|
msgid "\\Yellow flags"
|
||||||
msgstr "\\Žluté vlajky"
|
msgstr "\\Žluté vlajky"
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "colobot.info"
|
msgid "colobot.info"
|
||||||
msgstr "colobot.info"
|
msgstr "colobot.info"
|
||||||
|
|
||||||
msgid "epsitec.com"
|
msgid "epsitec.com"
|
||||||
msgstr "epsitec.com"
|
msgstr "epsitec.com"
|
||||||
|
|
||||||
|
#~ msgid "Build a destroyer"
|
||||||
|
#~ msgstr "Postavit drtič"
|
||||||
|
|
164
po/de.po
164
po/de.po
|
@ -33,6 +33,9 @@ msgstr "Es fehlt eine geschlossene eckige Klammer \" ] \""
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "..behind"
|
msgid "..behind"
|
||||||
msgstr "..hinten"
|
msgstr "..hinten"
|
||||||
|
|
||||||
|
@ -111,9 +114,6 @@ msgstr "Analyse schon durchgeführt"
|
||||||
msgid "Analysis performed"
|
msgid "Analysis performed"
|
||||||
msgstr "Analyse vollendet"
|
msgstr "Analyse vollendet"
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
|
||||||
msgstr "Analysiert nur Orgastoff"
|
|
||||||
|
|
||||||
msgid "Anisotropy level\\Anisotropy level"
|
msgid "Anisotropy level\\Anisotropy level"
|
||||||
msgstr "Anisotropie-Level\\Anisotropie-Level"
|
msgstr "Anisotropie-Level\\Anisotropie-Level"
|
||||||
|
|
||||||
|
@ -129,6 +129,9 @@ msgstr "Aussehen\\Erscheinungsbild des Astronauten einstellen"
|
||||||
msgid "Apply changes\\Activates the changed settings"
|
msgid "Apply changes\\Activates the changed settings"
|
||||||
msgstr "Änderungen anwenden\\Getätigte Einstellungen anwenden"
|
msgstr "Änderungen anwenden\\Getätigte Einstellungen anwenden"
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Appropriate constructor missing"
|
msgid "Appropriate constructor missing"
|
||||||
msgstr "Es gibt keinen geeigneten Konstruktor"
|
msgstr "Es gibt keinen geeigneten Konstruktor"
|
||||||
|
|
||||||
|
@ -186,6 +189,9 @@ msgstr "Roboter zerstört"
|
||||||
msgid "Bot factory"
|
msgid "Bot factory"
|
||||||
msgstr "Roboterfabrik"
|
msgstr "Roboterfabrik"
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a bot factory"
|
msgid "Build a bot factory"
|
||||||
msgstr "Baut eine Roboterfabrik"
|
msgstr "Baut eine Roboterfabrik"
|
||||||
|
|
||||||
|
@ -198,12 +204,12 @@ msgstr "Baut einen Geschützturm"
|
||||||
msgid "Build a derrick"
|
msgid "Build a derrick"
|
||||||
msgstr "Baut einen Bohrturm"
|
msgstr "Baut einen Bohrturm"
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
|
||||||
msgstr "Baue einen Zerstörer"
|
|
||||||
|
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr "Baut einen Infoserver"
|
msgstr "Baut einen Infoserver"
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a legged grabber"
|
msgid "Build a legged grabber"
|
||||||
msgstr "Baut einen Krabbeltransporter"
|
msgstr "Baut einen Krabbeltransporter"
|
||||||
|
|
||||||
|
@ -249,9 +255,15 @@ msgstr "Baut einen Schutzschild"
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr "Baut einen Kettentaucher"
|
msgstr "Baut einen Kettentaucher"
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr "Baut einen Stampfer"
|
msgstr "Baut einen Stampfer"
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a tracked grabber"
|
msgid "Build a tracked grabber"
|
||||||
msgstr "Baut einen Kettentransporter"
|
msgstr "Baut einen Kettentransporter"
|
||||||
|
|
||||||
|
@ -264,6 +276,12 @@ msgstr "Baut einen Kettenshooter"
|
||||||
msgid "Build a tracked sniffer"
|
msgid "Build a tracked sniffer"
|
||||||
msgstr "Baut einen Kettenschnüffler"
|
msgstr "Baut einen Kettenschnüffler"
|
||||||
|
|
||||||
|
msgid "Build a vault"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a wheeled grabber"
|
msgid "Build a wheeled grabber"
|
||||||
msgstr "Baut einen Radtransporter"
|
msgstr "Baut einen Radtransporter"
|
||||||
|
|
||||||
|
@ -276,6 +294,9 @@ msgstr "Baut einen Radshooter"
|
||||||
msgid "Build a wheeled sniffer"
|
msgid "Build a wheeled sniffer"
|
||||||
msgstr "Baut einen Radschnüffler"
|
msgstr "Baut einen Radschnüffler"
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a winged grabber"
|
msgid "Build a winged grabber"
|
||||||
msgstr "Baut einen Jettransporter"
|
msgstr "Baut einen Jettransporter"
|
||||||
|
|
||||||
|
@ -357,6 +378,9 @@ msgstr "Andere Kamera\\Sichtpunkt einstellen"
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr "Anderer Spieler\\Spielername ändern"
|
msgstr "Anderer Spieler\\Spielername ändern"
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr "Liste der Kapitel:"
|
msgstr "Liste der Kapitel:"
|
||||||
|
|
||||||
|
@ -426,6 +450,12 @@ msgstr "Kopieren"
|
||||||
msgid "Copy (Ctrl+C)"
|
msgid "Copy (Ctrl+C)"
|
||||||
msgstr "Kopieren (Ctrl+C)"
|
msgstr "Kopieren (Ctrl+C)"
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Current mission saved"
|
msgid "Current mission saved"
|
||||||
msgstr "Mission gespeichert"
|
msgstr "Mission gespeichert"
|
||||||
|
|
||||||
|
@ -459,6 +489,9 @@ msgstr "Bohrturm"
|
||||||
msgid "Descend\\Reduces the power of the jet"
|
msgid "Descend\\Reduces the power of the jet"
|
||||||
msgstr "Sinken\\Leistung des Triebwerks drosseln"
|
msgstr "Sinken\\Leistung des Triebwerks drosseln"
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Destroy"
|
msgid "Destroy"
|
||||||
msgstr "Zerstören"
|
msgstr "Zerstören"
|
||||||
|
|
||||||
|
@ -471,6 +504,9 @@ msgstr "Einstampfer"
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr "Bildschirm\\Driver und Bildschirmauflösung"
|
msgstr "Bildschirm\\Driver und Bildschirmauflösung"
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr "Division durch Null"
|
msgstr "Division durch Null"
|
||||||
|
|
||||||
|
@ -487,9 +523,15 @@ msgstr "Die Türen werden von einem Gegenstand blockiert"
|
||||||
msgid "Down (\\key gdown;)"
|
msgid "Down (\\key gdown;)"
|
||||||
msgstr "Sinkt (\\key gdown;)"
|
msgstr "Sinkt (\\key gdown;)"
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Drawer bot"
|
msgid "Drawer bot"
|
||||||
msgstr "Zeichner"
|
msgstr "Zeichner"
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dust\\Dust and dirt on bots and buildings"
|
msgid "Dust\\Dust and dirt on bots and buildings"
|
||||||
msgstr "Schmutz\\Schmutz auf Robotern und Bauten"
|
msgstr "Schmutz\\Schmutz auf Robotern und Bauten"
|
||||||
|
|
||||||
|
@ -508,6 +550,12 @@ msgstr "Gewähltes Programm bearbeiten"
|
||||||
msgid "Egg"
|
msgid "Egg"
|
||||||
msgstr "Ei"
|
msgstr "Ei"
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "End of block missing"
|
msgid "End of block missing"
|
||||||
msgstr "Es fehlt eine geschlossene geschweifte Klammer \"}\" (Ende des Blocks)"
|
msgstr "Es fehlt eine geschlossene geschweifte Klammer \"}\" (Ende des Blocks)"
|
||||||
|
|
||||||
|
@ -723,6 +771,9 @@ msgstr "Falscher Batterietyp"
|
||||||
msgid "Inappropriate object"
|
msgid "Inappropriate object"
|
||||||
msgstr "Objekt ungeeignet"
|
msgstr "Objekt ungeeignet"
|
||||||
|
|
||||||
|
msgid "Inappropriate sample"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Incorrect index type"
|
msgid "Incorrect index type"
|
||||||
msgstr "Falscher Typ für einen Index"
|
msgstr "Falscher Typ für einen Index"
|
||||||
|
|
||||||
|
@ -732,6 +783,9 @@ msgstr "Von Virus infiziert, zeitweise außer Betrieb"
|
||||||
msgid "Information exchange post"
|
msgid "Information exchange post"
|
||||||
msgstr "Infoserver"
|
msgstr "Infoserver"
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Instruction \"break\" outside a loop"
|
msgid "Instruction \"break\" outside a loop"
|
||||||
msgstr "Anweisung \"break\" außerhalb einer Schleife"
|
msgstr "Anweisung \"break\" außerhalb einer Schleife"
|
||||||
|
|
||||||
|
@ -792,6 +846,9 @@ msgstr "Hilfe über den Begriff (\\key cbot;)"
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "LADEN"
|
msgstr "LADEN"
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr "Transporter"
|
msgstr "Transporter"
|
||||||
|
|
||||||
|
@ -890,9 +947,21 @@ msgstr "Missionen"
|
||||||
msgid "Missions on this planet:"
|
msgid "Missions on this planet:"
|
||||||
msgstr "Liste der Missionen des Planeten:"
|
msgstr "Liste der Missionen des Planeten:"
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr "Missionen+"
|
||||||
|
|
||||||
msgid "Missions\\Select mission"
|
msgid "Missions\\Select mission"
|
||||||
msgstr "Missionen\\Aufbruch ins Weltall"
|
msgstr "Missionen\\Aufbruch ins Weltall"
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
||||||
msgstr "Umkehr X\\Umkehr der Kameradrehung X-Achse"
|
msgstr "Umkehr X\\Umkehr der Kameradrehung X-Achse"
|
||||||
|
|
||||||
|
@ -905,6 +974,9 @@ msgstr "Gewähltes Programm nach unten"
|
||||||
msgid "Move selected program up"
|
msgid "Move selected program up"
|
||||||
msgstr "Gewähltes Programm nach oben"
|
msgstr "Gewähltes Programm nach oben"
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mute\\No sound"
|
msgid "Mute\\No sound"
|
||||||
msgstr "Kein Ton\\Keine Geräusche und Geräuschkulisse"
|
msgstr "Kein Ton\\Keine Geräusche und Geräuschkulisse"
|
||||||
|
|
||||||
|
@ -923,6 +995,9 @@ msgstr "Neu"
|
||||||
msgid "New ..."
|
msgid "New ..."
|
||||||
msgstr "Neu ..."
|
msgstr "Neu ..."
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr "Neuer Roboter verfügbar"
|
msgstr "Neuer Roboter verfügbar"
|
||||||
|
|
||||||
|
@ -935,6 +1010,12 @@ msgstr "Nächstes auswählen\\Nächstes Objekt auswählen"
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Nein"
|
msgstr "Nein"
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No energy in the subsoil"
|
msgid "No energy in the subsoil"
|
||||||
msgstr "Kein unterirdisches Energievorkommen"
|
msgstr "Kein unterirdisches Energievorkommen"
|
||||||
|
|
||||||
|
@ -1055,6 +1136,9 @@ msgstr "Öffnen"
|
||||||
msgid "Open (Ctrl+O)"
|
msgid "Open (Ctrl+O)"
|
||||||
msgstr "Öffnen (Ctrl+O)"
|
msgstr "Öffnen (Ctrl+O)"
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Opening brace missing"
|
msgid "Opening brace missing"
|
||||||
msgstr "Es fehlt eine offene geschweifte Klammer\"{\""
|
msgstr "Es fehlt eine offene geschweifte Klammer\"{\""
|
||||||
|
|
||||||
|
@ -1079,6 +1163,9 @@ msgstr "Ort der Meldung\\Zeigt den Ort, von dem die letzte Meldung stammt"
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr "Ursprünglichen Spiel entwickelt von:"
|
msgstr "Ursprünglichen Spiel entwickelt von:"
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Parameters missing"
|
msgid "Parameters missing"
|
||||||
msgstr "Nicht genug Parameter"
|
msgstr "Nicht genug Parameter"
|
||||||
|
|
||||||
|
@ -1112,6 +1199,9 @@ msgstr "Stelle schon besetzt"
|
||||||
msgid "Planets:"
|
msgid "Planets:"
|
||||||
msgstr "Liste der Planeten:"
|
msgstr "Liste der Planeten:"
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Plans for defense tower available"
|
msgid "Plans for defense tower available"
|
||||||
msgstr "Errichtung eines Geschützturms möglich"
|
msgstr "Errichtung eines Geschützturms möglich"
|
||||||
|
|
||||||
|
@ -1260,6 +1350,9 @@ msgstr "Rote Fahne"
|
||||||
msgid "Reflections on the buttons \\Shiny buttons"
|
msgid "Reflections on the buttons \\Shiny buttons"
|
||||||
msgstr "Glänzende Tasten\\Glänzende Tasten in den Menüs"
|
msgstr "Glänzende Tasten\\Glänzende Tasten in den Menüs"
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remains of Apollo mission"
|
msgid "Remains of Apollo mission"
|
||||||
msgstr "Überreste einer Apollo-Mission"
|
msgstr "Überreste einer Apollo-Mission"
|
||||||
|
|
||||||
|
@ -1317,6 +1410,9 @@ msgstr "Robby"
|
||||||
msgid "Ruin"
|
msgid "Ruin"
|
||||||
msgstr "Gebäuderuine"
|
msgstr "Gebäuderuine"
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for defense tower"
|
msgid "Run research program for defense tower"
|
||||||
msgstr "Forschungsprogramm Geschützturm"
|
msgstr "Forschungsprogramm Geschützturm"
|
||||||
|
|
||||||
|
@ -1338,6 +1434,9 @@ msgstr "Forschungsprogramm Schutzschild"
|
||||||
msgid "Run research program for shooter"
|
msgid "Run research program for shooter"
|
||||||
msgstr "Forschungsprogramm Shooterkanone"
|
msgstr "Forschungsprogramm Shooterkanone"
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for thumper"
|
msgid "Run research program for thumper"
|
||||||
msgstr "Forschungsprogramm Stampfer"
|
msgstr "Forschungsprogramm Stampfer"
|
||||||
|
|
||||||
|
@ -1368,6 +1467,9 @@ msgstr "Speichern\\Aktuelle Mission speichern"
|
||||||
msgid "Save\\Saves the current mission"
|
msgid "Save\\Saves the current mission"
|
||||||
msgstr "Speichern\\Speichert die Mission"
|
msgstr "Speichern\\Speichert die Mission"
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Select the astronaut\\Selects the astronaut"
|
msgid "Select the astronaut\\Selects the astronaut"
|
||||||
msgstr "Astronauten auswählen\\Astronauten auswählen"
|
msgstr "Astronauten auswählen\\Astronauten auswählen"
|
||||||
|
|
||||||
|
@ -1434,6 +1536,15 @@ msgstr "Geräusche:\\Lautstärke Motoren, Stimmen, usw."
|
||||||
msgid "Sound\\Music and game sound volume"
|
msgid "Sound\\Music and game sound volume"
|
||||||
msgstr "Geräusche\\Lautstärke Geräusche und Musik"
|
msgstr "Geräusche\\Lautstärke Geräusche und Musik"
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Spaceship"
|
msgid "Spaceship"
|
||||||
msgstr "Raumschiff"
|
msgstr "Raumschiff"
|
||||||
|
|
||||||
|
@ -1512,6 +1623,10 @@ msgstr "Texturfilterung\\Texturfilterung"
|
||||||
msgid "Textures"
|
msgid "Textures"
|
||||||
msgstr "Texturen"
|
msgstr "Texturen"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The battle has ended"
|
msgid "The battle has ended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1524,9 +1639,16 @@ msgstr "Die Funktion hat kein Ergebnis zurückgegeben"
|
||||||
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
||||||
msgstr "Mission noch nicht beendet (Drücken Sie auf \\key help; für weitere Informationen)"
|
msgstr "Mission noch nicht beendet (Drücken Sie auf \\key help; für weitere Informationen)"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The types of the two operands are incompatible"
|
msgid "The types of the two operands are incompatible"
|
||||||
msgstr "Die zwei Operanden sind nicht kompatibel"
|
msgstr "Die zwei Operanden sind nicht kompatibel"
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "This class already exists"
|
msgid "This class already exists"
|
||||||
msgstr "Diese Klasse gibt es schon"
|
msgstr "Diese Klasse gibt es schon"
|
||||||
|
|
||||||
|
@ -1600,6 +1722,9 @@ msgstr "Zu viele Fahnen dieser Farbe (Maximum 5)"
|
||||||
msgid "Too many parameters"
|
msgid "Too many parameters"
|
||||||
msgstr "Zu viele Parameter"
|
msgstr "Zu viele Parameter"
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Tracked grabber"
|
msgid "Tracked grabber"
|
||||||
msgstr "Transporter"
|
msgstr "Transporter"
|
||||||
|
|
||||||
|
@ -1648,6 +1773,9 @@ msgstr "Einheit"
|
||||||
msgid "Unknown Object"
|
msgid "Unknown Object"
|
||||||
msgstr "Das Objekt existiert nicht"
|
msgstr "Das Objekt existiert nicht"
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Unknown command"
|
msgid "Unknown command"
|
||||||
msgstr "Befehl unbekannt"
|
msgstr "Befehl unbekannt"
|
||||||
|
|
||||||
|
@ -1660,6 +1788,9 @@ msgstr "Unbekannte Funktion"
|
||||||
msgid "Up (\\key gup;)"
|
msgid "Up (\\key gup;)"
|
||||||
msgstr "Steigt (\\key gup;)"
|
msgstr "Steigt (\\key gup;)"
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Uranium deposit (site for derrick)"
|
msgid "Uranium deposit (site for derrick)"
|
||||||
msgstr "Markierung für unterirdisches Platinvorkommen"
|
msgstr "Markierung für unterirdisches Platinvorkommen"
|
||||||
|
|
||||||
|
@ -1681,6 +1812,9 @@ msgstr "Der Wert dieser Variable wurde nicht definiert"
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "Bunker"
|
msgstr "Bunker"
|
||||||
|
|
||||||
|
msgid "Version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1699,6 +1833,12 @@ msgstr "Wespe tödlich verwundet"
|
||||||
msgid "Waste"
|
msgid "Waste"
|
||||||
msgstr "Abfall"
|
msgstr "Abfall"
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Wheeled grabber"
|
msgid "Wheeled grabber"
|
||||||
msgstr "Transporter"
|
msgstr "Transporter"
|
||||||
|
|
||||||
|
@ -1711,6 +1851,9 @@ msgstr "Shooter"
|
||||||
msgid "Wheeled sniffer"
|
msgid "Wheeled sniffer"
|
||||||
msgstr "Schnüffler"
|
msgstr "Schnüffler"
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Winged grabber"
|
msgid "Winged grabber"
|
||||||
msgstr "Transporter"
|
msgstr "Transporter"
|
||||||
|
|
||||||
|
@ -1726,6 +1869,9 @@ msgstr "Schnüffler"
|
||||||
msgid "Withdraw shield (\\key action;)"
|
msgid "Withdraw shield (\\key action;)"
|
||||||
msgstr "Schutzschild einholen (\\key action;)"
|
msgstr "Schutzschild einholen (\\key action;)"
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Worm"
|
msgid "Worm"
|
||||||
msgstr "Wurm"
|
msgstr "Wurm"
|
||||||
|
|
||||||
|
@ -1874,6 +2020,9 @@ msgstr "\\Violette Fahne"
|
||||||
msgid "\\Yellow flags"
|
msgid "\\Yellow flags"
|
||||||
msgstr "\\Gelbe Fahne"
|
msgstr "\\Gelbe Fahne"
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "colobot.info"
|
msgid "colobot.info"
|
||||||
msgstr "colobot.info"
|
msgstr "colobot.info"
|
||||||
|
|
||||||
|
@ -1895,6 +2044,9 @@ msgstr "epsitec.com"
|
||||||
#~ msgid "3D sound\\3D positioning of the sound"
|
#~ msgid "3D sound\\3D positioning of the sound"
|
||||||
#~ msgstr "3D-Geräusche\\Orten der Geräusche im Raum"
|
#~ msgstr "3D-Geräusche\\Orten der Geräusche im Raum"
|
||||||
|
|
||||||
|
#~ msgid "Build a destroyer"
|
||||||
|
#~ msgstr "Baue einen Zerstörer"
|
||||||
|
|
||||||
#~ msgid "Building too close"
|
#~ msgid "Building too close"
|
||||||
#~ msgstr "Gebäude zu nahe"
|
#~ msgstr "Gebäude zu nahe"
|
||||||
|
|
||||||
|
|
299
po/fr.po
299
po/fr.po
|
@ -1,21 +1,21 @@
|
||||||
# Didier Raboud <odyx@debian.org>, 2012, 2015, 2016.
|
# Didier Raboud <odyx@debian.org>, 2012, 2015, 2016.
|
||||||
# Martin Quinson <mquinson@debian.org>, 2016
|
# Martin Quinson <mquinson@debian.org>, 2016.
|
||||||
# B-CE, 2018
|
# B-CE <.>, 2018, 2019.
|
||||||
# Pascal Audoux <pascal.audoux@gmail.com>, 2018
|
# Pascal Audoux <pascal.audoux@gmail.com>, 2018.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Colobot 0.1.11\n"
|
"Project-Id-Version: Colobot 0.1.12\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: DATE\n"
|
"POT-Creation-Date: DATE\n"
|
||||||
"PO-Revision-Date: 2019-01-09 23:07+0100\n"
|
"PO-Revision-Date: 2019-06-13 01:31+0200\n"
|
||||||
"Last-Translator: B-CE\n"
|
"Last-Translator: BCE <.>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: French <>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
"X-Generator: Poedit 2.0.6\n"
|
"X-Generator: Lokalize 18.12.3\n"
|
||||||
"X-Language: fr_FR\n"
|
"X-Language: fr_FR\n"
|
||||||
"X-Source-Language: en_US\n"
|
"X-Source-Language: en_US\n"
|
||||||
|
|
||||||
|
@ -32,6 +32,9 @@ msgstr "\" ] \" manquant"
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr "%s: %d points"
|
msgstr "%s: %d points"
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "..behind"
|
msgid "..behind"
|
||||||
msgstr "..derrière"
|
msgstr "..derrière"
|
||||||
|
|
||||||
|
@ -39,7 +42,7 @@ msgid "..in front"
|
||||||
msgstr "..devant"
|
msgstr "..devant"
|
||||||
|
|
||||||
msgid "..power cell"
|
msgid "..power cell"
|
||||||
msgstr "..pile"
|
msgstr "..batterie"
|
||||||
|
|
||||||
msgid "1) First click on the key you want to redefine."
|
msgid "1) First click on the key you want to redefine."
|
||||||
msgstr "1) Cliquez d'abord sur la touche à redéfinir."
|
msgstr "1) Cliquez d'abord sur la touche à redéfinir."
|
||||||
|
@ -110,9 +113,6 @@ msgstr "Analyse déjà effectuée"
|
||||||
msgid "Analysis performed"
|
msgid "Analysis performed"
|
||||||
msgstr "Analyse terminée"
|
msgstr "Analyse terminée"
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
|
||||||
msgstr "N'analyse que la matière organique"
|
|
||||||
|
|
||||||
msgid "Anisotropy level\\Anisotropy level"
|
msgid "Anisotropy level\\Anisotropy level"
|
||||||
msgstr "Niveau d'anisotropie\\Niveau d'anisotropie"
|
msgstr "Niveau d'anisotropie\\Niveau d'anisotropie"
|
||||||
|
|
||||||
|
@ -128,6 +128,9 @@ msgstr "Aspect\\Choisir votre aspect"
|
||||||
msgid "Apply changes\\Activates the changed settings"
|
msgid "Apply changes\\Activates the changed settings"
|
||||||
msgstr "Appliquer les changements\\Active les changements effectués"
|
msgstr "Appliquer les changements\\Active les changements effectués"
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Appropriate constructor missing"
|
msgid "Appropriate constructor missing"
|
||||||
msgstr "Constructeur approprié manquant"
|
msgstr "Constructeur approprié manquant"
|
||||||
|
|
||||||
|
@ -141,10 +144,10 @@ msgid "Automatic indent\\When program editing"
|
||||||
msgstr "Indentation automatique\\Pendant l'édition d'un programme"
|
msgstr "Indentation automatique\\Pendant l'édition d'un programme"
|
||||||
|
|
||||||
msgid "Autosave interval\\How often your game will autosave"
|
msgid "Autosave interval\\How often your game will autosave"
|
||||||
msgstr "Interval d'auto-sauvegarde\\À quels intervals les parties vont-t-elles êtres sauvegardées automatiquement"
|
msgstr "Interval auto-sauvegarde\\À quels intervals les parties vont-t-elles êtres sauvegardées automatiquement"
|
||||||
|
|
||||||
msgid "Autosave slots\\How many autosave slots you'll have"
|
msgid "Autosave slots\\How many autosave slots you'll have"
|
||||||
msgstr "Nombre d'auto-sauvegardes\\Combien d'auto-sauvegarde seront conservées"
|
msgstr "Nb auto-sauvegardes\\Combien d'auto-sauvegarde seront conservées"
|
||||||
|
|
||||||
msgid "Autosave\\Enables autosave"
|
msgid "Autosave\\Enables autosave"
|
||||||
msgstr "Auto-sauvegarde\\Activer l'auto-sauvegarde"
|
msgstr "Auto-sauvegarde\\Activer l'auto-sauvegarde"
|
||||||
|
@ -186,13 +189,16 @@ msgid "Bot destroyed"
|
||||||
msgstr "Robot détruit"
|
msgstr "Robot détruit"
|
||||||
|
|
||||||
msgid "Bot factory"
|
msgid "Bot factory"
|
||||||
msgstr "Fabrique de robots"
|
msgstr "Usine de robots"
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a bot factory"
|
msgid "Build a bot factory"
|
||||||
msgstr "Construire une fabrique de robots"
|
msgstr "Construire une usine de robots"
|
||||||
|
|
||||||
msgid "Build a converter"
|
msgid "Build a converter"
|
||||||
msgstr "Construire un convertisseur"
|
msgstr "Construire une raffinerie"
|
||||||
|
|
||||||
msgid "Build a defense tower"
|
msgid "Build a defense tower"
|
||||||
msgstr "Construire une tour"
|
msgstr "Construire une tour"
|
||||||
|
@ -200,14 +206,14 @@ msgstr "Construire une tour"
|
||||||
msgid "Build a derrick"
|
msgid "Build a derrick"
|
||||||
msgstr "Construire un derrick"
|
msgstr "Construire un derrick"
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
|
||||||
msgstr "Construire un destructeur"
|
|
||||||
|
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr "Construire une borne d'information"
|
msgstr "Construire une station relais"
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a legged grabber"
|
msgid "Build a legged grabber"
|
||||||
msgstr "Fabriquer un déménageur à pattes"
|
msgstr "Fabriquer un préhenseur à pattes"
|
||||||
|
|
||||||
msgid "Build a legged orga shooter"
|
msgid "Build a legged orga shooter"
|
||||||
msgstr "Fabriquer un tireur organique à pattes"
|
msgstr "Fabriquer un tireur organique à pattes"
|
||||||
|
@ -225,10 +231,10 @@ msgid "Build a nuclear power plant"
|
||||||
msgstr "Construire une centrale nucléaire"
|
msgstr "Construire une centrale nucléaire"
|
||||||
|
|
||||||
msgid "Build a phazer shooter"
|
msgid "Build a phazer shooter"
|
||||||
msgstr "Fabriquer un robot canon à phases"
|
msgstr "Fabriquer un robot canon hachoir"
|
||||||
|
|
||||||
msgid "Build a power cell factory"
|
msgid "Build a power cell factory"
|
||||||
msgstr "Construire une fabrique de piles"
|
msgstr "Construire une fabrique de batteries"
|
||||||
|
|
||||||
msgid "Build a power station"
|
msgid "Build a power station"
|
||||||
msgstr "Construire une station de recharge"
|
msgstr "Construire une station de recharge"
|
||||||
|
@ -251,11 +257,17 @@ msgstr "Fabriquer un robot bouclier"
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr "Fabriquer un robot sous-marin"
|
msgstr "Fabriquer un robot sous-marin"
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr "Fabriquer un robot secoueur"
|
msgstr "Fabriquer un robot secoueur"
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a tracked grabber"
|
msgid "Build a tracked grabber"
|
||||||
msgstr "Fabriquer un déménageur à chenilles"
|
msgstr "Fabriquer un préhenseur à chenilles"
|
||||||
|
|
||||||
msgid "Build a tracked orga shooter"
|
msgid "Build a tracked orga shooter"
|
||||||
msgstr "Fabriquer un tireur organique à chenilles"
|
msgstr "Fabriquer un tireur organique à chenilles"
|
||||||
|
@ -266,8 +278,14 @@ msgstr "Fabriquer un tireur à chenilles"
|
||||||
msgid "Build a tracked sniffer"
|
msgid "Build a tracked sniffer"
|
||||||
msgstr "Fabriquer un renifleur à chenilles"
|
msgstr "Fabriquer un renifleur à chenilles"
|
||||||
|
|
||||||
|
msgid "Build a vault"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a wheeled grabber"
|
msgid "Build a wheeled grabber"
|
||||||
msgstr "Fabriquer un déménageur à roues"
|
msgstr "Fabriquer un préhenseur à roues"
|
||||||
|
|
||||||
msgid "Build a wheeled orga shooter"
|
msgid "Build a wheeled orga shooter"
|
||||||
msgstr "Fabriquer un tireur organique à roues"
|
msgstr "Fabriquer un tireur organique à roues"
|
||||||
|
@ -278,8 +296,11 @@ msgstr "Fabriquer un tireur à roues"
|
||||||
msgid "Build a wheeled sniffer"
|
msgid "Build a wheeled sniffer"
|
||||||
msgstr "Fabriquer un renifleur à roues"
|
msgstr "Fabriquer un renifleur à roues"
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a winged grabber"
|
msgid "Build a winged grabber"
|
||||||
msgstr "Fabriquer un déménageur volant"
|
msgstr "Fabriquer un préhenseur volant"
|
||||||
|
|
||||||
msgid "Build a winged orga shooter"
|
msgid "Build a winged orga shooter"
|
||||||
msgstr "Fabriquer un tireur organique volant"
|
msgstr "Fabriquer un tireur organique volant"
|
||||||
|
@ -315,19 +336,19 @@ msgid "Camera border scrolling\\Scrolling when the mouse touches right or left b
|
||||||
msgstr "Défilement dans les bords\\Défilement lorsque la souris touche les bords gauche ou droite"
|
msgstr "Défilement dans les bords\\Défilement lorsque la souris touche les bords gauche ou droite"
|
||||||
|
|
||||||
msgid "Camera closer\\Moves the camera forward"
|
msgid "Camera closer\\Moves the camera forward"
|
||||||
msgstr "Caméra plus proche\\Avance la caméra"
|
msgstr "Plus proche\\Avance la caméra"
|
||||||
|
|
||||||
msgid "Camera down\\Turns the camera down"
|
msgid "Camera down\\Turns the camera down"
|
||||||
msgstr "Baisser caméra\\Baisse la caméra"
|
msgstr "Plus bas\\Tourne la caméra vers le bas"
|
||||||
|
|
||||||
msgid "Camera left\\Turns the camera left"
|
msgid "Camera left\\Turns the camera left"
|
||||||
msgstr "Caméra à gauche\\Tourne la caméra vers la gauche"
|
msgstr "À gauche\\Tourne la caméra vers la gauche"
|
||||||
|
|
||||||
msgid "Camera right\\Turns the camera right"
|
msgid "Camera right\\Turns the camera right"
|
||||||
msgstr "Caméra à droite\\Tourne la caméra vers la droite"
|
msgstr "À droite\\Tourne la caméra vers la droite"
|
||||||
|
|
||||||
msgid "Camera up\\Turns the camera up"
|
msgid "Camera up\\Turns the camera up"
|
||||||
msgstr "Lever caméra\\Monte la caméra"
|
msgstr "Plus haut\\Tourne la caméra vers le haut"
|
||||||
|
|
||||||
msgid "Can not produce not researched object"
|
msgid "Can not produce not researched object"
|
||||||
msgstr "Impossible de créer un objet n'ayant pas été recherché"
|
msgstr "Impossible de créer un objet n'ayant pas été recherché"
|
||||||
|
@ -359,6 +380,9 @@ msgstr "Changement de caméra\\Autre de point de vue"
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr "Autre joueur\\Choix du nom du joueur"
|
msgstr "Autre joueur\\Choix du nom du joueur"
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr "Liste des chapitres :"
|
msgstr "Liste des chapitres :"
|
||||||
|
|
||||||
|
@ -366,7 +390,7 @@ msgid "Cheat console\\Show cheat console"
|
||||||
msgstr "Console de triche\\Montre la console de triche"
|
msgstr "Console de triche\\Montre la console de triche"
|
||||||
|
|
||||||
msgid "Checkpoint"
|
msgid "Checkpoint"
|
||||||
msgstr "Indicateur"
|
msgstr "Point de passage"
|
||||||
|
|
||||||
msgid "Class name expected"
|
msgid "Class name expected"
|
||||||
msgstr "Nom de classe attendu"
|
msgstr "Nom de classe attendu"
|
||||||
|
@ -420,7 +444,7 @@ msgid "Controls\\Keyboard, joystick and mouse settings"
|
||||||
msgstr "Commandes\\Touches du clavier"
|
msgstr "Commandes\\Touches du clavier"
|
||||||
|
|
||||||
msgid "Converts ore to titanium"
|
msgid "Converts ore to titanium"
|
||||||
msgstr "Conversion de minerai en titane"
|
msgstr "Raffinage de minerai en titane"
|
||||||
|
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Copier"
|
msgstr "Copier"
|
||||||
|
@ -428,6 +452,12 @@ msgstr "Copier"
|
||||||
msgid "Copy (Ctrl+C)"
|
msgid "Copy (Ctrl+C)"
|
||||||
msgstr "Copier (Ctrl+C)"
|
msgstr "Copier (Ctrl+C)"
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Current mission saved"
|
msgid "Current mission saved"
|
||||||
msgstr "Enregistrement effectué"
|
msgstr "Enregistrement effectué"
|
||||||
|
|
||||||
|
@ -461,6 +491,9 @@ msgstr "Derrick"
|
||||||
msgid "Descend\\Reduces the power of the jet"
|
msgid "Descend\\Reduces the power of the jet"
|
||||||
msgstr "Descendre\\Diminuer la puissance du réacteur"
|
msgstr "Descendre\\Diminuer la puissance du réacteur"
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Destroy"
|
msgid "Destroy"
|
||||||
msgstr "Détruire"
|
msgstr "Détruire"
|
||||||
|
|
||||||
|
@ -473,6 +506,9 @@ msgstr "Destructeur"
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr "Affichage\\Pilote et résolution d'affichage"
|
msgstr "Affichage\\Pilote et résolution d'affichage"
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr "Division par zéro"
|
msgstr "Division par zéro"
|
||||||
|
|
||||||
|
@ -489,9 +525,15 @@ msgstr "Portes bloquées par un robot ou un objet"
|
||||||
msgid "Down (\\key gdown;)"
|
msgid "Down (\\key gdown;)"
|
||||||
msgstr "Descend (\\key gdown;)"
|
msgstr "Descend (\\key gdown;)"
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Drawer bot"
|
msgid "Drawer bot"
|
||||||
msgstr "Robot dessinateur"
|
msgstr "Robot dessinateur"
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dust\\Dust and dirt on bots and buildings"
|
msgid "Dust\\Dust and dirt on bots and buildings"
|
||||||
msgstr "Salissures\\Salissures des robots et bâtiments"
|
msgstr "Salissures\\Salissures des robots et bâtiments"
|
||||||
|
|
||||||
|
@ -510,11 +552,17 @@ msgstr "Éditer le programme sélectionné"
|
||||||
msgid "Egg"
|
msgid "Egg"
|
||||||
msgstr "Oeuf"
|
msgstr "Oeuf"
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "End of block missing"
|
msgid "End of block missing"
|
||||||
msgstr "Il manque la fin du bloc"
|
msgstr "Il manque la fin du bloc"
|
||||||
|
|
||||||
msgid "Energy deposit (site for power station)"
|
msgid "Energy deposit (site for power station)"
|
||||||
msgstr "Emplacement pour une station de recharge ou une fabrique de pile"
|
msgstr "Sous sol énergétique (Emplacement pour une station de recharge ou une fabrique de batteries)"
|
||||||
|
|
||||||
msgid "Energy level"
|
msgid "Energy level"
|
||||||
msgstr "Niveau d'énergie"
|
msgstr "Niveau d'énergie"
|
||||||
|
@ -569,7 +617,7 @@ msgstr "But/Objectif"
|
||||||
|
|
||||||
# OBJECT_END : GoalArea
|
# OBJECT_END : GoalArea
|
||||||
msgid "Fixed mine"
|
msgid "Fixed mine"
|
||||||
msgstr "Mine fixe"
|
msgstr "Mine anti-personnel"
|
||||||
|
|
||||||
msgid "Flat ground not large enough"
|
msgid "Flat ground not large enough"
|
||||||
msgstr "Sol plat pas assez grand"
|
msgstr "Sol plat pas assez grand"
|
||||||
|
@ -600,7 +648,7 @@ msgid "Found a site for a derrick"
|
||||||
msgstr "Emplacement pour un derrick trouvé"
|
msgstr "Emplacement pour un derrick trouvé"
|
||||||
|
|
||||||
msgid "Found a site for power station"
|
msgid "Found a site for power station"
|
||||||
msgstr "Emplacement pour station de recharge ou fabrique de pile trouvé"
|
msgstr "Emplacement pour station de recharge ou fabrique de batteries trouvé"
|
||||||
|
|
||||||
msgid "Found key A (site for derrick)"
|
msgid "Found key A (site for derrick)"
|
||||||
msgstr "Emplacement pour un derrick (clé A)"
|
msgstr "Emplacement pour un derrick (clé A)"
|
||||||
|
@ -720,11 +768,14 @@ msgid "Inappropriate bot"
|
||||||
msgstr "Robot inadapté"
|
msgstr "Robot inadapté"
|
||||||
|
|
||||||
msgid "Inappropriate cell type"
|
msgid "Inappropriate cell type"
|
||||||
msgstr "Pas le bon type de pile"
|
msgstr "Source d'énergie non adapté"
|
||||||
|
|
||||||
msgid "Inappropriate object"
|
msgid "Inappropriate object"
|
||||||
msgstr "Pas le bon objet"
|
msgstr "Pas le bon objet"
|
||||||
|
|
||||||
|
msgid "Inappropriate sample"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Incorrect index type"
|
msgid "Incorrect index type"
|
||||||
msgstr "Mauvais type d'index"
|
msgstr "Mauvais type d'index"
|
||||||
|
|
||||||
|
@ -732,7 +783,10 @@ msgid "Infected by a virus; temporarily out of order"
|
||||||
msgstr "Infecté par un virus; ne fonctionne plus temporairement"
|
msgstr "Infecté par un virus; ne fonctionne plus temporairement"
|
||||||
|
|
||||||
msgid "Information exchange post"
|
msgid "Information exchange post"
|
||||||
msgstr "Borne d'information"
|
msgstr "Station relais"
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Instruction \"break\" outside a loop"
|
msgid "Instruction \"break\" outside a loop"
|
||||||
msgstr "Instruction \"break\" en dehors d'une boucle"
|
msgstr "Instruction \"break\" en dehors d'une boucle"
|
||||||
|
@ -794,8 +848,11 @@ msgstr "Aide sur le mot-clé (\\key cbot;)"
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "CHARGEMENT"
|
msgstr "CHARGEMENT"
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr "Robot déménageur à pattes"
|
msgstr "Robot préhenseur à pattes"
|
||||||
|
|
||||||
msgid "Legged orga shooter"
|
msgid "Legged orga shooter"
|
||||||
msgstr "Robot tireur organique à pattes"
|
msgstr "Robot tireur organique à pattes"
|
||||||
|
@ -866,7 +923,7 @@ msgid "Lunar Roving Vehicle"
|
||||||
msgstr "Véhicule d'exploration lunaire"
|
msgstr "Véhicule d'exploration lunaire"
|
||||||
|
|
||||||
msgid "MSAA\\Multisample anti-aliasing"
|
msgid "MSAA\\Multisample anti-aliasing"
|
||||||
msgstr "ACME\\Anticrénelage multiéchantillon"
|
msgstr "ACME\\Anticrénelage multiéchantillon (MSAA: Multisample anti-aliasing)"
|
||||||
|
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Taille maximale"
|
msgstr "Taille maximale"
|
||||||
|
@ -892,9 +949,21 @@ msgstr "Missions"
|
||||||
msgid "Missions on this planet:"
|
msgid "Missions on this planet:"
|
||||||
msgstr "Liste des missions du chapitre :"
|
msgstr "Liste des missions du chapitre :"
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr "Missions+"
|
||||||
|
|
||||||
msgid "Missions\\Select mission"
|
msgid "Missions\\Select mission"
|
||||||
msgstr "Missions\\La grande aventure"
|
msgstr "Missions\\La grande aventure"
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
||||||
msgstr "Inversion souris X\\Inversion de la rotation lorsque la souris touche un bord"
|
msgstr "Inversion souris X\\Inversion de la rotation lorsque la souris touche un bord"
|
||||||
|
|
||||||
|
@ -907,6 +976,9 @@ msgstr "Déplace le programme sélectionné vers le bas"
|
||||||
msgid "Move selected program up"
|
msgid "Move selected program up"
|
||||||
msgstr "Déplace le programme sélectionné vers le haut"
|
msgstr "Déplace le programme sélectionné vers le haut"
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mute\\No sound"
|
msgid "Mute\\No sound"
|
||||||
msgstr "Silencieux\\Totalement silencieux"
|
msgstr "Silencieux\\Totalement silencieux"
|
||||||
|
|
||||||
|
@ -925,6 +997,9 @@ msgstr "Nouveau"
|
||||||
msgid "New ..."
|
msgid "New ..."
|
||||||
msgstr "Nouveau ..."
|
msgstr "Nouveau ..."
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr "Nouveau robot disponible"
|
msgstr "Nouveau robot disponible"
|
||||||
|
|
||||||
|
@ -937,6 +1012,12 @@ msgstr "Sélectionner l'objet suivant\\Sélectionner l'objet suivant"
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Non"
|
msgstr "Non"
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No energy in the subsoil"
|
msgid "No energy in the subsoil"
|
||||||
msgstr "Pas d'énergie en sous-sol"
|
msgstr "Pas d'énergie en sous-sol"
|
||||||
|
|
||||||
|
@ -953,7 +1034,7 @@ msgid "No function with this name accepts this number of parameters"
|
||||||
msgstr "Aucune fonction de ce nom n'accepte ce nombre de paramètres"
|
msgstr "Aucune fonction de ce nom n'accepte ce nombre de paramètres"
|
||||||
|
|
||||||
msgid "No information exchange post within range"
|
msgid "No information exchange post within range"
|
||||||
msgstr "Pas de borne d'information accessible"
|
msgstr "Pas de station relais accessible"
|
||||||
|
|
||||||
msgid "No more energy"
|
msgid "No more energy"
|
||||||
msgstr "Plus d'énergie"
|
msgstr "Plus d'énergie"
|
||||||
|
@ -962,7 +1043,7 @@ msgid "No ore in the subsoil"
|
||||||
msgstr "Pas de minerai en sous-sol"
|
msgstr "Pas de minerai en sous-sol"
|
||||||
|
|
||||||
msgid "No power cell"
|
msgid "No power cell"
|
||||||
msgstr "Pas de pile"
|
msgstr "Pas de source d'énergie"
|
||||||
|
|
||||||
msgid "No titanium"
|
msgid "No titanium"
|
||||||
msgstr "Pas de titane"
|
msgstr "Pas de titane"
|
||||||
|
@ -971,7 +1052,7 @@ msgid "No titanium around"
|
||||||
msgstr "Pas de titane accessible"
|
msgstr "Pas de titane accessible"
|
||||||
|
|
||||||
msgid "No titanium ore to convert"
|
msgid "No titanium ore to convert"
|
||||||
msgstr "Pas de minerai de titane à convertir"
|
msgstr "Pas de minerai de titane à raffiner"
|
||||||
|
|
||||||
msgid "No titanium to transform"
|
msgid "No titanium to transform"
|
||||||
msgstr "Pas de titane à transformer"
|
msgstr "Pas de titane à transformer"
|
||||||
|
@ -1016,10 +1097,10 @@ msgid "Nothing to recycle"
|
||||||
msgstr "Rien à recycler"
|
msgstr "Rien à recycler"
|
||||||
|
|
||||||
msgid "Nuclear power cell"
|
msgid "Nuclear power cell"
|
||||||
msgstr "Pile nucléaire"
|
msgstr "Pile atomique"
|
||||||
|
|
||||||
msgid "Nuclear power cell available"
|
msgid "Nuclear power cell available"
|
||||||
msgstr "Pile nucléaire disponible"
|
msgstr "Pile atomique disponible"
|
||||||
|
|
||||||
msgid "Nuclear power station"
|
msgid "Nuclear power station"
|
||||||
msgstr "Centrale nucléaire"
|
msgstr "Centrale nucléaire"
|
||||||
|
@ -1040,7 +1121,7 @@ msgid "OK\\Choose the selected player"
|
||||||
msgstr "D'accord\\Choisir le joueur"
|
msgstr "D'accord\\Choisir le joueur"
|
||||||
|
|
||||||
msgid "OK\\Close program editor and return to game"
|
msgid "OK\\Close program editor and return to game"
|
||||||
msgstr "D'accord\\Compiler le programme"
|
msgstr "D'accord\\Compiler le programme et fermer la fenêtre d'édition"
|
||||||
|
|
||||||
msgid "Object too close"
|
msgid "Object too close"
|
||||||
msgstr "Objet trop proche"
|
msgstr "Objet trop proche"
|
||||||
|
@ -1057,6 +1138,9 @@ msgstr "Ouvrir"
|
||||||
msgid "Open (Ctrl+O)"
|
msgid "Open (Ctrl+O)"
|
||||||
msgstr "Ouvrir (Ctrl+O)"
|
msgstr "Ouvrir (Ctrl+O)"
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Opening brace missing"
|
msgid "Opening brace missing"
|
||||||
msgstr "Début d'un bloc attendu"
|
msgstr "Début d'un bloc attendu"
|
||||||
|
|
||||||
|
@ -1081,6 +1165,9 @@ msgstr "Montrer le lieu d'un message\\Montrer le lieu du dernier message"
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr "Jeu original développé par :"
|
msgstr "Jeu original développé par :"
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Parameters missing"
|
msgid "Parameters missing"
|
||||||
msgstr "Pas assez de paramètres"
|
msgstr "Pas assez de paramètres"
|
||||||
|
|
||||||
|
@ -1103,7 +1190,7 @@ msgid "Pause\\Pause the game without opening menu"
|
||||||
msgstr "Pause\\Mettre le jeu en pause sans ouvrir le menu"
|
msgstr "Pause\\Mettre le jeu en pause sans ouvrir le menu"
|
||||||
|
|
||||||
msgid "Phazer shooter"
|
msgid "Phazer shooter"
|
||||||
msgstr "Robot canon à phases"
|
msgstr "Robot canon hachoir"
|
||||||
|
|
||||||
msgid "Photography"
|
msgid "Photography"
|
||||||
msgstr "Vue de la mission"
|
msgstr "Vue de la mission"
|
||||||
|
@ -1114,6 +1201,9 @@ msgstr "Emplacement occupé"
|
||||||
msgid "Planets:"
|
msgid "Planets:"
|
||||||
msgstr "Liste des planètes :"
|
msgstr "Liste des planètes :"
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Plans for defense tower available"
|
msgid "Plans for defense tower available"
|
||||||
msgstr "Construction d'une tour de défense possible"
|
msgstr "Construction d'une tour de défense possible"
|
||||||
|
|
||||||
|
@ -1121,7 +1211,7 @@ msgid "Plans for nuclear power plant available"
|
||||||
msgstr "Construction d'une centrale nucléaire possible"
|
msgstr "Construction d'une centrale nucléaire possible"
|
||||||
|
|
||||||
msgid "Plans for phazer shooter available"
|
msgid "Plans for phazer shooter available"
|
||||||
msgstr "Fabrication des robots canon à phases possible"
|
msgstr "Fabrication des robots canon hachoir possible"
|
||||||
|
|
||||||
msgid "Plans for shielder available"
|
msgid "Plans for shielder available"
|
||||||
msgstr "Fabrication d'un robot bouclier possible"
|
msgstr "Fabrication d'un robot bouclier possible"
|
||||||
|
@ -1151,13 +1241,13 @@ msgid "Player's name"
|
||||||
msgstr "Nom du joueur"
|
msgstr "Nom du joueur"
|
||||||
|
|
||||||
msgid "Power cell"
|
msgid "Power cell"
|
||||||
msgstr "Pile normale"
|
msgstr "Batterie standard"
|
||||||
|
|
||||||
msgid "Power cell available"
|
msgid "Power cell available"
|
||||||
msgstr "Pile disponible"
|
msgstr "Batterie disponible"
|
||||||
|
|
||||||
msgid "Power cell factory"
|
msgid "Power cell factory"
|
||||||
msgstr "Fabrique de piles"
|
msgstr "Fabrique de batteries"
|
||||||
|
|
||||||
msgid "Power station"
|
msgid "Power station"
|
||||||
msgstr "Station de recharge"
|
msgstr "Station de recharge"
|
||||||
|
@ -1235,7 +1325,7 @@ msgid "Quit\\Quit Colobot: Gold Edition"
|
||||||
msgstr "Quitter\\Quitter Colobot : Édition Gold"
|
msgstr "Quitter\\Quitter Colobot : Édition Gold"
|
||||||
|
|
||||||
msgid "Quit\\Quit the current mission or exercise"
|
msgid "Quit\\Quit the current mission or exercise"
|
||||||
msgstr "Quitter la mission en cours\\Terminer un exercice ou une mssion"
|
msgstr "Quitter la mission en cours\\Terminer un exercice ou une mission"
|
||||||
|
|
||||||
msgid "Radar station"
|
msgid "Radar station"
|
||||||
msgstr "Radar"
|
msgstr "Radar"
|
||||||
|
@ -1262,6 +1352,9 @@ msgstr "Drapeau rouge"
|
||||||
msgid "Reflections on the buttons \\Shiny buttons"
|
msgid "Reflections on the buttons \\Shiny buttons"
|
||||||
msgstr "Reflets sur les boutons\\Boutons brillants"
|
msgstr "Reflets sur les boutons\\Boutons brillants"
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remains of Apollo mission"
|
msgid "Remains of Apollo mission"
|
||||||
msgstr "Vestige d'une mission Apollo"
|
msgstr "Vestige d'une mission Apollo"
|
||||||
|
|
||||||
|
@ -1319,35 +1412,41 @@ msgstr "Robbie"
|
||||||
msgid "Ruin"
|
msgid "Ruin"
|
||||||
msgstr "Bâtiment en ruine"
|
msgstr "Bâtiment en ruine"
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for defense tower"
|
msgid "Run research program for defense tower"
|
||||||
msgstr "Recherche la tour de défense"
|
msgstr "Lancer la recherche de la tour de défense"
|
||||||
|
|
||||||
msgid "Run research program for legged bots"
|
msgid "Run research program for legged bots"
|
||||||
msgstr "Recherche du fonctionnement des pattes"
|
msgstr "Lancer la recherche du fonctionnement des pattes"
|
||||||
|
|
||||||
msgid "Run research program for nuclear power"
|
msgid "Run research program for nuclear power"
|
||||||
msgstr "Recherche du programme nucléaire"
|
msgstr "Lancer la recherche du programme nucléaire"
|
||||||
|
|
||||||
msgid "Run research program for orga shooter"
|
msgid "Run research program for orga shooter"
|
||||||
msgstr "Recherche le canon organique"
|
msgstr "Lancer la recherche du canon organique"
|
||||||
|
|
||||||
msgid "Run research program for phazer shooter"
|
msgid "Run research program for phazer shooter"
|
||||||
msgstr "Recherche le canon à phases"
|
msgstr "Lancer la recherche du canon hachoir"
|
||||||
|
|
||||||
msgid "Run research program for shielder"
|
msgid "Run research program for shielder"
|
||||||
msgstr "Recherche le bouclier"
|
msgstr "Lancer la recherche du bouclier"
|
||||||
|
|
||||||
msgid "Run research program for shooter"
|
msgid "Run research program for shooter"
|
||||||
msgstr "Recherche le canon de tir"
|
msgstr "Lancer la recherche du canon de tir"
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for thumper"
|
msgid "Run research program for thumper"
|
||||||
msgstr "Recherche le secoueur"
|
msgstr "Lancer la recherche du secoueur"
|
||||||
|
|
||||||
msgid "Run research program for tracked bots"
|
msgid "Run research program for tracked bots"
|
||||||
msgstr "Recherche du fonctionnement des chenilles"
|
msgstr "Lancer la recherche du fonctionnement des chenilles"
|
||||||
|
|
||||||
msgid "Run research program for winged bots"
|
msgid "Run research program for winged bots"
|
||||||
msgstr "Recherche du fonctionnement du jet"
|
msgstr "Lancer la recherche du fonctionnement du jet"
|
||||||
|
|
||||||
msgid "SatCom"
|
msgid "SatCom"
|
||||||
msgstr "SatCom"
|
msgstr "SatCom"
|
||||||
|
@ -1370,6 +1469,9 @@ msgstr "Enregistrer\\Enregistrer la mission en cours"
|
||||||
msgid "Save\\Saves the current mission"
|
msgid "Save\\Saves the current mission"
|
||||||
msgstr "Enregistrer\\Enregistrer la mission en cours"
|
msgstr "Enregistrer\\Enregistrer la mission en cours"
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Select the astronaut\\Selects the astronaut"
|
msgid "Select the astronaut\\Selects the astronaut"
|
||||||
msgstr "Sélectionner le cosmonaute\\Sélectionner le cosmonaute"
|
msgstr "Sélectionner le cosmonaute\\Sélectionner le cosmonaute"
|
||||||
|
|
||||||
|
@ -1436,11 +1538,20 @@ msgstr "Sons :\\Volume des moteurs, voix, etc."
|
||||||
msgid "Sound\\Music and game sound volume"
|
msgid "Sound\\Music and game sound volume"
|
||||||
msgstr "Son\\Volumes des sons & musiques"
|
msgstr "Son\\Volumes des sons & musiques"
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Spaceship"
|
msgid "Spaceship"
|
||||||
msgstr "Vaisseau spatial"
|
msgstr "Vaisseau spatial"
|
||||||
|
|
||||||
msgid "Spaceship ruin"
|
msgid "Spaceship ruin"
|
||||||
msgstr "Epave de vaisseau spatial"
|
msgstr "Épave de vaisseau spatial"
|
||||||
|
|
||||||
msgid "Spider"
|
msgid "Spider"
|
||||||
msgstr "Araignée"
|
msgstr "Araignée"
|
||||||
|
@ -1497,7 +1608,7 @@ msgid "Switch bots <-> buildings"
|
||||||
msgstr "Permute robots <-> bâtiments"
|
msgstr "Permute robots <-> bâtiments"
|
||||||
|
|
||||||
msgid "Take off to finish the mission"
|
msgid "Take off to finish the mission"
|
||||||
msgstr "Décolle pour terminer la mission"
|
msgstr "Décollage pour terminer la mission"
|
||||||
|
|
||||||
msgid "Target"
|
msgid "Target"
|
||||||
msgstr "Cible"
|
msgstr "Cible"
|
||||||
|
@ -1514,6 +1625,10 @@ msgstr "Filtrage de textures\\Filtrage de textures"
|
||||||
msgid "Textures"
|
msgid "Textures"
|
||||||
msgstr "Textures"
|
msgstr "Textures"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The battle has ended"
|
msgid "The battle has ended"
|
||||||
msgstr "La bataille est terminée"
|
msgstr "La bataille est terminée"
|
||||||
|
|
||||||
|
@ -1526,9 +1641,16 @@ msgstr "La fonction n'a pas retourné de résultat"
|
||||||
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
||||||
msgstr "La mission n'est pas terminée (appuyez sur \\key help; pour plus de détails)"
|
msgstr "La mission n'est pas terminée (appuyez sur \\key help; pour plus de détails)"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The types of the two operands are incompatible"
|
msgid "The types of the two operands are incompatible"
|
||||||
msgstr "Les deux opérandes ne sont pas de types compatibles"
|
msgstr "Les deux opérandes ne sont pas de types compatibles"
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "This class already exists"
|
msgid "This class already exists"
|
||||||
msgstr "Cette classe existe déjà"
|
msgstr "Cette classe existe déjà"
|
||||||
|
|
||||||
|
@ -1560,7 +1682,7 @@ msgid "This program is read-only, clone it to edit"
|
||||||
msgstr "Ce programme est en lecture-seule, le dupliquer pour pouvoir le modifier"
|
msgstr "Ce programme est en lecture-seule, le dupliquer pour pouvoir le modifier"
|
||||||
|
|
||||||
msgid "Thump (\\key action;)"
|
msgid "Thump (\\key action;)"
|
||||||
msgstr "Secoue (\\key action;)"
|
msgstr "Secouer (\\key action;)"
|
||||||
|
|
||||||
msgid "Thumper"
|
msgid "Thumper"
|
||||||
msgstr "Robot secoueur"
|
msgstr "Robot secoueur"
|
||||||
|
@ -1602,8 +1724,11 @@ msgstr "Trop de drapeaux de cette couleur (maximum 5)"
|
||||||
msgid "Too many parameters"
|
msgid "Too many parameters"
|
||||||
msgstr "Trop de paramètres"
|
msgstr "Trop de paramètres"
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Tracked grabber"
|
msgid "Tracked grabber"
|
||||||
msgstr "Robot déménageur à chenilles"
|
msgstr "Robot préhenseur à chenilles"
|
||||||
|
|
||||||
msgid "Tracked orga shooter"
|
msgid "Tracked orga shooter"
|
||||||
msgstr "Robot tireur organique à chenilles"
|
msgstr "Robot tireur organique à chenilles"
|
||||||
|
@ -1650,6 +1775,9 @@ msgstr "Unité"
|
||||||
msgid "Unknown Object"
|
msgid "Unknown Object"
|
||||||
msgstr "Objet inconnu"
|
msgstr "Objet inconnu"
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Unknown command"
|
msgid "Unknown command"
|
||||||
msgstr "Commande inconnue"
|
msgstr "Commande inconnue"
|
||||||
|
|
||||||
|
@ -1662,6 +1790,9 @@ msgstr "Routine inconnue"
|
||||||
msgid "Up (\\key gup;)"
|
msgid "Up (\\key gup;)"
|
||||||
msgstr "Monte (\\key gup;)"
|
msgstr "Monte (\\key gup;)"
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Uranium deposit (site for derrick)"
|
msgid "Uranium deposit (site for derrick)"
|
||||||
msgstr "Emplacement pour un derrick (minerai d'uranium)"
|
msgstr "Emplacement pour un derrick (minerai d'uranium)"
|
||||||
|
|
||||||
|
@ -1683,9 +1814,12 @@ msgstr "Variable non initialisée"
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "Coffre-fort"
|
msgstr "Coffre-fort"
|
||||||
|
|
||||||
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
msgid "Version"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
||||||
|
msgstr "Synchronisation verticale :\\Réduit la fréquence d'images par seconde à afficher."
|
||||||
|
|
||||||
msgid "Violet flag"
|
msgid "Violet flag"
|
||||||
msgstr "Drapeau violet"
|
msgstr "Drapeau violet"
|
||||||
|
|
||||||
|
@ -1701,8 +1835,14 @@ msgstr "Guêpe mortellement touchée"
|
||||||
msgid "Waste"
|
msgid "Waste"
|
||||||
msgstr "Déchet"
|
msgstr "Déchet"
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Wheeled grabber"
|
msgid "Wheeled grabber"
|
||||||
msgstr "Robot déménageur à roues"
|
msgstr "Robot préhenseur à roues"
|
||||||
|
|
||||||
msgid "Wheeled orga shooter"
|
msgid "Wheeled orga shooter"
|
||||||
msgstr "Robot tireur organique à roues"
|
msgstr "Robot tireur organique à roues"
|
||||||
|
@ -1713,8 +1853,11 @@ msgstr "Robot tireur à roues"
|
||||||
msgid "Wheeled sniffer"
|
msgid "Wheeled sniffer"
|
||||||
msgstr "Robot renifleur à roues"
|
msgstr "Robot renifleur à roues"
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Winged grabber"
|
msgid "Winged grabber"
|
||||||
msgstr "Robot déménageur volant"
|
msgstr "Robot préhenseur volant"
|
||||||
|
|
||||||
msgid "Winged orga shooter"
|
msgid "Winged orga shooter"
|
||||||
msgstr "Robot tireur organique volant"
|
msgstr "Robot tireur organique volant"
|
||||||
|
@ -1728,6 +1871,9 @@ msgstr "Robot renifleur volant"
|
||||||
msgid "Withdraw shield (\\key action;)"
|
msgid "Withdraw shield (\\key action;)"
|
||||||
msgstr "Refermer le bouclier (\\key action;)"
|
msgstr "Refermer le bouclier (\\key action;)"
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Worm"
|
msgid "Worm"
|
||||||
msgstr "Ver"
|
msgstr "Ver"
|
||||||
|
|
||||||
|
@ -1735,7 +1881,7 @@ msgid "Worm fatally wounded"
|
||||||
msgstr "Ver mortellement touché"
|
msgstr "Ver mortellement touché"
|
||||||
|
|
||||||
msgid "Wreckage"
|
msgid "Wreckage"
|
||||||
msgstr "Epave de robot"
|
msgstr "Épave de robot"
|
||||||
|
|
||||||
msgid "Write error"
|
msgid "Write error"
|
||||||
msgstr "Erreur lors de l'écriture"
|
msgstr "Erreur lors de l'écriture"
|
||||||
|
@ -1820,7 +1966,7 @@ msgid "\\New player name"
|
||||||
msgstr "\\Nom du joueur à créer"
|
msgstr "\\Nom du joueur à créer"
|
||||||
|
|
||||||
msgid "\\No eyeglasses"
|
msgid "\\No eyeglasses"
|
||||||
msgstr "\\Pas de lunettes"
|
msgstr "\\Pas de lunette"
|
||||||
|
|
||||||
msgid "\\Raise the pencil"
|
msgid "\\Raise the pencil"
|
||||||
msgstr "\\Relève le crayon"
|
msgstr "\\Relève le crayon"
|
||||||
|
@ -1876,15 +2022,15 @@ msgstr "\\Drapeaux violets"
|
||||||
msgid "\\Yellow flags"
|
msgid "\\Yellow flags"
|
||||||
msgstr "\\Drapeaux jaunes"
|
msgstr "\\Drapeaux jaunes"
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "colobot.info"
|
msgid "colobot.info"
|
||||||
msgstr "colobot.info"
|
msgstr "colobot.info"
|
||||||
|
|
||||||
msgid "epsitec.com"
|
msgid "epsitec.com"
|
||||||
msgstr "epsitec.com"
|
msgstr "epsitec.com"
|
||||||
|
|
||||||
#~ msgid " "
|
|
||||||
#~ msgstr " "
|
|
||||||
|
|
||||||
#~ msgid " Drivers:"
|
#~ msgid " Drivers:"
|
||||||
#~ msgstr " Pilotes :"
|
#~ msgstr " Pilotes :"
|
||||||
|
|
||||||
|
@ -1897,6 +2043,9 @@ msgstr "epsitec.com"
|
||||||
#~ msgid "3D sound\\3D positioning of the sound"
|
#~ msgid "3D sound\\3D positioning of the sound"
|
||||||
#~ msgstr "Bruitages 3D\\Positionnement sonore dans l'espace"
|
#~ msgstr "Bruitages 3D\\Positionnement sonore dans l'espace"
|
||||||
|
|
||||||
|
#~ msgid "Build a destroyer"
|
||||||
|
#~ msgstr "Construire un destructeur"
|
||||||
|
|
||||||
#~ msgid "Building too close"
|
#~ msgid "Building too close"
|
||||||
#~ msgstr "Bâtiment trop proche"
|
#~ msgstr "Bâtiment trop proche"
|
||||||
|
|
||||||
|
|
186
po/pl.po
186
po/pl.po
|
@ -31,6 +31,9 @@ msgstr "Brak \" ] \""
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr "%s: %d pkt"
|
msgstr "%s: %d pkt"
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr "+\\Misje z dodatkową zawartością i opcjonalnymi wyzwaniami"
|
||||||
|
|
||||||
msgid "..behind"
|
msgid "..behind"
|
||||||
msgstr "..za"
|
msgstr "..za"
|
||||||
|
|
||||||
|
@ -109,9 +112,6 @@ msgstr "Analiza została już wykonana"
|
||||||
msgid "Analysis performed"
|
msgid "Analysis performed"
|
||||||
msgstr "Analiza wykonana"
|
msgstr "Analiza wykonana"
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
|
||||||
msgstr "Analizuje jedynie materię organiczną"
|
|
||||||
|
|
||||||
msgid "Anisotropy level\\Anisotropy level"
|
msgid "Anisotropy level\\Anisotropy level"
|
||||||
msgstr "Filtrowanie anizotropowe\\Poziom filtrowania anizotropowego"
|
msgstr "Filtrowanie anizotropowe\\Poziom filtrowania anizotropowego"
|
||||||
|
|
||||||
|
@ -127,6 +127,9 @@ msgstr "Wygląd\\Wybierz swoją postać"
|
||||||
msgid "Apply changes\\Activates the changed settings"
|
msgid "Apply changes\\Activates the changed settings"
|
||||||
msgstr "Zastosuj zmiany\\Aktywuje zmienione ustawienia"
|
msgstr "Zastosuj zmiany\\Aktywuje zmienione ustawienia"
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr "Zastosuj\\Zastosuj obecną konfigurację modów"
|
||||||
|
|
||||||
msgid "Appropriate constructor missing"
|
msgid "Appropriate constructor missing"
|
||||||
msgstr "Brak odpowiedniego konstruktora"
|
msgstr "Brak odpowiedniego konstruktora"
|
||||||
|
|
||||||
|
@ -184,6 +187,9 @@ msgstr "Robot zniszczony"
|
||||||
msgid "Bot factory"
|
msgid "Bot factory"
|
||||||
msgstr "Fabryka robotów"
|
msgstr "Fabryka robotów"
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr "Buduj (\\key action;)"
|
||||||
|
|
||||||
msgid "Build a bot factory"
|
msgid "Build a bot factory"
|
||||||
msgstr "Zbuduj fabrykę robotów"
|
msgstr "Zbuduj fabrykę robotów"
|
||||||
|
|
||||||
|
@ -196,12 +202,12 @@ msgstr "Zbuduj wieżę obronną"
|
||||||
msgid "Build a derrick"
|
msgid "Build a derrick"
|
||||||
msgstr "Zbuduj kopalnię"
|
msgstr "Zbuduj kopalnię"
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
|
||||||
msgstr "Zbuduj niszczarkę"
|
|
||||||
|
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr "Zbuduj stację przekaźnikową"
|
msgstr "Zbuduj stację przekaźnikową"
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr "Zbuduj budowniczego na nogach"
|
||||||
|
|
||||||
msgid "Build a legged grabber"
|
msgid "Build a legged grabber"
|
||||||
msgstr "Zbuduj transporter na nogach"
|
msgstr "Zbuduj transporter na nogach"
|
||||||
|
|
||||||
|
@ -247,9 +253,15 @@ msgstr "Zbuduj robota osłaniacza"
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr "Zbuduj robota nurka"
|
msgstr "Zbuduj robota nurka"
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr "Zbuduj robota-cel"
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr "Zbuduj robota uderzacza"
|
msgstr "Zbuduj robota uderzacza"
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr "Zbuduj budowniczego na gąsienicach"
|
||||||
|
|
||||||
msgid "Build a tracked grabber"
|
msgid "Build a tracked grabber"
|
||||||
msgstr "Zbuduj transporter na gąsienicach"
|
msgstr "Zbuduj transporter na gąsienicach"
|
||||||
|
|
||||||
|
@ -262,6 +274,12 @@ msgstr "Zbuduj działo na gąsienicach"
|
||||||
msgid "Build a tracked sniffer"
|
msgid "Build a tracked sniffer"
|
||||||
msgstr "Zbuduj szperacz na gąsienicach"
|
msgstr "Zbuduj szperacz na gąsienicach"
|
||||||
|
|
||||||
|
msgid "Build a vault"
|
||||||
|
msgstr "Zbuduj skrytkę"
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr "Zbuduj budowniczego na kołach"
|
||||||
|
|
||||||
msgid "Build a wheeled grabber"
|
msgid "Build a wheeled grabber"
|
||||||
msgstr "Zbuduj transporter na kołach"
|
msgstr "Zbuduj transporter na kołach"
|
||||||
|
|
||||||
|
@ -274,6 +292,9 @@ msgstr "Zbuduj działo na kołach"
|
||||||
msgid "Build a wheeled sniffer"
|
msgid "Build a wheeled sniffer"
|
||||||
msgstr "Zbuduj szperacz na kołach"
|
msgstr "Zbuduj szperacz na kołach"
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr "Zbuduj latającego budowniczego"
|
||||||
|
|
||||||
msgid "Build a winged grabber"
|
msgid "Build a winged grabber"
|
||||||
msgstr "Zbuduj transporter latający"
|
msgstr "Zbuduj transporter latający"
|
||||||
|
|
||||||
|
@ -355,6 +376,9 @@ msgstr "Zmień kamerę\\Przełącza pomiędzy kamerą pokładową i śledzącą"
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr "Zmień gracza\\Zmień gracza"
|
msgstr "Zmień gracza\\Zmień gracza"
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr "Zmiany"
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr "Rozdziały:"
|
msgstr "Rozdziały:"
|
||||||
|
|
||||||
|
@ -365,7 +389,7 @@ msgid "Checkpoint"
|
||||||
msgstr "Punkt kontrolny"
|
msgstr "Punkt kontrolny"
|
||||||
|
|
||||||
msgid "Class name expected"
|
msgid "Class name expected"
|
||||||
msgstr ""
|
msgstr "Oczekiwano nazwy klasy"
|
||||||
|
|
||||||
msgid "Climb\\Increases the power of the jet"
|
msgid "Climb\\Increases the power of the jet"
|
||||||
msgstr "W górę\\Zwiększa moc silnika"
|
msgstr "W górę\\Zwiększa moc silnika"
|
||||||
|
@ -424,6 +448,12 @@ msgstr "Kopiuj"
|
||||||
msgid "Copy (Ctrl+C)"
|
msgid "Copy (Ctrl+C)"
|
||||||
msgstr "Kopiuj (Ctrl+C)"
|
msgstr "Kopiuj (Ctrl+C)"
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr "Nie udało się otworzyć przeglądarki plików!"
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr "Nie udało się otworzyć przeglądarki internetowej!"
|
||||||
|
|
||||||
msgid "Current mission saved"
|
msgid "Current mission saved"
|
||||||
msgstr "Bieżąca misja zapisana"
|
msgstr "Bieżąca misja zapisana"
|
||||||
|
|
||||||
|
@ -457,6 +487,9 @@ msgstr "Kopalnia"
|
||||||
msgid "Descend\\Reduces the power of the jet"
|
msgid "Descend\\Reduces the power of the jet"
|
||||||
msgstr "W dół\\Zmniejsza moc silnika"
|
msgstr "W dół\\Zmniejsza moc silnika"
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr "Opis:"
|
||||||
|
|
||||||
msgid "Destroy"
|
msgid "Destroy"
|
||||||
msgstr "Zniszcz"
|
msgstr "Zniszcz"
|
||||||
|
|
||||||
|
@ -469,6 +502,9 @@ msgstr "Destroyer"
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr "Urządzenie\\Ustawienia sterownika i rozdzielczości"
|
msgstr "Urządzenie\\Ustawienia sterownika i rozdzielczości"
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr "Wyłącz\\Wyłącza zaznaczonego moda"
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr "Dzielenie przez zero"
|
msgstr "Dzielenie przez zero"
|
||||||
|
|
||||||
|
@ -485,9 +521,15 @@ msgstr "Drzwi zablokowane przez robota lub inny obiekt"
|
||||||
msgid "Down (\\key gdown;)"
|
msgid "Down (\\key gdown;)"
|
||||||
msgstr "Dół (\\key gdown;)"
|
msgstr "Dół (\\key gdown;)"
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr "W dół\\Przenieś zaznaczonego moda w dół, aby był załadowany później (mody mogą nadpisywać pliki modów wyżej)"
|
||||||
|
|
||||||
msgid "Drawer bot"
|
msgid "Drawer bot"
|
||||||
msgstr "Robot rysownik"
|
msgstr "Robot rysownik"
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr "Zduplikowana wartość w instrukcji switch"
|
||||||
|
|
||||||
msgid "Dust\\Dust and dirt on bots and buildings"
|
msgid "Dust\\Dust and dirt on bots and buildings"
|
||||||
msgstr "Kurz\\Kurz i bród na robotach i budynkach"
|
msgstr "Kurz\\Kurz i bród na robotach i budynkach"
|
||||||
|
|
||||||
|
@ -506,6 +548,12 @@ msgstr "Edytuj zaznaczony program"
|
||||||
msgid "Egg"
|
msgid "Egg"
|
||||||
msgstr "Jajo"
|
msgstr "Jajo"
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr "Stała będąca pustym znakiem"
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr "Włącz\\Włącza zaznaczonego moda"
|
||||||
|
|
||||||
msgid "End of block missing"
|
msgid "End of block missing"
|
||||||
msgstr "Brak końca bloku"
|
msgstr "Brak końca bloku"
|
||||||
|
|
||||||
|
@ -628,7 +676,7 @@ msgid "Function name missing"
|
||||||
msgstr "Brakująca nazwa funkcji"
|
msgstr "Brakująca nazwa funkcji"
|
||||||
|
|
||||||
msgid "Function needs return type \"void\""
|
msgid "Function needs return type \"void\""
|
||||||
msgstr ""
|
msgstr "Funkcja potrzebuje typu zwracanego \"void\""
|
||||||
|
|
||||||
msgid "Game speed"
|
msgid "Game speed"
|
||||||
msgstr "Prędkość gry"
|
msgstr "Prędkość gry"
|
||||||
|
@ -679,7 +727,7 @@ msgid "Help balloons\\Explain the function of the buttons"
|
||||||
msgstr "Dymki pomocy\\Wyjaśnia funkcje przycisków"
|
msgstr "Dymki pomocy\\Wyjaśnia funkcje przycisków"
|
||||||
|
|
||||||
msgid "Hex value out of range"
|
msgid "Hex value out of range"
|
||||||
msgstr ""
|
msgstr "Wartość heksadecymalna poza zakresem"
|
||||||
|
|
||||||
msgid "Higher speed\\Doubles speed"
|
msgid "Higher speed\\Doubles speed"
|
||||||
msgstr "Zwiększ prędkość\\Podwaja prędkość"
|
msgstr "Zwiększ prędkość\\Podwaja prędkość"
|
||||||
|
@ -720,6 +768,9 @@ msgstr "Nieodpowiedni rodzaj ogniw"
|
||||||
msgid "Inappropriate object"
|
msgid "Inappropriate object"
|
||||||
msgstr "Nieodpowiedni obiekt"
|
msgstr "Nieodpowiedni obiekt"
|
||||||
|
|
||||||
|
msgid "Inappropriate sample"
|
||||||
|
msgstr "Nieprawidłowa próbka"
|
||||||
|
|
||||||
msgid "Incorrect index type"
|
msgid "Incorrect index type"
|
||||||
msgstr "Nieprawidłowy typ indeksu"
|
msgstr "Nieprawidłowy typ indeksu"
|
||||||
|
|
||||||
|
@ -729,6 +780,9 @@ msgstr "Zainfekowane wirusem, chwilowo niesprawne"
|
||||||
msgid "Information exchange post"
|
msgid "Information exchange post"
|
||||||
msgstr "Stacja przekaźnikowa informacji"
|
msgstr "Stacja przekaźnikowa informacji"
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr "Informacje:"
|
||||||
|
|
||||||
msgid "Instruction \"break\" outside a loop"
|
msgid "Instruction \"break\" outside a loop"
|
||||||
msgstr "Polecenie \"break\" na zewnątrz pętli"
|
msgstr "Polecenie \"break\" na zewnątrz pętli"
|
||||||
|
|
||||||
|
@ -760,7 +814,7 @@ msgid "Internal error - tell the developers"
|
||||||
msgstr "Błąd wewnętrzny - powiadom twórców gry"
|
msgstr "Błąd wewnętrzny - powiadom twórców gry"
|
||||||
|
|
||||||
msgid "Invalid universal character name"
|
msgid "Invalid universal character name"
|
||||||
msgstr ""
|
msgstr "Nieprawidłowy znak Unicode"
|
||||||
|
|
||||||
msgid "Invert\\Invert values on this axis"
|
msgid "Invert\\Invert values on this axis"
|
||||||
msgstr "Odwróć\\Odwróć wartości na tej osi"
|
msgstr "Odwróć\\Odwróć wartości na tej osi"
|
||||||
|
@ -789,6 +843,9 @@ msgstr "Skróty klawiszowe (\\key cbot;)"
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "WCZYTYWANIE"
|
msgstr "WCZYTYWANIE"
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr "Budowniczy na nogach"
|
||||||
|
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr "Transporter na nogach"
|
msgstr "Transporter na nogach"
|
||||||
|
|
||||||
|
@ -859,10 +916,10 @@ msgid "Mipmap level\\Mipmap level"
|
||||||
msgstr "Poziom mipmap\\Poziom mipmap"
|
msgstr "Poziom mipmap\\Poziom mipmap"
|
||||||
|
|
||||||
msgid "Missing end quote"
|
msgid "Missing end quote"
|
||||||
msgstr ""
|
msgstr "Brak cudzysłowu zamykającego"
|
||||||
|
|
||||||
msgid "Missing hex digits after escape sequence"
|
msgid "Missing hex digits after escape sequence"
|
||||||
msgstr ""
|
msgstr "Brak cyfr heksadecymalnych po znaku ucieczki"
|
||||||
|
|
||||||
msgid "Mission name"
|
msgid "Mission name"
|
||||||
msgstr "Nazwa misji"
|
msgstr "Nazwa misji"
|
||||||
|
@ -873,9 +930,21 @@ msgstr "Misje"
|
||||||
msgid "Missions on this planet:"
|
msgid "Missions on this planet:"
|
||||||
msgstr "Misje na tej planecie:"
|
msgstr "Misje na tej planecie:"
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr "Misje+"
|
||||||
|
|
||||||
msgid "Missions\\Select mission"
|
msgid "Missions\\Select mission"
|
||||||
msgstr "Misje\\Wybierz misję"
|
msgstr "Misje\\Wybierz misję"
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr "Mody"
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr "Mody:"
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr "Mody\\Zarządzanie modami"
|
||||||
|
|
||||||
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
||||||
msgstr "Odwrócenie myszy X\\Odwrócenie kierunków przewijania w poziomie"
|
msgstr "Odwrócenie myszy X\\Odwrócenie kierunków przewijania w poziomie"
|
||||||
|
|
||||||
|
@ -888,6 +957,9 @@ msgstr "Przenieś zaznaczony program w dół"
|
||||||
msgid "Move selected program up"
|
msgid "Move selected program up"
|
||||||
msgstr "Przenieś zaznaczony program w górę"
|
msgstr "Przenieś zaznaczony program w górę"
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr "Cisza, gdy okno jest w tle\\Wycisza wszystkie dźwięki, gdy okno gry stanie się nieaktywne"
|
||||||
|
|
||||||
msgid "Mute\\No sound"
|
msgid "Mute\\No sound"
|
||||||
msgstr "Cisza\\Brak dźwięków"
|
msgstr "Cisza\\Brak dźwięków"
|
||||||
|
|
||||||
|
@ -906,6 +978,9 @@ msgstr "Nowy"
|
||||||
msgid "New ..."
|
msgid "New ..."
|
||||||
msgstr "Nowy ..."
|
msgstr "Nowy ..."
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr "Nowy folder"
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr "Dostępny nowy robot"
|
msgstr "Dostępny nowy robot"
|
||||||
|
|
||||||
|
@ -918,6 +993,12 @@ msgstr "Następny obiekt\\Zaznacza następny obiekt"
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Nie"
|
msgstr "Nie"
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr "Brak zmian."
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr "Brak opisu."
|
||||||
|
|
||||||
msgid "No energy in the subsoil"
|
msgid "No energy in the subsoil"
|
||||||
msgstr "Brak energii w ziemi"
|
msgstr "Brak energii w ziemi"
|
||||||
|
|
||||||
|
@ -964,7 +1045,7 @@ msgid "No userlevels installed!"
|
||||||
msgstr "Brak zainstalowanych poziomów użytkownika!"
|
msgstr "Brak zainstalowanych poziomów użytkownika!"
|
||||||
|
|
||||||
msgid "Non-void function needs \"return;\""
|
msgid "Non-void function needs \"return;\""
|
||||||
msgstr ""
|
msgstr "Funkcja zwracająca typ inny, niż \"void\", wymaga \"return;\""
|
||||||
|
|
||||||
msgid "Normal size"
|
msgid "Normal size"
|
||||||
msgstr "Normalna wielkość"
|
msgstr "Normalna wielkość"
|
||||||
|
@ -1027,7 +1108,7 @@ msgid "Object too close"
|
||||||
msgstr "Obiekt za blisko"
|
msgstr "Obiekt za blisko"
|
||||||
|
|
||||||
msgid "Octal value out of range"
|
msgid "Octal value out of range"
|
||||||
msgstr ""
|
msgstr "Wartość ósemkowa poza zakresem"
|
||||||
|
|
||||||
msgid "One step"
|
msgid "One step"
|
||||||
msgstr "Jeden krok"
|
msgstr "Jeden krok"
|
||||||
|
@ -1038,6 +1119,9 @@ msgstr "Otwórz"
|
||||||
msgid "Open (Ctrl+O)"
|
msgid "Open (Ctrl+O)"
|
||||||
msgstr "Otwórz (Ctrl+O)"
|
msgstr "Otwórz (Ctrl+O)"
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr "Otwórz katalog\\Otwórz katalog z modami"
|
||||||
|
|
||||||
msgid "Opening brace missing"
|
msgid "Opening brace missing"
|
||||||
msgstr "Brak klamry otwierającej"
|
msgstr "Brak klamry otwierającej"
|
||||||
|
|
||||||
|
@ -1062,6 +1146,9 @@ msgstr "Miejsce nadania wiadomości\\Pokazuje skąd została wysłana ostatnia w
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr "Twórcy oryginalnej gry:"
|
msgstr "Twórcy oryginalnej gry:"
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr "Nadpisać istniejący plik?"
|
||||||
|
|
||||||
msgid "Parameters missing"
|
msgid "Parameters missing"
|
||||||
msgstr "Brak wymaganego parametru"
|
msgstr "Brak wymaganego parametru"
|
||||||
|
|
||||||
|
@ -1072,7 +1159,7 @@ msgid "Paste (Ctrl+V)"
|
||||||
msgstr "Wklej (Ctrl+V)"
|
msgstr "Wklej (Ctrl+V)"
|
||||||
|
|
||||||
msgid "Pause blur\\Blur the background on the pause screen"
|
msgid "Pause blur\\Blur the background on the pause screen"
|
||||||
msgstr ""
|
msgstr "Rozmyta pauza\\Rozmyj tło na ekranie pauzy"
|
||||||
|
|
||||||
msgid "Pause in background\\Pause the game when the window is unfocused"
|
msgid "Pause in background\\Pause the game when the window is unfocused"
|
||||||
msgstr "Wstrzymaj w tle\\Wstrzymaj grę gdy okno stanie się nieaktywne"
|
msgstr "Wstrzymaj w tle\\Wstrzymaj grę gdy okno stanie się nieaktywne"
|
||||||
|
@ -1095,6 +1182,9 @@ msgstr "Miejsce zajęte"
|
||||||
msgid "Planets:"
|
msgid "Planets:"
|
||||||
msgstr "Planety:"
|
msgstr "Planety:"
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr "Dostępne plany robota budowniczego"
|
||||||
|
|
||||||
msgid "Plans for defense tower available"
|
msgid "Plans for defense tower available"
|
||||||
msgstr "Dostępne plany wieży obronnej"
|
msgstr "Dostępne plany wieży obronnej"
|
||||||
|
|
||||||
|
@ -1242,6 +1332,9 @@ msgstr "Czerwona flaga"
|
||||||
msgid "Reflections on the buttons \\Shiny buttons"
|
msgid "Reflections on the buttons \\Shiny buttons"
|
||||||
msgstr "Odbicia na przyciskach \\Świecące przyciski"
|
msgstr "Odbicia na przyciskach \\Świecące przyciski"
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr "Odśwież\\Odśwież listę obecnie zainstalowanych modów"
|
||||||
|
|
||||||
msgid "Remains of Apollo mission"
|
msgid "Remains of Apollo mission"
|
||||||
msgstr "Pozostałości z misji Apollo"
|
msgstr "Pozostałości z misji Apollo"
|
||||||
|
|
||||||
|
@ -1299,6 +1392,9 @@ msgstr "Robbie"
|
||||||
msgid "Ruin"
|
msgid "Ruin"
|
||||||
msgstr "Ruiny"
|
msgstr "Ruiny"
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr "Rozpocznij prace badawcze nad robotem budowniczym"
|
||||||
|
|
||||||
msgid "Run research program for defense tower"
|
msgid "Run research program for defense tower"
|
||||||
msgstr "Rozpocznij prace badawcze nad wieżą obronną"
|
msgstr "Rozpocznij prace badawcze nad wieżą obronną"
|
||||||
|
|
||||||
|
@ -1320,6 +1416,9 @@ msgstr "Rozpocznij prace badawcze nad robotem osłaniaczem"
|
||||||
msgid "Run research program for shooter"
|
msgid "Run research program for shooter"
|
||||||
msgstr "Rozpocznij prace badawcze nad działem"
|
msgstr "Rozpocznij prace badawcze nad działem"
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr "Rozpocznij prace badawcze nad robotem-celem"
|
||||||
|
|
||||||
msgid "Run research program for thumper"
|
msgid "Run research program for thumper"
|
||||||
msgstr "Rozpocznij prace badawcze nad robotem uderzaczem"
|
msgstr "Rozpocznij prace badawcze nad robotem uderzaczem"
|
||||||
|
|
||||||
|
@ -1350,6 +1449,9 @@ msgstr "Zapisz\\Zapisuje bieżącą misję"
|
||||||
msgid "Save\\Saves the current mission"
|
msgid "Save\\Saves the current mission"
|
||||||
msgstr "Zapisz\\Zapisuje bieżącą misję"
|
msgstr "Zapisz\\Zapisuje bieżącą misję"
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr "Wybierz folder"
|
||||||
|
|
||||||
msgid "Select the astronaut\\Selects the astronaut"
|
msgid "Select the astronaut\\Selects the astronaut"
|
||||||
msgstr "Zaznacz astronautę\\Zaznacza astronautę"
|
msgstr "Zaznacz astronautę\\Zaznacza astronautę"
|
||||||
|
|
||||||
|
@ -1416,6 +1518,15 @@ msgstr "Efekty dźwiękowe:\\Głośność silników, głosów, strzałów, itp."
|
||||||
msgid "Sound\\Music and game sound volume"
|
msgid "Sound\\Music and game sound volume"
|
||||||
msgstr "Dźwięk\\Głośność muzyki i dźwięków gry"
|
msgstr "Dźwięk\\Głośność muzyki i dźwięków gry"
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr "Kosmiczny odkrywca\\Wyłącza umiejętności astronauty"
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr "Kosmiczny koder\\Wyłącza zdalną kontrolę"
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr "Kosmiczny badacz\\Blokuje dostęp do poprzednio wynalezionych technologii"
|
||||||
|
|
||||||
msgid "Spaceship"
|
msgid "Spaceship"
|
||||||
msgstr "Statek kosmiczny"
|
msgstr "Statek kosmiczny"
|
||||||
|
|
||||||
|
@ -1494,6 +1605,10 @@ msgstr "Filtrowanie tekstur\\Filtrowanie tekstur"
|
||||||
msgid "Textures"
|
msgid "Textures"
|
||||||
msgstr "Tekstury"
|
msgstr "Tekstury"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr "Nie udało się otworzyć adresu %s w przeglądarce internetowej."
|
||||||
|
|
||||||
msgid "The battle has ended"
|
msgid "The battle has ended"
|
||||||
msgstr "Bitwa zakończyła się"
|
msgstr "Bitwa zakończyła się"
|
||||||
|
|
||||||
|
@ -1506,9 +1621,16 @@ msgstr "Funkcja nie zwróciła żadnej wartości"
|
||||||
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
||||||
msgstr "Misja nie jest wypełniona (naciśnij \\key help; aby uzyskać szczegóły)"
|
msgstr "Misja nie jest wypełniona (naciśnij \\key help; aby uzyskać szczegóły)"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr "Nie udało się otworzyć ścieżki %s w przeglądarce plików."
|
||||||
|
|
||||||
msgid "The types of the two operands are incompatible"
|
msgid "The types of the two operands are incompatible"
|
||||||
msgstr "Niezgodne typy operatorów"
|
msgstr "Niezgodne typy operatorów"
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr "Są niezapisane zmiany. Czy chcesz je zapisać przed wyjściem?"
|
||||||
|
|
||||||
msgid "This class already exists"
|
msgid "This class already exists"
|
||||||
msgstr "Taka klasa już istnieje"
|
msgstr "Taka klasa już istnieje"
|
||||||
|
|
||||||
|
@ -1534,7 +1656,7 @@ msgid "This object is not a member of a class"
|
||||||
msgstr "Ten obiekt nie jest członkiem klasy"
|
msgstr "Ten obiekt nie jest członkiem klasy"
|
||||||
|
|
||||||
msgid "This parameter needs a default value"
|
msgid "This parameter needs a default value"
|
||||||
msgstr ""
|
msgstr "Ten parametr wymaga podania domyślnej wartości"
|
||||||
|
|
||||||
msgid "This program is read-only, clone it to edit"
|
msgid "This program is read-only, clone it to edit"
|
||||||
msgstr "Ten program jest tylko do odczytu, skopiuj go, aby edytować"
|
msgstr "Ten program jest tylko do odczytu, skopiuj go, aby edytować"
|
||||||
|
@ -1582,6 +1704,9 @@ msgstr "Za dużo flag w tym kolorze (maksymalnie 5)"
|
||||||
msgid "Too many parameters"
|
msgid "Too many parameters"
|
||||||
msgstr "Za dużo parametrów"
|
msgstr "Za dużo parametrów"
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr "Budowniczy na gąsienicach"
|
||||||
|
|
||||||
msgid "Tracked grabber"
|
msgid "Tracked grabber"
|
||||||
msgstr "Transporter na gąsienicach"
|
msgstr "Transporter na gąsienicach"
|
||||||
|
|
||||||
|
@ -1630,11 +1755,14 @@ msgstr "Jednostka"
|
||||||
msgid "Unknown Object"
|
msgid "Unknown Object"
|
||||||
msgstr "Obiekt nieznany"
|
msgstr "Obiekt nieznany"
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr "Nieznany autor"
|
||||||
|
|
||||||
msgid "Unknown command"
|
msgid "Unknown command"
|
||||||
msgstr "Nieznane polecenie"
|
msgstr "Nieznane polecenie"
|
||||||
|
|
||||||
msgid "Unknown escape sequence"
|
msgid "Unknown escape sequence"
|
||||||
msgstr ""
|
msgstr "Nieznany znak ucieczki"
|
||||||
|
|
||||||
msgid "Unknown function"
|
msgid "Unknown function"
|
||||||
msgstr "Funkcja nieznana"
|
msgstr "Funkcja nieznana"
|
||||||
|
@ -1642,6 +1770,9 @@ msgstr "Funkcja nieznana"
|
||||||
msgid "Up (\\key gup;)"
|
msgid "Up (\\key gup;)"
|
||||||
msgstr "Góra (\\key gup;)"
|
msgstr "Góra (\\key gup;)"
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr "W górę\\Przenieś zaznaczonego moda w górę, aby był załadowany wcześniej (mody mogą nadpisywać pliki modów wyżej)"
|
||||||
|
|
||||||
msgid "Uranium deposit (site for derrick)"
|
msgid "Uranium deposit (site for derrick)"
|
||||||
msgstr "Złoże uranu (miejsce na kopalnię)"
|
msgstr "Złoże uranu (miejsce na kopalnię)"
|
||||||
|
|
||||||
|
@ -1663,6 +1794,9 @@ msgstr "Zmienna nie została zainicjalizowana"
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "Skrytka"
|
msgstr "Skrytka"
|
||||||
|
|
||||||
|
msgid "Version"
|
||||||
|
msgstr "Wersja"
|
||||||
|
|
||||||
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
||||||
msgstr "Synchronizacja pionowa\\Ogranicza ilość klatek na sekundę do wartości odświeżania ekranu"
|
msgstr "Synchronizacja pionowa\\Ogranicza ilość klatek na sekundę do wartości odświeżania ekranu"
|
||||||
|
|
||||||
|
@ -1681,6 +1815,12 @@ msgstr "Osa śmiertelnie raniona"
|
||||||
msgid "Waste"
|
msgid "Waste"
|
||||||
msgstr "Odpady"
|
msgstr "Odpady"
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr "Strona internetowa"
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr "Budowniczy na kołach"
|
||||||
|
|
||||||
msgid "Wheeled grabber"
|
msgid "Wheeled grabber"
|
||||||
msgstr "Transporter na kołach"
|
msgstr "Transporter na kołach"
|
||||||
|
|
||||||
|
@ -1693,6 +1833,9 @@ msgstr "Działo na kołach"
|
||||||
msgid "Wheeled sniffer"
|
msgid "Wheeled sniffer"
|
||||||
msgstr "Szperacz na kołach"
|
msgstr "Szperacz na kołach"
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr "Budowniczy latający"
|
||||||
|
|
||||||
msgid "Winged grabber"
|
msgid "Winged grabber"
|
||||||
msgstr "Transporter latający"
|
msgstr "Transporter latający"
|
||||||
|
|
||||||
|
@ -1708,6 +1851,9 @@ msgstr "Szperacz latający"
|
||||||
msgid "Withdraw shield (\\key action;)"
|
msgid "Withdraw shield (\\key action;)"
|
||||||
msgstr "Wyłącz osłonę (\\key action;)"
|
msgstr "Wyłącz osłonę (\\key action;)"
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr "Warsztat\\Otwórz warsztat, aby poszukać modów"
|
||||||
|
|
||||||
msgid "Worm"
|
msgid "Worm"
|
||||||
msgstr "Robal"
|
msgstr "Robal"
|
||||||
|
|
||||||
|
@ -1858,6 +2004,9 @@ msgstr "\\Fioletowe flagi"
|
||||||
msgid "\\Yellow flags"
|
msgid "\\Yellow flags"
|
||||||
msgstr "\\Żółte flagi"
|
msgstr "\\Żółte flagi"
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr "autorstwa"
|
||||||
|
|
||||||
msgid "colobot.info"
|
msgid "colobot.info"
|
||||||
msgstr "colobot.info"
|
msgstr "colobot.info"
|
||||||
|
|
||||||
|
@ -1873,6 +2022,9 @@ msgstr "epsitec.com"
|
||||||
#~ msgid "3D sound\\3D positioning of the sound"
|
#~ msgid "3D sound\\3D positioning of the sound"
|
||||||
#~ msgstr "Dźwięk 3D\\Przestrzenne pozycjonowanie dźwięków"
|
#~ msgstr "Dźwięk 3D\\Przestrzenne pozycjonowanie dźwięków"
|
||||||
|
|
||||||
|
#~ msgid "Build a destroyer"
|
||||||
|
#~ msgstr "Zbuduj niszczarkę"
|
||||||
|
|
||||||
#~ msgid "Building too close"
|
#~ msgid "Building too close"
|
||||||
#~ msgstr "Budynek za blisko"
|
#~ msgstr "Budynek za blisko"
|
||||||
|
|
||||||
|
|
164
po/pt.po
164
po/pt.po
|
@ -29,6 +29,9 @@ msgstr "\" ] \" faltando"
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "..behind"
|
msgid "..behind"
|
||||||
msgstr "..atrás"
|
msgstr "..atrás"
|
||||||
|
|
||||||
|
@ -107,9 +110,6 @@ msgstr "Análise já realizada"
|
||||||
msgid "Analysis performed"
|
msgid "Analysis performed"
|
||||||
msgstr "Análise realizada"
|
msgstr "Análise realizada"
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
|
||||||
msgstr "Analisa apenas matéria orgânica"
|
|
||||||
|
|
||||||
msgid "Anisotropy level\\Anisotropy level"
|
msgid "Anisotropy level\\Anisotropy level"
|
||||||
msgstr "Nível de anisotropia\\Nível de anisotropia"
|
msgstr "Nível de anisotropia\\Nível de anisotropia"
|
||||||
|
|
||||||
|
@ -125,6 +125,9 @@ msgstr "Aparência\\Escolha sua aparência"
|
||||||
msgid "Apply changes\\Activates the changed settings"
|
msgid "Apply changes\\Activates the changed settings"
|
||||||
msgstr "Aplicar mudanças\\Ativa as configurações alteradas"
|
msgstr "Aplicar mudanças\\Ativa as configurações alteradas"
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Appropriate constructor missing"
|
msgid "Appropriate constructor missing"
|
||||||
msgstr "Construtor apropriado faltando"
|
msgstr "Construtor apropriado faltando"
|
||||||
|
|
||||||
|
@ -182,6 +185,9 @@ msgstr "Robo destruido"
|
||||||
msgid "Bot factory"
|
msgid "Bot factory"
|
||||||
msgstr "Fábrica de robos"
|
msgstr "Fábrica de robos"
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a bot factory"
|
msgid "Build a bot factory"
|
||||||
msgstr "Construir uma fábrica de robos"
|
msgstr "Construir uma fábrica de robos"
|
||||||
|
|
||||||
|
@ -194,12 +200,12 @@ msgstr "Construir uma torre de defesa"
|
||||||
msgid "Build a derrick"
|
msgid "Build a derrick"
|
||||||
msgstr "Construir um extrator"
|
msgstr "Construir um extrator"
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
|
||||||
msgstr "Construir um destruidor"
|
|
||||||
|
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr "Construir um posto de troca"
|
msgstr "Construir um posto de troca"
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a legged grabber"
|
msgid "Build a legged grabber"
|
||||||
msgstr "Construir um agarrador com pernas"
|
msgstr "Construir um agarrador com pernas"
|
||||||
|
|
||||||
|
@ -245,9 +251,15 @@ msgstr "Construir um defensor"
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr "Construir um mergulhador"
|
msgstr "Construir um mergulhador"
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr "Construir um batedor"
|
msgstr "Construir um batedor"
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a tracked grabber"
|
msgid "Build a tracked grabber"
|
||||||
msgstr "Construir um agarrador com esteiras"
|
msgstr "Construir um agarrador com esteiras"
|
||||||
|
|
||||||
|
@ -260,6 +272,12 @@ msgstr "Construir um atirador com esteiras"
|
||||||
msgid "Build a tracked sniffer"
|
msgid "Build a tracked sniffer"
|
||||||
msgstr "Construir um farejador com esteiras"
|
msgstr "Construir um farejador com esteiras"
|
||||||
|
|
||||||
|
msgid "Build a vault"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a wheeled grabber"
|
msgid "Build a wheeled grabber"
|
||||||
msgstr "Construir um agarrador com rodas"
|
msgstr "Construir um agarrador com rodas"
|
||||||
|
|
||||||
|
@ -272,6 +290,9 @@ msgstr "Construir um atirador com rodas"
|
||||||
msgid "Build a wheeled sniffer"
|
msgid "Build a wheeled sniffer"
|
||||||
msgstr "Construir um farejador com rodas"
|
msgstr "Construir um farejador com rodas"
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a winged grabber"
|
msgid "Build a winged grabber"
|
||||||
msgstr "Construir um agarrador alado"
|
msgstr "Construir um agarrador alado"
|
||||||
|
|
||||||
|
@ -353,6 +374,9 @@ msgstr "Mudar câmera\\Alterna entre câmera incorporada e câmera seguidora"
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr "Mudar jogador\\Mudar jogador"
|
msgstr "Mudar jogador\\Mudar jogador"
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr "Capítulos:"
|
msgstr "Capítulos:"
|
||||||
|
|
||||||
|
@ -423,6 +447,12 @@ msgstr "Copiar"
|
||||||
msgid "Copy (Ctrl+C)"
|
msgid "Copy (Ctrl+C)"
|
||||||
msgstr "Copiar (Ctrl+C)"
|
msgstr "Copiar (Ctrl+C)"
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Current mission saved"
|
msgid "Current mission saved"
|
||||||
msgstr "Missão atual salva"
|
msgstr "Missão atual salva"
|
||||||
|
|
||||||
|
@ -456,6 +486,9 @@ msgstr "Extrator"
|
||||||
msgid "Descend\\Reduces the power of the jet"
|
msgid "Descend\\Reduces the power of the jet"
|
||||||
msgstr "Descer\\Diminui o poder do jato"
|
msgstr "Descer\\Diminui o poder do jato"
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Destroy"
|
msgid "Destroy"
|
||||||
msgstr "Destruir"
|
msgstr "Destruir"
|
||||||
|
|
||||||
|
@ -468,6 +501,9 @@ msgstr "Destruidor"
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr "Dispositivo\\Configurações de driver e resolução"
|
msgstr "Dispositivo\\Configurações de driver e resolução"
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr "Dividindo por zero"
|
msgstr "Dividindo por zero"
|
||||||
|
|
||||||
|
@ -484,9 +520,15 @@ msgstr "Portas bloqueadas por um robô ou outro objeto"
|
||||||
msgid "Down (\\key gdown;)"
|
msgid "Down (\\key gdown;)"
|
||||||
msgstr "Baixo (\\key gdown;)"
|
msgstr "Baixo (\\key gdown;)"
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Drawer bot"
|
msgid "Drawer bot"
|
||||||
msgstr "Robô cartoonista"
|
msgstr "Robô cartoonista"
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dust\\Dust and dirt on bots and buildings"
|
msgid "Dust\\Dust and dirt on bots and buildings"
|
||||||
msgstr "Poeira\\Poeira e sujeira nos robôs e prédios"
|
msgstr "Poeira\\Poeira e sujeira nos robôs e prédios"
|
||||||
|
|
||||||
|
@ -505,6 +547,12 @@ msgstr "Alterar o programa selecionado"
|
||||||
msgid "Egg"
|
msgid "Egg"
|
||||||
msgstr "Ovo"
|
msgstr "Ovo"
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "End of block missing"
|
msgid "End of block missing"
|
||||||
msgstr "Fim do bloco ausente"
|
msgstr "Fim do bloco ausente"
|
||||||
|
|
||||||
|
@ -720,6 +768,9 @@ msgstr "Tipo de célula inapropriada"
|
||||||
msgid "Inappropriate object"
|
msgid "Inappropriate object"
|
||||||
msgstr "Objeto inapropiado"
|
msgstr "Objeto inapropiado"
|
||||||
|
|
||||||
|
msgid "Inappropriate sample"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Incorrect index type"
|
msgid "Incorrect index type"
|
||||||
msgstr "Tipo de índice inválido"
|
msgstr "Tipo de índice inválido"
|
||||||
|
|
||||||
|
@ -729,6 +780,9 @@ msgstr "Infectado por vírus; temporariamento fora de serviço"
|
||||||
msgid "Information exchange post"
|
msgid "Information exchange post"
|
||||||
msgstr "Posto de troca de informação"
|
msgstr "Posto de troca de informação"
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Instruction \"break\" outside a loop"
|
msgid "Instruction \"break\" outside a loop"
|
||||||
msgstr "Intrução \"break\" fora de um laço"
|
msgstr "Intrução \"break\" fora de um laço"
|
||||||
|
|
||||||
|
@ -789,6 +843,9 @@ msgstr "Palavra-chave ajuda (\\key cbot;)"
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "CARREGANDO"
|
msgstr "CARREGANDO"
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr "Agarrador com pernas"
|
msgstr "Agarrador com pernas"
|
||||||
|
|
||||||
|
@ -887,9 +944,21 @@ msgstr "Missões"
|
||||||
msgid "Missions on this planet:"
|
msgid "Missions on this planet:"
|
||||||
msgstr "Lista de missões neste planeta:"
|
msgstr "Lista de missões neste planeta:"
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr "Missões+"
|
||||||
|
|
||||||
msgid "Missions\\Select mission"
|
msgid "Missions\\Select mission"
|
||||||
msgstr "Missões\\Selecione uma missão"
|
msgstr "Missões\\Selecione uma missão"
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
||||||
msgstr "Inversão de mouse X\\Inverte a direção da rolagem no eixo X"
|
msgstr "Inversão de mouse X\\Inverte a direção da rolagem no eixo X"
|
||||||
|
|
||||||
|
@ -902,6 +971,9 @@ msgstr "Move o programa selecionado para baixo"
|
||||||
msgid "Move selected program up"
|
msgid "Move selected program up"
|
||||||
msgstr "Move o programa selecionado para cima"
|
msgstr "Move o programa selecionado para cima"
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mute\\No sound"
|
msgid "Mute\\No sound"
|
||||||
msgstr "Mudo\\Sem som"
|
msgstr "Mudo\\Sem som"
|
||||||
|
|
||||||
|
@ -920,6 +992,9 @@ msgstr "Novo"
|
||||||
msgid "New ..."
|
msgid "New ..."
|
||||||
msgstr "Novo ..."
|
msgstr "Novo ..."
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr "Novo robô disponível"
|
msgstr "Novo robô disponível"
|
||||||
|
|
||||||
|
@ -932,6 +1007,12 @@ msgstr "Próximo objeto\\Selecionar o próximo objeto"
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Não"
|
msgstr "Não"
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No energy in the subsoil"
|
msgid "No energy in the subsoil"
|
||||||
msgstr "Nenhuma energia no subsolo"
|
msgstr "Nenhuma energia no subsolo"
|
||||||
|
|
||||||
|
@ -1052,6 +1133,9 @@ msgstr "Abrir"
|
||||||
msgid "Open (Ctrl+O)"
|
msgid "Open (Ctrl+O)"
|
||||||
msgstr "Abrir (Ctrl+O)"
|
msgstr "Abrir (Ctrl+O)"
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Opening brace missing"
|
msgid "Opening brace missing"
|
||||||
msgstr "Chave de abertura ausente"
|
msgstr "Chave de abertura ausente"
|
||||||
|
|
||||||
|
@ -1076,6 +1160,9 @@ msgstr "Origem da última mensagem\\Mostra de onde a última mensagem foi enviad
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr "Jogo original desenvolvido por:"
|
msgstr "Jogo original desenvolvido por:"
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Parameters missing"
|
msgid "Parameters missing"
|
||||||
msgstr "Parâmetros ausentes"
|
msgstr "Parâmetros ausentes"
|
||||||
|
|
||||||
|
@ -1109,6 +1196,9 @@ msgstr "Local ocupado"
|
||||||
msgid "Planets:"
|
msgid "Planets:"
|
||||||
msgstr "Planetas:"
|
msgstr "Planetas:"
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Plans for defense tower available"
|
msgid "Plans for defense tower available"
|
||||||
msgstr "Planos para a torre de defesa disponíveis"
|
msgstr "Planos para a torre de defesa disponíveis"
|
||||||
|
|
||||||
|
@ -1257,6 +1347,9 @@ msgstr "Bandeira vermelha"
|
||||||
msgid "Reflections on the buttons \\Shiny buttons"
|
msgid "Reflections on the buttons \\Shiny buttons"
|
||||||
msgstr "Reflexões nos botões\\Botões brilhantes"
|
msgstr "Reflexões nos botões\\Botões brilhantes"
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remains of Apollo mission"
|
msgid "Remains of Apollo mission"
|
||||||
msgstr "Restos da missão Apollo"
|
msgstr "Restos da missão Apollo"
|
||||||
|
|
||||||
|
@ -1314,6 +1407,9 @@ msgstr "Robbie"
|
||||||
msgid "Ruin"
|
msgid "Ruin"
|
||||||
msgstr "Ruína"
|
msgstr "Ruína"
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for defense tower"
|
msgid "Run research program for defense tower"
|
||||||
msgstr "Executar programa de pesquisa para torre de defesa"
|
msgstr "Executar programa de pesquisa para torre de defesa"
|
||||||
|
|
||||||
|
@ -1335,6 +1431,9 @@ msgstr "Executar programa de pesquisa para defensor"
|
||||||
msgid "Run research program for shooter"
|
msgid "Run research program for shooter"
|
||||||
msgstr "Executar programa de pesquisa para atirador"
|
msgstr "Executar programa de pesquisa para atirador"
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for thumper"
|
msgid "Run research program for thumper"
|
||||||
msgstr "Executar programa de pesquisa para batedor"
|
msgstr "Executar programa de pesquisa para batedor"
|
||||||
|
|
||||||
|
@ -1365,6 +1464,9 @@ msgstr "Salvar\\Salve a missão atual"
|
||||||
msgid "Save\\Saves the current mission"
|
msgid "Save\\Saves the current mission"
|
||||||
msgstr "Salvar\\Salva a missão atual"
|
msgstr "Salvar\\Salva a missão atual"
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Select the astronaut\\Selects the astronaut"
|
msgid "Select the astronaut\\Selects the astronaut"
|
||||||
msgstr "Selecione o astronauta\\Seleciona o astronauta"
|
msgstr "Selecione o astronauta\\Seleciona o astronauta"
|
||||||
|
|
||||||
|
@ -1431,6 +1533,15 @@ msgstr "Efeitos sonoros:\\Volume dos motores, voz, tiros, etc."
|
||||||
msgid "Sound\\Music and game sound volume"
|
msgid "Sound\\Music and game sound volume"
|
||||||
msgstr "Som\\Volume do som das músicas e do jogo"
|
msgstr "Som\\Volume do som das músicas e do jogo"
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Spaceship"
|
msgid "Spaceship"
|
||||||
msgstr "Nave espacial"
|
msgstr "Nave espacial"
|
||||||
|
|
||||||
|
@ -1509,6 +1620,10 @@ msgstr "Filtragem de textura\\Filtragem de textura"
|
||||||
msgid "Textures"
|
msgid "Textures"
|
||||||
msgstr "Texturas"
|
msgstr "Texturas"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The battle has ended"
|
msgid "The battle has ended"
|
||||||
msgstr "A batalha acabou"
|
msgstr "A batalha acabou"
|
||||||
|
|
||||||
|
@ -1521,9 +1636,16 @@ msgstr "A função não retornou nenhum valor"
|
||||||
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
||||||
msgstr "A missão não foi completada ainda (pressione \\key help; para mais detalhes)"
|
msgstr "A missão não foi completada ainda (pressione \\key help; para mais detalhes)"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The types of the two operands are incompatible"
|
msgid "The types of the two operands are incompatible"
|
||||||
msgstr "Os tipos dos dois operandos são incompativeis"
|
msgstr "Os tipos dos dois operandos são incompativeis"
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "This class already exists"
|
msgid "This class already exists"
|
||||||
msgstr "Esta classe já existe"
|
msgstr "Esta classe já existe"
|
||||||
|
|
||||||
|
@ -1597,6 +1719,9 @@ msgstr "Muitas bandeiras dessa cor (máximo 5)"
|
||||||
msgid "Too many parameters"
|
msgid "Too many parameters"
|
||||||
msgstr "Muitos parâmetros"
|
msgstr "Muitos parâmetros"
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Tracked grabber"
|
msgid "Tracked grabber"
|
||||||
msgstr "Pegador com esteiras"
|
msgstr "Pegador com esteiras"
|
||||||
|
|
||||||
|
@ -1645,6 +1770,9 @@ msgstr "Unidade"
|
||||||
msgid "Unknown Object"
|
msgid "Unknown Object"
|
||||||
msgstr "Objeto desconhecido"
|
msgstr "Objeto desconhecido"
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Unknown command"
|
msgid "Unknown command"
|
||||||
msgstr "Comando desconhecido"
|
msgstr "Comando desconhecido"
|
||||||
|
|
||||||
|
@ -1657,6 +1785,9 @@ msgstr "Função desconhecida"
|
||||||
msgid "Up (\\key gup;)"
|
msgid "Up (\\key gup;)"
|
||||||
msgstr "Cima (\\key gup;)"
|
msgstr "Cima (\\key gup;)"
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Uranium deposit (site for derrick)"
|
msgid "Uranium deposit (site for derrick)"
|
||||||
msgstr "Depósito de urânio (local para extrator)"
|
msgstr "Depósito de urânio (local para extrator)"
|
||||||
|
|
||||||
|
@ -1678,6 +1809,9 @@ msgstr "Variável não inicializada"
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "Cofre"
|
msgstr "Cofre"
|
||||||
|
|
||||||
|
msgid "Version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1696,6 +1830,12 @@ msgstr "Vespa fatalmente ferida"
|
||||||
msgid "Waste"
|
msgid "Waste"
|
||||||
msgstr "Desperdício"
|
msgstr "Desperdício"
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Wheeled grabber"
|
msgid "Wheeled grabber"
|
||||||
msgstr "Agarrador com rodas"
|
msgstr "Agarrador com rodas"
|
||||||
|
|
||||||
|
@ -1708,6 +1848,9 @@ msgstr "Atirador com rodas"
|
||||||
msgid "Wheeled sniffer"
|
msgid "Wheeled sniffer"
|
||||||
msgstr "Farejador com rodas"
|
msgstr "Farejador com rodas"
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Winged grabber"
|
msgid "Winged grabber"
|
||||||
msgstr "Agarrador alado"
|
msgstr "Agarrador alado"
|
||||||
|
|
||||||
|
@ -1723,6 +1866,9 @@ msgstr "Farejador alado"
|
||||||
msgid "Withdraw shield (\\key action;)"
|
msgid "Withdraw shield (\\key action;)"
|
||||||
msgstr "Retirar escudo (\\key action;)"
|
msgstr "Retirar escudo (\\key action;)"
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Worm"
|
msgid "Worm"
|
||||||
msgstr "Verme"
|
msgstr "Verme"
|
||||||
|
|
||||||
|
@ -1871,6 +2017,9 @@ msgstr "\\Bandeiras violetas"
|
||||||
msgid "\\Yellow flags"
|
msgid "\\Yellow flags"
|
||||||
msgstr "\\Bandeiras amarelas"
|
msgstr "\\Bandeiras amarelas"
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "colobot.info"
|
msgid "colobot.info"
|
||||||
msgstr "colobot.info"
|
msgstr "colobot.info"
|
||||||
|
|
||||||
|
@ -1892,6 +2041,9 @@ msgstr "epsitec.com"
|
||||||
#~ msgid "3D sound\\3D positioning of the sound"
|
#~ msgid "3D sound\\3D positioning of the sound"
|
||||||
#~ msgstr "Bruitages 3D\\Positionnement sonore dans l'espace"
|
#~ msgstr "Bruitages 3D\\Positionnement sonore dans l'espace"
|
||||||
|
|
||||||
|
#~ msgid "Build a destroyer"
|
||||||
|
#~ msgstr "Construir um destruidor"
|
||||||
|
|
||||||
#~ msgid "Building too close"
|
#~ msgid "Building too close"
|
||||||
#~ msgstr "Bâtiment trop proche"
|
#~ msgstr "Bâtiment trop proche"
|
||||||
|
|
||||||
|
|
164
po/ru.po
164
po/ru.po
|
@ -31,6 +31,9 @@ msgstr "Отсутствует \"]\" "
|
||||||
msgid "%s: %d pts"
|
msgid "%s: %d pts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "+\\Missions with bonus content and optional challenges"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "..behind"
|
msgid "..behind"
|
||||||
msgstr "Сзади"
|
msgstr "Сзади"
|
||||||
|
|
||||||
|
@ -109,9 +112,6 @@ msgstr "Анализ уже выполнен"
|
||||||
msgid "Analysis performed"
|
msgid "Analysis performed"
|
||||||
msgstr "Анализ выполнен"
|
msgstr "Анализ выполнен"
|
||||||
|
|
||||||
msgid "Analyzes only organic matter"
|
|
||||||
msgstr "Анализирую только органические вещества"
|
|
||||||
|
|
||||||
msgid "Anisotropy level\\Anisotropy level"
|
msgid "Anisotropy level\\Anisotropy level"
|
||||||
msgstr "Уровень анизотр. фильтр.\\Уровень анизотропной фильтрации"
|
msgstr "Уровень анизотр. фильтр.\\Уровень анизотропной фильтрации"
|
||||||
|
|
||||||
|
@ -127,6 +127,9 @@ msgstr "Внешность\\Настройка внешности"
|
||||||
msgid "Apply changes\\Activates the changed settings"
|
msgid "Apply changes\\Activates the changed settings"
|
||||||
msgstr "Принять\\Принять изменения настроек"
|
msgstr "Принять\\Принять изменения настроек"
|
||||||
|
|
||||||
|
msgid "Apply\\Apply the current mod configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Appropriate constructor missing"
|
msgid "Appropriate constructor missing"
|
||||||
msgstr "Соответствующий конструктор отсутствует"
|
msgstr "Соответствующий конструктор отсутствует"
|
||||||
|
|
||||||
|
@ -185,6 +188,9 @@ msgstr "Бот уничтожен"
|
||||||
msgid "Bot factory"
|
msgid "Bot factory"
|
||||||
msgstr "Завод ботов"
|
msgstr "Завод ботов"
|
||||||
|
|
||||||
|
msgid "Build (\\key action;)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a bot factory"
|
msgid "Build a bot factory"
|
||||||
msgstr "Построить завод ботов"
|
msgstr "Построить завод ботов"
|
||||||
|
|
||||||
|
@ -197,12 +203,12 @@ msgstr "Построить защитную башню"
|
||||||
msgid "Build a derrick"
|
msgid "Build a derrick"
|
||||||
msgstr "Построить буровую вышку"
|
msgstr "Построить буровую вышку"
|
||||||
|
|
||||||
msgid "Build a destroyer"
|
|
||||||
msgstr "Построить уничтожитель"
|
|
||||||
|
|
||||||
msgid "Build a exchange post"
|
msgid "Build a exchange post"
|
||||||
msgstr "Построить пост по обмену сообщениями"
|
msgstr "Построить пост по обмену сообщениями"
|
||||||
|
|
||||||
|
msgid "Build a legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a legged grabber"
|
msgid "Build a legged grabber"
|
||||||
msgstr "Собрать шагающего сборщика"
|
msgstr "Собрать шагающего сборщика"
|
||||||
|
|
||||||
|
@ -248,9 +254,15 @@ msgstr "Собрать передвижной щит"
|
||||||
msgid "Build a subber"
|
msgid "Build a subber"
|
||||||
msgstr "Собрать саббера"
|
msgstr "Собрать саббера"
|
||||||
|
|
||||||
|
msgid "Build a target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a thumper"
|
msgid "Build a thumper"
|
||||||
msgstr "Собрать ударника"
|
msgstr "Собрать ударника"
|
||||||
|
|
||||||
|
msgid "Build a tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a tracked grabber"
|
msgid "Build a tracked grabber"
|
||||||
msgstr "Собрать гусеничного сборщика"
|
msgstr "Собрать гусеничного сборщика"
|
||||||
|
|
||||||
|
@ -263,6 +275,12 @@ msgstr "Собрать гусеничного стрелка"
|
||||||
msgid "Build a tracked sniffer"
|
msgid "Build a tracked sniffer"
|
||||||
msgstr "Собрать гусеничного искателя"
|
msgstr "Собрать гусеничного искателя"
|
||||||
|
|
||||||
|
msgid "Build a vault"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Build a wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a wheeled grabber"
|
msgid "Build a wheeled grabber"
|
||||||
msgstr "Собрать колесного сборщика"
|
msgstr "Собрать колесного сборщика"
|
||||||
|
|
||||||
|
@ -275,6 +293,9 @@ msgstr "Собрать колесного стрелка"
|
||||||
msgid "Build a wheeled sniffer"
|
msgid "Build a wheeled sniffer"
|
||||||
msgstr "Собрать колесного искателя"
|
msgstr "Собрать колесного искателя"
|
||||||
|
|
||||||
|
msgid "Build a winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Build a winged grabber"
|
msgid "Build a winged grabber"
|
||||||
msgstr "Собрать летающего сборщика"
|
msgstr "Собрать летающего сборщика"
|
||||||
|
|
||||||
|
@ -360,6 +381,9 @@ msgstr "Изменить вид\\Переключение между борто
|
||||||
msgid "Change player\\Change player"
|
msgid "Change player\\Change player"
|
||||||
msgstr "Новый игрок\\Выберите имя для игрока"
|
msgstr "Новый игрок\\Выберите имя для игрока"
|
||||||
|
|
||||||
|
msgid "Changes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Chapters:"
|
msgid "Chapters:"
|
||||||
msgstr "Разделы:"
|
msgstr "Разделы:"
|
||||||
|
|
||||||
|
@ -431,6 +455,12 @@ msgstr "Копировать"
|
||||||
msgid "Copy (Ctrl+C)"
|
msgid "Copy (Ctrl+C)"
|
||||||
msgstr "Копировать (Ctrl+C)"
|
msgstr "Копировать (Ctrl+C)"
|
||||||
|
|
||||||
|
msgid "Could not open the file explorer!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Could not open the web browser!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Current mission saved"
|
msgid "Current mission saved"
|
||||||
msgstr "Текущая миссия сохранена"
|
msgstr "Текущая миссия сохранена"
|
||||||
|
|
||||||
|
@ -465,6 +495,9 @@ msgstr "Космический корабль"
|
||||||
msgid "Descend\\Reduces the power of the jet"
|
msgid "Descend\\Reduces the power of the jet"
|
||||||
msgstr "Снижение и посадка\\Понижение мощности реактивного двигателя"
|
msgstr "Снижение и посадка\\Понижение мощности реактивного двигателя"
|
||||||
|
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Destroy"
|
msgid "Destroy"
|
||||||
msgstr "Уничтожить"
|
msgstr "Уничтожить"
|
||||||
|
|
||||||
|
@ -477,6 +510,9 @@ msgstr "Уничтожитель"
|
||||||
msgid "Device\\Driver and resolution settings"
|
msgid "Device\\Driver and resolution settings"
|
||||||
msgstr "Устройство\\Драйвер и настройки разрешения"
|
msgstr "Устройство\\Драйвер и настройки разрешения"
|
||||||
|
|
||||||
|
msgid "Disable\\Disable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dividing by zero"
|
msgid "Dividing by zero"
|
||||||
msgstr "Деление на ноль (запрещено!)"
|
msgstr "Деление на ноль (запрещено!)"
|
||||||
|
|
||||||
|
@ -493,9 +529,15 @@ msgstr "Двери заблокированы роботом или другим
|
||||||
msgid "Down (\\key gdown;)"
|
msgid "Down (\\key gdown;)"
|
||||||
msgstr "Вниз (\\key gdown;)"
|
msgstr "Вниз (\\key gdown;)"
|
||||||
|
|
||||||
|
msgid "Down\\Move the selected mod down so it's loaded later (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Drawer bot"
|
msgid "Drawer bot"
|
||||||
msgstr "Рисовальщик"
|
msgstr "Рисовальщик"
|
||||||
|
|
||||||
|
msgid "Duplicate label in switch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Dust\\Dust and dirt on bots and buildings"
|
msgid "Dust\\Dust and dirt on bots and buildings"
|
||||||
msgstr "Пыль\\Пыль и грязь на ботах и зданиях"
|
msgstr "Пыль\\Пыль и грязь на ботах и зданиях"
|
||||||
|
|
||||||
|
@ -514,6 +556,12 @@ msgstr "Изменить выбранную программу"
|
||||||
msgid "Egg"
|
msgid "Egg"
|
||||||
msgstr "Яйцо"
|
msgstr "Яйцо"
|
||||||
|
|
||||||
|
msgid "Empty character constant"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable\\Enable the selected mod"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "End of block missing"
|
msgid "End of block missing"
|
||||||
msgstr "Отсутствует конец блока"
|
msgstr "Отсутствует конец блока"
|
||||||
|
|
||||||
|
@ -729,6 +777,9 @@ msgstr "Батарея не подходит"
|
||||||
msgid "Inappropriate object"
|
msgid "Inappropriate object"
|
||||||
msgstr "Неподходящий объект"
|
msgstr "Неподходящий объект"
|
||||||
|
|
||||||
|
msgid "Inappropriate sample"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Incorrect index type"
|
msgid "Incorrect index type"
|
||||||
msgstr "Неверный тип индекса"
|
msgstr "Неверный тип индекса"
|
||||||
|
|
||||||
|
@ -738,6 +789,9 @@ msgstr "Заражено вирусом. Временно вышел из стр
|
||||||
msgid "Information exchange post"
|
msgid "Information exchange post"
|
||||||
msgstr "Пост обмена информацией"
|
msgstr "Пост обмена информацией"
|
||||||
|
|
||||||
|
msgid "Information:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Instruction \"break\" outside a loop"
|
msgid "Instruction \"break\" outside a loop"
|
||||||
msgstr "Инструкция \"break\" вне цикла"
|
msgstr "Инструкция \"break\" вне цикла"
|
||||||
|
|
||||||
|
@ -798,6 +852,9 @@ msgstr "Помощь(\\key cbot;)"
|
||||||
msgid "LOADING"
|
msgid "LOADING"
|
||||||
msgstr "ЗАГРУЗКА"
|
msgstr "ЗАГРУЗКА"
|
||||||
|
|
||||||
|
msgid "Legged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Legged grabber"
|
msgid "Legged grabber"
|
||||||
msgstr "Шагающий сборщик"
|
msgstr "Шагающий сборщик"
|
||||||
|
|
||||||
|
@ -896,9 +953,21 @@ msgstr "Миссии"
|
||||||
msgid "Missions on this planet:"
|
msgid "Missions on this planet:"
|
||||||
msgstr "Миссии на этой планете:"
|
msgstr "Миссии на этой планете:"
|
||||||
|
|
||||||
|
msgid "Missions+"
|
||||||
|
msgstr "Миссии+"
|
||||||
|
|
||||||
msgid "Missions\\Select mission"
|
msgid "Missions\\Select mission"
|
||||||
msgstr "Миссии\\Выбор миссии"
|
msgstr "Миссии\\Выбор миссии"
|
||||||
|
|
||||||
|
msgid "Mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Mods\\Mod manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
|
||||||
msgstr "Инверсия мыши по оси X\\Инверсия прокрутки по оси Х"
|
msgstr "Инверсия мыши по оси X\\Инверсия прокрутки по оси Х"
|
||||||
|
|
||||||
|
@ -913,6 +982,9 @@ msgstr "Изменить выбранную программу"
|
||||||
msgid "Move selected program up"
|
msgid "Move selected program up"
|
||||||
msgstr "Изменить выбранную программу"
|
msgstr "Изменить выбранную программу"
|
||||||
|
|
||||||
|
msgid "Mute sounds in background\\Mute all game sounds when the window is unfocused"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mute\\No sound"
|
msgid "Mute\\No sound"
|
||||||
msgstr "Без звука\\Без звука"
|
msgstr "Без звука\\Без звука"
|
||||||
|
|
||||||
|
@ -931,6 +1003,9 @@ msgstr "Новый"
|
||||||
msgid "New ..."
|
msgid "New ..."
|
||||||
msgstr "Новый ..."
|
msgstr "Новый ..."
|
||||||
|
|
||||||
|
msgid "New Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "New bot available"
|
msgid "New bot available"
|
||||||
msgstr "Доступен новый бот"
|
msgstr "Доступен новый бот"
|
||||||
|
|
||||||
|
@ -943,6 +1018,12 @@ msgstr "Следующий объект\\Выбор следующего объ
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Нет"
|
msgstr "Нет"
|
||||||
|
|
||||||
|
msgid "No changes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No description."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "No energy in the subsoil"
|
msgid "No energy in the subsoil"
|
||||||
msgstr "Под землей нет запасов энергии"
|
msgstr "Под землей нет запасов энергии"
|
||||||
|
|
||||||
|
@ -1063,6 +1144,9 @@ msgstr "Открыть"
|
||||||
msgid "Open (Ctrl+O)"
|
msgid "Open (Ctrl+O)"
|
||||||
msgstr "Открыть (Ctrl+O)"
|
msgstr "Открыть (Ctrl+O)"
|
||||||
|
|
||||||
|
msgid "Open Directory\\Open the mods directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Opening brace missing"
|
msgid "Opening brace missing"
|
||||||
msgstr "Открывающая скобка отсутствует"
|
msgstr "Открывающая скобка отсутствует"
|
||||||
|
|
||||||
|
@ -1087,6 +1171,9 @@ msgstr "Источник сообщения\\Показывает место, о
|
||||||
msgid "Original game developed by:"
|
msgid "Original game developed by:"
|
||||||
msgstr "Оригинальная игра была разработана:"
|
msgstr "Оригинальная игра была разработана:"
|
||||||
|
|
||||||
|
msgid "Overwrite existing file?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Parameters missing"
|
msgid "Parameters missing"
|
||||||
msgstr "Отсутствуют параметры"
|
msgstr "Отсутствуют параметры"
|
||||||
|
|
||||||
|
@ -1120,6 +1207,9 @@ msgstr "Место занято"
|
||||||
msgid "Planets:"
|
msgid "Planets:"
|
||||||
msgstr "Планеты:"
|
msgstr "Планеты:"
|
||||||
|
|
||||||
|
msgid "Plans for builder available"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Plans for defense tower available"
|
msgid "Plans for defense tower available"
|
||||||
msgstr "Доступны схемы защитной башни"
|
msgstr "Доступны схемы защитной башни"
|
||||||
|
|
||||||
|
@ -1269,6 +1359,9 @@ msgstr "Красный флаг"
|
||||||
msgid "Reflections on the buttons \\Shiny buttons"
|
msgid "Reflections on the buttons \\Shiny buttons"
|
||||||
msgstr "Отражения на кнопках \\Блестящие кнопки"
|
msgstr "Отражения на кнопках \\Блестящие кнопки"
|
||||||
|
|
||||||
|
msgid "Refresh\\Refresh the list of currently installed mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Remains of Apollo mission"
|
msgid "Remains of Apollo mission"
|
||||||
msgstr "Остатки миссии Аполлон"
|
msgstr "Остатки миссии Аполлон"
|
||||||
|
|
||||||
|
@ -1328,6 +1421,9 @@ msgstr "Робби"
|
||||||
msgid "Ruin"
|
msgid "Ruin"
|
||||||
msgstr "Руины"
|
msgstr "Руины"
|
||||||
|
|
||||||
|
msgid "Run research program for builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for defense tower"
|
msgid "Run research program for defense tower"
|
||||||
msgstr "Начать исследование программы для защитной башни"
|
msgstr "Начать исследование программы для защитной башни"
|
||||||
|
|
||||||
|
@ -1349,6 +1445,9 @@ msgstr "Начать исследование программы для пере
|
||||||
msgid "Run research program for shooter"
|
msgid "Run research program for shooter"
|
||||||
msgstr "Начать исследование программы для стрелка"
|
msgstr "Начать исследование программы для стрелка"
|
||||||
|
|
||||||
|
msgid "Run research program for target bot"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Run research program for thumper"
|
msgid "Run research program for thumper"
|
||||||
msgstr "Начать исследование программы для ударника"
|
msgstr "Начать исследование программы для ударника"
|
||||||
|
|
||||||
|
@ -1379,6 +1478,9 @@ msgstr "Сохранить\\Сохранить текущую миссию"
|
||||||
msgid "Save\\Saves the current mission"
|
msgid "Save\\Saves the current mission"
|
||||||
msgstr "Сохранить\\Сохранить текущую миссию"
|
msgstr "Сохранить\\Сохранить текущую миссию"
|
||||||
|
|
||||||
|
msgid "Select Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Select the astronaut\\Selects the astronaut"
|
msgid "Select the astronaut\\Selects the astronaut"
|
||||||
msgstr "Выбор астронавта\\Выбор астронавта"
|
msgstr "Выбор астронавта\\Выбор астронавта"
|
||||||
|
|
||||||
|
@ -1446,6 +1548,15 @@ msgstr "Общий звук:\\Гормкость двигателя, голос
|
||||||
msgid "Sound\\Music and game sound volume"
|
msgid "Sound\\Music and game sound volume"
|
||||||
msgstr "Звук\\Громкость музыки и звуков"
|
msgstr "Звук\\Громкость музыки и звуков"
|
||||||
|
|
||||||
|
msgid "Space Explorer\\Disables astronaut abilities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Programmer\\Disables radio-control"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Space Researcher\\Disables using all previously researched technologies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Spaceship"
|
msgid "Spaceship"
|
||||||
msgstr "Космический корабль"
|
msgstr "Космический корабль"
|
||||||
|
|
||||||
|
@ -1525,6 +1636,10 @@ msgstr "Фильтрация текстур\\Фильтрация текстур
|
||||||
msgid "Textures"
|
msgid "Textures"
|
||||||
msgstr "Текстуры"
|
msgstr "Текстуры"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The address %s could not be opened in a web browser."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The battle has ended"
|
msgid "The battle has ended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1537,9 +1652,16 @@ msgstr "Функция не возвратила значения"
|
||||||
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
msgid "The mission is not accomplished yet (press \\key help; for more details)"
|
||||||
msgstr "Миссия еще не выполнена (нажмите \\key help; для более подробной информации)"
|
msgstr "Миссия еще не выполнена (нажмите \\key help; для более подробной информации)"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The path %s could not be opened in a file explorer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "The types of the two operands are incompatible"
|
msgid "The types of the two operands are incompatible"
|
||||||
msgstr "Типы операндов несовместимы"
|
msgstr "Типы операндов несовместимы"
|
||||||
|
|
||||||
|
msgid "There are unsaved changes. Do you want to save them before leaving?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "This class already exists"
|
msgid "This class already exists"
|
||||||
msgstr "Этот класс уже существует"
|
msgstr "Этот класс уже существует"
|
||||||
|
|
||||||
|
@ -1613,6 +1735,9 @@ msgstr "Слишком много флагов этого цвета (макси
|
||||||
msgid "Too many parameters"
|
msgid "Too many parameters"
|
||||||
msgstr "Слишком много параметров"
|
msgstr "Слишком много параметров"
|
||||||
|
|
||||||
|
msgid "Tracked builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Tracked grabber"
|
msgid "Tracked grabber"
|
||||||
msgstr "Гусеничный сборщик"
|
msgstr "Гусеничный сборщик"
|
||||||
|
|
||||||
|
@ -1661,6 +1786,9 @@ msgstr "Юнит"
|
||||||
msgid "Unknown Object"
|
msgid "Unknown Object"
|
||||||
msgstr "Неизвестный объект"
|
msgstr "Неизвестный объект"
|
||||||
|
|
||||||
|
msgid "Unknown author"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Unknown command"
|
msgid "Unknown command"
|
||||||
msgstr "Неизвестная команда"
|
msgstr "Неизвестная команда"
|
||||||
|
|
||||||
|
@ -1673,6 +1801,9 @@ msgstr "Неизвестная функция"
|
||||||
msgid "Up (\\key gup;)"
|
msgid "Up (\\key gup;)"
|
||||||
msgstr "Вверх (\\key gup;)"
|
msgstr "Вверх (\\key gup;)"
|
||||||
|
|
||||||
|
msgid "Up\\Move the selected mod up so it's loaded sooner (mods may overwrite files from the mods above them)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Uranium deposit (site for derrick)"
|
msgid "Uranium deposit (site for derrick)"
|
||||||
msgstr "Запасы урана (место для буровой вышки)"
|
msgstr "Запасы урана (место для буровой вышки)"
|
||||||
|
|
||||||
|
@ -1694,6 +1825,9 @@ msgstr "Переменная не инициализирована"
|
||||||
msgid "Vault"
|
msgid "Vault"
|
||||||
msgstr "Хранилище"
|
msgstr "Хранилище"
|
||||||
|
|
||||||
|
msgid "Version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
msgid "Vertical Synchronization\\Limits the number of frames per second to display frequency"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1712,6 +1846,12 @@ msgstr "Оса смертельно ранена"
|
||||||
msgid "Waste"
|
msgid "Waste"
|
||||||
msgstr "Мусор"
|
msgstr "Мусор"
|
||||||
|
|
||||||
|
msgid "Website"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Wheeled builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Wheeled grabber"
|
msgid "Wheeled grabber"
|
||||||
msgstr "Колесный сборщик"
|
msgstr "Колесный сборщик"
|
||||||
|
|
||||||
|
@ -1724,6 +1864,9 @@ msgstr "Колесный стрелок"
|
||||||
msgid "Wheeled sniffer"
|
msgid "Wheeled sniffer"
|
||||||
msgstr "Колесный искатель"
|
msgstr "Колесный искатель"
|
||||||
|
|
||||||
|
msgid "Winged builder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Winged grabber"
|
msgid "Winged grabber"
|
||||||
msgstr "Летающий сборщик"
|
msgstr "Летающий сборщик"
|
||||||
|
|
||||||
|
@ -1739,6 +1882,9 @@ msgstr "Летающий искатель"
|
||||||
msgid "Withdraw shield (\\key action;)"
|
msgid "Withdraw shield (\\key action;)"
|
||||||
msgstr "Снять щит (\\key action;)"
|
msgstr "Снять щит (\\key action;)"
|
||||||
|
|
||||||
|
msgid "Workshop\\Open the workshop to search for mods"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Worm"
|
msgid "Worm"
|
||||||
msgstr "Червь"
|
msgstr "Червь"
|
||||||
|
|
||||||
|
@ -1887,6 +2033,9 @@ msgstr "\\Фиолетовый флаг"
|
||||||
msgid "\\Yellow flags"
|
msgid "\\Yellow flags"
|
||||||
msgstr "\\Желтый флаг"
|
msgstr "\\Желтый флаг"
|
||||||
|
|
||||||
|
msgid "by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "colobot.info"
|
msgid "colobot.info"
|
||||||
msgstr "colobot.info"
|
msgstr "colobot.info"
|
||||||
|
|
||||||
|
@ -1908,6 +2057,9 @@ msgstr "epsitec.com"
|
||||||
#~ msgid "3D sound\\3D positioning of the sound"
|
#~ msgid "3D sound\\3D positioning of the sound"
|
||||||
#~ msgstr "3D-звук\\Стерео звук"
|
#~ msgstr "3D-звук\\Стерео звук"
|
||||||
|
|
||||||
|
#~ msgid "Build a destroyer"
|
||||||
|
#~ msgstr "Построить уничтожитель"
|
||||||
|
|
||||||
#~ msgid "Building too close"
|
#~ msgid "Building too close"
|
||||||
#~ msgstr "Здание слишком близко"
|
#~ msgstr "Здание слишком близко"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "CBot/CBotCStack.h"
|
#include "CBot/CBotCStack.h"
|
||||||
|
|
||||||
|
#include "CBot/CBotClass.h"
|
||||||
#include "CBot/CBotToken.h"
|
#include "CBot/CBotToken.h"
|
||||||
#include "CBot/CBotExternalCall.h"
|
#include "CBot/CBotExternalCall.h"
|
||||||
|
|
||||||
|
@ -30,107 +31,100 @@
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
struct CBotCStack::Data
|
||||||
CBotProgram* CBotCStack::m_prog = nullptr; // init the static variable
|
{
|
||||||
CBotError CBotCStack::m_error = CBotNoErr;
|
//! The program currently being compiled
|
||||||
int CBotCStack::m_end = 0;
|
CBotProgram* prog = nullptr;
|
||||||
CBotTypResult CBotCStack::m_retTyp = CBotTypResult(0);
|
//! The current error state of the compile stack
|
||||||
|
CBotError error = CBotNoErr;
|
||||||
|
int errEnd = 0;
|
||||||
|
//! The return type of the function currently being compiled
|
||||||
|
CBotTypResult retTyp = CBotTypResult(CBotTypVoid);
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotCStack::CBotCStack(CBotCStack* ppapa)
|
CBotCStack::CBotCStack(CBotCStack* ppapa)
|
||||||
{
|
{
|
||||||
m_next = nullptr;
|
|
||||||
m_prev = ppapa;
|
m_prev = ppapa;
|
||||||
|
|
||||||
if (ppapa == nullptr)
|
if (ppapa == nullptr)
|
||||||
{
|
{
|
||||||
m_error = CBotNoErr;
|
m_data = new CBotCStack::Data;
|
||||||
m_start = 0;
|
m_errStart = 0;
|
||||||
m_end = 0;
|
|
||||||
m_bBlock = true;
|
m_bBlock = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_start = ppapa->m_start;
|
m_data = ppapa->m_data;
|
||||||
|
m_errStart = ppapa->m_errStart;
|
||||||
m_bBlock = false;
|
m_bBlock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_listVar = nullptr;
|
|
||||||
m_var = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotCStack::~CBotCStack()
|
CBotCStack::~CBotCStack()
|
||||||
{
|
{
|
||||||
if (m_next != nullptr) delete m_next;
|
if (m_prev == nullptr) delete m_data;
|
||||||
if (m_prev != nullptr) m_prev->m_next = nullptr; // removes chain
|
|
||||||
|
|
||||||
delete m_var;
|
|
||||||
delete m_listVar;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotCStack* CBotCStack::TokenStack(CBotToken* pToken, bool bBlock)
|
CBotCStack* CBotCStack::TokenStack(CBotToken* pToken, bool bBlock)
|
||||||
{
|
{
|
||||||
if (m_next != nullptr) return m_next; // include on an existing stack
|
if (m_next) return m_next.get(); // include on an existing stack
|
||||||
|
|
||||||
CBotCStack* p = new CBotCStack(this);
|
m_next.reset(new CBotCStack(this));
|
||||||
m_next = p; // channel element
|
m_next->m_bBlock = bBlock;
|
||||||
p->m_bBlock = bBlock;
|
|
||||||
|
|
||||||
if (pToken != nullptr) p->SetStartError(pToken->GetStart());
|
if (pToken != nullptr) m_next->SetStartError(pToken->GetStart());
|
||||||
|
|
||||||
return p;
|
return m_next.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBotCStack::DeleteNext()
|
||||||
|
{
|
||||||
|
m_next.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotInstr* CBotCStack::Return(CBotInstr* inst, CBotCStack* pfils)
|
CBotInstr* CBotCStack::Return(CBotInstr* inst, CBotCStack* pfils)
|
||||||
{
|
{
|
||||||
if ( pfils == this ) return inst;
|
if ( pfils == this ) return inst;
|
||||||
|
|
||||||
if (m_var != nullptr) delete m_var; // value replaced?
|
m_var = std::move(pfils->m_var); // result transmitted
|
||||||
m_var = pfils->m_var; // result transmitted
|
|
||||||
pfils->m_var = nullptr; // not to destroy the variable
|
|
||||||
|
|
||||||
if (m_error)
|
if (m_data->error != CBotNoErr)
|
||||||
{
|
{
|
||||||
m_start = pfils->m_start; // retrieves the position of the error
|
m_errStart = pfils->m_errStart; // retrieves the position of the error
|
||||||
m_end = pfils->m_end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delete pfils;
|
m_next.reset();
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotFunction* CBotCStack::ReturnFunc(CBotFunction* inst, CBotCStack* pfils)
|
CBotFunction* CBotCStack::ReturnFunc(CBotFunction* inst, CBotCStack* pfils)
|
||||||
{
|
{
|
||||||
if (m_var != nullptr) delete m_var; // value replaced?
|
m_var = std::move(pfils->m_var); // result transmitted
|
||||||
m_var = pfils->m_var; // result transmitted
|
|
||||||
pfils->m_var = nullptr; // not to destroy the variable
|
|
||||||
|
|
||||||
if (m_error)
|
if (m_data->error != CBotNoErr)
|
||||||
{
|
{
|
||||||
m_start = pfils->m_start; // retrieves the position of the error
|
m_errStart = pfils->m_errStart; // retrieves the position of the error
|
||||||
m_end = pfils->m_end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delete pfils;
|
m_next.reset();
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotError CBotCStack::GetError(int& start, int& end)
|
CBotError CBotCStack::GetError(int& start, int& end)
|
||||||
{
|
{
|
||||||
start = m_start;
|
start = m_errStart;
|
||||||
end = m_end;
|
end = m_data->errEnd;
|
||||||
return m_error;
|
return m_data->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotError CBotCStack::GetError()
|
CBotError CBotCStack::GetError()
|
||||||
{
|
{
|
||||||
return m_error;
|
return m_data->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -170,18 +164,13 @@ void CBotCStack::SetType(CBotTypResult& type)
|
||||||
CBotVar* CBotCStack::FindVar(CBotToken* &pToken)
|
CBotVar* CBotCStack::FindVar(CBotToken* &pToken)
|
||||||
{
|
{
|
||||||
CBotCStack* p = this;
|
CBotCStack* p = this;
|
||||||
std::string name = pToken->GetString();
|
const auto& name = pToken->GetString();
|
||||||
|
|
||||||
while (p != nullptr)
|
while (p != nullptr)
|
||||||
{
|
{
|
||||||
CBotVar* pp = p->m_listVar;
|
if (p->m_bBlock) for (auto& var : p->m_listVar)
|
||||||
while ( pp != nullptr)
|
|
||||||
{
|
{
|
||||||
if (name == pp->GetName())
|
if (name == var->GetName()) return var.get();
|
||||||
{
|
|
||||||
return pp;
|
|
||||||
}
|
|
||||||
pp = pp->m_next;
|
|
||||||
}
|
}
|
||||||
p = p->m_prev;
|
p = p->m_prev;
|
||||||
}
|
}
|
||||||
|
@ -210,39 +199,39 @@ CBotVar* CBotCStack::CopyVar(CBotToken& Token)
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotCStack::IsOk()
|
bool CBotCStack::IsOk()
|
||||||
{
|
{
|
||||||
return (m_error == 0);
|
return (m_data->error == CBotNoErr);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetStartError( int pos )
|
void CBotCStack::SetStartError( int pos )
|
||||||
{
|
{
|
||||||
if ( m_error != 0) return; // does not change existing error
|
if (m_data->error != CBotNoErr) return; // does not change existing error
|
||||||
m_start = pos;
|
m_errStart = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetError(CBotError n, int pos)
|
void CBotCStack::SetError(CBotError n, int pos)
|
||||||
{
|
{
|
||||||
if ( n!= 0 && m_error != 0) return; // does not change existing error
|
if (n != CBotNoErr && m_data->error != CBotNoErr) return; // does not change existing error
|
||||||
m_error = n;
|
m_data->error = n;
|
||||||
m_end = pos;
|
m_data->errEnd = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetError(CBotError n, CBotToken* p)
|
void CBotCStack::SetError(CBotError n, CBotToken* p)
|
||||||
{
|
{
|
||||||
if (m_error) return; // does not change existing error
|
if (m_data->error != CBotNoErr) return; // does not change existing error
|
||||||
m_error = n;
|
m_data->error = n;
|
||||||
m_start = p->GetStart();
|
m_errStart = p->GetStart();
|
||||||
m_end = p->GetEnd();
|
m_data->errEnd = p->GetEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::ResetError(CBotError n, int start, int end)
|
void CBotCStack::ResetError(CBotError n, int start, int end)
|
||||||
{
|
{
|
||||||
m_error = n;
|
m_data->error = n;
|
||||||
m_start = start;
|
m_errStart = start;
|
||||||
m_end = end;
|
m_data->errEnd = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -260,48 +249,47 @@ bool CBotCStack::NextToken(CBotToken* &p)
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetProgram(CBotProgram* p)
|
void CBotCStack::SetProgram(CBotProgram* p)
|
||||||
{
|
{
|
||||||
m_prog = p;
|
m_data->prog = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotProgram* CBotCStack::GetProgram()
|
CBotProgram* CBotCStack::GetProgram()
|
||||||
{
|
{
|
||||||
return m_prog;
|
return m_data->prog;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetRetType(CBotTypResult& type)
|
void CBotCStack::SetRetType(CBotTypResult& type)
|
||||||
{
|
{
|
||||||
m_retTyp = type;
|
m_data->retTyp = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotTypResult CBotCStack::GetRetType()
|
CBotTypResult CBotCStack::GetRetType()
|
||||||
{
|
{
|
||||||
return m_retTyp;
|
return m_data->retTyp;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetVar( CBotVar* var )
|
void CBotCStack::SetVar( CBotVar* var )
|
||||||
{
|
{
|
||||||
if (m_var) delete m_var; // replacement of a variable
|
m_var.reset(var);
|
||||||
m_var = var;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCStack::SetCopyVar( CBotVar* var )
|
void CBotCStack::SetCopyVar( CBotVar* var )
|
||||||
{
|
{
|
||||||
if (m_var) delete m_var; // replacement of a variable
|
m_var.reset();
|
||||||
|
|
||||||
if ( var == nullptr ) return;
|
if ( var == nullptr ) return;
|
||||||
m_var = CBotVar::Create("", var->GetTypResult(CBotVar::GetTypeMode::CLASS_AS_INTRINSIC));
|
m_var.reset(CBotVar::Create("", var->GetTypResult(CBotVar::GetTypeMode::CLASS_AS_INTRINSIC)));
|
||||||
m_var->Copy( var );
|
m_var->Copy( var );
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotVar* CBotCStack::GetVar()
|
CBotVar* CBotCStack::GetVar()
|
||||||
{
|
{
|
||||||
return m_var;
|
return m_var.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -309,34 +297,70 @@ void CBotCStack::AddVar(CBotVar* pVar)
|
||||||
{
|
{
|
||||||
CBotCStack* p = this;
|
CBotCStack* p = this;
|
||||||
|
|
||||||
// returns to the father element
|
// find the level of the current block
|
||||||
while (p != nullptr && p->m_bBlock == 0) p = p->m_prev;
|
while (p != nullptr && p->m_bBlock == 0) p = p->m_prev;
|
||||||
|
|
||||||
if ( p == nullptr ) return;
|
if (p == nullptr || pVar == nullptr) return;
|
||||||
|
|
||||||
CBotVar** pp = &p->m_listVar;
|
p->m_listVar.emplace_back(pVar);
|
||||||
while ( *pp != nullptr ) pp = &(*pp)->m_next;
|
}
|
||||||
|
|
||||||
*pp = pVar; // added after
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void CBotCStack::CreateVarThis(CBotClass* pClass)
|
||||||
|
{
|
||||||
|
if ( pClass == nullptr ) return;
|
||||||
|
|
||||||
|
CBotVar* pThis = CBotVar::Create("this", CBotTypResult(CBotTypClass, pClass));
|
||||||
|
|
||||||
|
pThis->SetUniqNum(-2); // special ID for "this"
|
||||||
|
AddVar(pThis);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void CBotCStack::CreateVarSuper(CBotClass* pClass)
|
||||||
|
{
|
||||||
|
if ( pClass == nullptr ) return;
|
||||||
|
|
||||||
|
CBotVar* pSuper = CBotVar::Create("super", CBotTypResult(CBotTypClass, pClass));
|
||||||
|
|
||||||
|
pSuper->SetUniqNum(-3); // special ID for "super"
|
||||||
|
AddVar(pSuper);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void CBotCStack::CreateMemberVars(CBotClass* pClass, bool setDefined)
|
||||||
|
{
|
||||||
|
while (pClass != nullptr)
|
||||||
|
{
|
||||||
|
CBotVar* pv = pClass->GetVar();
|
||||||
|
while (pv != nullptr)
|
||||||
|
{
|
||||||
|
CBotVar* pcopy = CBotVar::Create(pv);
|
||||||
|
CBotVar::InitType initType = CBotVar::InitType::UNDEF;
|
||||||
|
if (setDefined || pv->IsStatic())
|
||||||
|
initType = CBotVar::InitType::DEF;
|
||||||
|
pcopy->SetInit(initType);
|
||||||
|
pcopy->SetUniqNum(pv->GetUniqNum());
|
||||||
|
pcopy->SetPrivate(pv->GetPrivate());
|
||||||
|
AddVar(pcopy);
|
||||||
|
pv = pv->GetNext();
|
||||||
|
}
|
||||||
|
pClass = pClass->GetParent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotCStack::CheckVarLocal(CBotToken* &pToken)
|
bool CBotCStack::CheckVarLocal(CBotToken* &pToken)
|
||||||
{
|
{
|
||||||
CBotCStack* p = this;
|
CBotCStack* p = this;
|
||||||
std::string name = pToken->GetString();
|
const auto& name = pToken->GetString();
|
||||||
|
|
||||||
while (p != nullptr)
|
// find the level of the current block
|
||||||
|
while (p != nullptr && p->m_bBlock == 0) p = p->m_prev;
|
||||||
|
|
||||||
|
if (p != nullptr) for (auto& var : p->m_listVar)
|
||||||
{
|
{
|
||||||
CBotVar* pp = p->m_listVar;
|
if (name == var->GetName()) return true;
|
||||||
while ( pp != nullptr)
|
|
||||||
{
|
|
||||||
if (name == pp->GetName())
|
|
||||||
return true;
|
|
||||||
pp = pp->m_next;
|
|
||||||
}
|
|
||||||
if ( p->m_bBlock ) return false;
|
|
||||||
p = p->m_prev;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -347,10 +371,10 @@ CBotTypResult CBotCStack::CompileCall(CBotToken* &p, CBotVar** ppVars, long& nId
|
||||||
nIdent = 0;
|
nIdent = 0;
|
||||||
CBotTypResult val(-1);
|
CBotTypResult val(-1);
|
||||||
|
|
||||||
val = m_prog->GetExternalCalls()->CompileCall(p, nullptr, ppVars, this);
|
val = GetProgram()->GetExternalCalls()->CompileCall(p, nullptr, ppVars, this);
|
||||||
if (val.GetType() < 0)
|
if (val.GetType() < 0)
|
||||||
{
|
{
|
||||||
val = CBotFunction::CompileCall(m_prog->GetFunctions(), p->GetString(), ppVars, nIdent);
|
val = CBotFunction::CompileCall(p->GetString(), ppVars, nIdent, GetProgram());
|
||||||
if ( val.GetType() < 0 )
|
if ( val.GetType() < 0 )
|
||||||
{
|
{
|
||||||
// pVar = nullptr; // the error is not on a particular parameter
|
// pVar = nullptr; // the error is not on a particular parameter
|
||||||
|
@ -363,16 +387,19 @@ CBotTypResult CBotCStack::CompileCall(CBotToken* &p, CBotVar** ppVars, long& nId
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotCStack::CheckCall(CBotToken* &pToken, CBotDefParam* pParam)
|
bool CBotCStack::CheckCall(CBotToken* &pToken, CBotDefParam* pParam, const std::string& className)
|
||||||
{
|
{
|
||||||
std::string name = pToken->GetString();
|
const auto& name = pToken->GetString();
|
||||||
|
|
||||||
if ( m_prog->GetExternalCalls()->CheckCall(name) ) return true;
|
if ( GetProgram()->GetExternalCalls()->CheckCall(name) ) return true;
|
||||||
|
|
||||||
for (CBotFunction* pp : m_prog->GetFunctions())
|
for (CBotFunction* pp : GetProgram()->GetFunctions())
|
||||||
{
|
{
|
||||||
if ( pToken->GetString() == pp->GetName() )
|
if ( name == pp->GetName() )
|
||||||
{
|
{
|
||||||
|
// ignore methods for a different class
|
||||||
|
if ( className != pp->GetClassName() )
|
||||||
|
continue;
|
||||||
// are parameters exactly the same?
|
// are parameters exactly the same?
|
||||||
if ( pp->CheckParam( pParam ) )
|
if ( pp->CheckParam( pParam ) )
|
||||||
return true;
|
return true;
|
||||||
|
@ -381,8 +408,11 @@ bool CBotCStack::CheckCall(CBotToken* &pToken, CBotDefParam* pParam)
|
||||||
|
|
||||||
for (CBotFunction* pp : CBotFunction::m_publicFunctions)
|
for (CBotFunction* pp : CBotFunction::m_publicFunctions)
|
||||||
{
|
{
|
||||||
if ( pToken->GetString() == pp->GetName() )
|
if ( name == pp->GetName() )
|
||||||
{
|
{
|
||||||
|
// ignore methods for a different class
|
||||||
|
if ( className != pp->GetClassName() )
|
||||||
|
continue;
|
||||||
// are parameters exactly the same?
|
// are parameters exactly the same?
|
||||||
if ( pp->CheckParam( pParam ) )
|
if ( pp->CheckParam( pParam ) )
|
||||||
return true;
|
return true;
|
||||||
|
@ -392,4 +422,4 @@ bool CBotCStack::CheckCall(CBotToken* &pToken, CBotDefParam* pParam)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // namespace CBot
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -22,6 +22,9 @@
|
||||||
#include "CBot/CBotVar/CBotVar.h"
|
#include "CBot/CBotVar/CBotVar.h"
|
||||||
#include "CBot/CBotProgram.h"
|
#include "CBot/CBotProgram.h"
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -100,6 +103,25 @@ public:
|
||||||
*/
|
*/
|
||||||
void AddVar(CBotVar* p);
|
void AddVar(CBotVar* p);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Create 'this' as a local variable.
|
||||||
|
* \param pClass The current class referred to by 'this'
|
||||||
|
*/
|
||||||
|
void CreateVarThis(CBotClass* pClass);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Create 'super' as a local variable.
|
||||||
|
* \param pClass The parent class referred to by 'super'
|
||||||
|
*/
|
||||||
|
void CreateVarSuper(CBotClass* pClass);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Create member variables of the current class as local variables.
|
||||||
|
* \param pClass The current class.
|
||||||
|
* \param setDefined Whether to mark the variables as initialized.
|
||||||
|
*/
|
||||||
|
void CreateMemberVars(CBotClass* pClass, bool setDefined);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief FindVar Finds a variable. Seeks a variable on the stack the token
|
* \brief FindVar Finds a variable. Seeks a variable on the stack the token
|
||||||
* may be a result of TokenTypVar (object of a class) or a pointer in the
|
* may be a result of TokenTypVar (object of a class) or a pointer in the
|
||||||
|
@ -138,6 +160,11 @@ public:
|
||||||
*/
|
*/
|
||||||
CBotCStack* TokenStack(CBotToken* pToken = nullptr, bool bBlock = false);
|
CBotCStack* TokenStack(CBotToken* pToken = nullptr, bool bBlock = false);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Deletes all subsequent stack frames created by TokenStack.
|
||||||
|
*/
|
||||||
|
void DeleteNext();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return Transmits the result upper.
|
* \brief Return Transmits the result upper.
|
||||||
* \param p
|
* \param p
|
||||||
|
@ -235,11 +262,12 @@ public:
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief CheckCall Test if a procedure name is already defined somewhere.
|
* \brief CheckCall Test if a procedure name is already defined somewhere.
|
||||||
* \param pToken
|
* \param pToken Token representing the name of a function.
|
||||||
* \param pParam
|
* \param pParam List of parameters.
|
||||||
|
* \param className Name of a class when checking for methods.
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
bool CheckCall(CBotToken* &pToken, CBotDefParam* pParam);
|
bool CheckCall(CBotToken* &pToken, CBotDefParam* pParam, const std::string& className);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief NextToken
|
* \brief NextToken
|
||||||
|
@ -249,21 +277,20 @@ public:
|
||||||
bool NextToken(CBotToken* &p);
|
bool NextToken(CBotToken* &p);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CBotCStack* m_next;
|
std::unique_ptr<CBotCStack> m_next;
|
||||||
CBotCStack* m_prev;
|
CBotCStack* m_prev;
|
||||||
|
|
||||||
static CBotError m_error;
|
int m_errStart = 0;
|
||||||
static int m_end;
|
|
||||||
int m_start;
|
struct Data;
|
||||||
|
|
||||||
|
CBotCStack::Data* m_data;
|
||||||
|
|
||||||
//! Result of the operations.
|
//! Result of the operations.
|
||||||
CBotVar* m_var;
|
std::unique_ptr<CBotVar> m_var;
|
||||||
//! Is part of a block (variables are local to this block).
|
//! Is part of a block (variables are local to this block).
|
||||||
bool m_bBlock;
|
bool m_bBlock;
|
||||||
CBotVar* m_listVar;
|
std::list<std::unique_ptr<CBotVar>> m_listVar;
|
||||||
//! List of compiled functions.
|
|
||||||
static CBotProgram* m_prog;
|
|
||||||
static CBotTypResult m_retTyp;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace CBot
|
} // namespace CBot
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -36,7 +36,6 @@
|
||||||
#include "CBot/CBotCStack.h"
|
#include "CBot/CBotCStack.h"
|
||||||
#include "CBot/CBotDefParam.h"
|
#include "CBot/CBotDefParam.h"
|
||||||
#include "CBot/CBotUtils.h"
|
#include "CBot/CBotUtils.h"
|
||||||
#include "CBot/CBotFileUtils.h"
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
@ -316,7 +315,7 @@ CBotTypResult CBotClass::CompileMethode(CBotToken* name,
|
||||||
|
|
||||||
// find the methods declared by user
|
// find the methods declared by user
|
||||||
|
|
||||||
r = CBotFunction::CompileCall(m_pMethod, name->GetString(), ppParams, nIdent);
|
r = CBotFunction::CompileMethodCall(name->GetString(), ppParams, nIdent, pStack, this);
|
||||||
if ( r.Eq(CBotErrUndefCall) && m_parent != nullptr )
|
if ( r.Eq(CBotErrUndefCall) && m_parent != nullptr )
|
||||||
return m_parent->CompileMethode(name, pThis, ppParams, pStack, nIdent);
|
return m_parent->CompileMethode(name, pThis, ppParams, pStack, nIdent);
|
||||||
return r;
|
return r;
|
||||||
|
@ -333,7 +332,7 @@ bool CBotClass::ExecuteMethode(long& nIdent,
|
||||||
int ret = m_externalMethods->DoCall(pToken, pThis, ppParams, pStack, pResultType);
|
int ret = m_externalMethods->DoCall(pToken, pThis, ppParams, pStack, pResultType);
|
||||||
if (ret >= 0) return ret;
|
if (ret >= 0) return ret;
|
||||||
|
|
||||||
ret = CBotFunction::DoCall(m_pMethod, nIdent, pToken->GetString(), pThis, ppParams, pStack, pToken, this);
|
ret = CBotFunction::DoCall(nIdent, pToken->GetString(), pThis, ppParams, pStack, pToken, this);
|
||||||
if (ret >= 0) return ret;
|
if (ret >= 0) return ret;
|
||||||
|
|
||||||
if (m_parent != nullptr)
|
if (m_parent != nullptr)
|
||||||
|
@ -356,7 +355,7 @@ void CBotClass::RestoreMethode(long& nIdent,
|
||||||
CBotClass* pClass = this;
|
CBotClass* pClass = this;
|
||||||
while (pClass != nullptr)
|
while (pClass != nullptr)
|
||||||
{
|
{
|
||||||
bool ok = CBotFunction::RestoreCall(pClass->m_pMethod, nIdent, name->GetString(), pThis, ppParams, pStack, pClass);
|
bool ok = CBotFunction::RestoreCall(nIdent, name->GetString(), pThis, ppParams, pStack, pClass);
|
||||||
if (ok) return;
|
if (ok) return;
|
||||||
pClass = pClass->m_parent;
|
pClass = pClass->m_parent;
|
||||||
}
|
}
|
||||||
|
@ -364,69 +363,70 @@ void CBotClass::RestoreMethode(long& nIdent,
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotClass::SaveStaticState(FILE* pf)
|
bool CBotClass::SaveStaticState(std::ostream &ostr)
|
||||||
{
|
{
|
||||||
if (!WriteWord( pf, CBOTVERSION*2)) return false;
|
if (!WriteLong(ostr, CBOTVERSION*2)) return false;
|
||||||
|
|
||||||
// saves the state of static variables in classes
|
// saves the state of static variables in classes
|
||||||
for (CBotClass* p : m_publicClasses)
|
for (CBotClass* p : m_publicClasses)
|
||||||
{
|
{
|
||||||
if (!WriteWord( pf, 1 )) return false;
|
if (!WriteWord(ostr, 1)) return false;
|
||||||
// save the name of the class
|
// save the name of the class
|
||||||
if (!WriteString( pf, p->GetName() )) return false;
|
if (!WriteString(ostr, p->GetName())) return false;
|
||||||
|
|
||||||
CBotVar* pv = p->GetVar();
|
CBotVar* pv = p->GetVar();
|
||||||
while( pv != nullptr )
|
while( pv != nullptr )
|
||||||
{
|
{
|
||||||
if ( pv->IsStatic() )
|
if ( pv->IsStatic() )
|
||||||
{
|
{
|
||||||
if (!WriteWord( pf, 1 )) return false;
|
if (!WriteWord(ostr, 1)) return false;
|
||||||
if (!WriteString( pf, pv->GetName() )) return false;
|
if (!WriteString(ostr, pv->GetName())) return false;
|
||||||
|
|
||||||
if ( !pv->Save0State(pf) ) return false; // common header
|
if (!pv->Save0State(ostr)) return false; // common header
|
||||||
if ( !pv->Save1State(pf) ) return false; // saves as the child class
|
if (!pv->Save1State(ostr)) return false; // saves as the child class
|
||||||
if ( !WriteWord( pf, 0 ) ) return false;
|
if (!WriteWord(ostr, 0)) return false;
|
||||||
}
|
}
|
||||||
pv = pv->GetNext();
|
pv = pv->GetNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!WriteWord( pf, 0 )) return false;
|
if (!WriteWord(ostr, 0)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!WriteWord( pf, 0 )) return false;
|
if (!WriteWord(ostr, 0)) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotClass::RestoreStaticState(FILE* pf)
|
bool CBotClass::RestoreStaticState(std::istream &istr)
|
||||||
{
|
{
|
||||||
std::string ClassName, VarName;
|
std::string ClassName, VarName;
|
||||||
CBotClass* pClass;
|
CBotClass* pClass;
|
||||||
unsigned short w;
|
unsigned short w;
|
||||||
|
|
||||||
if (!ReadWord( pf, w )) return false;
|
long version;
|
||||||
if ( w != CBOTVERSION*2 ) return false;
|
if (!ReadLong(istr, version)) return false;
|
||||||
|
if (version != CBOTVERSION*2) return false;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (!ReadWord( pf, w )) return false;
|
if (!ReadWord(istr, w)) return false;
|
||||||
if ( w == 0 ) return true;
|
if ( w == 0 ) return true;
|
||||||
|
|
||||||
if (!ReadString( pf, ClassName )) return false;
|
if (!ReadString(istr, ClassName)) return false;
|
||||||
pClass = Find(ClassName);
|
pClass = Find(ClassName);
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (!ReadWord( pf, w )) return false;
|
if (!ReadWord(istr, w)) return false;
|
||||||
if ( w == 0 ) break;
|
if ( w == 0 ) break;
|
||||||
|
|
||||||
CBotVar* pVar = nullptr;
|
CBotVar* pVar = nullptr;
|
||||||
CBotVar* pv = nullptr;
|
CBotVar* pv = nullptr;
|
||||||
|
|
||||||
if (!ReadString( pf, VarName )) return false;
|
if (!ReadString(istr, VarName)) return false;
|
||||||
if ( pClass != nullptr ) pVar = pClass->GetItem(VarName);
|
if ( pClass != nullptr ) pVar = pClass->GetItem(VarName);
|
||||||
|
|
||||||
if (!CBotVar::RestoreState(pf, pv)) return false; // the temp variable
|
if (!CBotVar::RestoreState(istr, pv)) return false; // the temp variable
|
||||||
|
|
||||||
if ( pVar != nullptr ) pVar->Copy(pv);
|
if ( pVar != nullptr ) pVar->Copy(pv);
|
||||||
delete pv;
|
delete pv;
|
||||||
|
@ -542,6 +542,11 @@ void CBotClass::DefineClasses(std::list<CBotClass*> pClassList, CBotCStack* pSta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::list<CBotFunction*>& CBotClass::GetFunctions() const
|
||||||
|
{
|
||||||
|
return m_pMethod;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
|
bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
|
||||||
{
|
{
|
||||||
|
@ -600,8 +605,8 @@ bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
|
||||||
// return a method precompiled in pass 1
|
// return a method precompiled in pass 1
|
||||||
CBotCStack* pStk = pStack->TokenStack(nullptr, true);
|
CBotCStack* pStk = pStack->TokenStack(nullptr, true);
|
||||||
CBotDefParam* params = CBotDefParam::Compile(p, pStk );
|
CBotDefParam* params = CBotDefParam::Compile(p, pStk );
|
||||||
delete pStk;
|
pStack->DeleteNext();
|
||||||
std::list<CBotFunction*>::iterator pfIter = std::find_if(m_pMethod.begin(), m_pMethod.end(), [&pp, ¶ms](CBotFunction* x)
|
auto pfIter = std::find_if(m_pMethod.begin(), m_pMethod.end(), [&pp, ¶ms](CBotFunction* x)
|
||||||
{
|
{
|
||||||
return x->GetName() == pp && x->CheckParam( params );
|
return x->GetName() == pp && x->CheckParam( params );
|
||||||
});
|
});
|
||||||
|
@ -609,45 +614,8 @@ bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
|
||||||
CBotFunction* pf = *pfIter;
|
CBotFunction* pf = *pfIter;
|
||||||
delete params;
|
delete params;
|
||||||
|
|
||||||
bool bConstructor = (pp == GetName());
|
|
||||||
CBotCStack* pile = pStack->TokenStack(nullptr, true);
|
CBotCStack* pile = pStack->TokenStack(nullptr, true);
|
||||||
|
|
||||||
// make "this" known
|
|
||||||
CBotToken TokenThis(std::string("this"), std::string());
|
|
||||||
CBotVar* pThis = CBotVar::Create(TokenThis, CBotTypResult( CBotTypClass, this ) );
|
|
||||||
pThis->SetUniqNum(-2);
|
|
||||||
pile->AddVar(pThis);
|
|
||||||
|
|
||||||
if (m_parent)
|
|
||||||
{
|
|
||||||
// makes "super" known
|
|
||||||
CBotToken TokenSuper(std::string("super"), std::string());
|
|
||||||
CBotVar* pThis = CBotVar::Create(TokenSuper, CBotTypResult(CBotTypClass, m_parent) );
|
|
||||||
pThis->SetUniqNum(-3);
|
|
||||||
pile->AddVar(pThis);
|
|
||||||
}
|
|
||||||
|
|
||||||
// int num = 1;
|
|
||||||
CBotClass* my = this;
|
|
||||||
while (my != nullptr)
|
|
||||||
{
|
|
||||||
// places a copy of variables of a class (this) on a stack
|
|
||||||
CBotVar* pv = my->m_pVar;
|
|
||||||
while (pv != nullptr)
|
|
||||||
{
|
|
||||||
CBotVar* pcopy = CBotVar::Create(pv);
|
|
||||||
CBotVar::InitType initType = CBotVar::InitType::UNDEF;
|
|
||||||
if (!bConstructor || pv->IsStatic())
|
|
||||||
initType = CBotVar::InitType::DEF;
|
|
||||||
pcopy->SetInit(initType);
|
|
||||||
pcopy->SetUniqNum(pv->GetUniqNum());
|
|
||||||
pcopy->SetPrivate(pv->GetPrivate());
|
|
||||||
pile->AddVar(pcopy);
|
|
||||||
pv = pv->GetNext();
|
|
||||||
}
|
|
||||||
my = my->m_parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
// compiles a method
|
// compiles a method
|
||||||
p = pBase;
|
p = pBase;
|
||||||
CBotFunction* f =
|
CBotFunction* f =
|
||||||
|
@ -658,7 +626,7 @@ bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond)
|
||||||
f->m_pProg = pStack->GetProgram();
|
f->m_pProg = pStack->GetProgram();
|
||||||
f->m_bSynchro = bSynchro;
|
f->m_bSynchro = bSynchro;
|
||||||
}
|
}
|
||||||
pStack->Return(nullptr, pile);
|
pStack->DeleteNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
return pStack->IsOk();
|
return pStack->IsOk();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -303,6 +303,12 @@ public:
|
||||||
*/
|
*/
|
||||||
static void DefineClasses(std::list<CBotClass*> pClassList, CBotCStack* pStack);
|
static void DefineClasses(std::list<CBotClass*> pClassList, CBotCStack* pStack);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Get the list of user-defined methods in this class.
|
||||||
|
* \return List of methods, can be empty.
|
||||||
|
*/
|
||||||
|
const std::list<CBotFunction*>& GetFunctions() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief CompileDefItem
|
* \brief CompileDefItem
|
||||||
* \param p
|
* \param p
|
||||||
|
@ -331,18 +337,18 @@ public:
|
||||||
static void ClearPublic();
|
static void ClearPublic();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief SaveStaticState
|
* \brief Save all static variables from each public class
|
||||||
* \param pf
|
* \param ostr Output stream
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
static bool SaveStaticState(FILE* pf);
|
static bool SaveStaticState(std::ostream &ostr);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief RestoreStaticState
|
* \brief Restore all static variables in each public class
|
||||||
* \param pf
|
* \param istr Input stream
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
static bool RestoreStaticState(FILE* pf);
|
static bool RestoreStaticState(std::istream &istr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Request a lock on this class (for "synchronized" keyword)
|
* \brief Request a lock on this class (for "synchronized" keyword)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -64,10 +64,8 @@ CBotDefParam* CBotDefParam::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
if (list == nullptr) list = param;
|
if (list == nullptr) list = param;
|
||||||
else list->AddNext(param); // added to the list
|
else list->AddNext(param); // added to the list
|
||||||
|
|
||||||
// CBotClass* pClass = nullptr;//= CBotClass::Find(p);
|
|
||||||
param->m_typename = p->GetString();
|
param->m_typename = p->GetString();
|
||||||
CBotTypResult type = param->m_type = TypeParam(p, pStack);
|
CBotTypResult type = param->m_type = TypeParam(p, pStack);
|
||||||
// if ( type == CBotTypPointer ) type = CBotTypClass; // we must create a new object
|
|
||||||
|
|
||||||
if (param->m_type.GetType() > 0)
|
if (param->m_type.GetType() > 0)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +94,7 @@ CBotDefParam* CBotDefParam::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
prevHasDefault = true;
|
prevHasDefault = true;
|
||||||
}
|
}
|
||||||
else pStack->SetError(CBotErrNoExpression, p);
|
else pStack->SetError(CBotErrNoExpression, p);
|
||||||
delete pStk;
|
pStack->DeleteNext();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (prevHasDefault) pStack->SetError(CBotErrDefaultValue, p->GetPrev());
|
if (prevHasDefault) pStack->SetError(CBotErrDefaultValue, p->GetPrev());
|
||||||
|
@ -105,7 +103,6 @@ CBotDefParam* CBotDefParam::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
|
|
||||||
if ( type.Eq(CBotTypArrayPointer) ) type.SetType(CBotTypArrayBody);
|
if ( type.Eq(CBotTypArrayPointer) ) type.SetType(CBotTypArrayBody);
|
||||||
CBotVar* var = CBotVar::Create(pp->GetString(), type); // creates the variable
|
CBotVar* var = CBotVar::Create(pp->GetString(), type); // creates the variable
|
||||||
// if ( pClass ) var->SetClass(pClass);
|
|
||||||
var->SetInit(CBotVar::InitType::IS_POINTER); // mark initialized
|
var->SetInit(CBotVar::InitType::IS_POINTER); // mark initialized
|
||||||
param->m_nIdent = CBotVar::NextUniqNum();
|
param->m_nIdent = CBotVar::NextUniqNum();
|
||||||
var->SetUniqNum(param->m_nIdent);
|
var->SetUniqNum(param->m_nIdent);
|
||||||
|
@ -140,6 +137,7 @@ bool CBotDefParam::Execute(CBotVar** ppVars, CBotStack* &pj)
|
||||||
while ( p != nullptr )
|
while ( p != nullptr )
|
||||||
{
|
{
|
||||||
pile = pile->AddStack();
|
pile = pile->AddStack();
|
||||||
|
if (pile->StackOver()) return pj->Return(pile);
|
||||||
if (pile->GetState() == 1) // already done?
|
if (pile->GetState() == 1) // already done?
|
||||||
{
|
{
|
||||||
if (ppVars != nullptr && ppVars[i] != nullptr) ++i;
|
if (ppVars != nullptr && ppVars[i] != nullptr) ++i;
|
||||||
|
@ -151,13 +149,12 @@ bool CBotDefParam::Execute(CBotVar** ppVars, CBotStack* &pj)
|
||||||
|
|
||||||
if (useDefault || (ppVars == nullptr || ppVars[i] == nullptr))
|
if (useDefault || (ppVars == nullptr || ppVars[i] == nullptr))
|
||||||
{
|
{
|
||||||
assert(p->m_expr != nullptr);
|
useDefault = true; // end of arguments found
|
||||||
|
if (p->m_expr != nullptr) // has default expression ?
|
||||||
useDefault = true;
|
{
|
||||||
|
if (!p->m_expr->Execute(pile)) return false; // interupt here
|
||||||
if (!p->m_expr->Execute(pile)) return false; // interupt here
|
pVar = pile->GetVar();
|
||||||
|
}
|
||||||
pVar = pile->GetVar();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pVar = ppVars[i];
|
pVar = ppVars[i];
|
||||||
|
@ -173,14 +170,34 @@ bool CBotDefParam::Execute(CBotVar** ppVars, CBotStack* &pj)
|
||||||
{
|
{
|
||||||
switch (p->m_type.GetType())
|
switch (p->m_type.GetType())
|
||||||
{
|
{
|
||||||
|
case CBotTypByte:
|
||||||
|
newvar->SetValByte(pVar->GetValByte());
|
||||||
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
|
break;
|
||||||
|
case CBotTypShort:
|
||||||
|
newvar->SetValShort(pVar->GetValShort());
|
||||||
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
|
break;
|
||||||
|
case CBotTypChar:
|
||||||
|
newvar->SetValChar(pVar->GetValChar());
|
||||||
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
|
break;
|
||||||
case CBotTypInt:
|
case CBotTypInt:
|
||||||
newvar->SetValInt(pVar->GetValInt());
|
newvar->SetValInt(pVar->GetValInt());
|
||||||
newvar->SetInit(pVar->GetInit()); // copy nan
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
break;
|
break;
|
||||||
|
case CBotTypLong:
|
||||||
|
newvar->SetValLong(pVar->GetValLong());
|
||||||
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
|
break;
|
||||||
case CBotTypFloat:
|
case CBotTypFloat:
|
||||||
newvar->SetValFloat(pVar->GetValFloat());
|
newvar->SetValFloat(pVar->GetValFloat());
|
||||||
newvar->SetInit(pVar->GetInit()); // copy nan
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
break;
|
break;
|
||||||
|
case CBotTypDouble:
|
||||||
|
newvar->SetValDouble(pVar->GetValDouble());
|
||||||
|
newvar->SetInit(pVar->GetInit()); // copy nan
|
||||||
|
break;
|
||||||
case CBotTypString:
|
case CBotTypString:
|
||||||
newvar->SetValString(pVar->GetValString());
|
newvar->SetValString(pVar->GetValString());
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -35,13 +35,13 @@ namespace CBot
|
||||||
enum CBotType
|
enum CBotType
|
||||||
{
|
{
|
||||||
CBotTypVoid = 0, //!< void
|
CBotTypVoid = 0, //!< void
|
||||||
CBotTypByte = 1, //!< byte (NOT IMPLEMENTED)
|
CBotTypByte = 1, //!< byte
|
||||||
CBotTypShort = 2, //!< short (NOT IMPLEMENTED)
|
CBotTypShort = 2, //!< short
|
||||||
CBotTypChar = 3, //!< char (NOT IMPLEMENTED)
|
CBotTypChar = 3, //!< char
|
||||||
CBotTypInt = 4, //!< int
|
CBotTypInt = 4, //!< int
|
||||||
CBotTypLong = 5, //!< long (NOT IMPLEMENTED)
|
CBotTypLong = 5, //!< long
|
||||||
CBotTypFloat = 6, //!< float
|
CBotTypFloat = 6, //!< float
|
||||||
CBotTypDouble = 7, //!< double (NOT IMPLEMENTED)
|
CBotTypDouble = 7, //!< double
|
||||||
CBotTypBoolean = 8, //!< bool
|
CBotTypBoolean = 8, //!< bool
|
||||||
CBotTypString = 9, //!< string
|
CBotTypString = 9, //!< string
|
||||||
|
|
||||||
|
@ -100,12 +100,18 @@ enum TokenId
|
||||||
ID_STATIC,
|
ID_STATIC,
|
||||||
ID_PROTECTED,
|
ID_PROTECTED,
|
||||||
ID_PRIVATE,
|
ID_PRIVATE,
|
||||||
|
ID_REPEAT,
|
||||||
ID_INT,
|
ID_INT,
|
||||||
ID_FLOAT,
|
ID_FLOAT,
|
||||||
ID_BOOLEAN,
|
ID_BOOLEAN,
|
||||||
ID_STRING,
|
ID_STRING,
|
||||||
ID_VOID,
|
ID_VOID,
|
||||||
ID_BOOL,
|
ID_BOOL,
|
||||||
|
ID_BYTE,
|
||||||
|
ID_SHORT,
|
||||||
|
ID_CHAR,
|
||||||
|
ID_LONG,
|
||||||
|
ID_DOUBLE,
|
||||||
|
|
||||||
TokenKeyVal = 2200, //!< keywords that represent values (true, false, null, nan)
|
TokenKeyVal = 2200, //!< keywords that represent values (true, false, null, nan)
|
||||||
ID_TRUE = 2200,
|
ID_TRUE = 2200,
|
||||||
|
@ -177,7 +183,8 @@ enum TokenType
|
||||||
TokenTypNum = 2, //!< number
|
TokenTypNum = 2, //!< number
|
||||||
TokenTypString = 3, //!< string
|
TokenTypString = 3, //!< string
|
||||||
TokenTypVar = 4, //!< a variable name
|
TokenTypVar = 4, //!< a variable name
|
||||||
TokenTypDef = 5 //!< value according DefineNum
|
TokenTypDef = 5, //!< value according DefineNum
|
||||||
|
TokenTypChar = 6, //!< character literal
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,6 +254,8 @@ enum CBotError : int
|
||||||
CBotErrHexDigits = 5052, //!< missing hex digits after escape sequence
|
CBotErrHexDigits = 5052, //!< missing hex digits after escape sequence
|
||||||
CBotErrHexRange = 5053, //!< hex value out of range
|
CBotErrHexRange = 5053, //!< hex value out of range
|
||||||
CBotErrUnicodeName = 5054, //!< invalid universal character name
|
CBotErrUnicodeName = 5054, //!< invalid universal character name
|
||||||
|
CBotErrCharEmpty = 5055, //!< empty character constant
|
||||||
|
CBotErrRedefCase = 5056, //!< duplicate label in switch
|
||||||
|
|
||||||
// Runtime errors
|
// Runtime errors
|
||||||
CBotErrZeroDiv = 6000, //!< division by zero
|
CBotErrZeroDiv = 6000, //!< division by zero
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -82,19 +82,23 @@ int CBotExternalCallList::DoCall(CBotToken* token, CBotVar* thisVar, CBotVar** p
|
||||||
|
|
||||||
CBotExternalCall* pt = m_list[token->GetString()].get();
|
CBotExternalCall* pt = m_list[token->GetString()].get();
|
||||||
|
|
||||||
if (pStack->IsCallFinished()) return true;
|
if (thisVar == nullptr && pStack->IsCallFinished()) return true; // only for non-method external call
|
||||||
CBotStack* pile = pStack->AddStackExternalCall(pt);
|
|
||||||
|
|
||||||
// lists the parameters depending on the contents of the stack (pStackVar)
|
// if this is a method call we need to use AddStack()
|
||||||
CBotVar* pVar = MakeListVars(ppVar, true);
|
CBotStack* pile = (thisVar != nullptr) ? pStack->AddStack() : pStack->AddStackExternalCall(pt);
|
||||||
|
|
||||||
// creates a variable to the result
|
if (pile->GetState() == 0) // the first time?
|
||||||
CBotVar* pResult = rettype.Eq(CBotTypVoid) ? nullptr : CBotVar::Create("", rettype);
|
{
|
||||||
|
// lists the parameters depending on the contents of the stack
|
||||||
|
CBotVar* pVar = MakeListVars(ppVar, true);
|
||||||
|
pile->SetVar(pVar);
|
||||||
|
|
||||||
pile->SetVar(pVar);
|
CBotStack* pile2 = pile->AddStack();
|
||||||
|
// creates a variable to the result
|
||||||
CBotStack* pile2 = pile->AddStack();
|
CBotVar* pResult = rettype.Eq(CBotTypVoid) ? nullptr : CBotVar::Create("", rettype);
|
||||||
pile2->SetVar(pResult);
|
pile2->SetVar(pResult);
|
||||||
|
pile->IncState(); // increment state to mark this step done
|
||||||
|
}
|
||||||
|
|
||||||
pile->SetError(CBotNoErr, token); // save token for the position in case of error
|
pile->SetError(CBotNoErr, token); // save token for the position in case of error
|
||||||
return pt->Run(thisVar, pStack);
|
return pt->Run(thisVar, pStack);
|
||||||
|
@ -107,7 +111,8 @@ bool CBotExternalCallList::RestoreCall(CBotToken* token, CBotVar* thisVar, CBotV
|
||||||
|
|
||||||
CBotExternalCall* pt = m_list[token->GetString()].get();
|
CBotExternalCall* pt = m_list[token->GetString()].get();
|
||||||
|
|
||||||
CBotStack* pile = pStack->RestoreStackEOX(pt);
|
// if this is a method call we need to use RestoreStack()
|
||||||
|
CBotStack* pile = (thisVar != nullptr) ? pStack->RestoreStack() : pStack->RestoreStackEOX(pt);
|
||||||
if (pile == nullptr) return true;
|
if (pile == nullptr) return true;
|
||||||
|
|
||||||
pile->RestoreStack();
|
pile->RestoreStack();
|
||||||
|
@ -163,8 +168,7 @@ bool CBotExternalCallDefault::Run(CBotVar* thisVar, CBotStack* pStack)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != nullptr) pStack->SetCopyVar(result);
|
pStack->Return(pile2); // return 'result' and clear extra stack
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,8 +191,8 @@ CBotTypResult CBotExternalCallClass::Compile(CBotVar* thisVar, CBotVar* args, vo
|
||||||
|
|
||||||
bool CBotExternalCallClass::Run(CBotVar* thisVar, CBotStack* pStack)
|
bool CBotExternalCallClass::Run(CBotVar* thisVar, CBotStack* pStack)
|
||||||
{
|
{
|
||||||
if (pStack->IsCallFinished()) return true;
|
assert(thisVar != nullptr);
|
||||||
CBotStack* pile = pStack->AddStackExternalCall(this);
|
CBotStack* pile = pStack->AddStack();
|
||||||
CBotVar* args = pile->GetVar();
|
CBotVar* args = pile->GetVar();
|
||||||
|
|
||||||
CBotStack* pile2 = pile->AddStack();
|
CBotStack* pile2 = pile->AddStack();
|
||||||
|
@ -207,9 +211,8 @@ bool CBotExternalCallClass::Run(CBotVar* thisVar, CBotStack* pStack)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != nullptr) pStack->SetCopyVar(result);
|
pStack->Return(pile2); // return 'result' and clear extra stack
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // namespace CBot
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -21,129 +21,285 @@
|
||||||
|
|
||||||
#include "CBot/CBotClass.h"
|
#include "CBot/CBotClass.h"
|
||||||
#include "CBot/CBotEnums.h"
|
#include "CBot/CBotEnums.h"
|
||||||
#include "CBot/CBotUtils.h"
|
|
||||||
|
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
// file management
|
static bool WriteBinary(std::ostream &ostr, T value, unsigned padTo = 0)
|
||||||
|
|
||||||
// necessary because it is not possible to do the fopen in the main program
|
|
||||||
// fwrite and fread in a dll or using the FILE * returned.
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
FILE* fOpen(const char* name, const char* mode)
|
|
||||||
{
|
{
|
||||||
return fopen(name, mode);
|
unsigned char chr;
|
||||||
}
|
unsigned count = 1;
|
||||||
|
while (value > 127) // unsigned LEB128
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
int fClose(FILE* filehandle)
|
|
||||||
{
|
|
||||||
return fclose(filehandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
std::size_t fWrite(const void *buffer,
|
|
||||||
std::size_t elemsize,
|
|
||||||
std::size_t length,
|
|
||||||
FILE* filehandle)
|
|
||||||
{
|
|
||||||
return fwrite(buffer, elemsize, length, filehandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
std::size_t fRead(void *buffer,
|
|
||||||
std::size_t elemsize,
|
|
||||||
std::size_t length,
|
|
||||||
FILE* filehandle)
|
|
||||||
{
|
|
||||||
return fread(buffer, elemsize, length, filehandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool ReadWord(FILE* pf, unsigned short& w)
|
|
||||||
{
|
|
||||||
size_t lg;
|
|
||||||
|
|
||||||
lg = fread(&w, sizeof( unsigned short ), 1, pf );
|
|
||||||
|
|
||||||
return (lg == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool ReadFloat(FILE* pf, float& w)
|
|
||||||
{
|
|
||||||
size_t lg;
|
|
||||||
|
|
||||||
lg = fread(&w, sizeof( float ), 1, pf );
|
|
||||||
|
|
||||||
return (lg == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool WriteLong(FILE* pf, long w)
|
|
||||||
{
|
|
||||||
size_t lg;
|
|
||||||
|
|
||||||
lg = fwrite(&w, sizeof( long ), 1, pf );
|
|
||||||
|
|
||||||
return (lg == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool ReadLong(FILE* pf, long& w)
|
|
||||||
{
|
|
||||||
size_t lg;
|
|
||||||
|
|
||||||
lg = fread(&w, sizeof( long ), 1, pf );
|
|
||||||
|
|
||||||
return (lg == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool ReadString(FILE* pf, std::string& s)
|
|
||||||
{
|
|
||||||
unsigned short w;
|
|
||||||
char buf[1000];
|
|
||||||
size_t lg1, lg2;
|
|
||||||
|
|
||||||
if (!ReadWord(pf, w)) return false;
|
|
||||||
lg1 = w;
|
|
||||||
lg2 = fread(buf, 1, lg1, pf );
|
|
||||||
buf[lg2] = 0;
|
|
||||||
|
|
||||||
s = buf;
|
|
||||||
return (lg1 == lg2);
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool WriteType(FILE* pf, const CBotTypResult &type)
|
|
||||||
{
|
|
||||||
int typ = type.GetType();
|
|
||||||
if ( typ == CBotTypIntrinsic ) typ = CBotTypClass;
|
|
||||||
if ( !WriteWord(pf, typ) ) return false;
|
|
||||||
if ( typ == CBotTypClass )
|
|
||||||
{
|
{
|
||||||
CBotClass* p = type.GetClass();
|
++count;
|
||||||
if ( !WriteString(pf, p->GetName()) ) return false;
|
chr = (value & 0x7F) | 0x80;
|
||||||
|
if (!ostr.write(reinterpret_cast<char*>(&chr), 1)) return false;
|
||||||
|
value >>= 7;
|
||||||
}
|
}
|
||||||
if ( type.Eq( CBotTypArrayBody ) ||
|
chr = value & 0x7F;
|
||||||
type.Eq( CBotTypArrayPointer ) )
|
if (count < padTo) chr |= 0x80;
|
||||||
|
if (!ostr.write(reinterpret_cast<char*>(&chr), 1)) return false;
|
||||||
|
|
||||||
|
if (count < padTo)
|
||||||
{
|
{
|
||||||
if ( !WriteWord(pf, type.GetLimite()) ) return false;
|
while (++count < padTo)
|
||||||
if ( !WriteType(pf, type.GetTypElem()) ) return false;
|
if (!(ostr << '\x80')) return false;
|
||||||
|
if (!(ostr << '\x00')) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
template<typename T>
|
||||||
bool ReadType(FILE* pf, CBotTypResult &type)
|
static bool ReadBinary(std::istream &istr, T &value)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
unsigned char chr;
|
||||||
|
unsigned shift = 0;
|
||||||
|
while (true) // unsigned LEB128
|
||||||
|
{
|
||||||
|
if (!istr.read(reinterpret_cast<char*>(&chr), 1)) return false;
|
||||||
|
if (shift < sizeof(T) * 8 - 1)
|
||||||
|
value |= static_cast<T>(chr & 0x7F) << shift;
|
||||||
|
shift += 7;
|
||||||
|
if ((chr & 0x80) == 0) break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
static bool WriteSignedBinary(std::ostream &ostr, T value, unsigned padTo = 0)
|
||||||
|
{
|
||||||
|
signed char sign = value >> (8 * sizeof(T) - 1);
|
||||||
|
unsigned count = 0;
|
||||||
|
while (true) // signed LEB128
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
unsigned char chr = value & 0x7F;
|
||||||
|
value >>= 7;
|
||||||
|
if (!(value != sign || ((chr ^ sign) & 0x40) != 0))
|
||||||
|
{
|
||||||
|
if (count < padTo) chr |= 0x80;
|
||||||
|
if (!ostr.write(reinterpret_cast<char*>(&chr), 1)) return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
chr |= 0x80;
|
||||||
|
if (!ostr.put(chr)) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count < padTo)
|
||||||
|
{
|
||||||
|
char chr = (sign < 0) ? 0x7F : 0x00;
|
||||||
|
while (++count < padTo)
|
||||||
|
if (!ostr.put(chr | 0x80)) return false;
|
||||||
|
if (!ostr.put(chr)) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
static bool ReadSignedBinary(std::istream &istr, T &value)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
unsigned char chr;
|
||||||
|
unsigned shift = 0;
|
||||||
|
while (true) // signed LEB128
|
||||||
|
{
|
||||||
|
if (!istr.read(reinterpret_cast<char*>(&chr), 1)) return false;
|
||||||
|
if (shift < sizeof(T) * 8 - 1)
|
||||||
|
value |= (static_cast<T>(chr & 0x7F) << shift);
|
||||||
|
shift += 7;
|
||||||
|
if ((chr & 0x80) == 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shift >= 8 * sizeof(T) - 1) shift = 8 * sizeof(T) - 1;
|
||||||
|
if ((chr & 0x40) != 0)
|
||||||
|
value |= static_cast<T>(-1) << shift;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteWord(std::ostream &ostr, unsigned short w)
|
||||||
|
{
|
||||||
|
return WriteBinary<unsigned short>(ostr, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadWord(std::istream &istr, unsigned short &w)
|
||||||
|
{
|
||||||
|
return ReadBinary<unsigned short>(istr, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteByte(std::ostream &ostr, char c)
|
||||||
|
{
|
||||||
|
if (!ostr.put(c)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadByte(std::istream &istr, char& c)
|
||||||
|
{
|
||||||
|
if (!istr.get(c)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteShort(std::ostream &ostr, short s)
|
||||||
|
{
|
||||||
|
return WriteSignedBinary<short>(ostr, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadShort(std::istream &istr, short &s)
|
||||||
|
{
|
||||||
|
return ReadSignedBinary<short>(istr, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteUInt32(std::ostream &ostr, uint32_t i)
|
||||||
|
{
|
||||||
|
return WriteBinary<uint32_t>(ostr, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadUInt32(std::istream &istr, uint32_t &i)
|
||||||
|
{
|
||||||
|
return ReadBinary<uint32_t>(istr, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteInt(std::ostream &ostr, int i)
|
||||||
|
{
|
||||||
|
return WriteSignedBinary<int>(ostr, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadInt(std::istream &istr, int &i)
|
||||||
|
{
|
||||||
|
return ReadSignedBinary<int>(istr, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteLong(std::ostream &ostr, long l, unsigned padTo)
|
||||||
|
{
|
||||||
|
return WriteSignedBinary<long>(ostr, l, padTo);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadLong(std::istream &istr, long &l)
|
||||||
|
{
|
||||||
|
return ReadSignedBinary<long>(istr, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteFloat(std::ostream &ostr, float f)
|
||||||
|
{
|
||||||
|
union TypeConverter
|
||||||
|
{
|
||||||
|
float fValue;
|
||||||
|
unsigned int iValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
TypeConverter u;
|
||||||
|
u.fValue = 0.0f;
|
||||||
|
u.iValue = 0;
|
||||||
|
|
||||||
|
u.fValue = f;
|
||||||
|
return WriteBinary<unsigned int>(ostr, u.iValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadFloat(std::istream &istr, float &f)
|
||||||
|
{
|
||||||
|
union TypeConverter
|
||||||
|
{
|
||||||
|
float fValue;
|
||||||
|
unsigned int iValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
TypeConverter u;
|
||||||
|
u.fValue = 0.0f;
|
||||||
|
u.iValue = 0;
|
||||||
|
|
||||||
|
if (!ReadBinary<unsigned int>(istr, u.iValue)) return false;
|
||||||
|
f = u.fValue;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteDouble(std::ostream &ostr, double d)
|
||||||
|
{
|
||||||
|
union TypeConverter
|
||||||
|
{
|
||||||
|
double dValue;
|
||||||
|
unsigned long iValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
TypeConverter u;
|
||||||
|
u.dValue = 0.0;
|
||||||
|
u.iValue = 0;
|
||||||
|
|
||||||
|
u.dValue = d;
|
||||||
|
return WriteBinary<unsigned long>(ostr, u.iValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadDouble(std::istream &istr, double &d)
|
||||||
|
{
|
||||||
|
union TypeConverter
|
||||||
|
{
|
||||||
|
double dValue;
|
||||||
|
unsigned long iValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
TypeConverter u;
|
||||||
|
u.dValue = 0.0;
|
||||||
|
u.iValue = 0;
|
||||||
|
|
||||||
|
if (!ReadBinary<unsigned long>(istr, u.iValue)) return false;
|
||||||
|
d = u.dValue;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteString(std::ostream &ostr, const std::string &s)
|
||||||
|
{
|
||||||
|
if (!WriteBinary<size_t>(ostr, s.size())) return false;
|
||||||
|
if (!ostr.write(&(s[0]), s.size())) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadString(std::istream &istr, std::string &s)
|
||||||
|
{
|
||||||
|
size_t length = 0;
|
||||||
|
if (!ReadBinary<size_t>(istr, length)) return false;
|
||||||
|
|
||||||
|
s.resize(length);
|
||||||
|
if (length != 0)
|
||||||
|
{
|
||||||
|
if (!istr.read(&(s[0]), length)) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteType(std::ostream &ostr, const CBotTypResult &type)
|
||||||
|
{
|
||||||
|
int typ = type.GetType();
|
||||||
|
if ( typ == CBotTypIntrinsic ) typ = CBotTypClass;
|
||||||
|
if ( !WriteWord(ostr, typ) ) return false;
|
||||||
|
if ( typ == CBotTypClass )
|
||||||
|
{
|
||||||
|
CBotClass* p = type.GetClass();
|
||||||
|
if (!WriteString(ostr, p->GetName())) return false;
|
||||||
|
}
|
||||||
|
if ( type.Eq( CBotTypArrayBody ) ||
|
||||||
|
type.Eq( CBotTypArrayPointer ) )
|
||||||
|
{
|
||||||
|
if (!WriteWord(ostr, type.GetLimite())) return false;
|
||||||
|
if (!WriteType(ostr, type.GetTypElem())) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( type.Eq(CBotTypPointer) )
|
||||||
|
{
|
||||||
|
if (type.GetClass() != nullptr)
|
||||||
|
{
|
||||||
|
if (!WriteString(ostr, type.GetClass()->GetName())) return false;
|
||||||
|
}
|
||||||
|
else if (!WriteString(ostr, "")) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadType(std::istream &istr, CBotTypResult &type)
|
||||||
{
|
{
|
||||||
unsigned short w, ww;
|
unsigned short w, ww;
|
||||||
if ( !ReadWord(pf, w) ) return false;
|
if (!ReadWord(istr, w)) return false;
|
||||||
type.SetType(w);
|
type.SetType(w);
|
||||||
|
|
||||||
if ( type.Eq( CBotTypIntrinsic ) )
|
if ( type.Eq( CBotTypIntrinsic ) )
|
||||||
|
@ -154,7 +310,7 @@ bool ReadType(FILE* pf, CBotTypResult &type)
|
||||||
if ( type.Eq( CBotTypClass ) )
|
if ( type.Eq( CBotTypClass ) )
|
||||||
{
|
{
|
||||||
std::string s;
|
std::string s;
|
||||||
if ( !ReadString(pf, s) ) return false;
|
if (!ReadString(istr, s)) return false;
|
||||||
type = CBotTypResult( w, s );
|
type = CBotTypResult( w, s );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,11 +318,45 @@ bool ReadType(FILE* pf, CBotTypResult &type)
|
||||||
type.Eq( CBotTypArrayBody ) )
|
type.Eq( CBotTypArrayBody ) )
|
||||||
{
|
{
|
||||||
CBotTypResult r;
|
CBotTypResult r;
|
||||||
if ( !ReadWord(pf, ww) ) return false;
|
if (!ReadWord(istr, ww)) return false;
|
||||||
if ( !ReadType(pf, r) ) return false;
|
if (!ReadType(istr, r)) return false;
|
||||||
type = CBotTypResult( w, r );
|
type = CBotTypResult( w, r );
|
||||||
type.SetLimite(static_cast<short>(ww));
|
type.SetLimite(static_cast<short>(ww));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( type.Eq(CBotTypPointer) )
|
||||||
|
{
|
||||||
|
std::string className;
|
||||||
|
if (!ReadString(istr, className)) return false;
|
||||||
|
type = CBotTypResult(w, className);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WriteStream(std::ostream &ostr, std::istream& istr)
|
||||||
|
{
|
||||||
|
if (!istr.seekg(0, istr.end)) return false;
|
||||||
|
auto size = istr.tellg();
|
||||||
|
|
||||||
|
if (size == 0) return WriteLong(ostr, 0);
|
||||||
|
if (!WriteLong(ostr, size)) return false;
|
||||||
|
|
||||||
|
if (!istr.seekg(0, istr.beg)) return false;
|
||||||
|
if (!(ostr << istr.rdbuf())) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadStream(std::istream& istr, std::ostream &ostr)
|
||||||
|
{
|
||||||
|
long length;
|
||||||
|
if (!ReadLong(istr, length)) return false;
|
||||||
|
if (length == 0) return true;
|
||||||
|
|
||||||
|
while (length-- > 0)
|
||||||
|
{
|
||||||
|
if (!(ostr << istr.get())) return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <cstdio>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace CBot
|
namespace CBot
|
||||||
|
@ -28,128 +28,189 @@ namespace CBot
|
||||||
class CBotVar;
|
class CBotVar;
|
||||||
class CBotTypResult;
|
class CBotTypResult;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
// routines for file management (* FILE)
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief fOpen
|
* \brief Save a linked list if variables
|
||||||
* \param name
|
* \param ostr Output stream
|
||||||
* \param mode
|
* \param pVar First variable in the list
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
FILE* fOpen(const char* name, const char* mode);
|
bool SaveVars(std::ostream &ostr, CBotVar* pVar);
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief fClose
|
|
||||||
* \param filehandle
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
int fClose(FILE* filehandle);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief fWrite
|
|
||||||
* \param buffer
|
|
||||||
* \param elemsize
|
|
||||||
* \param length
|
|
||||||
* \param filehandle
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
std::size_t fWrite(const void *buffer,
|
|
||||||
std::size_t elemsize,
|
|
||||||
std::size_t length,
|
|
||||||
FILE* filehandle);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief fRead
|
|
||||||
* \param buffer
|
|
||||||
* \param elemsize
|
|
||||||
* \param length
|
|
||||||
* \param filehandle
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
std::size_t fRead(void *buffer,
|
|
||||||
std::size_t elemsize,
|
|
||||||
std::size_t length,
|
|
||||||
FILE* filehandle);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief SaveVars
|
|
||||||
* \param pf
|
|
||||||
* \param pVar
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
bool SaveVars(FILE* pf, CBotVar* pVar);
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief WriteWord
|
* \brief WriteWord
|
||||||
* \param pf
|
* \param ostr Output stream
|
||||||
* \param w
|
* \param w
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool WriteWord(FILE* pf, unsigned short w);
|
bool WriteWord(std::ostream &ostr, unsigned short w);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief ReadWord
|
* \brief ReadWord
|
||||||
* \param pf
|
* \param istr Input stream
|
||||||
* \param w
|
* \param[out] w
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool ReadWord(FILE* pf, unsigned short& w);
|
bool ReadWord(std::istream &istr, unsigned short &w);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief ReadLong
|
* \brief WriteByte
|
||||||
* \param pf
|
* \param ostr Output stream
|
||||||
* \param w
|
* \param c
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool ReadLong(FILE* pf, long& w);
|
bool WriteByte(std::ostream &ostr, char c);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief WriteFloat
|
* \brief ReadByte
|
||||||
* \param pf
|
* \param istr Input stream
|
||||||
* \param w
|
* \param[out] c
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool WriteFloat(FILE* pf, float w);
|
bool ReadByte(std::istream &istr, char& c);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteShort
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param s
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteShort(std::ostream &ostr, short s);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ReadShort
|
||||||
|
* \param istr Input stream
|
||||||
|
* \param[out] s
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool ReadShort(std::istream &istr, short &s);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteUInt32
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param i
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteUInt32(std::ostream &ostr, uint32_t i);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ReadUInt32
|
||||||
|
* \param istr Input stream
|
||||||
|
* \param[out] i
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool ReadUInt32(std::istream &istr, uint32_t &i);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteInt
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param i
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteInt(std::ostream &ostr, int i);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ReadInt
|
||||||
|
* \param istr Input stream
|
||||||
|
* \param[out] i
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool ReadInt(std::istream &istr, int &i);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief WriteLong
|
* \brief WriteLong
|
||||||
* \param pf
|
* \param ostr Output stream
|
||||||
* \param w
|
* \param l
|
||||||
* \return
|
* \param padTo minimum number of bytes to write
|
||||||
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool WriteLong(FILE* pf, long w);
|
bool WriteLong(std::ostream &ostr, long l, unsigned padTo = 0);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ReadLong
|
||||||
|
* \param istr Input stream
|
||||||
|
* \param[out] l
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool ReadLong(std::istream &istr, long &l);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteFloat
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param f
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteFloat(std::ostream &ostr, float f);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief ReadFloat
|
* \brief ReadFloat
|
||||||
* \param pf
|
* \param istr Input stream
|
||||||
* \param w
|
* \param[out] f
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool ReadFloat(FILE* pf, float& w);
|
bool ReadFloat(std::istream &istr, float &f);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteDouble
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param d
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteDouble(std::ostream &ostr, double d);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ReadDouble
|
||||||
|
* \param istr Input stream
|
||||||
|
* \param[out] d
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool ReadDouble(std::istream &istr, double &d);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteString
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param s
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteString(std::ostream &ostr, const std::string &s);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief ReadString
|
* \brief ReadString
|
||||||
* \param pf
|
* \param istr Input stream
|
||||||
* \param s
|
* \param[out] s
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool ReadString(FILE* pf, std::string& s);
|
bool ReadString(std::istream &istr, std::string &s);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief WriteType
|
* \brief WriteType
|
||||||
* \param pf
|
* \param ostr Output stream
|
||||||
* \param type
|
* \param type
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool WriteType(FILE* pf, const CBotTypResult &type);
|
bool WriteType(std::ostream &ostr, const CBotTypResult &type);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief ReadType
|
* \brief ReadType
|
||||||
* \param pf
|
* \param istr Input stream
|
||||||
* \param type
|
* \param[out] type
|
||||||
* \return
|
* \return true on success
|
||||||
*/
|
*/
|
||||||
bool ReadType(FILE* pf, CBotTypResult &type);
|
bool ReadType(std::istream &istr, CBotTypResult &type);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief WriteStream
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \param istr Input stream
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool WriteStream(std::ostream &ostr, std::istream& istr);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ReadStream
|
||||||
|
* \param istr Input stream
|
||||||
|
* \param ostr Output stream
|
||||||
|
* \return true on success
|
||||||
|
*/
|
||||||
|
bool ReadStream(std::istream& istr, std::ostream &ostr);
|
||||||
|
|
||||||
} // namespace CBot
|
} // namespace CBot
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include "CBot/CBotInstr/CBotCase.h"
|
#include "CBot/CBotInstr/CBotCase.h"
|
||||||
|
|
||||||
#include "CBot/CBotInstr/CBotExprLitNum.h"
|
#include "CBot/CBotInstr/CBotTwoOpExpr.h"
|
||||||
|
|
||||||
#include "CBot/CBotStack.h"
|
#include "CBot/CBotStack.h"
|
||||||
#include "CBot/CBotCStack.h"
|
#include "CBot/CBotCStack.h"
|
||||||
|
@ -30,69 +30,107 @@ namespace CBot
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotCase::CBotCase()
|
CBotCase::CBotCase()
|
||||||
{
|
{
|
||||||
m_value = nullptr;
|
m_instr = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotCase::~CBotCase()
|
CBotCase::~CBotCase()
|
||||||
{
|
{
|
||||||
delete m_value;
|
delete m_instr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
CBotInstr* CBotCase::Compile(CBotToken* &p, CBotCStack* pStack, std::unordered_map<long, CBotInstr*>& labels)
|
||||||
CBotInstr* CBotCase::Compile(CBotToken* &p, CBotCStack* pStack)
|
|
||||||
{
|
{
|
||||||
CBotCase* inst = new CBotCase(); // creates the object
|
|
||||||
CBotToken* pp = p; // preserves at the ^ token (starting position)
|
CBotToken* pp = p; // preserves at the ^ token (starting position)
|
||||||
|
|
||||||
inst->SetToken(p);
|
|
||||||
if (!IsOfType(p, ID_CASE, ID_DEFAULT)) return nullptr; // should never happen
|
if (!IsOfType(p, ID_CASE, ID_DEFAULT)) return nullptr; // should never happen
|
||||||
|
pStack->SetStartError(pp->GetStart());
|
||||||
|
|
||||||
if ( pp->GetType() == ID_CASE )
|
long labelValue = 0;
|
||||||
|
|
||||||
|
if (pp->GetType() == ID_CASE)
|
||||||
{
|
{
|
||||||
pp = p;
|
CBotInstr* i = nullptr;
|
||||||
inst->m_value = CBotExprLitNum::Compile(p, pStack);
|
if (nullptr != (i = CBotTwoOpExpr::Compile(p, pStack, nullptr, true)))
|
||||||
if (inst->m_value == nullptr )
|
|
||||||
{
|
{
|
||||||
pStack->SetError( CBotErrBadNum, pp );
|
if (pStack->GetType() <= CBotTypLong)
|
||||||
delete inst;
|
{
|
||||||
return nullptr;
|
CBotStack* pile = CBotStack::AllocateStack();
|
||||||
|
while ( !i->Execute(pile) );
|
||||||
|
labelValue = pile->GetVar()->GetValLong();
|
||||||
|
pile->Delete();
|
||||||
|
|
||||||
|
if (labels.count(labelValue) > 0)
|
||||||
|
{
|
||||||
|
pStack->SetError(CBotErrRedefCase, p->GetStart());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pStack->SetError(CBotErrBadNum, p->GetStart());
|
||||||
|
delete i;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
if ( !IsOfType( p, ID_DOTS ))
|
pStack->SetError(CBotErrBadNum, p->GetStart());
|
||||||
{
|
|
||||||
pStack->SetError( CBotErrNoDoubleDots, p->GetStart() );
|
|
||||||
delete inst;
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return inst;
|
if (pStack->IsOk() && IsOfType(p, ID_DOTS))
|
||||||
|
{
|
||||||
|
CBotCase* newCase = new CBotCase();
|
||||||
|
newCase->SetToken(pp);
|
||||||
|
if (pp->GetType() == ID_CASE)
|
||||||
|
labels[labelValue] = newCase;
|
||||||
|
return newCase;
|
||||||
|
}
|
||||||
|
|
||||||
|
pStack->SetError(CBotErrNoDoubleDots, p->GetStart());
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotCase::Execute(CBotStack* &pj)
|
bool CBotCase::Execute(CBotStack* &pj)
|
||||||
{
|
{
|
||||||
return true; // the "case" statement does nothing!
|
if (m_instr == nullptr) return true;
|
||||||
|
CBotStack* pile = pj->AddStack(this, CBotStack::BlockVisibilityType::BLOCK);
|
||||||
|
|
||||||
|
int state = pile->GetState();
|
||||||
|
CBotInstr* p = m_instr;
|
||||||
|
while (state-- > 0) p = p->GetNext();
|
||||||
|
|
||||||
|
while (p != nullptr)
|
||||||
|
{
|
||||||
|
if (!p->Execute(pile)) return false;
|
||||||
|
pile->IncState();
|
||||||
|
p = p->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
pile->Delete();
|
||||||
|
return pj->IsOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotCase::RestoreState(CBotStack* &pj, bool bMain)
|
void CBotCase::RestoreState(CBotStack* &pj, bool bMain)
|
||||||
{
|
{
|
||||||
}
|
if (!bMain) return;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
CBotStack* pile = pj->RestoreStack(this);
|
||||||
bool CBotCase::CompCase(CBotStack* &pile, int val)
|
if (pile == nullptr) return;
|
||||||
{
|
|
||||||
if (m_value == nullptr ) return true; // "default" case
|
|
||||||
|
|
||||||
while (!m_value->Execute(pile)); // puts the value on the correspondent stack (without interruption)
|
CBotInstr* p = m_instr;
|
||||||
return (pile->GetVal() == val); // compared with the given value
|
|
||||||
|
int state = pile->GetState();
|
||||||
|
while (p != nullptr && state-- > 0)
|
||||||
|
{
|
||||||
|
p->RestoreState(pile, bMain);
|
||||||
|
p = p->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p != nullptr) p->RestoreState(pile, bMain);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string, CBotInstr*> CBotCase::GetDebugLinks()
|
std::map<std::string, CBotInstr*> CBotCase::GetDebugLinks()
|
||||||
{
|
{
|
||||||
auto links = CBotInstr::GetDebugLinks();
|
auto links = CBotInstr::GetDebugLinks();
|
||||||
links["m_value"] = m_value;
|
links["m_instr"] = m_instr;
|
||||||
return links;
|
return links;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
#include "CBot/CBotInstr/CBotInstr.h"
|
#include "CBot/CBotInstr/CBotInstr.h"
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -42,7 +44,7 @@ public:
|
||||||
* \param pStack
|
* \param pStack
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack);
|
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, std::unordered_map<long, CBotInstr*>& labels);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Execute Execution of instruction "case".
|
* \brief Execute Execution of instruction "case".
|
||||||
|
@ -58,22 +60,15 @@ public:
|
||||||
*/
|
*/
|
||||||
void RestoreState(CBotStack* &pj, bool bMain) override;
|
void RestoreState(CBotStack* &pj, bool bMain) override;
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief CompCase Routine to find the entry point of "case" corresponding
|
|
||||||
* to the value seen.
|
|
||||||
* \param pj
|
|
||||||
* \param val
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
bool CompCase(CBotStack* &pj, int val) override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual const std::string GetDebugName() override { return "CBotCase"; }
|
virtual const std::string GetDebugName() override { return "CBotCase"; }
|
||||||
virtual std::map<std::string, CBotInstr*> GetDebugLinks() override;
|
virtual std::map<std::string, CBotInstr*> GetDebugLinks() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Value to compare.
|
//! List of instructions after case label
|
||||||
CBotInstr* m_value;
|
CBotInstr* m_instr;
|
||||||
|
|
||||||
|
friend class CBotSwitch;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace CBot
|
} // namespace CBot
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -135,12 +135,12 @@ CBotInstr* CBotDefClass::Compile(CBotToken* &p, CBotCStack* pStack, CBotClass* p
|
||||||
// the constructor is there?
|
// the constructor is there?
|
||||||
// std::string noname;
|
// std::string noname;
|
||||||
CBotTypResult r = pClass->CompileMethode(&token, var, ppVars, pStk, inst->m_nMethodeIdent);
|
CBotTypResult r = pClass->CompileMethode(&token, var, ppVars, pStk, inst->m_nMethodeIdent);
|
||||||
delete pStk->TokenStack(); // releases the supplement stack
|
pStk->DeleteNext(); // releases the supplement stack
|
||||||
int typ = r.GetType();
|
int typ = r.GetType();
|
||||||
|
|
||||||
if (typ == CBotErrUndefCall)
|
if (typ == CBotErrUndefCall)
|
||||||
{
|
{
|
||||||
// si le constructeur n'existe pas
|
// if the ctor don't exist
|
||||||
if (inst->m_parameters != nullptr) // with parameters
|
if (inst->m_parameters != nullptr) // with parameters
|
||||||
{
|
{
|
||||||
pStk->SetError(CBotErrNoConstruct, vartoken);
|
pStk->SetError(CBotErrNoConstruct, vartoken);
|
||||||
|
@ -160,7 +160,7 @@ CBotInstr* CBotDefClass::Compile(CBotToken* &p, CBotCStack* pStack, CBotClass* p
|
||||||
if (nullptr != (inst->m_exprRetVar = CBotExprRetVar::Compile(p, pStk, true)))
|
if (nullptr != (inst->m_exprRetVar = CBotExprRetVar::Compile(p, pStk, true)))
|
||||||
{
|
{
|
||||||
inst->m_exprRetVar->SetToken(vartoken);
|
inst->m_exprRetVar->SetToken(vartoken);
|
||||||
delete pStk->TokenStack();
|
pStk->DeleteNext();
|
||||||
}
|
}
|
||||||
pStk->SetVar(nullptr);
|
pStk->SetVar(nullptr);
|
||||||
|
|
||||||
|
@ -360,6 +360,7 @@ bool CBotDefClass::Execute(CBotStack* &pj)
|
||||||
if ( p != nullptr) while ( true )
|
if ( p != nullptr) while ( true )
|
||||||
{
|
{
|
||||||
pile2 = pile2->AddStack(); // place on the stack for the results
|
pile2 = pile2->AddStack(); // place on the stack for the results
|
||||||
|
if (pile2->StackOver()) return pj->Return(pile2);
|
||||||
if ( pile2->GetState() == 0 )
|
if ( pile2->GetState() == 0 )
|
||||||
{
|
{
|
||||||
if (!p->Execute(pile2)) return false; // interrupted here?
|
if (!p->Execute(pile2)) return false; // interrupted here?
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -46,13 +46,22 @@ CBotDefFloat::~CBotDefFloat()
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotInstr* CBotDefFloat::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, bool noskip)
|
CBotInstr* CBotDefFloat::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, bool noskip, CBotTypResult vartype)
|
||||||
{
|
{
|
||||||
CBotToken* pp = cont ? nullptr : p;
|
CBotToken* pp = cont ? nullptr : p;
|
||||||
|
|
||||||
if (!cont && !IsOfType(p, ID_FLOAT)) return nullptr;
|
if (!cont)
|
||||||
|
{
|
||||||
|
switch (p->GetType())
|
||||||
|
{
|
||||||
|
case ID_FLOAT: vartype.SetType(CBotTypFloat ); break;
|
||||||
|
case ID_DOUBLE: vartype.SetType(CBotTypDouble); break;
|
||||||
|
default: return nullptr;
|
||||||
|
}
|
||||||
|
p = p->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
CBotDefFloat* inst = static_cast<CBotDefFloat*>(CompileArray(p, pStack, CBotTypFloat));
|
CBotDefFloat* inst = static_cast<CBotDefFloat*>(CompileArray(p, pStack, vartype));
|
||||||
if (inst != nullptr || !pStack->IsOk()) return inst;
|
if (inst != nullptr || !pStack->IsOk()) return inst;
|
||||||
|
|
||||||
CBotCStack* pStk = pStack->TokenStack(pp);
|
CBotCStack* pStk = pStack->TokenStack(pp);
|
||||||
|
@ -67,7 +76,7 @@ CBotInstr* CBotDefFloat::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, b
|
||||||
|
|
||||||
if (nullptr != (inst->m_var = CBotLeftExprVar::Compile( p, pStk )))
|
if (nullptr != (inst->m_var = CBotLeftExprVar::Compile( p, pStk )))
|
||||||
{
|
{
|
||||||
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_typevar = CBotTypFloat;
|
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_typevar = vartype;
|
||||||
if (pStk->CheckVarLocal(vartoken)) // redefinition of a variable
|
if (pStk->CheckVarLocal(vartoken)) // redefinition of a variable
|
||||||
{
|
{
|
||||||
pStk->SetStartError(vartoken->GetStart());
|
pStk->SetStartError(vartoken->GetStart());
|
||||||
|
@ -79,7 +88,7 @@ CBotInstr* CBotDefFloat::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, b
|
||||||
{
|
{
|
||||||
delete inst;
|
delete inst;
|
||||||
p = vartoken;
|
p = vartoken;
|
||||||
inst = static_cast<CBotDefFloat*>(CBotDefArray::Compile(p, pStk, CBotTypFloat));
|
inst = static_cast<CBotDefFloat*>(CBotDefArray::Compile(p, pStk, vartype));
|
||||||
|
|
||||||
goto suite; // no assignment, variable already created
|
goto suite; // no assignment, variable already created
|
||||||
}
|
}
|
||||||
|
@ -103,7 +112,7 @@ CBotInstr* CBotDefFloat::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var = CBotVar::Create(*vartoken, CBotTypFloat);
|
var = CBotVar::Create(*vartoken, vartype);
|
||||||
var->SetInit(inst->m_expr != nullptr ? CBotVar::InitType::DEF : CBotVar::InitType::UNDEF);
|
var->SetInit(inst->m_expr != nullptr ? CBotVar::InitType::DEF : CBotVar::InitType::UNDEF);
|
||||||
var->SetUniqNum(
|
var->SetUniqNum(
|
||||||
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_nIdent = CBotVar::NextUniqNum());
|
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_nIdent = CBotVar::NextUniqNum());
|
||||||
|
@ -111,7 +120,7 @@ CBotInstr* CBotDefFloat::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, b
|
||||||
suite:
|
suite:
|
||||||
if (pStk->IsOk() && IsOfType(p, ID_COMMA))
|
if (pStk->IsOk() && IsOfType(p, ID_COMMA))
|
||||||
{
|
{
|
||||||
if (nullptr != ( inst->m_next2b = CBotDefFloat::Compile(p, pStk, true, noskip)))
|
if (nullptr != ( inst->m_next2b = CBotDefFloat::Compile(p, pStk, true, noskip, vartype)))
|
||||||
{
|
{
|
||||||
return pStack->Return(inst, pStk);
|
return pStack->Return(inst, pStk);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -41,7 +41,7 @@ public:
|
||||||
* \param noskip
|
* \param noskip
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, bool cont = false, bool noskip=false);
|
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, bool cont = false, bool noskip=false, CBotTypResult vartype = CBotTypFloat);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Execute Executes the definition of a real variable.
|
* \brief Execute Executes the definition of a real variable.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -47,13 +47,25 @@ CBotDefInt::~CBotDefInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotInstr* CBotDefInt::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, bool noskip)
|
CBotInstr* CBotDefInt::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, bool noskip, CBotTypResult vartype)
|
||||||
{
|
{
|
||||||
CBotToken* pp = cont ? nullptr : p; // no repetition of the token "int"
|
CBotToken* pp = cont ? nullptr : p; // no repetition of the token "int"
|
||||||
|
|
||||||
if (!cont && !IsOfType(p, ID_INT)) return nullptr;
|
if (!cont)
|
||||||
|
{
|
||||||
|
switch (p->GetType())
|
||||||
|
{
|
||||||
|
case ID_BYTE: vartype.SetType(CBotTypByte ); break;
|
||||||
|
case ID_SHORT: vartype.SetType(CBotTypShort); break;
|
||||||
|
case ID_CHAR: vartype.SetType(CBotTypChar ); break;
|
||||||
|
case ID_INT: vartype.SetType(CBotTypInt ); break;
|
||||||
|
case ID_LONG: vartype.SetType(CBotTypLong ); break;
|
||||||
|
default: return nullptr;
|
||||||
|
}
|
||||||
|
p = p->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
CBotDefInt* inst = static_cast<CBotDefInt*>(CompileArray(p, pStack, CBotTypInt));
|
CBotDefInt* inst = static_cast<CBotDefInt*>(CompileArray(p, pStack, vartype));
|
||||||
if (inst != nullptr || !pStack->IsOk()) return inst;
|
if (inst != nullptr || !pStack->IsOk()) return inst;
|
||||||
|
|
||||||
CBotCStack* pStk = pStack->TokenStack(pp);
|
CBotCStack* pStk = pStack->TokenStack(pp);
|
||||||
|
@ -68,7 +80,7 @@ CBotInstr* CBotDefInt::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, boo
|
||||||
// determines the expression is valid for the item on the left side
|
// determines the expression is valid for the item on the left side
|
||||||
if (nullptr != (inst->m_var = CBotLeftExprVar::Compile( p, pStk )))
|
if (nullptr != (inst->m_var = CBotLeftExprVar::Compile( p, pStk )))
|
||||||
{
|
{
|
||||||
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_typevar = CBotTypInt;
|
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_typevar = vartype;
|
||||||
if (pStk->CheckVarLocal(vartoken)) // redefinition of the variable
|
if (pStk->CheckVarLocal(vartoken)) // redefinition of the variable
|
||||||
{
|
{
|
||||||
pStk->SetError(CBotErrRedefVar, vartoken);
|
pStk->SetError(CBotErrRedefVar, vartoken);
|
||||||
|
@ -82,7 +94,7 @@ CBotInstr* CBotDefInt::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, boo
|
||||||
|
|
||||||
// compiles an array declaration
|
// compiles an array declaration
|
||||||
|
|
||||||
CBotInstr* inst2 = CBotDefArray::Compile(p, pStk, CBotTypInt);
|
CBotInstr* inst2 = CBotDefArray::Compile(p, pStk, vartype);
|
||||||
|
|
||||||
inst = static_cast<CBotDefInt*>(inst2);
|
inst = static_cast<CBotDefInt*>(inst2);
|
||||||
goto suite; // no assignment, variable already created
|
goto suite; // no assignment, variable already created
|
||||||
|
@ -108,7 +120,7 @@ CBotInstr* CBotDefInt::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
CBotVar* var = CBotVar::Create(*vartoken, CBotTypInt);// create the variable (evaluated after the assignment)
|
CBotVar* var = CBotVar::Create(*vartoken, vartype); // create the variable (evaluated after the assignment)
|
||||||
var->SetInit(inst->m_expr != nullptr ? CBotVar::InitType::DEF : CBotVar::InitType::UNDEF); // if initialized with assignment
|
var->SetInit(inst->m_expr != nullptr ? CBotVar::InitType::DEF : CBotVar::InitType::UNDEF); // if initialized with assignment
|
||||||
var->SetUniqNum( //set it with a unique number
|
var->SetUniqNum( //set it with a unique number
|
||||||
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_nIdent = CBotVar::NextUniqNum());
|
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_nIdent = CBotVar::NextUniqNum());
|
||||||
|
@ -117,7 +129,7 @@ CBotInstr* CBotDefInt::Compile(CBotToken* &p, CBotCStack* pStack, bool cont, boo
|
||||||
suite:
|
suite:
|
||||||
if (pStk->IsOk() && IsOfType(p, ID_COMMA)) // chained several definitions
|
if (pStk->IsOk() && IsOfType(p, ID_COMMA)) // chained several definitions
|
||||||
{
|
{
|
||||||
if (nullptr != ( inst->m_next2b = CBotDefInt::Compile(p, pStk, true, noskip))) // compile next one
|
if (nullptr != ( inst->m_next2b = CBotDefInt::Compile(p, pStk, true, noskip, vartype))) // compile next one
|
||||||
{
|
{
|
||||||
return pStack->Return(inst, pStk);
|
return pStack->Return(inst, pStk);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -41,7 +41,7 @@ public:
|
||||||
* \param noskip
|
* \param noskip
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, bool cont = false, bool noskip = false);
|
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, bool cont = false, bool noskip = false, CBotTypResult vartype = CBotTypInt);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Execute Execute the definition of the integer variable.
|
* \brief Execute Execute the definition of the integer variable.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -57,7 +57,7 @@ CBotInstr* CBotDo::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
inst->SetToken(p);
|
inst->SetToken(p);
|
||||||
if (!IsOfType(p, ID_DO)) return nullptr; // should never happen
|
if (!IsOfType(p, ID_DO)) return nullptr; // should never happen
|
||||||
|
|
||||||
CBotCStack* pStk = pStack->TokenStack(pp); // un petit bout de pile svp
|
CBotCStack* pStk = pStack->TokenStack(pp); // some space for a stack, plz
|
||||||
|
|
||||||
|
|
||||||
// looking for a statement block after the do
|
// looking for a statement block after the do
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -0,0 +1,151 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
|
*
|
||||||
|
* 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://gnu.org/licenses
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "CBot/CBotInstr/CBotExprLitChar.h"
|
||||||
|
|
||||||
|
#include "CBot/CBotStack.h"
|
||||||
|
#include "CBot/CBotCStack.h"
|
||||||
|
|
||||||
|
#include "CBot/CBotVar/CBotVar.h"
|
||||||
|
|
||||||
|
namespace CBot
|
||||||
|
{
|
||||||
|
|
||||||
|
CBotExprLitChar::CBotExprLitChar()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CBotExprLitChar::~CBotExprLitChar()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CBotInstr* CBotExprLitChar::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
|
{
|
||||||
|
CBotCStack* pStk = pStack->TokenStack();
|
||||||
|
|
||||||
|
const auto& s = p->GetString();
|
||||||
|
|
||||||
|
auto it = s.cbegin();
|
||||||
|
if (++it != s.cend())
|
||||||
|
{
|
||||||
|
if (*it != '\'') // not empty quotes ?
|
||||||
|
{
|
||||||
|
uint32_t valchar = 0;
|
||||||
|
int pos = p->GetStart() + 1;
|
||||||
|
|
||||||
|
if (*it != '\\') valchar = *(it++); // not escape sequence ?
|
||||||
|
else if (++it != s.cend())
|
||||||
|
{
|
||||||
|
pStk->SetStartError(pos++);
|
||||||
|
unsigned char c = *(it++);
|
||||||
|
if (c == '\"' || c == '\'' || c == '\\') valchar = c;
|
||||||
|
else if (c == 'a') valchar = '\a'; // alert bell
|
||||||
|
else if (c == 'b') valchar = '\b'; // backspace
|
||||||
|
else if (c == 'f') valchar = '\f'; // form feed
|
||||||
|
else if (c == 'n') valchar = '\n'; // new line
|
||||||
|
else if (c == 'r') valchar = '\r'; // carriage return
|
||||||
|
else if (c == 't') valchar = '\t'; // horizontal tab
|
||||||
|
else if (c == 'v') valchar = '\v'; // vertical tab
|
||||||
|
else if (c == 'u' || c == 'U') // unicode escape
|
||||||
|
{
|
||||||
|
if (it != s.cend())
|
||||||
|
{
|
||||||
|
std::string hex = "";
|
||||||
|
size_t maxlen = (c == 'u') ? 4 : 8;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < maxlen; i++)
|
||||||
|
{
|
||||||
|
if (!CharInList(*it, "0123456789ABCDEFabcdef")) break;
|
||||||
|
++pos;
|
||||||
|
hex += *it;
|
||||||
|
if (++it == s.cend()) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxlen == hex.length()) // unicode character
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
valchar = std::stoi(hex, nullptr, 16);
|
||||||
|
if (0x10FFFF < valchar || (0xD7FF < valchar && valchar < 0xE000))
|
||||||
|
pStk->SetError(CBotErrUnicodeName, pos + 1);
|
||||||
|
}
|
||||||
|
catch (const std::out_of_range& e)
|
||||||
|
{
|
||||||
|
pStk->SetError(CBotErrHexRange, pos + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pStk->SetError(CBotErrHexDigits, pos + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pStk->SetError(CBotErrHexDigits, pos + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pStk->SetError(CBotErrBadEscape, pos + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (it == s.cend() || *it != '\'')
|
||||||
|
pStk->SetError(CBotErrEndQuote, p);
|
||||||
|
|
||||||
|
if (pStk->IsOk())
|
||||||
|
{
|
||||||
|
CBotExprLitChar* inst = new CBotExprLitChar();
|
||||||
|
inst->m_valchar = valchar;
|
||||||
|
inst->SetToken(p);
|
||||||
|
p = p->GetNext();
|
||||||
|
|
||||||
|
CBotVar* var = CBotVar::Create("", CBotTypChar);
|
||||||
|
pStk->SetVar(var);
|
||||||
|
|
||||||
|
return pStack->Return(inst, pStk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pStk->SetError(CBotErrCharEmpty, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
pStk->SetError(CBotErrEndQuote, p);
|
||||||
|
return pStack->Return(nullptr, pStk);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CBotExprLitChar::Execute(CBotStack* &pj)
|
||||||
|
{
|
||||||
|
CBotStack* pile = pj->AddStack(this);
|
||||||
|
|
||||||
|
if (pile->IfStep()) return false;
|
||||||
|
|
||||||
|
CBotVar* var = CBotVar::Create("", CBotTypChar);
|
||||||
|
|
||||||
|
var->SetValChar(m_valchar);
|
||||||
|
|
||||||
|
pile->SetVar(var);
|
||||||
|
|
||||||
|
return pj->Return(pile);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBotExprLitChar::RestoreState(CBotStack* &pj, bool bMain)
|
||||||
|
{
|
||||||
|
if (bMain) pj->RestoreStack(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CBotExprLitChar::GetDebugData()
|
||||||
|
{
|
||||||
|
return m_token.GetString();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace CBot
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
|
*
|
||||||
|
* 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://gnu.org/licenses
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CBot/CBotInstr/CBotInstr.h"
|
||||||
|
|
||||||
|
namespace CBot
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A character literal
|
||||||
|
* \verbatim 'a', '\n', '\t', '\uFFFD', '\U0000FFFD', etc. \endverbatim
|
||||||
|
*/
|
||||||
|
class CBotExprLitChar : public CBotInstr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CBotExprLitChar();
|
||||||
|
~CBotExprLitChar();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Compile a character literal
|
||||||
|
*/
|
||||||
|
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Execute, returns the corresponding char.
|
||||||
|
*/
|
||||||
|
bool Execute(CBotStack* &pj) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief RestoreState
|
||||||
|
*/
|
||||||
|
void RestoreState(CBotStack* &pj, bool bMain) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual const std::string GetDebugName() override { return "CBotExprLitChar"; }
|
||||||
|
virtual std::string GetDebugData() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint32_t m_valchar = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace CBot
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -25,52 +25,85 @@
|
||||||
|
|
||||||
#include "CBot/CBotUtils.h"
|
#include "CBot/CBotUtils.h"
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
template <>
|
||||||
CBotExprLitNum::CBotExprLitNum()
|
CBotExprLitNum<int>::CBotExprLitNum(int val) : m_numtype(CBotTypInt), m_value(val)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
template <>
|
||||||
CBotExprLitNum::~CBotExprLitNum()
|
CBotExprLitNum<long>::CBotExprLitNum(long val) : m_numtype(CBotTypLong), m_value(val)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
template <>
|
||||||
CBotInstr* CBotExprLitNum::Compile(CBotToken* &p, CBotCStack* pStack)
|
CBotExprLitNum<float>::CBotExprLitNum(float val) : m_numtype(CBotTypFloat), m_value(val)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
CBotExprLitNum<double>::CBotExprLitNum(double val) : m_numtype(CBotTypDouble), m_value(val)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
CBotExprLitNum<T>::~CBotExprLitNum()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CBotInstr* CompileExprLitNum(CBotToken* &p, CBotCStack* pStack)
|
||||||
{
|
{
|
||||||
CBotCStack* pStk = pStack->TokenStack();
|
CBotCStack* pStk = pStack->TokenStack();
|
||||||
|
|
||||||
CBotExprLitNum* inst = new CBotExprLitNum();
|
const auto& s = p->GetString();
|
||||||
|
|
||||||
inst->SetToken(p);
|
CBotInstr* inst = nullptr;
|
||||||
std::string s = p->GetString();
|
CBotType numtype = CBotTypInt;
|
||||||
|
|
||||||
inst->m_numtype = CBotTypInt;
|
|
||||||
if (p->GetType() == TokenTypDef)
|
if (p->GetType() == TokenTypDef)
|
||||||
{
|
{
|
||||||
inst->m_valint = p->GetKeywordId();
|
inst = new CBotExprLitNum<int>(static_cast<int>(p->GetKeywordId()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (s.find('.') != std::string::npos || ( s.find('x') == std::string::npos && ( s.find_first_of("eE") != std::string::npos ) ))
|
if (s.find('.') != std::string::npos || ( s.find('x') == std::string::npos && ( s.find_first_of("eE") != std::string::npos ) ))
|
||||||
{
|
{
|
||||||
inst->m_numtype = CBotTypFloat;
|
double val = GetNumFloat(s);
|
||||||
inst->m_valfloat = GetNumFloat(s);
|
if (val > static_cast<double>(std::numeric_limits<float>::max()))
|
||||||
|
{
|
||||||
|
numtype = CBotTypDouble;
|
||||||
|
inst = new CBotExprLitNum<double>(val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
numtype = CBotTypFloat;
|
||||||
|
inst = new CBotExprLitNum<float>(static_cast<float>(val));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
inst->m_valint = GetNumInt(s);
|
long val = GetNumInt(s);
|
||||||
|
if (val > std::numeric_limits<int>::max())
|
||||||
|
{
|
||||||
|
numtype = CBotTypLong;
|
||||||
|
inst = new CBotExprLitNum<long>(val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inst = new CBotExprLitNum<int>(static_cast<int>(val));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inst->SetToken(p);
|
||||||
if (pStk->NextToken(p))
|
if (pStk->NextToken(p))
|
||||||
{
|
{
|
||||||
CBotVar* var = CBotVar::Create("", inst->m_numtype);
|
CBotVar* var = CBotVar::Create("", numtype);
|
||||||
pStk->SetVar(var);
|
pStk->SetVar(var);
|
||||||
|
|
||||||
return pStack->Return(inst, pStk);
|
return pStack->Return(inst, pStk);
|
||||||
|
@ -79,8 +112,48 @@ CBotInstr* CBotExprLitNum::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
return pStack->Return(nullptr, pStk);
|
return pStack->Return(nullptr, pStk);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
CBotInstr* CompileSizeOf(CBotToken* &p, CBotCStack* pStack)
|
||||||
bool CBotExprLitNum::Execute(CBotStack* &pj)
|
{
|
||||||
|
CBotToken* pp = p;
|
||||||
|
|
||||||
|
if (!IsOfType(p, TokenTypVar)) return nullptr;
|
||||||
|
if (pp->GetString() == "sizeof" && IsOfType(p, ID_OPENPAR))
|
||||||
|
{
|
||||||
|
CBotCStack* pStk = pStack->TokenStack();
|
||||||
|
|
||||||
|
int value;
|
||||||
|
|
||||||
|
if (IsOfType(p, ID_BYTE)) value = sizeof(signed char);
|
||||||
|
else if (IsOfType(p, ID_SHORT)) value = sizeof(short);
|
||||||
|
else if (IsOfType(p, ID_CHAR)) value = sizeof(uint32_t);
|
||||||
|
else if (IsOfType(p, ID_INT)) value = sizeof(int);
|
||||||
|
else if (IsOfType(p, ID_LONG)) value = sizeof(long);
|
||||||
|
else if (IsOfType(p, ID_FLOAT)) value = sizeof(float);
|
||||||
|
else if (IsOfType(p, ID_DOUBLE)) value = sizeof(double);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = pp;
|
||||||
|
return pStack->Return(nullptr, pStk);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsOfType(p, ID_CLOSEPAR))
|
||||||
|
{
|
||||||
|
auto inst = new CBotExprLitNum<int>(value);
|
||||||
|
inst->SetToken(pp);
|
||||||
|
|
||||||
|
CBotVar* var = CBotVar::Create("", CBotTypInt);
|
||||||
|
pStk->SetVar(var);
|
||||||
|
return pStack->Return(inst, pStk);
|
||||||
|
}
|
||||||
|
pStk->SetError(CBotErrClosePar, p->GetStart());
|
||||||
|
return pStack->Return(nullptr, pStk);
|
||||||
|
}
|
||||||
|
p = pp;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool CBotExprLitNum<T>::Execute(CBotStack* &pj)
|
||||||
{
|
{
|
||||||
CBotStack* pile = pj->AddStack(this);
|
CBotStack* pile = pj->AddStack(this);
|
||||||
|
|
||||||
|
@ -88,39 +161,38 @@ bool CBotExprLitNum::Execute(CBotStack* &pj)
|
||||||
|
|
||||||
CBotVar* var = CBotVar::Create("", m_numtype);
|
CBotVar* var = CBotVar::Create("", m_numtype);
|
||||||
|
|
||||||
std::string nombre ;
|
|
||||||
if (m_token.GetType() == TokenTypDef)
|
if (m_token.GetType() == TokenTypDef)
|
||||||
{
|
{
|
||||||
nombre = m_token.GetString();
|
var->SetValInt(m_value, m_token.GetString());
|
||||||
}
|
}
|
||||||
|
else
|
||||||
switch (m_numtype)
|
|
||||||
{
|
{
|
||||||
case CBotTypShort:
|
*var = m_value;
|
||||||
case CBotTypInt:
|
|
||||||
var->SetValInt(m_valint, nombre);
|
|
||||||
break;
|
|
||||||
case CBotTypFloat:
|
|
||||||
var->SetValFloat(m_valfloat);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(false);
|
|
||||||
}
|
}
|
||||||
pile->SetVar(var); // place on the stack
|
pile->SetVar(var); // place on the stack
|
||||||
|
|
||||||
return pj->Return(pile); // it's ok
|
return pj->Return(pile); // it's ok
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
template <typename T>
|
||||||
void CBotExprLitNum::RestoreState(CBotStack* &pj, bool bMain)
|
void CBotExprLitNum<T>::RestoreState(CBotStack* &pj, bool bMain)
|
||||||
{
|
{
|
||||||
if (bMain) pj->RestoreStack(this);
|
if (bMain) pj->RestoreStack(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CBotExprLitNum::GetDebugData()
|
template <typename T>
|
||||||
|
std::string CBotExprLitNum<T>::GetDebugData()
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "(" << (m_numtype == CBotTypFloat ? "float" : "int") << ") " << (m_numtype == CBotTypFloat ? m_valfloat : m_valint);
|
switch (m_numtype)
|
||||||
|
{
|
||||||
|
case CBotTypInt : ss << "(int) "; break;
|
||||||
|
case CBotTypLong : ss << "(long) "; break;
|
||||||
|
case CBotTypFloat : ss << "(float) "; break;
|
||||||
|
case CBotTypDouble: ss << "(double) "; break;
|
||||||
|
default: assert(false);
|
||||||
|
}
|
||||||
|
ss << m_value;
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -24,25 +24,24 @@
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
CBotInstr* CompileExprLitNum(CBotToken* &p, CBotCStack* pStack);
|
||||||
|
|
||||||
|
CBotInstr* CompileSizeOf(CBotToken* &p, CBotCStack* pStack);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A number literal - 5, 1, 2.5, 3.75, etc. or a predefined numerical constant (see CBotToken::DefineNum())
|
* \brief A number literal - 5, 1, 2.5, 3.75, etc. or a predefined numerical constant (see CBotToken::DefineNum())
|
||||||
*
|
*
|
||||||
* Can be of type ::CBotTypInt or ::CBotTypFloat
|
* Can be of type ::CBotTypInt, ::CBotTypLong, ::CBotTypFloat, or ::CBotTypDouble
|
||||||
*/
|
*/
|
||||||
|
template <typename T>
|
||||||
class CBotExprLitNum : public CBotInstr
|
class CBotExprLitNum : public CBotInstr
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CBotExprLitNum();
|
// To keep linter happy, instead of = delete (see https://stackoverflow.com/a/37593094)
|
||||||
~CBotExprLitNum();
|
CBotExprLitNum(T val) { static_assert(sizeof(T) == 0, "Only specializations of CBotExprLitNum can be used"); };
|
||||||
|
|
||||||
/*!
|
~CBotExprLitNum();
|
||||||
* \brief Compile
|
|
||||||
* \param p
|
|
||||||
* \param pStack
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack);
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Execute Execute, returns the corresponding number.
|
* \brief Execute Execute, returns the corresponding number.
|
||||||
|
@ -65,10 +64,8 @@ protected:
|
||||||
private:
|
private:
|
||||||
//! The type of number.
|
//! The type of number.
|
||||||
CBotType m_numtype;
|
CBotType m_numtype;
|
||||||
//! Value for an int.
|
//! Value
|
||||||
long m_valint;
|
T m_value;
|
||||||
//! Value for a float.
|
|
||||||
float m_valfloat;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
#include "CBot/CBotVar/CBotVar.h"
|
#include "CBot/CBotVar/CBotVar.h"
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace CBot
|
namespace CBot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -42,7 +44,7 @@ CBotInstr* CBotExprLitString::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
{
|
{
|
||||||
CBotCStack* pStk = pStack->TokenStack();
|
CBotCStack* pStk = pStack->TokenStack();
|
||||||
|
|
||||||
std::string s = p->GetString();
|
const auto& s = p->GetString();
|
||||||
|
|
||||||
auto it = s.cbegin();
|
auto it = s.cbegin();
|
||||||
if (++it != s.cend())
|
if (++it != s.cend())
|
||||||
|
@ -51,7 +53,7 @@ CBotInstr* CBotExprLitString::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
std::string valstring = "";
|
std::string valstring = "";
|
||||||
while (it != s.cend() && *it != '\"')
|
while (it != s.cend() && *it != '\"')
|
||||||
{
|
{
|
||||||
pStk->SetStartError(++pos);
|
++pos;
|
||||||
if (*it != '\\') // not escape sequence ?
|
if (*it != '\\') // not escape sequence ?
|
||||||
{
|
{
|
||||||
valstring += *(it++);
|
valstring += *(it++);
|
||||||
|
@ -59,6 +61,7 @@ CBotInstr* CBotExprLitString::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++it == s.cend()) break;
|
if (++it == s.cend()) break;
|
||||||
|
pStk->SetStartError(pos);
|
||||||
|
|
||||||
if (CharInList(*it, "01234567")) // octal
|
if (CharInList(*it, "01234567")) // octal
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -40,8 +40,7 @@ CBotExprUnaire::~CBotExprUnaire()
|
||||||
delete m_expr;
|
delete m_expr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
CBotInstr* CBotExprUnaire::Compile(CBotToken* &p, CBotCStack* pStack, bool bLiteral, bool bConstExpr)
|
||||||
CBotInstr* CBotExprUnaire::Compile(CBotToken* &p, CBotCStack* pStack, bool bLiteral)
|
|
||||||
{
|
{
|
||||||
int op = p->GetType();
|
int op = p->GetType();
|
||||||
CBotToken* pp = p;
|
CBotToken* pp = p;
|
||||||
|
@ -52,8 +51,10 @@ CBotInstr* CBotExprUnaire::Compile(CBotToken* &p, CBotCStack* pStack, bool bLite
|
||||||
CBotExprUnaire* inst = new CBotExprUnaire();
|
CBotExprUnaire* inst = new CBotExprUnaire();
|
||||||
inst->SetToken(pp);
|
inst->SetToken(pp);
|
||||||
|
|
||||||
if (!bLiteral) inst->m_expr = CBotParExpr::Compile(p, pStk);
|
if (bConstExpr || !bLiteral)
|
||||||
else inst->m_expr = CBotParExpr::CompileLitExpr(p, pStk);
|
inst->m_expr = CBotParExpr::Compile(p, pStk, bConstExpr);
|
||||||
|
else
|
||||||
|
inst->m_expr = CBotParExpr::CompileLitExpr(p, pStk);
|
||||||
|
|
||||||
if (inst->m_expr != nullptr)
|
if (inst->m_expr != nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -40,7 +40,7 @@ public:
|
||||||
* \param bLiteral If true, compiles only literal expressions Ex: ~11, -4.0, !false, not true
|
* \param bLiteral If true, compiles only literal expressions Ex: ~11, -4.0, !false, not true
|
||||||
* \return The compiled instruction or nullptr
|
* \return The compiled instruction or nullptr
|
||||||
*/
|
*/
|
||||||
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, bool bLiteral = false);
|
static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack, bool bLiteral = false, bool bConstExpr = false);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Execute
|
* \brief Execute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -67,7 +67,7 @@ CBotInstr* CBotFor::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
CBotCStack* pStk = pStack->TokenStack(pp, true); // un petit bout de pile svp
|
CBotCStack* pStk = pStack->TokenStack(pp, true); // some size for a stack, plz
|
||||||
|
|
||||||
// compiles instructions for initialization
|
// compiles instructions for initialization
|
||||||
inst->m_init = CBotListExpression::Compile(p, pStk );
|
inst->m_init = CBotListExpression::Compile(p, pStk );
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -76,6 +76,18 @@ bool CBotFunction::IsPublic()
|
||||||
return m_bPublic;
|
return m_bPublic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool CBotFunction::IsProtected() const
|
||||||
|
{
|
||||||
|
return m_bProtect;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool CBotFunction::IsPrivate() const
|
||||||
|
{
|
||||||
|
return m_bPrivate;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotFunction::IsExtern()
|
bool CBotFunction::IsExtern()
|
||||||
{
|
{
|
||||||
|
@ -129,21 +141,17 @@ CBotFunction* CBotFunction::Compile(CBotToken* &p, CBotCStack* pStack, CBotFunct
|
||||||
{
|
{
|
||||||
CBotToken* pp;
|
CBotToken* pp;
|
||||||
CBotFunction* func = finput;
|
CBotFunction* func = finput;
|
||||||
if ( func == nullptr ) func = new CBotFunction();
|
assert(func != nullptr); // a pre-compiled function is required
|
||||||
|
|
||||||
CBotCStack* pStk = pStack->TokenStack(p, bLocal);
|
CBotCStack* pStk = pStack->TokenStack(p, bLocal);
|
||||||
|
|
||||||
// func->m_nFuncIdent = CBotVar::NextUniqNum();
|
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if ( IsOfType(p, ID_PUBLIC) )
|
if (IsOfType(p, ID_PRIVATE)) break;
|
||||||
{
|
if (IsOfType(p, ID_PROTECTED)) break;
|
||||||
func->m_bPublic = true;
|
if (IsOfType(p, ID_PUBLIC)) continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
pp = p;
|
pp = p;
|
||||||
if ( IsOfType(p, ID_EXTERN) )
|
if (IsOfType(p, ID_EXTERN))
|
||||||
{
|
{
|
||||||
func->m_extern = *pp; // for the position of the word "extern"
|
func->m_extern = *pp; // for the position of the word "extern"
|
||||||
func->m_bExtern = true;
|
func->m_bExtern = true;
|
||||||
|
@ -169,7 +177,7 @@ CBotFunction* CBotFunction::Compile(CBotToken* &p, CBotCStack* pStack, CBotFunct
|
||||||
func->m_token = d;
|
func->m_token = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
// un nom de fonction est-il là ?
|
// is there a function name here ?
|
||||||
if (IsOfType(p, TokenTypVar))
|
if (IsOfType(p, TokenTypVar))
|
||||||
{
|
{
|
||||||
if ( IsOfType( p, ID_DBLDOTS ) ) // method for a class
|
if ( IsOfType( p, ID_DBLDOTS ) ) // method for a class
|
||||||
|
@ -183,10 +191,23 @@ CBotFunction* CBotFunction::Compile(CBotToken* &p, CBotCStack* pStack, CBotFunct
|
||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pp = p;
|
pp = p;
|
||||||
func->m_token = *p;
|
func->m_token = *p;
|
||||||
if (!IsOfType(p, TokenTypVar)) goto bad;
|
if (!IsOfType(p, TokenTypVar)) goto bad;
|
||||||
|
// check if the class has a method like this
|
||||||
|
if (pClass->CheckCall(pStack->GetProgram(), func->m_param, pp))
|
||||||
|
{
|
||||||
|
pStk->SetStartError(func->m_classToken.GetStart());
|
||||||
|
pStk->SetError(CBotErrRedefFunc, pp->GetEnd());
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
// check if a constructor has return type void
|
||||||
|
if (func->GetName() == pClass->GetName() && !func->m_retTyp.Eq(CBotTypVoid))
|
||||||
|
{
|
||||||
|
pp = &(func->m_retToken);
|
||||||
|
pStk->SetError(CBotErrFuncNotVoid, pp);
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
func->m_openpar = *p;
|
func->m_openpar = *p;
|
||||||
delete func->m_param;
|
delete func->m_param;
|
||||||
|
@ -198,28 +219,13 @@ CBotFunction* CBotFunction::Compile(CBotToken* &p, CBotCStack* pStack, CBotFunct
|
||||||
|
|
||||||
if (!func->m_MasterClass.empty())
|
if (!func->m_MasterClass.empty())
|
||||||
{
|
{
|
||||||
// return "this" known
|
CBotClass* pClass = CBotClass::Find(func->m_MasterClass);
|
||||||
CBotVar* pThis = CBotVar::Create("this", CBotTypResult( CBotTypClass, func->m_MasterClass ));
|
|
||||||
pThis->SetInit(CBotVar::InitType::IS_POINTER);
|
|
||||||
// pThis->SetUniqNum(func->m_nThisIdent = -2); //CBotVar::NextUniqNum() will not
|
|
||||||
pThis->SetUniqNum(-2);
|
|
||||||
pStk->AddVar(pThis);
|
|
||||||
|
|
||||||
// initialize variables acording to This
|
pStk->CreateVarThis(pClass);
|
||||||
// only saves the pointer to the first,
|
pStk->CreateVarSuper(pClass->GetParent());
|
||||||
// the rest is chained
|
|
||||||
CBotVar* pv = pThis->GetItemList();
|
bool bConstructor = (func->GetName() == func->m_MasterClass);
|
||||||
// int num = 1;
|
pStk->CreateMemberVars(pClass, !bConstructor);
|
||||||
while (pv != nullptr)
|
|
||||||
{
|
|
||||||
CBotVar* pcopy = CBotVar::Create(pv);
|
|
||||||
// pcopy->SetInit(2);
|
|
||||||
pcopy->Copy(pv);
|
|
||||||
pcopy->SetPrivate(pv->GetPrivate());
|
|
||||||
// pcopy->SetUniqNum(pv->GetUniqNum()); //num++);
|
|
||||||
pStk->AddVar(pcopy);
|
|
||||||
pv = pv->GetNext();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// and compiles the following instruction block
|
// and compiles the following instruction block
|
||||||
|
@ -242,7 +248,6 @@ bad:
|
||||||
pStk->SetError(CBotErrNoFunc, p);
|
pStk->SetError(CBotErrNoFunc, p);
|
||||||
}
|
}
|
||||||
pStk->SetError(CBotErrNoType, p);
|
pStk->SetError(CBotErrNoType, p);
|
||||||
if ( finput == nullptr ) delete func;
|
|
||||||
return pStack->ReturnFunc(nullptr, pStk);
|
return pStack->ReturnFunc(nullptr, pStk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,14 +259,30 @@ CBotFunction* CBotFunction::Compile1(CBotToken* &p, CBotCStack* pStack, CBotClas
|
||||||
|
|
||||||
CBotCStack* pStk = pStack->TokenStack(p, true);
|
CBotCStack* pStk = pStack->TokenStack(p, true);
|
||||||
|
|
||||||
|
CBotToken* pPriv = p;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if ( IsOfType(p, ID_PUBLIC) )
|
if (!func->m_bPublic) // don't repeat 'public'
|
||||||
{
|
{
|
||||||
// func->m_bPublic = true; // will be done in two passes
|
pPriv = p;
|
||||||
continue;
|
if (IsOfType(p, ID_PRIVATE))
|
||||||
|
{
|
||||||
|
func->m_bPrivate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (IsOfType(p, ID_PROTECTED))
|
||||||
|
{
|
||||||
|
func->m_bProtect = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (IsOfType(p, ID_PUBLIC))
|
||||||
|
{
|
||||||
|
func->m_bPublic = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( IsOfType(p, ID_EXTERN) )
|
if (!func->m_bExtern && IsOfType(p, ID_EXTERN))
|
||||||
{
|
{
|
||||||
func->m_bExtern = true;
|
func->m_bExtern = true;
|
||||||
continue;
|
continue;
|
||||||
|
@ -284,7 +305,7 @@ CBotFunction* CBotFunction::Compile1(CBotToken* &p, CBotCStack* pStack, CBotClas
|
||||||
func->m_token = d;
|
func->m_token = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
// un nom de fonction est-il là ?
|
// is there a function name here ?
|
||||||
if (IsOfType(p, TokenTypVar))
|
if (IsOfType(p, TokenTypVar))
|
||||||
{
|
{
|
||||||
if ( IsOfType( p, ID_DBLDOTS ) ) // method for a class
|
if ( IsOfType( p, ID_DBLDOTS ) ) // method for a class
|
||||||
|
@ -297,12 +318,21 @@ CBotFunction* CBotFunction::Compile1(CBotToken* &p, CBotCStack* pStack, CBotClas
|
||||||
if (!IsOfType(p, TokenTypVar)) goto bad;
|
if (!IsOfType(p, TokenTypVar)) goto bad;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else if (pClass == nullptr) // not method in a class ?
|
||||||
|
{
|
||||||
|
if (func->m_bPrivate || func->m_bProtect) // not allowed for regular functions
|
||||||
|
{
|
||||||
|
pStk->SetError(CBotErrNoType, pPriv);
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CBotToken* openPar = p;
|
CBotToken* openPar = p;
|
||||||
func->m_param = CBotDefParam::Compile(p, pStk); // compile parameters
|
func->m_param = CBotDefParam::Compile(p, pStk); // compile parameters
|
||||||
|
|
||||||
if (pStk->IsOk() && pClass != nullptr) // method in a class
|
if (pStk->IsOk() && pClass != nullptr) // method in a class
|
||||||
{
|
{
|
||||||
|
func->m_MasterClass = pClass->GetName();
|
||||||
// check if a constructor has return type void
|
// check if a constructor has return type void
|
||||||
if (func->GetName() == pClass->GetName() && !func->m_retTyp.Eq(CBotTypVoid))
|
if (func->GetName() == pClass->GetName() && !func->m_retTyp.Eq(CBotTypVoid))
|
||||||
{
|
{
|
||||||
|
@ -331,7 +361,7 @@ CBotFunction* CBotFunction::Compile1(CBotToken* &p, CBotCStack* pStack, CBotClas
|
||||||
{
|
{
|
||||||
// looks if the function exists elsewhere
|
// looks if the function exists elsewhere
|
||||||
pp = &(func->m_token);
|
pp = &(func->m_token);
|
||||||
if (( pClass != nullptr || !pStack->CheckCall(pp, func->m_param)) &&
|
if (( pClass != nullptr || !pStack->CheckCall(pp, func->m_param, func->m_MasterClass)) &&
|
||||||
( pClass == nullptr || !pClass->CheckCall(pStack->GetProgram(), func->m_param, pp)) )
|
( pClass == nullptr || !pClass->CheckCall(pStack->GetProgram(), func->m_param, pp)) )
|
||||||
{
|
{
|
||||||
if (IsOfType(p, ID_OPBLK))
|
if (IsOfType(p, ID_OPBLK))
|
||||||
|
@ -415,7 +445,7 @@ bool CBotFunction::Execute(CBotVar** ppVars, CBotStack* &pj, CBotVar* pInstance)
|
||||||
pile->IncState();
|
pile->IncState();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !m_block->Execute(pile) )
|
if (!pile->GetRetVar(m_block->Execute(pile)))
|
||||||
{
|
{
|
||||||
if ( pile->GetError() < 0 )
|
if ( pile->GetError() < 0 )
|
||||||
pile->SetError( CBotNoErr );
|
pile->SetError( CBotNoErr );
|
||||||
|
@ -472,10 +502,10 @@ void CBotFunction::RestoreState(CBotVar** ppVars, CBotStack* &pj, CBotVar* pInst
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotTypResult CBotFunction::CompileCall(const std::list<CBotFunction*>& localFunctionList, const std::string &name, CBotVar** ppVars, long &nIdent)
|
CBotTypResult CBotFunction::CompileCall(const std::string &name, CBotVar** ppVars, long &nIdent, CBotProgram* program)
|
||||||
{
|
{
|
||||||
CBotTypResult type;
|
CBotTypResult type;
|
||||||
if (!FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type))
|
if (!FindLocalOrPublic(program->GetFunctions(), nIdent, name, ppVars, type, program))
|
||||||
{
|
{
|
||||||
// Reset the identifier to "not found" value
|
// Reset the identifier to "not found" value
|
||||||
nIdent = 0;
|
nIdent = 0;
|
||||||
|
@ -485,7 +515,7 @@ CBotTypResult CBotFunction::CompileCall(const std::list<CBotFunction*>& localFun
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CBotFunction* CBotFunction::FindLocalOrPublic(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name,
|
CBotFunction* CBotFunction::FindLocalOrPublic(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name,
|
||||||
CBotVar** ppVars, CBotTypResult &TypeOrError, bool bPublic)
|
CBotVar** ppVars, CBotTypResult &TypeOrError, CBotProgram* baseProg)
|
||||||
{
|
{
|
||||||
TypeOrError.SetType(CBotErrUndefCall); // no routine of the name
|
TypeOrError.SetType(CBotErrUndefCall); // no routine of the name
|
||||||
|
|
||||||
|
@ -515,10 +545,39 @@ CBotFunction* CBotFunction::FindLocalOrPublic(const std::list<CBotFunction*>& lo
|
||||||
|
|
||||||
std::map<CBotFunction*, int> funcMap;
|
std::map<CBotFunction*, int> funcMap;
|
||||||
|
|
||||||
for (CBotFunction* pt : localFunctionList)
|
CBotFunction::SearchList(localFunctionList, name, ppVars, TypeOrError, funcMap);
|
||||||
|
|
||||||
|
CBotFunction::SearchPublic(name, ppVars, TypeOrError, funcMap);
|
||||||
|
|
||||||
|
if (baseProg != nullptr && baseProg->m_thisVar != nullptr)
|
||||||
|
{
|
||||||
|
// find object:: functions
|
||||||
|
CBotClass* pClass = baseProg->m_thisVar->GetClass();
|
||||||
|
CBotFunction::SearchList(localFunctionList, name, ppVars, TypeOrError, funcMap, pClass);
|
||||||
|
CBotFunction::SearchPublic(name, ppVars, TypeOrError, funcMap, pClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CBotFunction::BestFunction(funcMap, nIdent, TypeOrError);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void CBotFunction::SearchList(const std::list<CBotFunction*>& functionList,
|
||||||
|
const std::string& name, CBotVar** ppVars, CBotTypResult& TypeOrError,
|
||||||
|
std::map<CBotFunction*, int>& funcMap, CBotClass* pClass)
|
||||||
|
{
|
||||||
|
for (CBotFunction* pt : functionList)
|
||||||
{
|
{
|
||||||
if ( pt->m_token.GetString() == name )
|
if ( pt->m_token.GetString() == name )
|
||||||
{
|
{
|
||||||
|
if (pClass != nullptr) // looking for a method ?
|
||||||
|
{
|
||||||
|
if (pt->m_MasterClass != pClass->GetName()) continue;
|
||||||
|
}
|
||||||
|
else // looking for a function
|
||||||
|
{
|
||||||
|
if (!pt->m_MasterClass.empty()) continue;
|
||||||
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int alpha = 0; // signature of parameters
|
int alpha = 0; // signature of parameters
|
||||||
// parameters are compatible?
|
// parameters are compatible?
|
||||||
|
@ -575,16 +634,29 @@ CBotFunction* CBotFunction::FindLocalOrPublic(const std::list<CBotFunction*>& lo
|
||||||
funcMap.insert( std::pair<CBotFunction*, int>(pt, alpha) );
|
funcMap.insert( std::pair<CBotFunction*, int>(pt, alpha) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( bPublic )
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void CBotFunction::SearchPublic(const std::string& name, CBotVar** ppVars, CBotTypResult& TypeOrError,
|
||||||
|
std::map<CBotFunction*, int>& funcMap, CBotClass* pClass)
|
||||||
|
{
|
||||||
{
|
{
|
||||||
for (CBotFunction* pt : m_publicFunctions)
|
for (CBotFunction* pt : m_publicFunctions)
|
||||||
{
|
{
|
||||||
if ( pt->m_token.GetString() == name )
|
if ( pt->m_token.GetString() == name )
|
||||||
{
|
{
|
||||||
|
if (pClass != nullptr) // looking for a method ?
|
||||||
|
{
|
||||||
|
if (pt->m_MasterClass != pClass->GetName()) continue;
|
||||||
|
}
|
||||||
|
else // looking for a function
|
||||||
|
{
|
||||||
|
if (!pt->m_MasterClass.empty()) continue;
|
||||||
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int alpha = 0; // signature of parameters
|
int alpha = 0; // signature of parameters
|
||||||
// parameters sont-ils compatibles ?
|
// are parameters compatible ?
|
||||||
CBotDefParam* pv = pt->m_param; // list of expected parameters
|
CBotDefParam* pv = pt->m_param; // list of expected parameters
|
||||||
CBotVar* pw = ppVars[i++]; // list of provided parameters
|
CBotVar* pw = ppVars[i++]; // list of provided parameters
|
||||||
while ( pv != nullptr && (pw != nullptr || pv->HasDefault()) )
|
while ( pv != nullptr && (pw != nullptr || pv->HasDefault()) )
|
||||||
|
@ -639,7 +711,12 @@ CBotFunction* CBotFunction::FindLocalOrPublic(const std::list<CBotFunction*>& lo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
CBotFunction* CBotFunction::BestFunction(std::map<CBotFunction*, int>& funcMap,
|
||||||
|
long& nIdent, CBotTypResult& TypeOrError)
|
||||||
|
{
|
||||||
if ( !funcMap.empty() )
|
if ( !funcMap.empty() )
|
||||||
{
|
{
|
||||||
auto it = funcMap.begin();
|
auto it = funcMap.begin();
|
||||||
|
@ -675,7 +752,7 @@ int CBotFunction::DoCall(CBotProgram* program, const std::list<CBotFunction*>& l
|
||||||
CBotFunction* pt = nullptr;
|
CBotFunction* pt = nullptr;
|
||||||
CBotProgram* baseProg = pStack->GetProgram(true);
|
CBotProgram* baseProg = pStack->GetProgram(true);
|
||||||
|
|
||||||
pt = FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type);
|
pt = FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type, baseProg);
|
||||||
|
|
||||||
if ( pt != nullptr )
|
if ( pt != nullptr )
|
||||||
{
|
{
|
||||||
|
@ -766,7 +843,7 @@ void CBotFunction::RestoreCall(const std::list<CBotFunction*>& localFunctionList
|
||||||
CBotStack* pStk3;
|
CBotStack* pStk3;
|
||||||
CBotProgram* baseProg = pStack->GetProgram(true);
|
CBotProgram* baseProg = pStack->GetProgram(true);
|
||||||
|
|
||||||
pt = FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type);
|
pt = FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type, baseProg);
|
||||||
|
|
||||||
if ( pt != nullptr )
|
if ( pt != nullptr )
|
||||||
{
|
{
|
||||||
|
@ -824,13 +901,121 @@ void CBotFunction::RestoreCall(const std::list<CBotFunction*>& localFunctionList
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
int CBotFunction::DoCall(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name, CBotVar* pThis,
|
CBotTypResult CBotFunction::CompileMethodCall(const std::string& name, CBotVar** ppVars,
|
||||||
|
long& nIdent, CBotCStack* pStack, CBotClass* pClass)
|
||||||
|
{
|
||||||
|
nIdent = 0;
|
||||||
|
CBotTypResult type;
|
||||||
|
|
||||||
|
CBotFunction* pt = FindMethod(nIdent, name, ppVars, type, pClass, pStack->GetProgram());
|
||||||
|
|
||||||
|
if (pt != nullptr)
|
||||||
|
{
|
||||||
|
CBotToken token("this");
|
||||||
|
CBotVar* pThis = pStack->FindVar(token); // for 'this' context
|
||||||
|
|
||||||
|
if (pThis == nullptr || pThis->GetType() != CBotTypPointer) // called from inside a function
|
||||||
|
{
|
||||||
|
if (pt->IsPrivate() || pt->IsProtected())
|
||||||
|
type.SetType(CBotErrPrivate);
|
||||||
|
}
|
||||||
|
else // called from inside a method
|
||||||
|
{
|
||||||
|
CBotClass* thisClass = pThis->GetClass(); // current class
|
||||||
|
CBotClass* funcClass = CBotClass::Find(pt->m_MasterClass); // class of the method
|
||||||
|
|
||||||
|
if (pt->IsPrivate() && thisClass != funcClass)
|
||||||
|
type.SetType(CBotErrPrivate);
|
||||||
|
|
||||||
|
if (pt->IsProtected() && !thisClass->IsChildOf(funcClass))
|
||||||
|
type.SetType(CBotErrPrivate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
CBotFunction* CBotFunction::FindMethod(long& nIdent, const std::string& name,
|
||||||
|
CBotVar** ppVars, CBotTypResult& TypeOrError,
|
||||||
|
CBotClass* pClass, CBotProgram* program)
|
||||||
|
{
|
||||||
|
TypeOrError.SetType(CBotErrUndefCall); // no routine of the name
|
||||||
|
|
||||||
|
auto methods = pClass->GetFunctions();
|
||||||
|
|
||||||
|
if ( nIdent )
|
||||||
|
{
|
||||||
|
// search methods in the class
|
||||||
|
for (CBotFunction* pt : methods)
|
||||||
|
{
|
||||||
|
if ( pt->m_nFuncIdent == nIdent )
|
||||||
|
{
|
||||||
|
TypeOrError = pt->m_retTyp;
|
||||||
|
return pt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool skipPublic = false;
|
||||||
|
if (program != nullptr)
|
||||||
|
{
|
||||||
|
// search the current program
|
||||||
|
for (CBotFunction* pt : program->GetFunctions())
|
||||||
|
{
|
||||||
|
if ( pt->m_nFuncIdent == nIdent )
|
||||||
|
{
|
||||||
|
// check if the method is inherited
|
||||||
|
if ( pt->GetClassName() != pClass->GetName() )
|
||||||
|
{
|
||||||
|
skipPublic = true;
|
||||||
|
break; // break in case there is an override
|
||||||
|
}
|
||||||
|
TypeOrError = pt->m_retTyp;
|
||||||
|
return pt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// search the list of public functions
|
||||||
|
if (!skipPublic)
|
||||||
|
{
|
||||||
|
for (CBotFunction* pt : m_publicFunctions)
|
||||||
|
{
|
||||||
|
if (pt->m_nFuncIdent == nIdent)
|
||||||
|
{
|
||||||
|
// check if the method is inherited, break in case there is an override
|
||||||
|
if ( pt->GetClassName() != pClass->GetName() ) break;
|
||||||
|
TypeOrError = pt->m_retTyp;
|
||||||
|
return pt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( name.empty() ) return nullptr;
|
||||||
|
|
||||||
|
std::map<CBotFunction*, int> funcMap;
|
||||||
|
|
||||||
|
// search methods in the class
|
||||||
|
CBotFunction::SearchList(methods, name, ppVars, TypeOrError, funcMap, pClass);
|
||||||
|
|
||||||
|
// search the current program for methods
|
||||||
|
if (program != nullptr)
|
||||||
|
CBotFunction::SearchList(program->GetFunctions(), name, ppVars, TypeOrError, funcMap, pClass);
|
||||||
|
|
||||||
|
CBotFunction::SearchPublic(name, ppVars, TypeOrError, funcMap, pClass);
|
||||||
|
|
||||||
|
return CBotFunction::BestFunction(funcMap, nIdent, TypeOrError);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int CBotFunction::DoCall(long &nIdent, const std::string &name, CBotVar* pThis,
|
||||||
CBotVar** ppVars, CBotStack* pStack, CBotToken* pToken, CBotClass* pClass)
|
CBotVar** ppVars, CBotStack* pStack, CBotToken* pToken, CBotClass* pClass)
|
||||||
{
|
{
|
||||||
CBotTypResult type;
|
CBotTypResult type;
|
||||||
CBotProgram* pProgCurrent = pStack->GetProgram();
|
CBotProgram* pProgCurrent = pStack->GetProgram();
|
||||||
|
|
||||||
CBotFunction* pt = FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type, false);
|
CBotFunction* pt = FindMethod(nIdent, name, ppVars, type, pClass, pProgCurrent);
|
||||||
|
|
||||||
if ( pt != nullptr )
|
if ( pt != nullptr )
|
||||||
{
|
{
|
||||||
|
@ -925,11 +1110,11 @@ int CBotFunction::DoCall(const std::list<CBotFunction*>& localFunctionList, long
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool CBotFunction::RestoreCall(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name, CBotVar* pThis,
|
bool CBotFunction::RestoreCall(long &nIdent, const std::string &name, CBotVar* pThis,
|
||||||
CBotVar** ppVars, CBotStack* pStack, CBotClass* pClass)
|
CBotVar** ppVars, CBotStack* pStack, CBotClass* pClass)
|
||||||
{
|
{
|
||||||
CBotTypResult type;
|
CBotTypResult type;
|
||||||
CBotFunction* pt = FindLocalOrPublic(localFunctionList, nIdent, name, ppVars, type);
|
CBotFunction* pt = FindMethod(nIdent, name, ppVars, type, pClass, pStack->GetProgram());
|
||||||
|
|
||||||
if ( pt != nullptr )
|
if ( pt != nullptr )
|
||||||
{
|
{
|
||||||
|
@ -1020,6 +1205,12 @@ std::string CBotFunction::GetParams()
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string& CBotFunction::GetClassName() const
|
||||||
|
{
|
||||||
|
return m_MasterClass;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void CBotFunction::AddPublic(CBotFunction* func)
|
void CBotFunction::AddPublic(CBotFunction* func)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -105,21 +105,19 @@ public:
|
||||||
*
|
*
|
||||||
* See FindLocalOrPublic for more detailed explanation
|
* See FindLocalOrPublic for more detailed explanation
|
||||||
*
|
*
|
||||||
* \param localFunctionList Linked list of local functions to search in, can be null
|
|
||||||
* \param name Name of the function
|
* \param name Name of the function
|
||||||
* \param ppVars List of function arguments
|
* \param ppVars List of function arguments
|
||||||
* \param nIdent[in, out] Unique identifier of the function
|
* \param nIdent[in, out] Unique identifier of the function
|
||||||
|
* \param program The current program, to search for functions.
|
||||||
* \return Type returned by the function or error code
|
* \return Type returned by the function or error code
|
||||||
* \see FindLocalOrPublic
|
* \see FindLocalOrPublic
|
||||||
*/
|
*/
|
||||||
static CBotTypResult CompileCall(const std::list<CBotFunction*>& localFunctionList,
|
static CBotTypResult CompileCall(const std::string &name, CBotVar** ppVars,
|
||||||
const std::string &name, CBotVar** ppVars, long &nIdent);
|
long &nIdent, CBotProgram* program);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Finds a local or public function
|
* \brief Finds a local or public function
|
||||||
*
|
*
|
||||||
* <p>Finds a local or (if bPublic is true) public function to call
|
|
||||||
*
|
|
||||||
* <p>First, it looks for a function according to its unique identifier.<br>
|
* <p>First, it looks for a function according to its unique identifier.<br>
|
||||||
* If the identifier is not found, looks by name and parameters.
|
* If the identifier is not found, looks by name and parameters.
|
||||||
*
|
*
|
||||||
|
@ -128,11 +126,46 @@ public:
|
||||||
* \param name Name of the function
|
* \param name Name of the function
|
||||||
* \param ppVars List of function arguments
|
* \param ppVars List of function arguments
|
||||||
* \param TypeOrError Type returned by the function or error code
|
* \param TypeOrError Type returned by the function or error code
|
||||||
* \param bPublic Whether to look in public functions or not
|
* \param baseProg Initial program, for context of the object/bot
|
||||||
* \return Pointer to found CBotFunction instance, or nullptr in case of no match or ambiguity (see TypeOrError for error code)
|
* \return Pointer to found CBotFunction instance, or nullptr in case of no match or ambiguity (see TypeOrError for error code)
|
||||||
*/
|
*/
|
||||||
static CBotFunction* FindLocalOrPublic(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name,
|
static CBotFunction* FindLocalOrPublic(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name,
|
||||||
CBotVar** ppVars, CBotTypResult &TypeOrError, bool bPublic = true);
|
CBotVar** ppVars, CBotTypResult &TypeOrError, CBotProgram* baseProg);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Find all functions that match the name and arguments.
|
||||||
|
* \param functionList List of functions to search, can be empty.
|
||||||
|
* \param name Name of the function to find.
|
||||||
|
* \param ppVars Arguments to compare with parameters.
|
||||||
|
* \param TypeOrError Contains a CBotError when no useable function has been found.
|
||||||
|
* \param funcMap Container for suitable functions and their signature values.
|
||||||
|
* \param pClass Pointer to class when searching for methods.
|
||||||
|
*/
|
||||||
|
static void SearchList(const std::list<CBotFunction*>& functionList,
|
||||||
|
const std::string& name, CBotVar** ppVars, CBotTypResult& TypeOrError,
|
||||||
|
std::map<CBotFunction*, int>& funcMap, CBotClass* pClass = nullptr);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Find all public functions that match the name and arguments.
|
||||||
|
* \param name Name of the function to find.
|
||||||
|
* \param ppVars Arguments to compare with parameters.
|
||||||
|
* \param TypeOrError Contains a CBotError when no useable function has been found.
|
||||||
|
* \param funcMap Container for suitable functions and their signature values.
|
||||||
|
* \param pClass Pointer to class when searching for methods.
|
||||||
|
*/
|
||||||
|
static void SearchPublic(const std::string& name, CBotVar** ppVars, CBotTypResult& TypeOrError,
|
||||||
|
std::map<CBotFunction*, int>& funcMap, CBotClass* pClass = nullptr);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Find the function with the lowest signature value. If there is more
|
||||||
|
* than one of the same signature value, TypeOrError is set to CBotErrAmbiguousCall.
|
||||||
|
* \param funcMap List of functions and their signature values, can be empty.
|
||||||
|
* \param[out] nIdent Unique identifier of the function.
|
||||||
|
* \param TypeOrError Type returned by the function or error code.
|
||||||
|
* \return Pointer to the function with the lowest signature or nullptr.
|
||||||
|
*/
|
||||||
|
static CBotFunction* BestFunction(std::map<CBotFunction*, int>& funcMap,
|
||||||
|
long& nIdent, CBotTypResult& TypeOrError);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief DoCall Fait un appel à une fonction.
|
* \brief DoCall Fait un appel à une fonction.
|
||||||
|
@ -160,10 +193,34 @@ public:
|
||||||
static void RestoreCall(const std::list<CBotFunction*>& localFunctionList,
|
static void RestoreCall(const std::list<CBotFunction*>& localFunctionList,
|
||||||
long &nIdent, const std::string &name, CBotVar** ppVars, CBotStack* pStack);
|
long &nIdent, const std::string &name, CBotVar** ppVars, CBotStack* pStack);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Find a method matching the name and arguments.
|
||||||
|
* \param name Name of the method to find.
|
||||||
|
* \param ppVars Arguments to compare with parameters.
|
||||||
|
* \param[out] nIdent Unique identifier of the method.
|
||||||
|
* \param pStack Current compilation stack frame.
|
||||||
|
* \param pClass Pointer to the class.
|
||||||
|
* \return The return type for the method or a CBotError.
|
||||||
|
*/
|
||||||
|
static CBotTypResult CompileMethodCall(const std::string& name, CBotVar** ppVars,
|
||||||
|
long& nIdent, CBotCStack* pStack, CBotClass* pClass);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Find a method by its unique identifier or by name and parameters.
|
||||||
|
* \param[in,out] nIdent Unique identifier of the method.
|
||||||
|
* \param name Name of the method to find.
|
||||||
|
* \param ppVars Arguments to compare with parameters.
|
||||||
|
* \param TypeOrError The return type for the method or a CBotError.
|
||||||
|
* \param pClass Pointer to the class.
|
||||||
|
* \param program The current program, to search for out-of-class methods.
|
||||||
|
* \return Pointer to the method that best matches the given arguments or nullptr.
|
||||||
|
*/
|
||||||
|
static CBotFunction* FindMethod(long& nIdent, const std::string& name,
|
||||||
|
CBotVar** ppVars, CBotTypResult& TypeOrError,
|
||||||
|
CBotClass* pClass, CBotProgram* program);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief DoCall Makes call of a method
|
* \brief DoCall Makes call of a method
|
||||||
* note: this is already on the stack, the pointer pThis is just to simplify.
|
|
||||||
* \param localFunctionList
|
|
||||||
* \param nIdent
|
* \param nIdent
|
||||||
* \param name
|
* \param name
|
||||||
* \param pThis
|
* \param pThis
|
||||||
|
@ -173,12 +230,11 @@ public:
|
||||||
* \param pClass
|
* \param pClass
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
static int DoCall(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name, CBotVar* pThis,
|
static int DoCall(long &nIdent, const std::string &name, CBotVar* pThis,
|
||||||
CBotVar** ppVars, CBotStack* pStack, CBotToken* pToken, CBotClass* pClass);
|
CBotVar** ppVars, CBotStack* pStack, CBotToken* pToken, CBotClass* pClass);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief RestoreCall
|
* \brief RestoreCall
|
||||||
* \param localFunctionList
|
|
||||||
* \param nIdent
|
* \param nIdent
|
||||||
* \param name
|
* \param name
|
||||||
* \param pThis
|
* \param pThis
|
||||||
|
@ -187,7 +243,7 @@ public:
|
||||||
* \param pClass
|
* \param pClass
|
||||||
* \return Returns true if the method call was restored.
|
* \return Returns true if the method call was restored.
|
||||||
*/
|
*/
|
||||||
static bool RestoreCall(const std::list<CBotFunction*>& localFunctionList, long &nIdent, const std::string &name, CBotVar* pThis,
|
static bool RestoreCall(long &nIdent, const std::string &name, CBotVar* pThis,
|
||||||
CBotVar** ppVars, CBotStack* pStack, CBotClass* pClass);
|
CBotVar** ppVars, CBotStack* pStack, CBotClass* pClass);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -215,12 +271,30 @@ public:
|
||||||
*/
|
*/
|
||||||
std::string GetParams();
|
std::string GetParams();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Get the name of the class for a method.
|
||||||
|
* \return The name of a class or empty string if it's not a method.
|
||||||
|
*/
|
||||||
|
const std::string& GetClassName() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief IsPublic
|
* \brief IsPublic
|
||||||
* \return
|
* \return
|
||||||
*/
|
*/
|
||||||
bool IsPublic();
|
bool IsPublic();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Check if a method is protected.
|
||||||
|
* \return true if a method was compiled with "protected" keyword.
|
||||||
|
*/
|
||||||
|
bool IsProtected() const;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Check if a method is private.
|
||||||
|
* \return true if a method was compiled with "private" keyword.
|
||||||
|
*/
|
||||||
|
bool IsPrivate() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief IsExtern
|
* \brief IsExtern
|
||||||
* \return
|
* \return
|
||||||
|
@ -266,6 +340,10 @@ private:
|
||||||
CBotTypResult m_retTyp;
|
CBotTypResult m_retTyp;
|
||||||
//! Public function.
|
//! Public function.
|
||||||
bool m_bPublic;
|
bool m_bPublic;
|
||||||
|
//! Protected method.
|
||||||
|
bool m_bProtect = false;
|
||||||
|
//! Private method.
|
||||||
|
bool m_bPrivate = false;
|
||||||
//! Extern function.
|
//! Extern function.
|
||||||
bool m_bExtern;
|
bool m_bExtern;
|
||||||
//! Name of the class we are part of
|
//! Name of the class we are part of
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -30,6 +30,7 @@
|
||||||
#include "CBot/CBotInstr/CBotExpression.h"
|
#include "CBot/CBotInstr/CBotExpression.h"
|
||||||
#include "CBot/CBotInstr/CBotFor.h"
|
#include "CBot/CBotInstr/CBotFor.h"
|
||||||
#include "CBot/CBotInstr/CBotIf.h"
|
#include "CBot/CBotInstr/CBotIf.h"
|
||||||
|
#include "CBot/CBotInstr/CBotRepeat.h"
|
||||||
#include "CBot/CBotInstr/CBotReturn.h"
|
#include "CBot/CBotInstr/CBotReturn.h"
|
||||||
#include "CBot/CBotInstr/CBotSwitch.h"
|
#include "CBot/CBotInstr/CBotSwitch.h"
|
||||||
#include "CBot/CBotInstr/CBotThrow.h"
|
#include "CBot/CBotInstr/CBotThrow.h"
|
||||||
|
@ -176,7 +177,7 @@ CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
{
|
{
|
||||||
type = pp->GetType();
|
type = pp->GetType();
|
||||||
// Allow only instructions that accept a label
|
// Allow only instructions that accept a label
|
||||||
if (!IsOfTypeList(pp, ID_WHILE, ID_FOR, ID_DO, 0))
|
if (!IsOfTypeList(pp, ID_WHILE, ID_FOR, ID_DO, ID_REPEAT, 0))
|
||||||
{
|
{
|
||||||
pStack->SetError(CBotErrLabel, pp->GetStart());
|
pStack->SetError(CBotErrLabel, pp->GetStart());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -195,6 +196,9 @@ CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
case ID_DO:
|
case ID_DO:
|
||||||
return CBotDo::Compile(p, pStack);
|
return CBotDo::Compile(p, pStack);
|
||||||
|
|
||||||
|
case ID_REPEAT:
|
||||||
|
return CBotRepeat::Compile(p, pStack);
|
||||||
|
|
||||||
case ID_BREAK:
|
case ID_BREAK:
|
||||||
case ID_CONTINUE:
|
case ID_CONTINUE:
|
||||||
return CBotBreak::Compile(p, pStack);
|
return CBotBreak::Compile(p, pStack);
|
||||||
|
@ -208,10 +212,15 @@ CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
case ID_THROW:
|
case ID_THROW:
|
||||||
return CBotThrow::Compile(p, pStack);
|
return CBotThrow::Compile(p, pStack);
|
||||||
|
|
||||||
|
case ID_BYTE:
|
||||||
|
case ID_SHORT:
|
||||||
|
case ID_CHAR:
|
||||||
case ID_INT:
|
case ID_INT:
|
||||||
|
case ID_LONG:
|
||||||
return CBotDefInt::Compile(p, pStack);
|
return CBotDefInt::Compile(p, pStack);
|
||||||
|
|
||||||
case ID_FLOAT:
|
case ID_FLOAT:
|
||||||
|
case ID_DOUBLE:
|
||||||
return CBotDefFloat::Compile(p, pStack);
|
return CBotDefFloat::Compile(p, pStack);
|
||||||
|
|
||||||
case ID_STRING:
|
case ID_STRING:
|
||||||
|
@ -312,13 +321,6 @@ void CBotInstr::RestoreStateVar(CBotStack* &pile, bool bMain)
|
||||||
assert(0); // dad do not know, see the girls
|
assert(0); // dad do not know, see the girls
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
bool CBotInstr::CompCase(CBotStack* &pj, int val)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
CBotInstr* CBotInstr::CompileArray(CBotToken* &p, CBotCStack* pStack, CBotTypResult type, bool first)
|
CBotInstr* CBotInstr::CompileArray(CBotToken* &p, CBotCStack* pStack, CBotTypResult type, bool first)
|
||||||
{
|
{
|
||||||
if (IsOfType(p, ID_OPBRK))
|
if (IsOfType(p, ID_OPBRK))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -191,17 +191,6 @@ public:
|
||||||
virtual void RestoreStateVar(CBotStack* &pile,
|
virtual void RestoreStateVar(CBotStack* &pile,
|
||||||
bool bMain);
|
bool bMain);
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CompCase This routine is defined only for the subclass CBotCase
|
|
||||||
* this allows to make the call on all instructions CompCase to see if it's
|
|
||||||
* a case to the desired value..
|
|
||||||
* \param pj
|
|
||||||
* \param val
|
|
||||||
* \return
|
|
||||||
*/
|
|
||||||
virtual bool CompCase(CBotStack* &pj,
|
|
||||||
int val);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief SetToken Set the token corresponding to the instruction.
|
* \brief SetToken Set the token corresponding to the instruction.
|
||||||
* \param p
|
* \param p
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -78,12 +78,12 @@ CBotInstr* CBotInstrCall::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
{
|
{
|
||||||
// if (pVar2!=nullptr) pp = pVar2->RetToken();
|
// if (pVar2!=nullptr) pp = pVar2->RetToken();
|
||||||
pStack->SetError( static_cast<CBotError>(inst->m_typRes.GetType()), pp );
|
pStack->SetError( static_cast<CBotError>(inst->m_typRes.GetType()), pp );
|
||||||
delete pStack->TokenStack();
|
pStack->DeleteNext();
|
||||||
delete inst;
|
delete inst;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete pStack->TokenStack();
|
pStack->DeleteNext();
|
||||||
if ( inst->m_typRes.GetType() > 0 )
|
if ( inst->m_typRes.GetType() > 0 )
|
||||||
{
|
{
|
||||||
CBotVar* pRes = CBotVar::Create("", inst->m_typRes);
|
CBotVar* pRes = CBotVar::Create("", inst->m_typRes);
|
||||||
|
@ -94,7 +94,7 @@ CBotInstr* CBotInstrCall::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
if (nullptr != (inst->m_exprRetVar = CBotExprRetVar::Compile(p, pStack)))
|
if (nullptr != (inst->m_exprRetVar = CBotExprRetVar::Compile(p, pStack)))
|
||||||
{
|
{
|
||||||
inst->m_exprRetVar->SetToken(&inst->m_token);
|
inst->m_exprRetVar->SetToken(&inst->m_token);
|
||||||
delete pStack->TokenStack();
|
pStack->DeleteNext();
|
||||||
}
|
}
|
||||||
if ( !pStack->IsOk() )
|
if ( !pStack->IsOk() )
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ CBotInstr* CBotInstrCall::Compile(CBotToken* &p, CBotCStack* pStack)
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
p = pp;
|
p = pp;
|
||||||
delete pStack->TokenStack();
|
pStack->DeleteNext();
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +138,7 @@ bool CBotInstrCall::Execute(CBotStack* &pj)
|
||||||
if ( p != nullptr) while ( true )
|
if ( p != nullptr) while ( true )
|
||||||
{
|
{
|
||||||
pile = pile->AddStack(); // place on the stack for the results
|
pile = pile->AddStack(); // place on the stack for the results
|
||||||
|
if (pile->StackOver()) return pj->Return(pile);
|
||||||
if ( pile->GetState() == 0 )
|
if ( pile->GetState() == 0 )
|
||||||
{
|
{
|
||||||
if (!p->Execute(pile)) return false; // interrupted here?
|
if (!p->Execute(pile)) return false; // interrupted here?
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* This file is part of the Colobot: Gold Edition source code
|
* This file is part of the Colobot: Gold Edition source code
|
||||||
* Copyright (C) 2001-2018, Daniel Roux, EPSITEC SA & TerranovaTeam
|
* Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam
|
||||||
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -70,7 +70,7 @@ CBotInstr* CBotInstrMethode::Compile(CBotToken* &p, CBotCStack* pStack, CBotVar*
|
||||||
CBotClass* pClass = var->GetClass(); // pointer to the class
|
CBotClass* pClass = var->GetClass(); // pointer to the class
|
||||||
inst->m_className = pClass->GetName(); // name of the class
|
inst->m_className = pClass->GetName(); // name of the class
|
||||||
CBotTypResult r = pClass->CompileMethode(pp, var, ppVars, pStack, inst->m_MethodeIdent);
|
CBotTypResult r = pClass->CompileMethode(pp, var, ppVars, pStack, inst->m_MethodeIdent);
|
||||||
delete pStack->TokenStack(); // release parameters on the stack
|
pStack->DeleteNext(); // release parameters on the stack
|
||||||
inst->m_typRes = r;
|
inst->m_typRes = r;
|
||||||
|
|
||||||
if (inst->m_typRes.GetType() > 20)
|
if (inst->m_typRes.GetType() > 20)
|
||||||
|
@ -95,7 +95,7 @@ CBotInstr* CBotInstrMethode::Compile(CBotToken* &p, CBotCStack* pStack, CBotVar*
|
||||||
if (nullptr != (inst->m_exprRetVar = CBotExprRetVar::Compile(p, pStack, bMethodChain)))
|
if (nullptr != (inst->m_exprRetVar = CBotExprRetVar::Compile(p, pStack, bMethodChain)))
|
||||||
{
|
{
|
||||||
inst->m_exprRetVar->SetToken(pp);
|
inst->m_exprRetVar->SetToken(pp);
|
||||||
delete pStack->TokenStack();
|
pStack->DeleteNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( pStack->IsOk() )
|
if ( pStack->IsOk() )
|
||||||
|
@ -164,6 +164,7 @@ bool CBotInstrMethode::ExecuteVar(CBotVar* &pVar, CBotStack* &pj, CBotToken* pre
|
||||||
}
|
}
|
||||||
ppVars[i++] = pile2->GetVar(); // construct the list of pointers
|
ppVars[i++] = pile2->GetVar(); // construct the list of pointers
|
||||||
pile2 = pile2->AddStack(); // space on the stack for the result
|
pile2 = pile2->AddStack(); // space on the stack for the result
|
||||||
|
if (pile2->StackOver()) return pj->Return(pile2);
|
||||||
p = p->GetNext();
|
p = p->GetNext();
|
||||||
if ( p == nullptr) break;
|
if ( p == nullptr) break;
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue